Skip to content

Commit 025f455

Browse files
committed
Refactor container_exec_test.go to use Tigron
Updates tests to use nerdtest.Setup and the Tigron testing framework as per issue #4613. Replaced base.Cmd with helpers.Command and base.Assert with test.Expects. Also updated TestExecStdin to use cmd.Feed instead of WithStdin. Signed-off-by: Akihiro Suda <[email protected]>
1 parent 56575f6 commit 025f455

File tree

1 file changed

+99
-82
lines changed

1 file changed

+99
-82
lines changed

cmd/nerdctl/container/container_exec_test.go

Lines changed: 99 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -17,107 +17,124 @@
1717
package container
1818

1919
import (
20-
"errors"
2120
"runtime"
2221
"strings"
2322
"testing"
2423

24+
"gotest.tools/v3/assert"
25+
26+
"github.com/containerd/nerdctl/mod/tigron/expect"
27+
"github.com/containerd/nerdctl/mod/tigron/require"
28+
"github.com/containerd/nerdctl/mod/tigron/test"
29+
"github.com/containerd/nerdctl/mod/tigron/tig"
30+
2531
"github.com/containerd/nerdctl/v2/pkg/testutil"
32+
"github.com/containerd/nerdctl/v2/pkg/testutil/nerdtest"
2633
)
2734

2835
func TestExec(t *testing.T) {
29-
t.Parallel()
30-
base := testutil.NewBase(t)
31-
testContainer := testutil.Identifier(t)
32-
defer base.Cmd("rm", "-f", testContainer).Run()
33-
34-
base.Cmd("run", "-d", "--name", testContainer, testutil.CommonImage, "sleep", "1h").AssertOK()
35-
base.EnsureContainerStarted(testContainer)
36-
37-
base.Cmd("exec", testContainer, "echo", "success").AssertOutExactly("success\n")
36+
nerdtest.Setup()
37+
38+
testCase := &test.Case{
39+
Setup: func(data test.Data, helpers test.Helpers) {
40+
helpers.Ensure("run", "-d", "--name", data.Identifier(), testutil.CommonImage, "sleep", nerdtest.Infinity)
41+
},
42+
Cleanup: func(data test.Data, helpers test.Helpers) {
43+
helpers.Anyhow("rm", "-f", data.Identifier())
44+
},
45+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
46+
return helpers.Command("exec", data.Identifier(), "echo", "success")
47+
},
48+
Expected: test.Expects(0, nil, expect.Equals("success\n")),
49+
}
50+
testCase.Run(t)
3851
}
3952

4053
func TestExecWithDoubleDash(t *testing.T) {
41-
t.Parallel()
42-
testutil.DockerIncompatible(t)
43-
base := testutil.NewBase(t)
44-
testContainer := testutil.Identifier(t)
45-
defer base.Cmd("rm", "-f", testContainer).Run()
46-
47-
base.Cmd("run", "-d", "--name", testContainer, testutil.CommonImage, "sleep", "1h").AssertOK()
48-
base.EnsureContainerStarted(testContainer)
49-
50-
base.Cmd("exec", testContainer, "--", "echo", "success").AssertOutExactly("success\n")
54+
nerdtest.Setup()
55+
56+
testCase := &test.Case{
57+
Require: require.Not(nerdtest.Docker),
58+
Setup: func(data test.Data, helpers test.Helpers) {
59+
helpers.Ensure("run", "-d", "--name", data.Identifier(), testutil.CommonImage, "sleep", nerdtest.Infinity)
60+
},
61+
Cleanup: func(data test.Data, helpers test.Helpers) {
62+
helpers.Anyhow("rm", "-f", data.Identifier())
63+
},
64+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
65+
return helpers.Command("exec", data.Identifier(), "--", "echo", "success")
66+
},
67+
Expected: test.Expects(0, nil, expect.Equals("success\n")),
68+
}
69+
testCase.Run(t)
5170
}
5271

5372
func TestExecStdin(t *testing.T) {
54-
t.Parallel()
55-
base := testutil.NewBase(t)
56-
57-
testContainer := testutil.Identifier(t)
58-
defer base.Cmd("rm", "-f", testContainer).Run()
59-
base.Cmd("run", "-d", "--name", testContainer, testutil.CommonImage, "sleep", "1h").AssertOK()
60-
base.EnsureContainerStarted(testContainer)
73+
nerdtest.Setup()
6174

6275
const testStr = "test-exec-stdin"
63-
opts := []func(*testutil.Cmd){
64-
testutil.WithStdin(strings.NewReader(testStr)),
76+
testCase := &test.Case{
77+
Setup: func(data test.Data, helpers test.Helpers) {
78+
helpers.Ensure("run", "-d", "--name", data.Identifier(), testutil.CommonImage, "sleep", nerdtest.Infinity)
79+
},
80+
Cleanup: func(data test.Data, helpers test.Helpers) {
81+
helpers.Anyhow("rm", "-f", data.Identifier())
82+
},
83+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
84+
cmd := helpers.Command("exec", "-i", data.Identifier(), "cat")
85+
cmd.Feed(strings.NewReader(testStr))
86+
return cmd
87+
},
88+
Expected: test.Expects(0, nil, expect.Equals(testStr)),
6589
}
66-
base.Cmd("exec", "-i", testContainer, "cat").CmdOption(opts...).AssertOutExactly(testStr)
90+
testCase.Run(t)
6791
}
6892

6993
// FYI: https://github.com/containerd/nerdctl/blob/e4b2b6da56555dc29ed66d0fd8e7094ff2bc002d/cmd/nerdctl/run_test.go#L177
7094
func TestExecEnv(t *testing.T) {
71-
t.Parallel()
72-
base := testutil.NewBase(t)
73-
testContainer := testutil.Identifier(t)
74-
defer base.Cmd("rm", "-f", testContainer).Run()
75-
76-
base.Cmd("run", "-d", "--name", testContainer, testutil.CommonImage, "sleep", "1h").AssertOK()
77-
base.EnsureContainerStarted(testContainer)
78-
79-
base.Env = append(base.Env, "CORGE=corge-value-in-host", "GARPLY=garply-value-in-host")
80-
base.Cmd("exec",
81-
"--env", "FOO=foo1,foo2",
82-
"--env", "BAR=bar1 bar2",
83-
"--env", "BAZ=",
84-
"--env", "QUX", // not exported in OS
85-
"--env", "QUUX=quux1",
86-
"--env", "QUUX=quux2",
87-
"--env", "CORGE", // OS exported
88-
"--env", "GRAULT=grault_key=grault_value", // value contains `=` char
89-
"--env", "GARPLY=", // OS exported
90-
"--env", "WALDO=", // not exported in OS
91-
92-
testContainer, "env").AssertOutWithFunc(func(stdout string) error {
93-
if !strings.Contains(stdout, "\nFOO=foo1,foo2\n") {
94-
return errors.New("got bad FOO")
95-
}
96-
if !strings.Contains(stdout, "\nBAR=bar1 bar2\n") {
97-
return errors.New("got bad BAR")
98-
}
99-
if !strings.Contains(stdout, "\nBAZ=\n") && runtime.GOOS != "windows" {
100-
return errors.New("got bad BAZ")
101-
}
102-
if strings.Contains(stdout, "QUX") {
103-
return errors.New("got bad QUX (should not be set)")
104-
}
105-
if !strings.Contains(stdout, "\nQUUX=quux2\n") {
106-
return errors.New("got bad QUUX")
107-
}
108-
if !strings.Contains(stdout, "\nCORGE=corge-value-in-host\n") {
109-
return errors.New("got bad CORGE")
110-
}
111-
if !strings.Contains(stdout, "\nGRAULT=grault_key=grault_value\n") {
112-
return errors.New("got bad GRAULT")
113-
}
114-
if !strings.Contains(stdout, "\nGARPLY=\n") && runtime.GOOS != "windows" {
115-
return errors.New("got bad GARPLY")
116-
}
117-
if !strings.Contains(stdout, "\nWALDO=\n") && runtime.GOOS != "windows" {
118-
return errors.New("got bad WALDO")
119-
}
120-
121-
return nil
122-
})
95+
nerdtest.Setup()
96+
97+
testCase := &test.Case{
98+
Env: map[string]string{
99+
"CORGE": "corge-value-in-host",
100+
"GARPLY": "garply-value-in-host",
101+
},
102+
Setup: func(data test.Data, helpers test.Helpers) {
103+
helpers.Ensure("run", "-d", "--name", data.Identifier(), testutil.CommonImage, "sleep", nerdtest.Infinity)
104+
},
105+
Cleanup: func(data test.Data, helpers test.Helpers) {
106+
helpers.Anyhow("rm", "-f", data.Identifier())
107+
},
108+
Command: func(data test.Data, helpers test.Helpers) test.TestableCommand {
109+
return helpers.Command("exec",
110+
"--env", "FOO=foo1,foo2",
111+
"--env", "BAR=bar1 bar2",
112+
"--env", "BAZ=",
113+
"--env", "QUX", // not exported in OS
114+
"--env", "QUUX=quux1",
115+
"--env", "QUUX=quux2",
116+
"--env", "CORGE", // OS exported
117+
"--env", "GRAULT=grault_key=grault_value", // value contains `=` char
118+
"--env", "GARPLY=", // OS exported
119+
"--env", "WALDO=", // not exported in OS
120+
121+
data.Identifier(), "env")
122+
},
123+
Expected: test.Expects(0, nil, func(stdout string, t tig.T) {
124+
assert.Assert(t, strings.Contains(stdout, "\nFOO=foo1,foo2\n"), "got bad FOO")
125+
assert.Assert(t, strings.Contains(stdout, "\nBAR=bar1 bar2\n"), "got bad BAR")
126+
if runtime.GOOS != "windows" {
127+
assert.Assert(t, strings.Contains(stdout, "\nBAZ=\n"), "got bad BAZ")
128+
}
129+
assert.Assert(t, !strings.Contains(stdout, "QUX"), "got bad QUX (should not be set)")
130+
assert.Assert(t, strings.Contains(stdout, "\nQUUX=quux2\n"), "got bad QUUX")
131+
assert.Assert(t, strings.Contains(stdout, "\nCORGE=corge-value-in-host\n"), "got bad CORGE")
132+
assert.Assert(t, strings.Contains(stdout, "\nGRAULT=grault_key=grault_value\n"), "got bad GRAULT")
133+
if runtime.GOOS != "windows" {
134+
assert.Assert(t, strings.Contains(stdout, "\nGARPLY=\n"), "got bad GARPLY")
135+
assert.Assert(t, strings.Contains(stdout, "\nWALDO=\n"), "got bad WALDO")
136+
}
137+
}),
138+
}
139+
testCase.Run(t)
123140
}

0 commit comments

Comments
 (0)