Skip to content

Commit 94788a3

Browse files
authored
Merge pull request #6546 from thaJeztah/test_improvements
assorted test-improvements
2 parents b1ea4fe + af34b84 commit 94788a3

File tree

2 files changed

+79
-61
lines changed

2 files changed

+79
-61
lines changed

cli/command/container/opts_test.go

Lines changed: 45 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func parseRun(args []string) (*container.Config, *container.HostConfig, *network
4747
if err := flags.Parse(args); err != nil {
4848
return nil, nil, nil, err
4949
}
50-
// TODO: fix tests to accept ContainerConfig
50+
// TODO(dnephin): fix tests to accept ContainerConfig; see https://github.com/moby/moby/pull/31621
5151
containerCfg, err := parse(flags, copts, runtime.GOOS)
5252
if err != nil {
5353
return nil, nil, nil, err
@@ -428,56 +428,55 @@ func TestParseHostnameDomainname(t *testing.T) {
428428
}
429429

430430
func TestParseWithExpose(t *testing.T) {
431-
invalids := map[string]string{
432-
":": "invalid port format for --expose: :",
433-
"8080:9090": "invalid port format for --expose: 8080:9090",
434-
"/tcp": "invalid range format for --expose: /tcp, error: empty string specified for ports",
435-
"/udp": "invalid range format for --expose: /udp, error: empty string specified for ports",
436-
"NaN/tcp": `invalid range format for --expose: NaN/tcp, error: strconv.ParseUint: parsing "NaN": invalid syntax`,
437-
"NaN-NaN/tcp": `invalid range format for --expose: NaN-NaN/tcp, error: strconv.ParseUint: parsing "NaN": invalid syntax`,
438-
"8080-NaN/tcp": `invalid range format for --expose: 8080-NaN/tcp, error: strconv.ParseUint: parsing "NaN": invalid syntax`,
439-
"1234567890-8080/tcp": `invalid range format for --expose: 1234567890-8080/tcp, error: strconv.ParseUint: parsing "1234567890": value out of range`,
440-
}
441-
valids := map[string][]container.PortRangeProto{
442-
"8080/tcp": {"8080/tcp"},
443-
"8080/udp": {"8080/udp"},
444-
"8080/ncp": {"8080/ncp"},
445-
"8080-8080/udp": {"8080/udp"},
446-
"8080-8082/tcp": {"8080/tcp", "8081/tcp", "8082/tcp"},
447-
}
448-
for expose, expectedError := range invalids {
449-
if _, _, _, err := parseRun([]string{fmt.Sprintf("--expose=%v", expose), "img", "cmd"}); err == nil || err.Error() != expectedError {
450-
t.Fatalf("Expected error '%v' with '--expose=%v', got '%v'", expectedError, expose, err)
431+
t.Run("invalid", func(t *testing.T) {
432+
tests := map[string]string{
433+
":": "invalid port format for --expose: :",
434+
"8080:9090": "invalid port format for --expose: 8080:9090",
435+
"/tcp": "invalid range format for --expose: /tcp, error: empty string specified for ports",
436+
"/udp": "invalid range format for --expose: /udp, error: empty string specified for ports",
437+
"NaN/tcp": `invalid range format for --expose: NaN/tcp, error: strconv.ParseUint: parsing "NaN": invalid syntax`,
438+
"NaN-NaN/tcp": `invalid range format for --expose: NaN-NaN/tcp, error: strconv.ParseUint: parsing "NaN": invalid syntax`,
439+
"8080-NaN/tcp": `invalid range format for --expose: 8080-NaN/tcp, error: strconv.ParseUint: parsing "NaN": invalid syntax`,
440+
"1234567890-8080/tcp": `invalid range format for --expose: 1234567890-8080/tcp, error: strconv.ParseUint: parsing "1234567890": value out of range`,
451441
}
452-
}
453-
for expose, exposedPorts := range valids {
454-
config, _, _, err := parseRun([]string{fmt.Sprintf("--expose=%v", expose), "img", "cmd"})
455-
if err != nil {
456-
t.Fatal(err)
442+
for expose, expectedError := range tests {
443+
t.Run(expose, func(t *testing.T) {
444+
_, _, _, err := parseRun([]string{fmt.Sprintf("--expose=%v", expose), "img", "cmd"})
445+
assert.Error(t, err, expectedError)
446+
})
457447
}
458-
if len(config.ExposedPorts) != len(exposedPorts) {
459-
t.Fatalf("Expected %v exposed port, got %v", len(exposedPorts), len(config.ExposedPorts))
448+
})
449+
t.Run("valid", func(t *testing.T) {
450+
tests := map[string][]container.PortRangeProto{
451+
"8080/tcp": {"8080/tcp"},
452+
"8080/udp": {"8080/udp"},
453+
"8080/ncp": {"8080/ncp"},
454+
"8080-8080/udp": {"8080/udp"},
455+
"8080-8082/tcp": {"8080/tcp", "8081/tcp", "8082/tcp"},
460456
}
461-
for _, port := range exposedPorts {
462-
if _, ok := config.ExposedPorts[port]; !ok {
463-
t.Fatalf("Expected %v, got %v", exposedPorts, config.ExposedPorts)
464-
}
457+
for expose, exposedPorts := range tests {
458+
t.Run(expose, func(t *testing.T) {
459+
config, _, _, err := parseRun([]string{fmt.Sprintf("--expose=%v", expose), "img", "cmd"})
460+
assert.NilError(t, err)
461+
for _, port := range exposedPorts {
462+
_, ok := config.ExposedPorts[port]
463+
assert.Check(t, ok, "missing port %q in exposed ports", port)
464+
}
465+
})
465466
}
466-
}
467-
// Merge with actual published port
468-
config, _, _, err := parseRun([]string{"--publish=80", "--expose=80-81/tcp", "img", "cmd"})
469-
if err != nil {
470-
t.Fatal(err)
471-
}
472-
if len(config.ExposedPorts) != 2 {
473-
t.Fatalf("Expected 2 exposed ports, got %v", config.ExposedPorts)
474-
}
475-
ports := []container.PortRangeProto{"80/tcp", "81/tcp"}
476-
for _, port := range ports {
477-
if _, ok := config.ExposedPorts[port]; !ok {
478-
t.Fatalf("Expected %v, got %v", ports, config.ExposedPorts)
467+
})
468+
469+
t.Run("merge with published", func(t *testing.T) {
470+
// Merge with actual published port
471+
config, _, _, err := parseRun([]string{"--publish=80", "--expose=80-81/tcp", "img", "cmd"})
472+
assert.NilError(t, err)
473+
assert.Check(t, is.Len(config.ExposedPorts, 2))
474+
ports := []container.PortRangeProto{"80/tcp", "81/tcp"}
475+
for _, port := range ports {
476+
_, ok := config.ExposedPorts[port]
477+
assert.Check(t, ok, "missing port %q in exposed ports", port)
479478
}
480-
}
479+
})
481480
}
482481

483482
func TestParseDevice(t *testing.T) {

cli/command/network/create_test.go

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -137,18 +137,37 @@ func TestNetworkCreateErrors(t *testing.T) {
137137
}
138138

139139
for _, tc := range testCases {
140-
cmd := newCreateCommand(
141-
test.NewFakeCli(&fakeClient{
142-
networkCreateFunc: tc.networkCreateFunc,
143-
}),
144-
)
145-
cmd.SetArgs(tc.args)
146-
for key, value := range tc.flags {
147-
assert.NilError(t, cmd.Flags().Set(key, value))
140+
var args []string
141+
for flag, val := range tc.flags {
142+
args = append(args, flag+"="+val)
148143
}
149-
cmd.SetOut(io.Discard)
150-
cmd.SetErr(io.Discard)
151-
assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
144+
if len(tc.args) > 0 {
145+
args = append(args, tc.args...)
146+
}
147+
var name string
148+
if len(args) == 0 {
149+
name = "no args"
150+
} else {
151+
name = strings.Join(args, ",")
152+
}
153+
t.Run(name, func(t *testing.T) {
154+
cmd := newCreateCommand(
155+
test.NewFakeCli(&fakeClient{
156+
networkCreateFunc: tc.networkCreateFunc,
157+
}),
158+
)
159+
if len(tc.args) == 0 {
160+
cmd.SetArgs([]string{})
161+
} else {
162+
cmd.SetArgs(tc.args)
163+
}
164+
for key, value := range tc.flags {
165+
assert.NilError(t, cmd.Flags().Set(key, value))
166+
}
167+
cmd.SetOut(io.Discard)
168+
cmd.SetErr(io.Discard)
169+
assert.ErrorContains(t, cmd.Execute(), tc.expectedError)
170+
})
152171
}
153172
}
154173

@@ -175,10 +194,10 @@ func TestNetworkCreateWithFlags(t *testing.T) {
175194
cmd := newCreateCommand(cli)
176195

177196
cmd.SetArgs(args)
178-
cmd.Flags().Set("driver", "foo")
179-
cmd.Flags().Set("ip-range", "192.168.4.0/24")
180-
cmd.Flags().Set("gateway", "192.168.4.1/24")
181-
cmd.Flags().Set("subnet", "192.168.4.0/24")
197+
assert.Check(t, cmd.Flags().Set("driver", "foo"))
198+
assert.Check(t, cmd.Flags().Set("ip-range", "192.168.4.0/24"))
199+
assert.Check(t, cmd.Flags().Set("gateway", "192.168.4.1/24"))
200+
assert.Check(t, cmd.Flags().Set("subnet", "192.168.4.0/24"))
182201
assert.NilError(t, cmd.Execute())
183202
assert.Check(t, is.Equal("banana", strings.TrimSpace(cli.OutBuffer().String())))
184203
}

0 commit comments

Comments
 (0)