github.com/pwn-term/docker@v0.0.0-20210616085119-6e977cce2565/moby/integration-cli/docker_cli_netmode_test.go (about) 1 package main 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/docker/docker/runconfig" 8 "gotest.tools/v3/assert" 9 ) 10 11 // GH14530. Validates combinations of --net= with other options 12 13 // stringCheckPS is how the output of PS starts in order to validate that 14 // the command executed in a container did really run PS correctly. 15 const stringCheckPS = "PID USER" 16 17 // DockerCmdWithFail executes a docker command that is supposed to fail and returns 18 // the output, the exit code. If the command returns a Nil error, it will fail and 19 // stop the tests. 20 func dockerCmdWithFail(c *testing.T, args ...string) (string, int) { 21 out, status, err := dockerCmdWithError(args...) 22 assert.Assert(c, err != nil, "%v", out) 23 return out, status 24 } 25 26 func (s *DockerSuite) TestNetHostnameWithNetHost(c *testing.T) { 27 testRequires(c, DaemonIsLinux, NotUserNamespace) 28 29 out, _ := dockerCmd(c, "run", "--net=host", "busybox", "ps") 30 assert.Assert(c, strings.Contains(out, stringCheckPS)) 31 } 32 33 func (s *DockerSuite) TestNetHostname(c *testing.T) { 34 testRequires(c, DaemonIsLinux) 35 36 out, _ := dockerCmd(c, "run", "-h=name", "busybox", "ps") 37 assert.Assert(c, strings.Contains(out, stringCheckPS)) 38 out, _ = dockerCmd(c, "run", "-h=name", "--net=bridge", "busybox", "ps") 39 assert.Assert(c, strings.Contains(out, stringCheckPS)) 40 out, _ = dockerCmd(c, "run", "-h=name", "--net=none", "busybox", "ps") 41 assert.Assert(c, strings.Contains(out, stringCheckPS)) 42 out, _ = dockerCmdWithFail(c, "run", "-h=name", "--net=container:other", "busybox", "ps") 43 assert.Assert(c, strings.Contains(out, runconfig.ErrConflictNetworkHostname.Error())) 44 out, _ = dockerCmdWithFail(c, "run", "--net=container", "busybox", "ps") 45 assert.Assert(c, strings.Contains(out, "invalid container format container:<name|id>")) 46 out, _ = dockerCmdWithFail(c, "run", "--net=weird", "busybox", "ps") 47 assert.Assert(c, strings.Contains(strings.ToLower(out), "not found")) 48 } 49 50 func (s *DockerSuite) TestConflictContainerNetworkAndLinks(c *testing.T) { 51 testRequires(c, DaemonIsLinux) 52 53 out, _ := dockerCmdWithFail(c, "run", "--net=container:other", "--link=zip:zap", "busybox", "ps") 54 assert.Assert(c, strings.Contains(out, runconfig.ErrConflictContainerNetworkAndLinks.Error())) 55 } 56 57 func (s *DockerSuite) TestConflictContainerNetworkHostAndLinks(c *testing.T) { 58 testRequires(c, DaemonIsLinux, NotUserNamespace) 59 60 out, _ := dockerCmdWithFail(c, "run", "--net=host", "--link=zip:zap", "busybox", "ps") 61 assert.Assert(c, strings.Contains(out, runconfig.ErrConflictHostNetworkAndLinks.Error())) 62 } 63 64 func (s *DockerSuite) TestConflictNetworkModeNetHostAndOptions(c *testing.T) { 65 testRequires(c, DaemonIsLinux, NotUserNamespace) 66 67 out, _ := dockerCmdWithFail(c, "run", "--net=host", "--mac-address=92:d0:c6:0a:29:33", "busybox", "ps") 68 assert.Assert(c, strings.Contains(out, runconfig.ErrConflictContainerNetworkAndMac.Error())) 69 } 70 71 func (s *DockerSuite) TestConflictNetworkModeAndOptions(c *testing.T) { 72 testRequires(c, DaemonIsLinux) 73 74 out, _ := dockerCmdWithFail(c, "run", "--net=container:other", "--dns=8.8.8.8", "busybox", "ps") 75 assert.Assert(c, strings.Contains(out, runconfig.ErrConflictNetworkAndDNS.Error())) 76 out, _ = dockerCmdWithFail(c, "run", "--net=container:other", "--add-host=name:8.8.8.8", "busybox", "ps") 77 assert.Assert(c, strings.Contains(out, runconfig.ErrConflictNetworkHosts.Error())) 78 out, _ = dockerCmdWithFail(c, "run", "--net=container:other", "--mac-address=92:d0:c6:0a:29:33", "busybox", "ps") 79 assert.Assert(c, strings.Contains(out, runconfig.ErrConflictContainerNetworkAndMac.Error())) 80 out, _ = dockerCmdWithFail(c, "run", "--net=container:other", "-P", "busybox", "ps") 81 assert.Assert(c, strings.Contains(out, runconfig.ErrConflictNetworkPublishPorts.Error())) 82 out, _ = dockerCmdWithFail(c, "run", "--net=container:other", "-p", "8080", "busybox", "ps") 83 assert.Assert(c, strings.Contains(out, runconfig.ErrConflictNetworkPublishPorts.Error())) 84 out, _ = dockerCmdWithFail(c, "run", "--net=container:other", "--expose", "8000-9000", "busybox", "ps") 85 assert.Assert(c, strings.Contains(out, runconfig.ErrConflictNetworkExposePorts.Error())) 86 }