Skip to content

Commit d9546ec

Browse files
committed
Modernize tests in container and compose
Signed-off-by: apostasie <[email protected]>
1 parent fe57bdd commit d9546ec

21 files changed

+1267
-871
lines changed

cmd/nerdctl/compose/compose_build_linux_test.go

+94-30
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,31 @@
1717
package compose
1818

1919
import (
20+
"errors"
2021
"fmt"
2122
"testing"
2223

24+
"github.com/containerd/nerdctl/mod/tigron/expect"
25+
"github.com/containerd/nerdctl/mod/tigron/test"
26+
2327
"github.com/containerd/nerdctl/v2/pkg/testutil"
28+
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
2429
)
2530

2631
func TestComposeBuild(t *testing.T) {
27-
const imageSvc0 = "composebuild_svc0"
28-
const imageSvc1 = "composebuild_svc1"
32+
dockerfile := "FROM " + testutil.AlpineImage
33+
34+
testCase := nerdtest.Setup()
35+
36+
testCase.Require = nerdtest.Build
37+
38+
testCase.Setup = func(data test.Data, helpers test.Helpers) {
39+
// Make sure we shard the image name to something unique to the test to avoid conflicts with other tests
40+
imageSvc0 := data.Identifier("svc0")
41+
imageSvc1 := data.Identifier("svc1")
2942

30-
dockerComposeYAML := fmt.Sprintf(`
43+
// We are not going to run them, so, ports conflicts should not matter here
44+
dockerComposeYAML := fmt.Sprintf(`
3145
services:
3246
svc0:
3347
build: .
@@ -43,31 +57,81 @@ services:
4357
- 8081:80
4458
`, imageSvc0, imageSvc1)
4559

46-
dockerfile := fmt.Sprintf(`FROM %s`, testutil.AlpineImage)
47-
48-
testutil.RequiresBuild(t)
49-
testutil.RegisterBuildCacheCleanup(t)
50-
base := testutil.NewBase(t)
51-
52-
comp := testutil.NewComposeDir(t, dockerComposeYAML)
53-
defer comp.CleanUp()
54-
comp.WriteFile("Dockerfile", dockerfile)
55-
projectName := comp.ProjectName()
56-
t.Logf("projectName=%q", projectName)
57-
58-
defer base.Cmd("rmi", imageSvc0).Run()
59-
defer base.Cmd("rmi", imageSvc1).Run()
60-
61-
// 1. build only 1 service without triggering the dependency service build
62-
base.ComposeCmd("-f", comp.YAMLFullPath(), "build", "svc0").AssertOK()
63-
base.Cmd("images").AssertOutContains(imageSvc0)
64-
base.Cmd("images").AssertOutNotContains(imageSvc1)
65-
// 2. build multiple services
66-
base.ComposeCmd("-f", comp.YAMLFullPath(), "build", "svc0", "svc1").AssertOK()
67-
base.Cmd("images").AssertOutContains(imageSvc0)
68-
base.Cmd("images").AssertOutContains(imageSvc1)
69-
// 3. build all if no args are given
70-
base.ComposeCmd("-f", comp.YAMLFullPath(), "build").AssertOK()
71-
// 4. fail if some services args not exist in compose.yml
72-
base.ComposeCmd("-f", comp.YAMLFullPath(), "build", "svc0", "svc100").AssertFail()
60+
data.Temp().Save(dockerComposeYAML, "compose.yaml")
61+
data.Temp().Save(dockerfile, "Dockerfile")
62+
63+
data.Labels().Set("composeYaml", data.Temp().Path("compose.yaml"))
64+
data.Labels().Set("imageSvc0", imageSvc0)
65+
data.Labels().Set("imageSvc1", imageSvc1)
66+
}
67+
68+
testCase.SubTests = []*test.Case{
69+
{
70+
Description: "build svc0",
71+
NoParallel: true,
72+
Setup: func(data test.Data, helpers test.Helpers) {
73+
helpers.Ensure("compose", "-f", data.Labels().Get("composeYaml"), "build", "svc0")
74+
},
75+
76+
Command: test.Command("images"),
77+
78+
Expected: func(data test.Data, helpers test.Helpers) *test.Expected {
79+
return &test.Expected{
80+
Output: expect.All(
81+
expect.Contains(data.Labels().Get("imageSvc0")),
82+
expect.DoesNotContain(data.Labels().Get("imageSvc1")),
83+
),
84+
}
85+
},
86+
},
87+
{
88+
Description: "build svc0 and svc1",
89+
NoParallel: true,
90+
Setup: func(data test.Data, helpers test.Helpers) {
91+
helpers.Ensure("compose", "-f", data.Labels().Get("composeYaml"), "build", "svc0", "svc1")
92+
},
93+
94+
Command: test.Command("images"),
95+
96+
Expected: func(data test.Data, helpers test.Helpers) *test.Expected {
97+
return &test.Expected{
98+
Output: expect.All(
99+
expect.Contains(data.Labels().Get("imageSvc0")),
100+
expect.Contains(data.Labels().Get("imageSvc1")),
101+
),
102+
}
103+
},
104+
},
105+
{
106+
Description: "build no arg",
107+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
108+
return helpers.Command("compose", "-f", data.Labels().Get("composeYaml"), "build")
109+
},
110+
111+
Expected: test.Expects(expect.ExitCodeSuccess, nil, nil),
112+
},
113+
{
114+
Description: "build bogus",
115+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
116+
return helpers.Command(
117+
"compose",
118+
"-f",
119+
data.Labels().Get("composeYaml"),
120+
"build",
121+
"svc0",
122+
"svc100",
123+
)
124+
},
125+
126+
Expected: test.Expects(1, []error{errors.New("no such service: svc100")}, nil),
127+
},
128+
}
129+
130+
testCase.Cleanup = func(data test.Data, helpers test.Helpers) {
131+
if data.Labels().Get("imageSvc0") != "" {
132+
helpers.Anyhow("rmi", data.Labels().Get("imageSvc0"), data.Labels().Get("imageSvc1"))
133+
}
134+
}
135+
136+
testCase.Run(t)
73137
}

0 commit comments

Comments
 (0)