From 3ceff76f647cc55db3a7a9c19b766dd32f514925 Mon Sep 17 00:00:00 2001 From: Kenfe-Mickael Laventure Date: Wed, 17 Feb 2016 08:33:46 -0800 Subject: [PATCH] Fix CgroupsPath interpretation When CgroupsPath code was introduced with #497 it was mistakenly made to act as the equivalent of docker CgroupsParent. This ensure that it is taken as the final cgroup path. A couple of unit tests have been added to prevent future regression. Signed-off-by: Kenfe-Mickael Laventure --- spec.go | 3 ++- spec_test.go | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 spec_test.go diff --git a/spec.go b/spec.go index 9c482b5cd80..4987d30d0bf 100644 --- a/spec.go +++ b/spec.go @@ -341,10 +341,11 @@ func createCgroupConfig(name string, spec *specs.LinuxSpec) (*configs.Cgroup, er if err != nil { return nil, err } + myCgroupPath = filepath.Join(myCgroupPath, name) } c := &configs.Cgroup{ - Path: filepath.Join(myCgroupPath, name), + Path: myCgroupPath, Resources: &configs.Resources{}, } c.Resources.AllowedDevices = allowedDevices diff --git a/spec_test.go b/spec_test.go new file mode 100644 index 00000000000..6905d301221 --- /dev/null +++ b/spec_test.go @@ -0,0 +1,39 @@ +// build +linux + +package main + +import ( + "strings" + "testing" + + "github.com/opencontainers/specs" +) + +func TestLinuxCgroupsPathSpecified(t *testing.T) { + cgroupsPath := "/user/cgroups/path/id" + + spec := &specs.LinuxSpec{} + spec.Linux.CgroupsPath = &cgroupsPath + + cgroup, err := createCgroupConfig("ContainerID", spec) + if err != nil { + t.Errorf("Couldn't create Cgroup config: %v", err) + } + + if cgroup.Path != cgroupsPath { + t.Errorf("Wrong cgroupsPath, expected '%s' got '%s'", cgroupsPath, cgroup.Path) + } +} + +func TestLinuxCgroupsPathNotSpecified(t *testing.T) { + spec := &specs.LinuxSpec{} + + cgroup, err := createCgroupConfig("ContainerID", spec) + if err != nil { + t.Errorf("Couldn't create Cgroup config: %v", err) + } + + if !strings.HasSuffix(cgroup.Path, "/ContainerID") { + t.Errorf("Wrong cgroupsPath, expected it to have suffix '%s' got '%s'", "/ContainerID", cgroup.Path) + } +}