Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -9,6 +9,7 @@ import ( |
| 9 | 9 |
"strings" |
| 10 | 10 |
"testing" |
| 11 | 11 |
|
| 12 |
+ "github.com/docker/docker/integration-cli/cli" |
|
| 12 | 13 |
"github.com/docker/docker/testutil" |
| 13 | 14 |
"gotest.tools/v3/assert" |
| 14 | 15 |
is "gotest.tools/v3/assert/cmp" |
| ... | ... |
@@ -31,32 +32,33 @@ func (s *DockerCLIPortSuite) TestPortList(c *testing.T) {
|
| 31 | 31 |
ctx := testutil.GetContext(c) |
| 32 | 32 |
|
| 33 | 33 |
// one port |
| 34 |
- out, _ := dockerCmd(c, "run", "-d", "-p", "9876:80", "busybox", "top") |
|
| 35 |
- firstID := strings.TrimSpace(out) |
|
| 34 |
+ firstID := cli.DockerCmd(c, "run", "-d", "-p", "9876:80", "busybox", "top").Stdout() |
|
| 35 |
+ firstID = strings.TrimSpace(firstID) |
|
| 36 | 36 |
|
| 37 |
- out, _ = dockerCmd(c, "port", firstID, "80") |
|
| 37 |
+ out := cli.DockerCmd(c, "port", firstID, "80").Stdout() |
|
| 38 | 38 |
|
| 39 | 39 |
assertPortList(c, out, []string{"0.0.0.0:9876", "[::]:9876"})
|
| 40 | 40 |
|
| 41 |
- out, _ = dockerCmd(c, "port", firstID) |
|
| 41 |
+ out = cli.DockerCmd(c, "port", firstID).Stdout() |
|
| 42 | 42 |
|
| 43 | 43 |
assertPortList(c, out, []string{"80/tcp -> 0.0.0.0:9876", "80/tcp -> [::]:9876"})
|
| 44 | 44 |
|
| 45 |
- dockerCmd(c, "rm", "-f", firstID) |
|
| 45 |
+ cli.DockerCmd(c, "rm", "-f", firstID) |
|
| 46 | 46 |
|
| 47 | 47 |
// three port |
| 48 |
- out, _ = dockerCmd(c, "run", "-d", |
|
| 48 |
+ id := cli.DockerCmd(c, "run", "-d", |
|
| 49 | 49 |
"-p", "9876:80", |
| 50 | 50 |
"-p", "9877:81", |
| 51 | 51 |
"-p", "9878:82", |
| 52 |
- "busybox", "top") |
|
| 53 |
- ID := strings.TrimSpace(out) |
|
| 52 |
+ "busybox", "top", |
|
| 53 |
+ ).Stdout() |
|
| 54 |
+ id = strings.TrimSpace(id) |
|
| 54 | 55 |
|
| 55 |
- out, _ = dockerCmd(c, "port", ID, "80") |
|
| 56 |
+ out = cli.DockerCmd(c, "port", id, "80").Stdout() |
|
| 56 | 57 |
|
| 57 | 58 |
assertPortList(c, out, []string{"0.0.0.0:9876", "[::]:9876"})
|
| 58 | 59 |
|
| 59 |
- out, _ = dockerCmd(c, "port", ID) |
|
| 60 |
+ out = cli.DockerCmd(c, "port", id).Stdout() |
|
| 60 | 61 |
|
| 61 | 62 |
assertPortList(c, out, []string{
|
| 62 | 63 |
"80/tcp -> 0.0.0.0:9876", |
| ... | ... |
@@ -67,22 +69,23 @@ func (s *DockerCLIPortSuite) TestPortList(c *testing.T) {
|
| 67 | 67 |
"82/tcp -> [::]:9878", |
| 68 | 68 |
}) |
| 69 | 69 |
|
| 70 |
- dockerCmd(c, "rm", "-f", ID) |
|
| 70 |
+ cli.DockerCmd(c, "rm", "-f", id) |
|
| 71 | 71 |
|
| 72 | 72 |
// more and one port mapped to the same container port |
| 73 |
- out, _ = dockerCmd(c, "run", "-d", |
|
| 73 |
+ id = cli.DockerCmd(c, "run", "-d", |
|
| 74 | 74 |
"-p", "9876:80", |
| 75 | 75 |
"-p", "9999:80", |
| 76 | 76 |
"-p", "9877:81", |
| 77 | 77 |
"-p", "9878:82", |
| 78 |
- "busybox", "top") |
|
| 79 |
- ID = strings.TrimSpace(out) |
|
| 78 |
+ "busybox", "top", |
|
| 79 |
+ ).Stdout() |
|
| 80 |
+ id = strings.TrimSpace(id) |
|
| 80 | 81 |
|
| 81 |
- out, _ = dockerCmd(c, "port", ID, "80") |
|
| 82 |
+ out = cli.DockerCmd(c, "port", id, "80").Stdout() |
|
| 82 | 83 |
|
| 83 | 84 |
assertPortList(c, out, []string{"0.0.0.0:9876", "[::]:9876", "0.0.0.0:9999", "[::]:9999"})
|
| 84 | 85 |
|
| 85 |
- out, _ = dockerCmd(c, "port", ID) |
|
| 86 |
+ out = cli.DockerCmd(c, "port", id).Stdout() |
|
| 86 | 87 |
|
| 87 | 88 |
assertPortList(c, out, []string{
|
| 88 | 89 |
"80/tcp -> 0.0.0.0:9876", |
| ... | ... |
@@ -94,16 +97,16 @@ func (s *DockerCLIPortSuite) TestPortList(c *testing.T) {
|
| 94 | 94 |
"82/tcp -> 0.0.0.0:9878", |
| 95 | 95 |
"82/tcp -> [::]:9878", |
| 96 | 96 |
}) |
| 97 |
- dockerCmd(c, "rm", "-f", ID) |
|
| 97 |
+ cli.DockerCmd(c, "rm", "-f", id) |
|
| 98 | 98 |
|
| 99 | 99 |
testRange := func() {
|
| 100 | 100 |
// host port ranges used |
| 101 | 101 |
IDs := make([]string, 3) |
| 102 | 102 |
for i := 0; i < 3; i++ {
|
| 103 |
- out, _ = dockerCmd(c, "run", "-d", "-p", "9090-9092:80", "busybox", "top") |
|
| 103 |
+ out = cli.DockerCmd(c, "run", "-d", "-p", "9090-9092:80", "busybox", "top").Stdout() |
|
| 104 | 104 |
IDs[i] = strings.TrimSpace(out) |
| 105 | 105 |
|
| 106 |
- out, _ = dockerCmd(c, "port", IDs[i]) |
|
| 106 |
+ out = cli.DockerCmd(c, "port", IDs[i]).Stdout() |
|
| 107 | 107 |
|
| 108 | 108 |
assertPortList(c, out, []string{
|
| 109 | 109 |
fmt.Sprintf("80/tcp -> 0.0.0.0:%d", 9090+i),
|
| ... | ... |
@@ -117,7 +120,7 @@ func (s *DockerCLIPortSuite) TestPortList(c *testing.T) {
|
| 117 | 117 |
assert.Assert(c, err != nil, "out: %s", out) |
| 118 | 118 |
|
| 119 | 119 |
for i := 0; i < 3; i++ {
|
| 120 |
- dockerCmd(c, "rm", "-f", IDs[i]) |
|
| 120 |
+ cli.DockerCmd(c, "rm", "-f", IDs[i]) |
|
| 121 | 121 |
} |
| 122 | 122 |
} |
| 123 | 123 |
testRange() |
| ... | ... |
@@ -132,10 +135,10 @@ func (s *DockerCLIPortSuite) TestPortList(c *testing.T) {
|
| 132 | 132 |
} |
| 133 | 133 |
|
| 134 | 134 |
// test host range:container range spec. |
| 135 |
- out, _ = dockerCmd(c, "run", "-d", "-p", "9800-9803:80-83", "busybox", "top") |
|
| 136 |
- ID = strings.TrimSpace(out) |
|
| 135 |
+ id = cli.DockerCmd(c, "run", "-d", "-p", "9800-9803:80-83", "busybox", "top").Stdout() |
|
| 136 |
+ id = strings.TrimSpace(id) |
|
| 137 | 137 |
|
| 138 |
- out, _ = dockerCmd(c, "port", ID) |
|
| 138 |
+ out = cli.DockerCmd(c, "port", id).Stdout() |
|
| 139 | 139 |
|
| 140 | 140 |
assertPortList(c, out, []string{
|
| 141 | 141 |
"80/tcp -> 0.0.0.0:9800", |
| ... | ... |
@@ -147,17 +150,17 @@ func (s *DockerCLIPortSuite) TestPortList(c *testing.T) {
|
| 147 | 147 |
"83/tcp -> 0.0.0.0:9803", |
| 148 | 148 |
"83/tcp -> [::]:9803", |
| 149 | 149 |
}) |
| 150 |
- dockerCmd(c, "rm", "-f", ID) |
|
| 150 |
+ cli.DockerCmd(c, "rm", "-f", id) |
|
| 151 | 151 |
|
| 152 | 152 |
// test mixing protocols in same port range |
| 153 |
- out, _ = dockerCmd(c, "run", "-d", "-p", "8000-8080:80", "-p", "8000-8080:80/udp", "busybox", "top") |
|
| 154 |
- ID = strings.TrimSpace(out) |
|
| 155 |
- |
|
| 156 |
- out, _ = dockerCmd(c, "port", ID) |
|
| 153 |
+ id = cli.DockerCmd(c, "run", "-d", "-p", "8000-8080:80", "-p", "8000-8080:80/udp", "busybox", "top").Stdout() |
|
| 154 |
+ id = strings.TrimSpace(id) |
|
| 157 | 155 |
|
| 156 |
+ out = cli.DockerCmd(c, "port", id).Stdout() |
|
| 158 | 157 |
// Running this test multiple times causes the TCP port to increment. |
| 159 |
- assertPortRange(ctx, ID, []int{8000, 8080}, []int{8000, 8080})
|
|
| 160 |
- dockerCmd(c, "rm", "-f", ID) |
|
| 158 |
+ err := assertPortRange(ctx, id, []int{8000, 8080}, []int{8000, 8080})
|
|
| 159 |
+ assert.Check(c, err) |
|
| 160 |
+ cli.DockerCmd(c, "rm", "-f", id) |
|
| 161 | 161 |
} |
| 162 | 162 |
|
| 163 | 163 |
func assertPortList(c *testing.T, out string, expected []string) {
|
| ... | ... |
@@ -231,7 +234,7 @@ func assertPortRange(ctx context.Context, id string, expectedTCP, expectedUDP [] |
| 231 | 231 |
} |
| 232 | 232 |
|
| 233 | 233 |
func stopRemoveContainer(id string, c *testing.T) {
|
| 234 |
- dockerCmd(c, "rm", "-f", id) |
|
| 234 |
+ cli.DockerCmd(c, "rm", "-f", id) |
|
| 235 | 235 |
} |
| 236 | 236 |
|
| 237 | 237 |
func (s *DockerCLIPortSuite) TestUnpublishedPortsInPsOutput(c *testing.T) {
|
| ... | ... |
@@ -241,23 +244,23 @@ func (s *DockerCLIPortSuite) TestUnpublishedPortsInPsOutput(c *testing.T) {
|
| 241 | 241 |
port2 := 443 |
| 242 | 242 |
expose1 := fmt.Sprintf("--expose=%d", port1)
|
| 243 | 243 |
expose2 := fmt.Sprintf("--expose=%d", port2)
|
| 244 |
- dockerCmd(c, "run", "-d", expose1, expose2, "busybox", "sleep", "5") |
|
| 244 |
+ cli.DockerCmd(c, "run", "-d", expose1, expose2, "busybox", "sleep", "5") |
|
| 245 | 245 |
|
| 246 | 246 |
// Check docker ps o/p for last created container reports the unpublished ports |
| 247 | 247 |
unpPort1 := fmt.Sprintf("%d/tcp", port1)
|
| 248 | 248 |
unpPort2 := fmt.Sprintf("%d/tcp", port2)
|
| 249 |
- out, _ := dockerCmd(c, "ps", "-n=1") |
|
| 249 |
+ out := cli.DockerCmd(c, "ps", "-n=1").Stdout() |
|
| 250 | 250 |
// Missing unpublished ports in docker ps output |
| 251 | 251 |
assert.Assert(c, strings.Contains(out, unpPort1)) |
| 252 | 252 |
// Missing unpublished ports in docker ps output |
| 253 | 253 |
assert.Assert(c, strings.Contains(out, unpPort2)) |
| 254 | 254 |
// Run the container forcing to publish the exposed ports |
| 255 |
- dockerCmd(c, "run", "-d", "-P", expose1, expose2, "busybox", "sleep", "5") |
|
| 255 |
+ cli.DockerCmd(c, "run", "-d", "-P", expose1, expose2, "busybox", "sleep", "5") |
|
| 256 | 256 |
|
| 257 | 257 |
// Check docker ps o/p for last created container reports the exposed ports in the port bindings |
| 258 | 258 |
expBndRegx1 := regexp.MustCompile(`0.0.0.0:\d\d\d\d\d->` + unpPort1) |
| 259 | 259 |
expBndRegx2 := regexp.MustCompile(`0.0.0.0:\d\d\d\d\d->` + unpPort2) |
| 260 |
- out, _ = dockerCmd(c, "ps", "-n=1") |
|
| 260 |
+ out = cli.DockerCmd(c, "ps", "-n=1").Stdout() |
|
| 261 | 261 |
// Cannot find expected port binding port (0.0.0.0:xxxxx->unpPort1) in docker ps output |
| 262 | 262 |
assert.Equal(c, expBndRegx1.MatchString(out), true, fmt.Sprintf("out: %s; unpPort1: %s", out, unpPort1))
|
| 263 | 263 |
// Cannot find expected port binding port (0.0.0.0:xxxxx->unpPort2) in docker ps output |
| ... | ... |
@@ -267,13 +270,14 @@ func (s *DockerCLIPortSuite) TestUnpublishedPortsInPsOutput(c *testing.T) {
|
| 267 | 267 |
offset := 10000 |
| 268 | 268 |
pFlag1 := fmt.Sprintf("%d:%d", offset+port1, port1)
|
| 269 | 269 |
pFlag2 := fmt.Sprintf("%d:%d", offset+port2, port2)
|
| 270 |
- out, _ = dockerCmd(c, "run", "-d", "-p", pFlag1, "-p", pFlag2, expose1, expose2, "busybox", "sleep", "5") |
|
| 271 |
- id := strings.TrimSpace(out) |
|
| 270 |
+ |
|
| 271 |
+ id := cli.DockerCmd(c, "run", "-d", "-p", pFlag1, "-p", pFlag2, expose1, expose2, "busybox", "sleep", "5").Stdout() |
|
| 272 |
+ id = strings.TrimSpace(id) |
|
| 272 | 273 |
|
| 273 | 274 |
// Check docker ps o/p for last created container reports the specified port mappings |
| 274 | 275 |
expBnd1 := fmt.Sprintf("0.0.0.0:%d->%s", offset+port1, unpPort1)
|
| 275 | 276 |
expBnd2 := fmt.Sprintf("0.0.0.0:%d->%s", offset+port2, unpPort2)
|
| 276 |
- out, _ = dockerCmd(c, "ps", "-n=1") |
|
| 277 |
+ out = cli.DockerCmd(c, "ps", "-n=1").Stdout() |
|
| 277 | 278 |
// Cannot find expected port binding (expBnd1) in docker ps output |
| 278 | 279 |
assert.Assert(c, strings.Contains(out, expBnd1)) |
| 279 | 280 |
// Cannot find expected port binding (expBnd2) in docker ps output |
| ... | ... |
@@ -282,11 +286,11 @@ func (s *DockerCLIPortSuite) TestUnpublishedPortsInPsOutput(c *testing.T) {
|
| 282 | 282 |
stopRemoveContainer(id, c) |
| 283 | 283 |
|
| 284 | 284 |
// Run the container with explicit port bindings and no exposed ports |
| 285 |
- out, _ = dockerCmd(c, "run", "-d", "-p", pFlag1, "-p", pFlag2, "busybox", "sleep", "5") |
|
| 286 |
- id = strings.TrimSpace(out) |
|
| 285 |
+ id = cli.DockerCmd(c, "run", "-d", "-p", pFlag1, "-p", pFlag2, "busybox", "sleep", "5").Stdout() |
|
| 286 |
+ id = strings.TrimSpace(id) |
|
| 287 | 287 |
|
| 288 | 288 |
// Check docker ps o/p for last created container reports the specified port mappings |
| 289 |
- out, _ = dockerCmd(c, "ps", "-n=1") |
|
| 289 |
+ out = cli.DockerCmd(c, "ps", "-n=1").Stdout() |
|
| 290 | 290 |
// Cannot find expected port binding (expBnd1) in docker ps output |
| 291 | 291 |
assert.Assert(c, strings.Contains(out, expBnd1)) |
| 292 | 292 |
// Cannot find expected port binding (expBnd2) in docker ps output |
| ... | ... |
@@ -295,10 +299,10 @@ func (s *DockerCLIPortSuite) TestUnpublishedPortsInPsOutput(c *testing.T) {
|
| 295 | 295 |
stopRemoveContainer(id, c) |
| 296 | 296 |
|
| 297 | 297 |
// Run the container with one unpublished exposed port and one explicit port binding |
| 298 |
- dockerCmd(c, "run", "-d", expose1, "-p", pFlag2, "busybox", "sleep", "5") |
|
| 298 |
+ cli.DockerCmd(c, "run", "-d", expose1, "-p", pFlag2, "busybox", "sleep", "5") |
|
| 299 | 299 |
|
| 300 | 300 |
// Check docker ps o/p for last created container reports the specified unpublished port and port mapping |
| 301 |
- out, _ = dockerCmd(c, "ps", "-n=1") |
|
| 301 |
+ out = cli.DockerCmd(c, "ps", "-n=1").Stdout() |
|
| 302 | 302 |
// Missing unpublished exposed ports (unpPort1) in docker ps output |
| 303 | 303 |
assert.Assert(c, strings.Contains(out, unpPort1)) |
| 304 | 304 |
// Missing port binding (expBnd2) in docker ps output |
| ... | ... |
@@ -307,16 +311,16 @@ func (s *DockerCLIPortSuite) TestUnpublishedPortsInPsOutput(c *testing.T) {
|
| 307 | 307 |
|
| 308 | 308 |
func (s *DockerCLIPortSuite) TestPortHostBinding(c *testing.T) {
|
| 309 | 309 |
testRequires(c, DaemonIsLinux, NotUserNamespace) |
| 310 |
- out, _ := dockerCmd(c, "run", "-d", "-p", "9876:80", "busybox", "nc", "-l", "-p", "80") |
|
| 311 |
- firstID := strings.TrimSpace(out) |
|
| 310 |
+ firstID := cli.DockerCmd(c, "run", "-d", "-p", "9876:80", "busybox", "nc", "-l", "-p", "80").Stdout() |
|
| 311 |
+ firstID = strings.TrimSpace(firstID) |
|
| 312 | 312 |
|
| 313 |
- out, _ = dockerCmd(c, "port", firstID, "80") |
|
| 313 |
+ out := cli.DockerCmd(c, "port", firstID, "80").Stdout() |
|
| 314 | 314 |
|
| 315 | 315 |
assertPortList(c, out, []string{"0.0.0.0:9876", "[::]:9876"})
|
| 316 | 316 |
|
| 317 |
- dockerCmd(c, "run", "--net=host", "busybox", "nc", "localhost", "9876") |
|
| 317 |
+ cli.DockerCmd(c, "run", "--net=host", "busybox", "nc", "localhost", "9876") |
|
| 318 | 318 |
|
| 319 |
- dockerCmd(c, "rm", "-f", firstID) |
|
| 319 |
+ cli.DockerCmd(c, "rm", "-f", firstID) |
|
| 320 | 320 |
|
| 321 | 321 |
out, _, err := dockerCmdWithError("run", "--net=host", "busybox", "nc", "localhost", "9876")
|
| 322 | 322 |
// Port is still bound after the Container is removed |
| ... | ... |
@@ -325,15 +329,14 @@ func (s *DockerCLIPortSuite) TestPortHostBinding(c *testing.T) {
|
| 325 | 325 |
|
| 326 | 326 |
func (s *DockerCLIPortSuite) TestPortExposeHostBinding(c *testing.T) {
|
| 327 | 327 |
testRequires(c, DaemonIsLinux, NotUserNamespace) |
| 328 |
- out, _ := dockerCmd(c, "run", "-d", "-P", "--expose", "80", "busybox", "nc", "-l", "-p", "80") |
|
| 329 |
- firstID := strings.TrimSpace(out) |
|
| 330 |
- |
|
| 331 |
- out, _ = dockerCmd(c, "inspect", "--format", `{{index .NetworkSettings.Ports "80/tcp" 0 "HostPort" }}`, firstID)
|
|
| 328 |
+ firstID := cli.DockerCmd(c, "run", "-d", "-P", "--expose", "80", "busybox", "nc", "-l", "-p", "80").Stdout() |
|
| 329 |
+ firstID = strings.TrimSpace(firstID) |
|
| 332 | 330 |
|
| 333 |
- exposedPort := strings.TrimSpace(out) |
|
| 334 |
- dockerCmd(c, "run", "--net=host", "busybox", "nc", "127.0.0.1", exposedPort) |
|
| 331 |
+ exposedPort := cli.DockerCmd(c, "inspect", "--format", `{{index .NetworkSettings.Ports "80/tcp" 0 "HostPort" }}`, firstID).Stdout()
|
|
| 332 |
+ exposedPort = strings.TrimSpace(exposedPort) |
|
| 333 |
+ cli.DockerCmd(c, "run", "--net=host", "busybox", "nc", "127.0.0.1", exposedPort) |
|
| 335 | 334 |
|
| 336 |
- dockerCmd(c, "rm", "-f", firstID) |
|
| 335 |
+ cli.DockerCmd(c, "rm", "-f", firstID) |
|
| 337 | 336 |
|
| 338 | 337 |
out, _, err := dockerCmdWithError("run", "--net=host", "busybox", "nc", "127.0.0.1", exposedPort)
|
| 339 | 338 |
// Port is still bound after the Container is removed |
| ... | ... |
@@ -342,19 +345,18 @@ func (s *DockerCLIPortSuite) TestPortExposeHostBinding(c *testing.T) {
|
| 342 | 342 |
|
| 343 | 343 |
func (s *DockerCLIPortSuite) TestPortBindingOnSandbox(c *testing.T) {
|
| 344 | 344 |
testRequires(c, DaemonIsLinux, NotUserNamespace) |
| 345 |
- dockerCmd(c, "network", "create", "--internal", "-d", "bridge", "internal-net") |
|
| 345 |
+ cli.DockerCmd(c, "network", "create", "--internal", "-d", "bridge", "internal-net") |
|
| 346 | 346 |
nr := getNetworkResource(c, "internal-net") |
| 347 | 347 |
assert.Equal(c, nr.Internal, true) |
| 348 | 348 |
|
| 349 |
- dockerCmd(c, "run", "--net", "internal-net", "-d", "--name", "c1", |
|
| 350 |
- "-p", "8080:8080", "busybox", "nc", "-l", "-p", "8080") |
|
| 351 |
- assert.Assert(c, waitRun("c1") == nil)
|
|
| 349 |
+ cli.DockerCmd(c, "run", "--net", "internal-net", "-d", "--name", "c1", "-p", "8080:8080", "busybox", "nc", "-l", "-p", "8080") |
|
| 350 |
+ cli.WaitRun(c, "c1") |
|
| 352 | 351 |
|
| 353 | 352 |
_, _, err := dockerCmdWithError("run", "--net=host", "busybox", "nc", "localhost", "8080")
|
| 354 | 353 |
assert.Assert(c, err != nil, "Port mapping on internal network is expected to fail") |
| 355 | 354 |
// Connect container to another normal bridge network |
| 356 |
- dockerCmd(c, "network", "create", "-d", "bridge", "foo-net") |
|
| 357 |
- dockerCmd(c, "network", "connect", "foo-net", "c1") |
|
| 355 |
+ cli.DockerCmd(c, "network", "create", "-d", "bridge", "foo-net") |
|
| 356 |
+ cli.DockerCmd(c, "network", "connect", "foo-net", "c1") |
|
| 358 | 357 |
|
| 359 | 358 |
_, _, err = dockerCmdWithError("run", "--net=host", "busybox", "nc", "localhost", "8080")
|
| 360 | 359 |
assert.Assert(c, err == nil, "Port mapping on the new network is expected to succeed") |