From 46b1f5a2129fb22c647be3ae8c6648e3eb44486c Mon Sep 17 00:00:00 2001 From: Hayato Kiwata Date: Mon, 22 Dec 2025 22:29:54 +0900 Subject: [PATCH] test: refactor compose_down_linux_test.go to use Tigron Signed-off-by: Hayato Kiwata --- .../compose/compose_down_linux_test.go | 128 +++++++++++++----- 1 file changed, 93 insertions(+), 35 deletions(-) diff --git a/cmd/nerdctl/compose/compose_down_linux_test.go b/cmd/nerdctl/compose/compose_down_linux_test.go index 4a69c2ee9c4..2eea0c01827 100644 --- a/cmd/nerdctl/compose/compose_down_linux_test.go +++ b/cmd/nerdctl/compose/compose_down_linux_test.go @@ -19,78 +19,136 @@ package compose import ( "fmt" "testing" - "time" + + "github.com/containerd/nerdctl/mod/tigron/expect" + "github.com/containerd/nerdctl/mod/tigron/test" "github.com/containerd/nerdctl/v2/pkg/composer/serviceparser" "github.com/containerd/nerdctl/v2/pkg/testutil" + "github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest" ) func TestComposeDownRemoveUsedNetwork(t *testing.T) { - base := testutil.NewBase(t) + testCase := nerdtest.Setup() - var ( - dockerComposeYAMLOrphan = fmt.Sprintf(` + testCase.Setup = func(data test.Data, helpers test.Helpers) { + dockerComposeYAMLOrphan := fmt.Sprintf(` services: test: image: %s command: "sleep infinity" `, testutil.CommonImage) - dockerComposeYAMLFull = fmt.Sprintf(` + dockerComposeYAMLFull := fmt.Sprintf(` %s orphan: image: %s command: "sleep infinity" `, dockerComposeYAMLOrphan, testutil.CommonImage) - ) - compOrphan := testutil.NewComposeDir(t, dockerComposeYAMLOrphan) - defer compOrphan.CleanUp() - compFull := testutil.NewComposeDir(t, dockerComposeYAMLFull) - defer compFull.CleanUp() + composeOrphanPath := data.Temp().Save(dockerComposeYAMLOrphan, "compose-orphan.yaml") + composeFullPath := data.Temp().Save(dockerComposeYAMLFull, "compose-full.yaml") + + projectName := data.Identifier("project") + t.Logf("projectName=%q", projectName) + + testContainer := serviceparser.DefaultContainerName(projectName, "test", "1") + orphanContainer := serviceparser.DefaultContainerName(projectName, "orphan", "1") + + data.Labels().Set("composeOrphan", composeOrphanPath) + data.Labels().Set("composeFull", composeFullPath) + data.Labels().Set("projectName", projectName) + + helpers.Ensure("compose", "-p", projectName, "-f", composeFullPath, "up", "-d") + nerdtest.EnsureContainerStarted(helpers, testContainer) + nerdtest.EnsureContainerStarted(helpers, orphanContainer) + } - projectName := fmt.Sprintf("nerdctl-compose-test-%d", time.Now().Unix()) - t.Logf("projectName=%q", projectName) + testCase.Command = func(data test.Data, helpers test.Helpers) test.TestableCommand { + return helpers.Command("compose", "-p", data.Labels().Get("projectName"), "-f", data.Labels().Get("composeOrphan"), "down", "-v") + } - base.ComposeCmd("-p", projectName, "-f", compFull.YAMLFullPath(), "up", "-d").AssertOK() - defer base.ComposeCmd("-p", projectName, "-f", compFull.YAMLFullPath(), "down", "--remove-orphans").AssertOK() + testCase.Expected = func(data test.Data, helpers test.Helpers) *test.Expected { + return &test.Expected{ + ExitCode: 0, + Errors: []error{ + fmt.Errorf("in use"), + }, + } + } - base.ComposeCmd("-p", projectName, "-f", compOrphan.YAMLFullPath(), "down", "-v").AssertCombinedOutContains("in use") + testCase.Cleanup = func(data test.Data, helpers test.Helpers) { + if composeFull := data.Labels().Get("composeFull"); composeFull != "" { + helpers.Anyhow("compose", "-p", data.Labels().Get("projectName"), "-f", composeFull, "down", "--remove-orphans") + } + } + testCase.Run(t) } func TestComposeDownRemoveOrphans(t *testing.T) { - base := testutil.NewBase(t) + testCase := nerdtest.Setup() - var ( - dockerComposeYAMLOrphan = fmt.Sprintf(` + testCase.Setup = func(data test.Data, helpers test.Helpers) { + dockerComposeYAMLOrphan := fmt.Sprintf(` services: test: image: %s command: "sleep infinity" `, testutil.CommonImage) - dockerComposeYAMLFull = fmt.Sprintf(` + dockerComposeYAMLFull := fmt.Sprintf(` %s orphan: image: %s command: "sleep infinity" `, dockerComposeYAMLOrphan, testutil.CommonImage) - ) - - compOrphan := testutil.NewComposeDir(t, dockerComposeYAMLOrphan) - defer compOrphan.CleanUp() - compFull := testutil.NewComposeDir(t, dockerComposeYAMLFull) - defer compFull.CleanUp() - - projectName := compFull.ProjectName() - t.Logf("projectName=%q", projectName) - - orphanContainer := serviceparser.DefaultContainerName(projectName, "orphan", "1") - - base.ComposeCmd("-p", projectName, "-f", compFull.YAMLFullPath(), "up", "-d").AssertOK() - defer base.ComposeCmd("-p", projectName, "-f", compFull.YAMLFullPath(), "down", "-v").Run() - base.ComposeCmd("-p", projectName, "-f", compOrphan.YAMLFullPath(), "down", "--remove-orphans").AssertOK() - base.ComposeCmd("-p", projectName, "-f", compFull.YAMLFullPath(), "ps", "-a").AssertOutNotContains(orphanContainer) + composeOrphanPath := data.Temp().Save(dockerComposeYAMLOrphan, "compose-orphan.yaml") + composeFullPath := data.Temp().Save(dockerComposeYAMLFull, "compose-full.yaml") + + projectName := data.Identifier("project") + t.Logf("projectName=%q", projectName) + + testContainer := serviceparser.DefaultContainerName(projectName, "test", "1") + orphanContainer := serviceparser.DefaultContainerName(projectName, "orphan", "1") + + data.Labels().Set("composeOrphan", composeOrphanPath) + data.Labels().Set("composeFull", composeFullPath) + data.Labels().Set("projectName", projectName) + data.Labels().Set("orphanContainer", orphanContainer) + + helpers.Ensure("compose", "-p", projectName, "-f", composeFullPath, "up", "-d") + nerdtest.EnsureContainerStarted(helpers, testContainer) + nerdtest.EnsureContainerStarted(helpers, orphanContainer) + } + + testCase.Command = func(data test.Data, helpers test.Helpers) test.TestableCommand { + return helpers.Command("compose", "-p", data.Labels().Get("projectName"), "-f", data.Labels().Get("composeOrphan"), "down", "--remove-orphans") + } + + testCase.Expected = test.Expects(0, nil, nil) + + testCase.SubTests = []*test.Case{ + { + Description: "orphan container removed", + Command: func(data test.Data, helpers test.Helpers) test.TestableCommand { + return helpers.Command("compose", "-p", data.Labels().Get("projectName"), "-f", data.Labels().Get("composeFull"), "ps", "-a") + }, + Expected: func(data test.Data, helpers test.Helpers) *test.Expected { + return &test.Expected{ + ExitCode: 0, + Output: expect.DoesNotContain(data.Labels().Get("orphanContainer")), + } + }, + }, + } + + testCase.Cleanup = func(data test.Data, helpers test.Helpers) { + if composeFull := data.Labels().Get("composeFull"); composeFull != "" { + helpers.Anyhow("compose", "-p", data.Labels().Get("projectName"), "-f", composeFull, "down", "-v") + } + } + + testCase.Run(t) }