Skip to content

Commit 1d4cdfa

Browse files
authored
Merge pull request containerd#3919 from apostasie/ci-unbuffer-redux
CI: remove unbuffer from container tests
2 parents 46be3a7 + 655171c commit 1d4cdfa

File tree

3 files changed

+176
-76
lines changed

3 files changed

+176
-76
lines changed

cmd/nerdctl/container/container_exec_linux_test.go

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"github.com/containerd/nerdctl/v2/pkg/testutil"
2323
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
24+
"github.com/containerd/nerdctl/v2/pkg/testutil/test"
2425
)
2526

2627
func TestExecWithUser(t *testing.T) {
@@ -52,19 +53,57 @@ func TestExecWithUser(t *testing.T) {
5253
}
5354

5455
func TestExecTTY(t *testing.T) {
55-
t.Parallel()
56-
base := testutil.NewBase(t)
56+
const sttyPartialOutput = "speed 38400 baud"
5757

58-
testContainer := testutil.Identifier(t)
59-
defer base.Cmd("rm", "-f", testContainer).Run()
60-
base.Cmd("run", "-d", "--name", testContainer, testutil.CommonImage, "sleep", nerdtest.Infinity).AssertOK()
58+
testCase := nerdtest.Setup()
6159

62-
const sttyPartialOutput = "speed 38400 baud"
63-
// unbuffer(1) emulates tty, which is required by `nerdctl run -t`.
64-
// unbuffer(1) can be installed with `apt-get install expect`.
65-
unbuffer := []string{"unbuffer"}
66-
base.CmdWithHelper(unbuffer, "exec", "-it", testContainer, "stty").AssertOutContains(sttyPartialOutput)
67-
base.CmdWithHelper(unbuffer, "exec", "-t", testContainer, "stty").AssertOutContains(sttyPartialOutput)
68-
base.Cmd("exec", "-i", testContainer, "stty").AssertFail()
69-
base.Cmd("exec", testContainer, "stty").AssertFail()
60+
testCase.Cleanup = func(data test.Data, helpers test.Helpers) {
61+
helpers.Ensure("rm", "-f", data.Identifier())
62+
}
63+
64+
testCase.Setup = func(data test.Data, helpers test.Helpers) {
65+
helpers.Ensure("run", "-d", "--name", data.Identifier(), testutil.CommonImage, "sleep", nerdtest.Infinity)
66+
data.Set("container_name", data.Identifier())
67+
}
68+
69+
testCase.SubTests = []*test.Case{
70+
{
71+
Description: "stty with -it",
72+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
73+
cmd := helpers.Command("exec", "-it", data.Get("container_name"), "stty")
74+
cmd.WithPseudoTTY()
75+
return cmd
76+
},
77+
Expected: test.Expects(0, nil, test.Contains(sttyPartialOutput)),
78+
},
79+
{
80+
Description: "stty with -t",
81+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
82+
cmd := helpers.Command("exec", "-t", data.Get("container_name"), "stty")
83+
cmd.WithPseudoTTY()
84+
return cmd
85+
},
86+
Expected: test.Expects(0, nil, test.Contains(sttyPartialOutput)),
87+
},
88+
{
89+
Description: "stty with -i",
90+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
91+
cmd := helpers.Command("exec", "-i", data.Get("container_name"), "stty")
92+
cmd.WithPseudoTTY()
93+
return cmd
94+
},
95+
Expected: test.Expects(test.ExitCodeGenericFail, nil, nil),
96+
},
97+
{
98+
Description: "stty without params",
99+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
100+
cmd := helpers.Command("exec", data.Get("container_name"), "stty")
101+
cmd.WithPseudoTTY()
102+
return cmd
103+
},
104+
Expected: test.Expects(test.ExitCodeGenericFail, nil, nil),
105+
},
106+
}
107+
108+
testCase.Run(t)
70109
}

cmd/nerdctl/container/container_logs_test.go

Lines changed: 71 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import (
2828
"gotest.tools/v3/icmd"
2929

3030
"github.com/containerd/nerdctl/v2/pkg/testutil"
31+
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
32+
"github.com/containerd/nerdctl/v2/pkg/testutil/test"
3133
)
3234

3335
func TestLogs(t *testing.T) {
@@ -160,65 +162,86 @@ func TestLogsWithFailingContainer(t *testing.T) {
160162
}
161163

162164
func TestLogsWithForegroundContainers(t *testing.T) {
163-
t.Parallel()
164-
if runtime.GOOS == "windows" {
165-
t.Skip("dual logging is not supported on Windows")
166-
}
167-
base := testutil.NewBase(t)
168-
tid := testutil.Identifier(t)
165+
testCase := nerdtest.Setup()
166+
// dual logging is not supported on Windows
167+
testCase.Require = test.Not(test.Windows)
169168

170-
// unbuffer(1) emulates tty, which is required by `nerdctl run -t`.
171-
// unbuffer(1) can be installed with `apt-get install expect`.
172-
unbuffer := []string{"unbuffer"}
169+
testCase.Run(t)
173170

174-
testCases := []struct {
175-
name string
176-
flags []string
177-
tty bool
178-
}{
171+
testCase.SubTests = []*test.Case{
179172
{
180-
name: "foreground",
181-
flags: nil,
182-
tty: false,
173+
Description: "foreground",
174+
Cleanup: func(data test.Data, helpers test.Helpers) {
175+
helpers.Anyhow("rm", "-f", data.Identifier())
176+
},
177+
Setup: func(data test.Data, helpers test.Helpers) {
178+
helpers.Ensure("run", "--name", data.Identifier(), testutil.CommonImage, "sh", "-euxc", "echo foo; echo bar")
179+
},
180+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
181+
return helpers.Command("logs", data.Identifier())
182+
},
183+
Expected: test.Expects(0, nil, test.All(
184+
test.Contains("foo"),
185+
test.Contains("bar"),
186+
test.DoesNotContain("baz"),
187+
)),
183188
},
184189
{
185-
name: "interactive",
186-
flags: []string{"-i"},
187-
tty: false,
190+
Description: "interactive",
191+
Cleanup: func(data test.Data, helpers test.Helpers) {
192+
helpers.Anyhow("rm", "-f", data.Identifier())
193+
},
194+
Setup: func(data test.Data, helpers test.Helpers) {
195+
helpers.Ensure("run", "-i", "--name", data.Identifier(), testutil.CommonImage, "sh", "-euxc", "echo foo; echo bar")
196+
},
197+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
198+
return helpers.Command("logs", data.Identifier())
199+
},
200+
Expected: test.Expects(0, nil, test.All(
201+
test.Contains("foo"),
202+
test.Contains("bar"),
203+
test.DoesNotContain("baz"),
204+
)),
188205
},
189206
{
190-
name: "PTY",
191-
flags: []string{"-t"},
192-
tty: true,
207+
Description: "PTY",
208+
Cleanup: func(data test.Data, helpers test.Helpers) {
209+
helpers.Anyhow("rm", "-f", data.Identifier())
210+
},
211+
Setup: func(data test.Data, helpers test.Helpers) {
212+
cmd := helpers.Command("run", "-t", "--name", data.Identifier(), testutil.CommonImage, "sh", "-euxc", "echo foo; echo bar")
213+
cmd.WithPseudoTTY()
214+
cmd.Run(&test.Expected{ExitCode: 0})
215+
},
216+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
217+
return helpers.Command("logs", data.Identifier())
218+
},
219+
Expected: test.Expects(0, nil, test.All(
220+
test.Contains("foo"),
221+
test.Contains("bar"),
222+
test.DoesNotContain("baz"),
223+
)),
193224
},
194225
{
195-
name: "interactivePTY",
196-
flags: []string{"-i", "-t"},
197-
tty: true,
226+
Description: "interactivePTY",
227+
Cleanup: func(data test.Data, helpers test.Helpers) {
228+
helpers.Anyhow("rm", "-f", data.Identifier())
229+
},
230+
Setup: func(data test.Data, helpers test.Helpers) {
231+
cmd := helpers.Command("run", "-i", "-t", "--name", data.Identifier(), testutil.CommonImage, "sh", "-euxc", "echo foo; echo bar")
232+
cmd.WithPseudoTTY()
233+
cmd.Run(&test.Expected{ExitCode: 0})
234+
},
235+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
236+
return helpers.Command("logs", data.Identifier())
237+
},
238+
Expected: test.Expects(0, nil, test.All(
239+
test.Contains("foo"),
240+
test.Contains("bar"),
241+
test.DoesNotContain("baz"),
242+
)),
198243
},
199244
}
200-
201-
for _, tc := range testCases {
202-
tc := tc
203-
func(t *testing.T) {
204-
containerName := tid + "-" + tc.name
205-
var cmdArgs []string
206-
defer base.Cmd("rm", "-f", containerName).Run()
207-
cmdArgs = append(cmdArgs, "run", "--name", containerName)
208-
cmdArgs = append(cmdArgs, tc.flags...)
209-
cmdArgs = append(cmdArgs, testutil.CommonImage, "sh", "-euxc", "echo foo; echo bar")
210-
211-
if tc.tty {
212-
base.CmdWithHelper(unbuffer, cmdArgs...).AssertOK()
213-
} else {
214-
base.Cmd(cmdArgs...).AssertOK()
215-
}
216-
217-
base.Cmd("logs", containerName).AssertOutContains("foo")
218-
base.Cmd("logs", containerName).AssertOutContains("bar")
219-
base.Cmd("logs", containerName).AssertOutNotContains("baz")
220-
}(t)
221-
}
222245
}
223246

224247
func TestTailFollowRotateLogs(t *testing.T) {

cmd/nerdctl/container/container_run_linux_test.go

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import (
3333
"time"
3434

3535
"gotest.tools/v3/assert"
36-
"gotest.tools/v3/icmd"
3736

3837
"github.com/containerd/nerdctl/v2/cmd/nerdctl/helpers"
3938
"github.com/containerd/nerdctl/v2/pkg/rootlessutil"
@@ -311,21 +310,60 @@ func TestRunWithInit(t *testing.T) {
311310
}
312311

313312
func TestRunTTY(t *testing.T) {
314-
t.Parallel()
315-
base := testutil.NewBase(t)
316-
317313
const sttyPartialOutput = "speed 38400 baud"
318-
// unbuffer(1) emulates tty, which is required by `nerdctl run -t`.
319-
// unbuffer(1) can be installed with `apt-get install expect`.
320-
unbuffer := []string{"unbuffer"}
321-
base.CmdWithHelper(unbuffer, "run", "--rm", "-it", testutil.CommonImage, "stty").AssertOutContains(sttyPartialOutput)
322-
base.CmdWithHelper(unbuffer, "run", "--rm", "-t", testutil.CommonImage, "stty").AssertOutContains(sttyPartialOutput)
323-
base.Cmd("run", "--rm", "-i", testutil.CommonImage, "stty").AssertFail()
324-
base.Cmd("run", "--rm", testutil.CommonImage, "stty").AssertFail()
325-
326-
// tests pipe works
327-
res := icmd.RunCmd(icmd.Command("unbuffer", "/bin/sh", "-c", fmt.Sprintf("%q run --rm -it %q echo hi | grep hi", base.Binary, testutil.CommonImage)))
328-
assert.Equal(t, 0, res.ExitCode, res)
314+
315+
testCase := nerdtest.Setup()
316+
317+
testCase.SubTests = []*test.Case{
318+
{
319+
Description: "stty with -it",
320+
Cleanup: func(data test.Data, helpers test.Helpers) {
321+
helpers.Ensure("rm", "-f", data.Identifier())
322+
},
323+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
324+
cmd := helpers.Command("run", "-it", data.Identifier(), "stty")
325+
cmd.WithPseudoTTY()
326+
return cmd
327+
},
328+
Expected: test.Expects(0, nil, test.Contains(sttyPartialOutput)),
329+
},
330+
{
331+
Description: "stty with -t",
332+
Cleanup: func(data test.Data, helpers test.Helpers) {
333+
helpers.Ensure("rm", "-f", data.Identifier())
334+
},
335+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
336+
cmd := helpers.Command("run", "-t", data.Identifier(), "stty")
337+
cmd.WithPseudoTTY()
338+
return cmd
339+
},
340+
Expected: test.Expects(0, nil, test.Contains(sttyPartialOutput)),
341+
},
342+
{
343+
Description: "stty with -i",
344+
Cleanup: func(data test.Data, helpers test.Helpers) {
345+
helpers.Ensure("rm", "-f", data.Identifier())
346+
},
347+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
348+
cmd := helpers.Command("run", "-i", data.Identifier(), "stty")
349+
cmd.WithPseudoTTY()
350+
return cmd
351+
},
352+
Expected: test.Expects(test.ExitCodeGenericFail, nil, nil),
353+
},
354+
{
355+
Description: "stty without params",
356+
Cleanup: func(data test.Data, helpers test.Helpers) {
357+
helpers.Ensure("rm", "-f", data.Identifier())
358+
},
359+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
360+
cmd := helpers.Command("run", data.Identifier(), "stty")
361+
cmd.WithPseudoTTY()
362+
return cmd
363+
},
364+
Expected: test.Expects(test.ExitCodeGenericFail, nil, nil),
365+
},
366+
}
329367
}
330368

331369
func runSigProxy(t *testing.T, args ...string) (string, bool, bool) {

0 commit comments

Comments
 (0)