From f3f5ff9d837eecb97eeeb878f0bd416b6ab57cf2 Mon Sep 17 00:00:00 2001 From: Madhu Venugopal Date: Mon, 27 Apr 2015 13:16:33 -0700 Subject: [PATCH] Integration tests for --bridge daemon flag Signed-off-by: Madhu Venugopal --- integration-cli/docker_cli_daemon_test.go | 41 +++++++++++++++++++++++ integration-cli/docker_utils.go | 9 +++-- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/integration-cli/docker_cli_daemon_test.go b/integration-cli/docker_cli_daemon_test.go index e099995ad3..3ebc880a0c 100644 --- a/integration-cli/docker_cli_daemon_test.go +++ b/integration-cli/docker_cli_daemon_test.go @@ -6,6 +6,7 @@ import ( "encoding/json" "fmt" "io/ioutil" + "net" "os" "os/exec" "path/filepath" @@ -447,6 +448,46 @@ func (s *DockerDaemonSuite) TestDaemonExitOnFailure(c *check.C) { } } +func (s *DockerDaemonSuite) TestDaemonBridgeExternal(c *check.C) { + d := s.d + err := d.Start("--bridge", "nosuchbridge") + c.Assert(err, check.Not(check.IsNil), check.Commentf("--bridge option with an invalid bridge should cause the daemon to fail")) + + bridgeName := "external-bridge" + bridgeIp := "192.169.1.1/24" + _, bridgeIPNet, _ := net.ParseCIDR(bridgeIp) + + args := []string{"link", "add", "name", bridgeName, "type", "bridge"} + ipLinkCmd := exec.Command("ip", args...) + _, _, _, err = runCommandWithStdoutStderr(ipLinkCmd) + c.Assert(err, check.IsNil) + + ifCfgCmd := exec.Command("ifconfig", bridgeName, bridgeIp, "up") + _, _, _, err = runCommandWithStdoutStderr(ifCfgCmd) + c.Assert(err, check.IsNil) + + err = d.StartWithBusybox("--bridge", bridgeName) + c.Assert(err, check.IsNil) + + ipTablesSearchString := bridgeIPNet.String() + ipTablesCmd := exec.Command("iptables", "-t", "nat", "-nvL") + out, _, err := runCommandWithOutput(ipTablesCmd) + c.Assert(err, check.IsNil) + + c.Assert(strings.Contains(out, ipTablesSearchString), check.Equals, true, + check.Commentf("iptables output should have contained %q, but was %q", + ipTablesSearchString, out)) + + _, err = d.Cmd("run", "-d", "--name", "ExtContainer", "busybox", "top") + c.Assert(err, check.IsNil) + + containerIp := d.findContainerIP(c, "ExtContainer") + ip := net.ParseIP(containerIp) + c.Assert(bridgeIPNet.Contains(ip), check.Equals, true, + check.Commentf("Container IP-Address must be in the same subnet range : %s", + containerIp)) +} + func (s *DockerDaemonSuite) TestDaemonUlimitDefaults(c *check.C) { testRequires(c, NativeExecDriver) diff --git a/integration-cli/docker_utils.go b/integration-cli/docker_utils.go index 8386bb59ff..a29b6c5928 100644 --- a/integration-cli/docker_utils.go +++ b/integration-cli/docker_utils.go @@ -570,8 +570,9 @@ func dockerCmdInDirWithTimeout(timeout time.Duration, path string, args ...strin return out, status, err } -func findContainerIP(c *check.C, id string) string { - cmd := exec.Command(dockerBinary, "inspect", "--format='{{ .NetworkSettings.IPAddress }}'", id) +func findContainerIP(c *check.C, id string, vargs ...string) string { + args := append(vargs, "inspect", "--format='{{ .NetworkSettings.IPAddress }}'", id) + cmd := exec.Command(dockerBinary, args...) out, _, err := runCommandWithOutput(cmd) if err != nil { c.Fatal(err, out) @@ -580,6 +581,10 @@ func findContainerIP(c *check.C, id string) string { return strings.Trim(out, " \r\n'") } +func (d *Daemon) findContainerIP(c *check.C, id string) string { + return findContainerIP(c, id, "--host", d.sock()) +} + func getContainerCount() (int, error) { const containers = "Containers:"