1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
package cgroups
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestStaticPath(t *testing.T) {
path := StaticPath("test")
p, err := path("")
if err != nil {
t.Fatal(err)
}
if p != "test" {
t.Fatalf("expected static path of \"test\" but received %q", p)
}
}
func TestSelfPath(t *testing.T) {
_, err := v1MountPoint()
if err == ErrMountPointNotExist {
t.Skip("skipping test that requires cgroup hierarchy")
} else if err != nil {
t.Fatal(err)
}
paths, err := parseCgroupFile("/proc/self/cgroup")
if err != nil {
t.Fatal(err)
}
dp := strings.TrimPrefix(paths["devices"], "/")
path := NestedPath("test")
p, err := path("devices")
if err != nil {
t.Fatal(err)
}
if p != filepath.Join("/", dp, "test") {
t.Fatalf("expected self path of %q but received %q", filepath.Join("/", dp, "test"), p)
}
}
func TestPidPath(t *testing.T) {
_, err := v1MountPoint()
if err == ErrMountPointNotExist {
t.Skip("skipping test that requires cgroup hierarchy")
} else if err != nil {
t.Fatal(err)
}
paths, err := parseCgroupFile("/proc/self/cgroup")
if err != nil {
t.Fatal(err)
}
dp := strings.TrimPrefix(paths["devices"], "/")
path := PidPath(os.Getpid())
p, err := path("devices")
if err != nil {
t.Fatal(err)
}
if p != filepath.Join("/", dp) {
t.Fatalf("expected self path of %q but received %q", filepath.Join("/", dp), p)
}
}
func TestRootPath(t *testing.T) {
p, err := RootPath(Cpu)
if err != nil {
t.Error(err)
return
}
if p != "/" {
t.Errorf("expected / but received %q", p)
}
}
func TestEmptySubsystem(t *testing.T) {
const data = `10:devices:/user.slice
9:net_cls,net_prio:/
8:blkio:/
7:freezer:/
6:perf_event:/
5:cpuset:/
4:memory:/
3:pids:/user.slice/user-1000.slice/user@1000.service
2:cpu,cpuacct:/
1:name=systemd:/user.slice/user-1000.slice/user@1000.service/gnome-terminal-server.service
0::/user.slice/user-1000.slice/user@1000.service/gnome-terminal-server.service`
r := strings.NewReader(data)
paths, err := parseCgroupFromReader(r)
if err != nil {
t.Fatal(err)
}
for subsystem, path := range paths {
if subsystem == "" {
t.Fatalf("empty subsystem for %q", path)
}
}
}
|