...

Source file src/github.com/opencontainers/runc/libcontainer/cgroups/file_test.go

Documentation: github.com/opencontainers/runc/libcontainer/cgroups

     1  package cgroups
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"os"
     7  	"path/filepath"
     8  	"strconv"
     9  	"testing"
    10  	"time"
    11  )
    12  
    13  func TestWriteCgroupFileHandlesInterrupt(t *testing.T) {
    14  	const (
    15  		memoryCgroupMount = "/sys/fs/cgroup/memory"
    16  		memoryLimit       = "memory.limit_in_bytes"
    17  	)
    18  	if _, err := os.Stat(memoryCgroupMount); err != nil {
    19  		// most probably cgroupv2
    20  		t.Skip(err)
    21  	}
    22  
    23  	cgroupName := fmt.Sprintf("test-eint-%d", time.Now().Nanosecond())
    24  	cgroupPath := filepath.Join(memoryCgroupMount, cgroupName)
    25  	if err := os.MkdirAll(cgroupPath, 0o755); err != nil {
    26  		t.Fatal(err)
    27  	}
    28  	defer os.RemoveAll(cgroupPath)
    29  
    30  	if _, err := os.Stat(filepath.Join(cgroupPath, memoryLimit)); err != nil {
    31  		// either cgroupv2, or memory controller is not available
    32  		t.Skip(err)
    33  	}
    34  
    35  	for i := 0; i < 100000; i++ {
    36  		limit := 1024*1024 + i
    37  		if err := WriteFile(cgroupPath, memoryLimit, strconv.Itoa(limit)); err != nil {
    38  			t.Fatalf("Failed to write %d on attempt %d: %+v", limit, i, err)
    39  		}
    40  	}
    41  }
    42  
    43  func TestOpenat2(t *testing.T) {
    44  	if !IsCgroup2UnifiedMode() {
    45  		// The reason is many test cases below test opening files from
    46  		// the top-level directory, where cgroup v1 has no files.
    47  		t.Skip("test requires cgroup v2")
    48  	}
    49  
    50  	// Make sure we test openat2, not its fallback.
    51  	openFallback = func(_ string, _ int, _ os.FileMode) (*os.File, error) {
    52  		return nil, errors.New("fallback")
    53  	}
    54  	defer func() { openFallback = openAndCheck }()
    55  
    56  	for _, tc := range []struct{ dir, file string }{
    57  		{"/sys/fs/cgroup", "cgroup.controllers"},
    58  		{"/sys/fs/cgroup", "/cgroup.controllers"},
    59  		{"/sys/fs/cgroup/", "cgroup.controllers"},
    60  		{"/sys/fs/cgroup/", "/cgroup.controllers"},
    61  		{"/", "/sys/fs/cgroup/cgroup.controllers"},
    62  		{"/", "sys/fs/cgroup/cgroup.controllers"},
    63  		{"/sys/fs/cgroup/cgroup.controllers", ""},
    64  	} {
    65  		fd, err := OpenFile(tc.dir, tc.file, os.O_RDONLY)
    66  		if err != nil {
    67  			t.Errorf("case %+v: %v", tc, err)
    68  		}
    69  		fd.Close()
    70  	}
    71  }
    72  

View as plain text