Signed-off-by: Madhu Venugopal <madhu@docker.com>
| ... | ... |
@@ -10,6 +10,7 @@ import ( |
| 10 | 10 |
"os" |
| 11 | 11 |
"os/exec" |
| 12 | 12 |
"path/filepath" |
| 13 |
+ "regexp" |
|
| 13 | 14 |
"strconv" |
| 14 | 15 |
"strings" |
| 15 | 16 |
"time" |
| ... | ... |
@@ -489,11 +490,11 @@ func (s *DockerDaemonSuite) TestDaemonBridgeExternal(c *check.C) {
|
| 489 | 489 |
containerIp)) |
| 490 | 490 |
|
| 491 | 491 |
// Reset to Defaults |
| 492 |
- deleteBridge(c, bridgeName) |
|
| 492 |
+ deleteInterface(c, bridgeName) |
|
| 493 | 493 |
d.Restart() |
| 494 | 494 |
} |
| 495 | 495 |
|
| 496 |
-func deleteBridge(c *check.C, bridge string) {
|
|
| 496 |
+func deleteInterface(c *check.C, bridge string) {
|
|
| 497 | 497 |
ifCmd := exec.Command("ip", "link", "delete", bridge)
|
| 498 | 498 |
_, _, _, err := runCommandWithStdoutStderr(ifCmd) |
| 499 | 499 |
c.Assert(err, check.IsNil) |
| ... | ... |
@@ -515,7 +516,7 @@ func (s *DockerDaemonSuite) TestDaemonBridgeIP(c *check.C) {
|
| 515 | 515 |
// 7. Stop the Docker Daemon (via defered action) |
| 516 | 516 |
|
| 517 | 517 |
defaultNetworkBridge := "docker0" |
| 518 |
- deleteBridge(c, defaultNetworkBridge) |
|
| 518 |
+ deleteInterface(c, defaultNetworkBridge) |
|
| 519 | 519 |
|
| 520 | 520 |
d := s.d |
| 521 | 521 |
|
| ... | ... |
@@ -553,7 +554,7 @@ func (s *DockerDaemonSuite) TestDaemonBridgeIP(c *check.C) {
|
| 553 | 553 |
containerIp)) |
| 554 | 554 |
|
| 555 | 555 |
// Reset to Defaults |
| 556 |
- deleteBridge(c, defaultNetworkBridge) |
|
| 556 |
+ deleteInterface(c, defaultNetworkBridge) |
|
| 557 | 557 |
d.Restart() |
| 558 | 558 |
pingContainers(c) |
| 559 | 559 |
} |
| ... | ... |
@@ -585,7 +586,48 @@ func (s *DockerDaemonSuite) TestDaemonBridgeFixedCidr(c *check.C) {
|
| 585 | 585 |
} |
| 586 | 586 |
|
| 587 | 587 |
// Reset to Defaults |
| 588 |
- deleteBridge(c, bridgeName) |
|
| 588 |
+ deleteInterface(c, bridgeName) |
|
| 589 |
+ d.Restart() |
|
| 590 |
+} |
|
| 591 |
+ |
|
| 592 |
+func (s *DockerDaemonSuite) TestDaemonIP(c *check.C) {
|
|
| 593 |
+ d := s.d |
|
| 594 |
+ |
|
| 595 |
+ ipStr := "192.170.1.1/24" |
|
| 596 |
+ ip, _, _ := net.ParseCIDR(ipStr) |
|
| 597 |
+ args := []string{"--ip", ip.String()}
|
|
| 598 |
+ err := d.StartWithBusybox(args...) |
|
| 599 |
+ c.Assert(err, check.IsNil) |
|
| 600 |
+ |
|
| 601 |
+ out, err := d.Cmd("run", "-d", "-p", "8000:8000", "busybox", "top")
|
|
| 602 |
+ c.Assert(err, check.Not(check.IsNil), |
|
| 603 |
+ check.Commentf("Running a container must fail with an invalid --ip option"))
|
|
| 604 |
+ c.Assert(strings.Contains(out, "Error starting userland proxy"), check.Equals, true) |
|
| 605 |
+ |
|
| 606 |
+ ifName := "dummy" |
|
| 607 |
+ args = []string{"link", "add", "name", ifName, "type", "dummy"}
|
|
| 608 |
+ ipLinkCmd := exec.Command("ip", args...)
|
|
| 609 |
+ _, _, _, err = runCommandWithStdoutStderr(ipLinkCmd) |
|
| 610 |
+ c.Assert(err, check.IsNil) |
|
| 611 |
+ |
|
| 612 |
+ ifCmd := exec.Command("ifconfig", ifName, ipStr, "up")
|
|
| 613 |
+ _, _, _, err = runCommandWithStdoutStderr(ifCmd) |
|
| 614 |
+ c.Assert(err, check.IsNil) |
|
| 615 |
+ |
|
| 616 |
+ _, err = d.Cmd("run", "-d", "-p", "8000:8000", "busybox", "top")
|
|
| 617 |
+ c.Assert(err, check.IsNil) |
|
| 618 |
+ |
|
| 619 |
+ ipTablesCmd := exec.Command("iptables", "-t", "nat", "-nvL")
|
|
| 620 |
+ out, _, err = runCommandWithOutput(ipTablesCmd) |
|
| 621 |
+ c.Assert(err, check.IsNil) |
|
| 622 |
+ |
|
| 623 |
+ regex := fmt.Sprintf("DNAT.*%s.*dpt:8000", ip.String())
|
|
| 624 |
+ matched, _ := regexp.MatchString(regex, out) |
|
| 625 |
+ c.Assert(matched, check.Equals, true, |
|
| 626 |
+ check.Commentf("iptables output should have contained %q, but was %q", regex, out))
|
|
| 627 |
+ |
|
| 628 |
+ // Reset to Defaults |
|
| 629 |
+ deleteInterface(c, ifName) |
|
| 589 | 630 |
d.Restart() |
| 590 | 631 |
} |
| 591 | 632 |
|