diff --git a/libcontainer/integration/checkpoint_test.go b/libcontainer/integration/checkpoint_test.go index cecf0b547..96332e1fc 100644 --- a/libcontainer/integration/checkpoint_test.go +++ b/libcontainer/integration/checkpoint_test.go @@ -73,7 +73,7 @@ func testCheckpoint(t *testing.T, userns bool) { } defer remove(rootfs) - config := newTemplateConfig(&tParam{ + config := newTemplateConfig(t, &tParam{ rootfs: rootfs, userns: userns, }) diff --git a/libcontainer/integration/exec_test.go b/libcontainer/integration/exec_test.go index 0d55dba32..95b132c76 100644 --- a/libcontainer/integration/exec_test.go +++ b/libcontainer/integration/exec_test.go @@ -41,12 +41,12 @@ func testExecPS(t *testing.T, userns bool) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{ + config := newTemplateConfig(t, &tParam{ rootfs: rootfs, userns: userns, }) - buffers, exitCode, err := runContainer(config, "", "ps", "-o", "pid,user,comm") + buffers, exitCode, err := runContainer(t, config, "", "ps", "-o", "pid,user,comm") if err != nil { t.Fatalf("%s: %s", buffers, err) } @@ -76,8 +76,8 @@ func TestIPCPrivate(t *testing.T) { l, err := os.Readlink("/proc/1/ns/ipc") ok(t, err) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - buffers, exitCode, err := runContainer(config, "", "readlink", "/proc/self/ns/ipc") + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + buffers, exitCode, err := runContainer(t, config, "", "readlink", "/proc/self/ns/ipc") ok(t, err) if exitCode != 0 { @@ -101,9 +101,9 @@ func TestIPCHost(t *testing.T) { l, err := os.Readlink("/proc/1/ns/ipc") ok(t, err) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Namespaces.Remove(configs.NEWIPC) - buffers, exitCode, err := runContainer(config, "", "readlink", "/proc/self/ns/ipc") + buffers, exitCode, err := runContainer(t, config, "", "readlink", "/proc/self/ns/ipc") ok(t, err) if exitCode != 0 { @@ -127,10 +127,10 @@ func TestIPCJoinPath(t *testing.T) { l, err := os.Readlink("/proc/1/ns/ipc") ok(t, err) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Namespaces.Add(configs.NEWIPC, "/proc/1/ns/ipc") - buffers, exitCode, err := runContainer(config, "", "readlink", "/proc/self/ns/ipc") + buffers, exitCode, err := runContainer(t, config, "", "readlink", "/proc/self/ns/ipc") ok(t, err) if exitCode != 0 { @@ -151,10 +151,10 @@ func TestIPCBadPath(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Namespaces.Add(configs.NEWIPC, "/proc/1/ns/ipcc") - _, _, err = runContainer(config, "", "true") + _, _, err = runContainer(t, config, "", "true") if err == nil { t.Fatal("container succeeded with bad ipc path") } @@ -181,7 +181,7 @@ func testRlimit(t *testing.T, userns bool) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{ + config := newTemplateConfig(t, &tParam{ rootfs: rootfs, userns: userns, }) @@ -193,7 +193,7 @@ func testRlimit(t *testing.T, userns bool) { Cur: 1024, })) - out, _, err := runContainer(config, "", "/bin/sh", "-c", "ulimit -n") + out, _, err := runContainer(t, config, "", "/bin/sh", "-c", "ulimit -n") ok(t, err) if limit := strings.TrimSpace(out.Stdout.String()); limit != "1025" { t.Fatalf("expected rlimit to be 1025, got %s", limit) @@ -209,9 +209,9 @@ func TestEnter(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -296,9 +296,9 @@ func TestProcessEnv(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -344,10 +344,10 @@ func TestProcessEmptyCaps(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Capabilities = nil - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -393,9 +393,9 @@ func TestProcessCaps(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -458,9 +458,9 @@ func TestAdditionalGroups(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -512,11 +512,11 @@ func testFreeze(t *testing.T, systemd bool) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{ + config := newTemplateConfig(t, &tParam{ rootfs: rootfs, systemd: systemd, }) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -572,13 +572,13 @@ func testCpuShares(t *testing.T, systemd bool) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{ + config := newTemplateConfig(t, &tParam{ rootfs: rootfs, systemd: systemd, }) config.Cgroups.Resources.CpuShares = 1 - _, _, err = runContainer(config, "", "ps") + _, _, err = runContainer(t, config, "", "ps") if err == nil { t.Fatalf("runContainer should failed with invalid CpuShares") } @@ -604,14 +604,14 @@ func testPids(t *testing.T, systemd bool) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{ + config := newTemplateConfig(t, &tParam{ rootfs: rootfs, systemd: systemd, }) config.Cgroups.Resources.PidsLimit = -1 // Running multiple processes. - _, ret, err := runContainer(config, "", "/bin/sh", "-c", "/bin/true | /bin/true | /bin/true | /bin/true") + _, ret, err := runContainer(t, config, "", "/bin/sh", "-c", "/bin/true | /bin/true | /bin/true | /bin/true") if err != nil && strings.Contains(err.Error(), "no such directory for pids.max") { t.Skip("PIDs cgroup is unsupported") } @@ -624,7 +624,7 @@ func testPids(t *testing.T, systemd bool) { // Enforce a permissive limit. This needs to be fairly hand-wavey due to the // issues with running Go binaries with pids restrictions (see below). config.Cgroups.Resources.PidsLimit = 64 - _, ret, err = runContainer(config, "", "/bin/sh", "-c", ` + _, ret, err = runContainer(t, config, "", "/bin/sh", "-c", ` /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true | @@ -641,7 +641,7 @@ func testPids(t *testing.T, systemd bool) { // Enforce a restrictive limit. 64 * /bin/true + 1 * shell should cause this // to fail reliability. config.Cgroups.Resources.PidsLimit = 64 - out, _, err := runContainer(config, "", "/bin/sh", "-c", ` + out, _, err := runContainer(t, config, "", "/bin/sh", "-c", ` /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | /bin/true | bin/true | /bin/true | @@ -689,14 +689,14 @@ func testCgroupResourcesUnifiedErrorOnV1(t *testing.T, systemd bool) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{ + config := newTemplateConfig(t, &tParam{ rootfs: rootfs, systemd: systemd, }) config.Cgroups.Resources.Unified = map[string]string{ "memory.min": "10240", } - _, _, err = runContainer(config, "", "true") + _, _, err = runContainer(t, config, "", "true") if !strings.Contains(err.Error(), cgroups.ErrV1NoUnified.Error()) { t.Fatalf("expected error to contain %v, got %v", cgroups.ErrV1NoUnified, err) } @@ -724,7 +724,7 @@ func testCgroupResourcesUnified(t *testing.T, systemd bool) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{ + config := newTemplateConfig(t, &tParam{ rootfs: rootfs, systemd: systemd, }) @@ -786,7 +786,7 @@ func testCgroupResourcesUnified(t *testing.T, systemd bool) { for _, tc := range testCases { config.Cgroups.Resources.Unified = tc.cfg - buffers, ret, err := runContainer(config, "", tc.cmd...) + buffers, ret, err := runContainer(t, config, "", tc.cmd...) if tc.expError != "" { if err == nil { t.Errorf("case %q failed: expected error, got nil", tc.name) @@ -827,7 +827,7 @@ func TestContainerState(t *testing.T) { t.Fatal(err) } - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Namespaces = configs.Namespaces([]configs.Namespace{ {Type: configs.NEWNS}, {Type: configs.NEWUTS}, @@ -837,7 +837,7 @@ func TestContainerState(t *testing.T) { {Type: configs.NEWNET}, }) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) if err != nil { t.Fatal(err) } @@ -888,9 +888,9 @@ func TestPassExtraFiles(t *testing.T) { } defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) if err != nil { t.Fatal(err) } @@ -963,7 +963,7 @@ func TestMountCmds(t *testing.T) { } defer os.RemoveAll(tmpDir) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Mounts = append(config.Mounts, &configs.Mount{ Source: tmpDir, Destination: "/tmp", @@ -979,7 +979,7 @@ func TestMountCmds(t *testing.T) { }, }) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) if err != nil { t.Fatal(err) } @@ -1020,12 +1020,12 @@ func TestSysctl(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Sysctl = map[string]string{ "kernel.shmmni": "8192", } - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -1057,8 +1057,8 @@ func TestMountCgroupRO(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - buffers, exitCode, err := runContainer(config, "", "mount") + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + buffers, exitCode, err := runContainer(t, config, "", "mount") if err != nil { t.Fatalf("%s: %s", buffers, err) } @@ -1099,7 +1099,7 @@ func TestMountCgroupRW(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) // clear the RO flag from cgroup mount for _, m := range config.Mounts { if m.Device == "cgroup" { @@ -1108,7 +1108,7 @@ func TestMountCgroupRW(t *testing.T) { } } - buffers, exitCode, err := runContainer(config, "", "mount") + buffers, exitCode, err := runContainer(t, config, "", "mount") if err != nil { t.Fatalf("%s: %s", buffers, err) } @@ -1151,10 +1151,10 @@ func TestOomScoreAdj(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.OomScoreAdj = ptrInt(200) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -1193,7 +1193,7 @@ func TestHook(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) expectedBundle := bundle config.Labels = append(config.Labels, "bundle="+expectedBundle) @@ -1295,7 +1295,7 @@ func TestHook(t *testing.T) { ok(t, err) ok(t, json.NewEncoder(f).Encode(config)) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) // e.g: 'ls /prestart ...' @@ -1339,8 +1339,8 @@ func TestSTDIOPermissions(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - buffers, exitCode, err := runContainer(config, "", "sh", "-c", "echo hi > /dev/stderr") + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + buffers, exitCode, err := runContainer(t, config, "", "sh", "-c", "echo hi > /dev/stderr") ok(t, err) if exitCode != 0 { t.Fatalf("exit code not 0. code %d stderr %q", exitCode, buffers.Stderr) @@ -1372,7 +1372,7 @@ func TestRootfsPropagationSlaveMount(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.RootPropagation = unix.MS_SLAVE | unix.MS_REC @@ -1395,7 +1395,7 @@ func TestRootfsPropagationSlaveMount(t *testing.T) { Device: "bind", Flags: unix.MS_BIND | unix.MS_REC}) - container, err := newContainerWithName("testSlaveMount", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -1488,7 +1488,7 @@ func TestRootfsPropagationSharedMount(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.RootPropagation = unix.MS_PRIVATE // Bind mount a volume @@ -1510,7 +1510,7 @@ func TestRootfsPropagationSharedMount(t *testing.T) { Device: "bind", Flags: unix.MS_BIND | unix.MS_REC}) - container, err := newContainerWithName("testSharedMount", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -1597,9 +1597,9 @@ func TestPIDHost(t *testing.T) { l, err := os.Readlink("/proc/1/ns/pid") ok(t, err) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Namespaces.Remove(configs.NEWPID) - buffers, exitCode, err := runContainer(config, "", "readlink", "/proc/self/ns/pid") + buffers, exitCode, err := runContainer(t, config, "", "readlink", "/proc/self/ns/pid") ok(t, err) if exitCode != 0 { @@ -1623,9 +1623,9 @@ func TestPIDHostInitProcessWait(t *testing.T) { pidns := "/proc/1/ns/pid" // Run a container with two long-running processes. - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Namespaces.Add(configs.NEWPID, pidns) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) defer func() { _ = container.Destroy() @@ -1673,7 +1673,7 @@ func TestInitJoinPID(t *testing.T) { defer remove(rootfs) // Execute a long-running container - container1, err := newContainer(newTemplateConfig(&tParam{rootfs: rootfs})) + container1, err := newContainer(t, newTemplateConfig(t, &tParam{rootfs: rootfs})) ok(t, err) defer container1.Destroy() @@ -1697,10 +1697,10 @@ func TestInitJoinPID(t *testing.T) { pidns1 := state1.NamespacePaths[configs.NEWPID] // Run a container inside the existing pidns but with different cgroups - config2 := newTemplateConfig(&tParam{rootfs: rootfs}) + config2 := newTemplateConfig(t, &tParam{rootfs: rootfs}) config2.Namespaces.Add(configs.NEWPID, pidns1) config2.Cgroups.Path = "integration/test2" - container2, err := newContainerWithName("testCT2", config2) + container2, err := newContainer(t, config2) ok(t, err) defer container2.Destroy() @@ -1776,11 +1776,11 @@ func TestInitJoinNetworkAndUser(t *testing.T) { defer remove(rootfs) // Execute a long-running container - config1 := newTemplateConfig(&tParam{ + config1 := newTemplateConfig(t, &tParam{ rootfs: rootfs, userns: true, }) - container1, err := newContainer(config1) + container1, err := newContainer(t, config1) ok(t, err) defer container1.Destroy() @@ -1809,14 +1809,14 @@ func TestInitJoinNetworkAndUser(t *testing.T) { ok(t, err) defer remove(rootfs2) - config2 := newTemplateConfig(&tParam{ + config2 := newTemplateConfig(t, &tParam{ rootfs: rootfs2, userns: true, }) config2.Namespaces.Add(configs.NEWNET, netns1) config2.Namespaces.Add(configs.NEWUSER, userns1) config2.Cgroups.Path = "integration/test2" - container2, err := newContainerWithName("testCT2", config2) + container2, err := newContainer(t, config2) ok(t, err) defer container2.Destroy() @@ -1870,7 +1870,7 @@ func TestTmpfsCopyUp(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Mounts = append(config.Mounts, &configs.Mount{ Source: "tmpfs", @@ -1879,7 +1879,7 @@ func TestTmpfsCopyUp(t *testing.T) { Extensions: configs.EXT_COPYUP, }) - container, err := newContainerWithName("test", config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -1920,9 +1920,9 @@ func TestCGROUPPrivate(t *testing.T) { l, err := os.Readlink("/proc/1/ns/cgroup") ok(t, err) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Namespaces.Add(configs.NEWCGROUP, "") - buffers, exitCode, err := runContainer(config, "", "readlink", "/proc/self/ns/cgroup") + buffers, exitCode, err := runContainer(t, config, "", "readlink", "/proc/self/ns/cgroup") ok(t, err) if exitCode != 0 { @@ -1949,8 +1949,8 @@ func TestCGROUPHost(t *testing.T) { l, err := os.Readlink("/proc/1/ns/cgroup") ok(t, err) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - buffers, exitCode, err := runContainer(config, "", "readlink", "/proc/self/ns/cgroup") + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + buffers, exitCode, err := runContainer(t, config, "", "readlink", "/proc/self/ns/cgroup") ok(t, err) if exitCode != 0 { @@ -1979,8 +1979,8 @@ func TestFdLeaks(t *testing.T) { _, err = pfd.Seek(0, 0) ok(t, err) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - buffers, exitCode, err := runContainer(config, "", "true") + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + buffers, exitCode, err := runContainer(t, config, "", "true") ok(t, err) if exitCode != 0 { diff --git a/libcontainer/integration/execin_test.go b/libcontainer/integration/execin_test.go index a44b97d28..aaddf8de0 100644 --- a/libcontainer/integration/execin_test.go +++ b/libcontainer/integration/execin_test.go @@ -25,8 +25,8 @@ func TestExecIn(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - container, err := newContainer(config) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -91,12 +91,12 @@ func testExecInRlimit(t *testing.T, userns bool) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{ + config := newTemplateConfig(t, &tParam{ rootfs: rootfs, userns: userns, }) - container, err := newContainer(config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -150,8 +150,8 @@ func TestExecInAdditionalGroups(t *testing.T) { ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - container, err := newContainer(config) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -207,8 +207,8 @@ func TestExecInError(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - container, err := newContainer(config) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -261,8 +261,8 @@ func TestExecInTTY(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - container, err := newContainer(config) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -357,8 +357,8 @@ func TestExecInEnvironment(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - container, err := newContainer(config) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -419,8 +419,8 @@ func TestExecinPassExtraFiles(t *testing.T) { t.Fatal(err) } defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) - container, err := newContainer(config) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) + container, err := newContainer(t, config) if err != nil { t.Fatal(err) } @@ -503,9 +503,9 @@ func TestExecInOomScoreAdj(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.OomScoreAdj = ptrInt(200) - container, err := newContainer(config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() @@ -555,11 +555,11 @@ func TestExecInUserns(t *testing.T) { rootfs, err := newRootfs() ok(t, err) defer remove(rootfs) - config := newTemplateConfig(&tParam{ + config := newTemplateConfig(t, &tParam{ rootfs: rootfs, userns: true, }) - container, err := newContainer(config) + container, err := newContainer(t, config) ok(t, err) defer container.Destroy() diff --git a/libcontainer/integration/seccomp_test.go b/libcontainer/integration/seccomp_test.go index b40a7a585..2c9994bb9 100644 --- a/libcontainer/integration/seccomp_test.go +++ b/libcontainer/integration/seccomp_test.go @@ -25,7 +25,7 @@ func TestSeccompDenyGetcwdWithErrno(t *testing.T) { errnoRet := uint(syscall.ESRCH) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Seccomp = &configs.Seccomp{ DefaultAction: configs.Allow, Syscalls: []*configs.Syscall{ @@ -37,7 +37,7 @@ func TestSeccompDenyGetcwdWithErrno(t *testing.T) { }, } - container, err := newContainer(config) + container, err := newContainer(t, config) if err != nil { t.Fatal(err) } @@ -95,7 +95,7 @@ func TestSeccompDenyGetcwd(t *testing.T) { } defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Seccomp = &configs.Seccomp{ DefaultAction: configs.Allow, Syscalls: []*configs.Syscall{ @@ -106,7 +106,7 @@ func TestSeccompDenyGetcwd(t *testing.T) { }, } - container, err := newContainer(config) + container, err := newContainer(t, config) if err != nil { t.Fatal(err) } @@ -164,7 +164,7 @@ func TestSeccompPermitWriteConditional(t *testing.T) { } defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Seccomp = &configs.Seccomp{ DefaultAction: configs.Allow, Syscalls: []*configs.Syscall{ @@ -182,7 +182,7 @@ func TestSeccompPermitWriteConditional(t *testing.T) { }, } - container, err := newContainer(config) + container, err := newContainer(t, config) if err != nil { t.Fatal(err) } @@ -226,7 +226,7 @@ func TestSeccompDenyWriteConditional(t *testing.T) { } defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Seccomp = &configs.Seccomp{ DefaultAction: configs.Allow, Syscalls: []*configs.Syscall{ @@ -244,7 +244,7 @@ func TestSeccompDenyWriteConditional(t *testing.T) { }, } - container, err := newContainer(config) + container, err := newContainer(t, config) if err != nil { t.Fatal(err) } @@ -304,7 +304,7 @@ func TestSeccompPermitWriteMultipleConditions(t *testing.T) { } defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Seccomp = &configs.Seccomp{ DefaultAction: configs.Allow, Syscalls: []*configs.Syscall{ @@ -327,7 +327,7 @@ func TestSeccompPermitWriteMultipleConditions(t *testing.T) { }, } - buffers, exitCode, err := runContainer(config, "", "ls", "/") + buffers, exitCode, err := runContainer(t, config, "", "ls", "/") if err != nil { t.Fatalf("%s: %s", buffers, err) } @@ -359,7 +359,7 @@ func TestSeccompDenyWriteMultipleConditions(t *testing.T) { } defer remove(rootfs) - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Seccomp = &configs.Seccomp{ DefaultAction: configs.Allow, Syscalls: []*configs.Syscall{ @@ -382,7 +382,7 @@ func TestSeccompDenyWriteMultipleConditions(t *testing.T) { }, } - buffers, exitCode, err := runContainer(config, "", "ls", "/does_not_exist") + buffers, exitCode, err := runContainer(t, config, "", "ls", "/does_not_exist") if err == nil { t.Fatalf("Expecting error return, instead got 0") } @@ -409,7 +409,7 @@ func TestSeccompMultipleConditionSameArgDeniesStdout(t *testing.T) { defer remove(rootfs) // Prevent writing to both stdout and stderr - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Seccomp = &configs.Seccomp{ DefaultAction: configs.Allow, Syscalls: []*configs.Syscall{ @@ -432,7 +432,7 @@ func TestSeccompMultipleConditionSameArgDeniesStdout(t *testing.T) { }, } - buffers, exitCode, err := runContainer(config, "", "ls", "/") + buffers, exitCode, err := runContainer(t, config, "", "ls", "/") if err != nil { t.Fatalf("%s: %s", buffers, err) } @@ -457,7 +457,7 @@ func TestSeccompMultipleConditionSameArgDeniesStderr(t *testing.T) { defer remove(rootfs) // Prevent writing to both stdout and stderr - config := newTemplateConfig(&tParam{rootfs: rootfs}) + config := newTemplateConfig(t, &tParam{rootfs: rootfs}) config.Seccomp = &configs.Seccomp{ DefaultAction: configs.Allow, Syscalls: []*configs.Syscall{ @@ -480,7 +480,7 @@ func TestSeccompMultipleConditionSameArgDeniesStderr(t *testing.T) { }, } - buffers, exitCode, err := runContainer(config, "", "ls", "/does_not_exist") + buffers, exitCode, err := runContainer(t, config, "", "ls", "/does_not_exist") if err == nil { t.Fatalf("Expecting error return, instead got 0") } diff --git a/libcontainer/integration/template_test.go b/libcontainer/integration/template_test.go index b8f7d0a48..c9ebff7e0 100644 --- a/libcontainer/integration/template_test.go +++ b/libcontainer/integration/template_test.go @@ -1,8 +1,9 @@ package integration import ( - "math/rand" "strconv" + "testing" + "time" "github.com/opencontainers/runc/libcontainer/configs" "github.com/opencontainers/runc/libcontainer/devices" @@ -29,7 +30,7 @@ type tParam struct { // // it uses a network strategy of just setting a loopback interface // and the default setup for devices -func newTemplateConfig(p *tParam) *configs.Config { +func newTemplateConfig(t *testing.T, p *tParam) *configs.Config { var allowedDevices []*devices.Rule for _, device := range specconv.AllowedDevices { allowedDevices = append(allowedDevices, &device.Rule) @@ -213,9 +214,9 @@ func newTemplateConfig(p *tParam) *configs.Config { } if p.systemd { - id := strconv.FormatUint(rand.Uint64(), 36) - config.Cgroups.Name = "test" + id - // do not change Parent (see newContainerWithName) + id := strconv.FormatInt(-int64(time.Now().Nanosecond()), 36) + config.Cgroups.Name = t.Name() + id + // do not change Parent (see newContainer) config.Cgroups.Parent = "system.slice" config.Cgroups.ScopePrefix = "runc-test" } else { diff --git a/libcontainer/integration/utils_test.go b/libcontainer/integration/utils_test.go index 59db2778d..74bd7e073 100644 --- a/libcontainer/integration/utils_test.go +++ b/libcontainer/integration/utils_test.go @@ -2,8 +2,6 @@ package integration import ( "bytes" - "crypto/md5" - "encoding/hex" "fmt" "io/ioutil" "os" @@ -11,6 +9,7 @@ import ( "path/filepath" "regexp" "runtime" + "strconv" "strings" "syscall" "testing" @@ -152,13 +151,8 @@ func copyBusybox(dest string) error { return nil } -func newContainer(config *configs.Config) (libcontainer.Container, error) { - h := md5.New() - h.Write([]byte(time.Now().String())) - return newContainerWithName(hex.EncodeToString(h.Sum(nil)), config) -} - -func newContainerWithName(name string, config *configs.Config) (libcontainer.Container, error) { +func newContainer(t *testing.T, config *configs.Config) (libcontainer.Container, error) { + name := t.Name() + strconv.FormatInt(int64(time.Now().Nanosecond()), 35) root, err := newTestRoot() if err != nil { return nil, err @@ -181,8 +175,8 @@ func newContainerWithName(name string, config *configs.Config) (libcontainer.Con // // buffers are returned containing the STDOUT and STDERR output for the run // along with the exit code and any go error -func runContainer(config *configs.Config, console string, args ...string) (buffers *stdBuffers, exitCode int, err error) { - container, err := newContainer(config) +func runContainer(t *testing.T, config *configs.Config, console string, args ...string) (buffers *stdBuffers, exitCode int, err error) { + container, err := newContainer(t, config) if err != nil { return nil, -1, err }