Skip to content

Commit c91a455

Browse files
authored
Merge pull request #33 from coderbirju/add-details-network-inspect
Add details network inspect
2 parents 14c9fd4 + eb356cf commit c91a455

File tree

3 files changed

+102
-14
lines changed

3 files changed

+102
-14
lines changed

cmd/nerdctl/compose/compose_kill_linux_test.go

Lines changed: 57 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,23 @@ package compose
1818

1919
import (
2020
"fmt"
21+
"path/filepath"
22+
"regexp"
2123
"testing"
22-
"time"
2324

25+
"github.com/containerd/nerdctl/mod/tigron/expect"
26+
"github.com/containerd/nerdctl/mod/tigron/test"
27+
28+
"github.com/containerd/nerdctl/v2/pkg/composer/serviceparser"
2429
"github.com/containerd/nerdctl/v2/pkg/testutil"
30+
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
2531
)
2632

2733
func TestComposeKill(t *testing.T) {
28-
base := testutil.NewBase(t)
29-
var dockerComposeYAML = fmt.Sprintf(`
34+
testCase := nerdtest.Setup()
35+
36+
testCase.Setup = func(data test.Data, helpers test.Helpers) {
37+
dockerComposeYAML := fmt.Sprintf(`
3038
services:
3139
3240
wordpress:
@@ -54,17 +62,52 @@ volumes:
5462
db:
5563
`, testutil.WordpressImage, testutil.MariaDBImage)
5664

57-
comp := testutil.NewComposeDir(t, dockerComposeYAML)
58-
defer comp.CleanUp()
59-
projectName := comp.ProjectName()
60-
t.Logf("projectName=%q", projectName)
65+
composePath := data.Temp().Save(dockerComposeYAML, "compose.yaml")
66+
67+
projectName := filepath.Base(filepath.Dir(composePath))
68+
t.Logf("projectName=%q", projectName)
69+
70+
wordpressContainerName := serviceparser.DefaultContainerName(projectName, "wordpress", "1")
71+
dbContainerName := serviceparser.DefaultContainerName(projectName, "db", "1")
72+
73+
data.Labels().Set("composeYAML", composePath)
74+
data.Labels().Set("wordpressContainer", wordpressContainerName)
75+
data.Labels().Set("dbContainer", dbContainerName)
76+
77+
helpers.Ensure("compose", "-f", composePath, "up", "-d")
78+
nerdtest.EnsureContainerStarted(helpers, wordpressContainerName)
79+
nerdtest.EnsureContainerStarted(helpers, dbContainerName)
80+
}
81+
82+
testCase.SubTests = []*test.Case{
83+
{
84+
Description: "kill db container and exit with 137",
85+
NoParallel: true,
86+
Setup: func(data test.Data, helpers test.Helpers) {
87+
helpers.Ensure("compose", "-f", data.Labels().Get("composeYAML"), "kill", "db")
88+
nerdtest.EnsureContainerExited(helpers, data.Labels().Get("dbContainer"), expect.ExitCodeSigkill)
89+
},
90+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
91+
return helpers.Command("compose", "-f", data.Labels().Get("composeYAML"), "ps", "db", "-a")
92+
},
93+
// Docker Compose v1: "Exit 137", v2: "exited (137)"
94+
Expected: test.Expects(expect.ExitCodeSuccess, nil, expect.Match(regexp.MustCompile(` 137|\(137\)`))),
95+
},
96+
{
97+
Description: "wordpress container is still running",
98+
NoParallel: true,
99+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
100+
return helpers.Command("compose", "-f", data.Labels().Get("composeYAML"), "ps", "wordpress")
101+
},
102+
Expected: test.Expects(expect.ExitCodeSuccess, nil, expect.Match(regexp.MustCompile("Up|running"))),
103+
},
104+
}
61105

62-
base.ComposeCmd("-f", comp.YAMLFullPath(), "up", "-d").AssertOK()
63-
defer base.ComposeCmd("-f", comp.YAMLFullPath(), "down", "-v").Run()
106+
testCase.Cleanup = func(data test.Data, helpers test.Helpers) {
107+
if data.Labels().Get("composeYAML") != "" {
108+
helpers.Anyhow("compose", "-f", data.Labels().Get("composeYAML"), "down", "-v")
109+
}
110+
}
64111

65-
base.ComposeCmd("-f", comp.YAMLFullPath(), "kill", "db").AssertOK()
66-
time.Sleep(3 * time.Second)
67-
// Docker Compose v1: "Exit 137", v2: "exited (137)"
68-
base.ComposeCmd("-f", comp.YAMLFullPath(), "ps", "db", "-a").AssertOutContainsAny(" 137", "(137)")
69-
base.ComposeCmd("-f", comp.YAMLFullPath(), "ps", "wordpress").AssertOutContainsAny("Up", "running")
112+
testCase.Run(t)
70113
}

mod/tigron/expect/exit.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ package expect
1919
const (
2020
// ExitCodeSuccess will ensure that the command effectively ran returned with exit code zero.
2121
ExitCodeSuccess = 0
22+
// ExitCodeSigkill verifies a container exited due to SIGKILL.
23+
ExitCodeSigkill = 137
2224
// ExitCodeGenericFail will verify that the command ran and exited with a non-zero error code.
2325
// This does NOT include timeouts, cancellation, or signals.
2426
ExitCodeGenericFail = -10

pkg/testutil/nerdtest/utilities.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,49 @@ func EnsureContainerStarted(helpers test.Helpers, con string) {
151151
}
152152
}
153153

154+
func EnsureContainerExited(helpers test.Helpers, con string, exitCode int) {
155+
helpers.T().Helper()
156+
exited := false
157+
for i := 0; i < maxRetry && !exited; i++ {
158+
helpers.Command("container", "inspect", con).
159+
Run(&test.Expected{
160+
ExitCode: expect.ExitCodeNoCheck,
161+
Output: func(stdout string, t tig.T) {
162+
var dc []dockercompat.Container
163+
err := json.Unmarshal([]byte(stdout), &dc)
164+
if err != nil || len(dc) == 0 || (len(dc) > 0 && dc[0].State == nil) {
165+
return
166+
}
167+
assert.Equal(t, len(dc), 1, "Unexpectedly got multiple results\n")
168+
state := dc[0].State
169+
if state.Running {
170+
return
171+
}
172+
if state.Status != "exited" && state.Status != "dead" {
173+
return
174+
}
175+
// Use a negative exitCode to ignore the exit code and only verify exited/dead state.
176+
if exitCode >= 0 && state.ExitCode != exitCode {
177+
return
178+
}
179+
exited = true
180+
},
181+
})
182+
time.Sleep(sleep)
183+
}
184+
185+
if !exited {
186+
ins := helpers.Capture("container", "inspect", con)
187+
lgs := helpers.Capture("logs", con)
188+
ps := helpers.Capture("ps", "-a")
189+
helpers.T().Log(ins)
190+
helpers.T().Log(lgs)
191+
helpers.T().Log(ps)
192+
helpers.T().Log(fmt.Sprintf("container %s still not exited after %d retries", con, maxRetry))
193+
helpers.T().FailNow()
194+
}
195+
}
196+
154197
func GenerateJWEKeyPair(data test.Data, helpers test.Helpers) (string, string) {
155198
helpers.T().Helper()
156199

0 commit comments

Comments
 (0)