Browse code

Integration tests for --ip daemon option

Signed-off-by: Madhu Venugopal <madhu@docker.com>

Madhu Venugopal authored on 2015/04/29 02:26:59
Showing 1 changed files
... ...
@@ -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