Browse code

IT for daemon restarts when container connected to multiple networks

Signed-off-by: Alessandro Boch <aboch@docker.com>
(cherry picked from commit e16e794805ec1e578951f271af7993d9619a4ede)

Alessandro Boch authored on 2015/10/31 06:51:02
Showing 1 changed files
... ...
@@ -662,3 +662,66 @@ func (s *DockerSuite) TestInspectApiMultipeNetworks(c *check.C) {
662 662
 	c.Assert(bridge.IPAddress, checker.Equals, versionedIP)
663 663
 	c.Assert(bridge.IPAddress, checker.Equals, inspect121.NetworkSettings.IPAddress)
664 664
 }
665
+
666
+func connectContainerToNetworks(c *check.C, d *Daemon, cName string, nws []string) {
667
+	// Run a container on the default network
668
+	out, err := d.Cmd("run", "-d", "--name", cName, "busybox", "top")
669
+	c.Assert(err, checker.IsNil, check.Commentf(out))
670
+
671
+	// Attach the container to other three networks
672
+	for _, nw := range nws {
673
+		out, err = d.Cmd("network", "create", nw)
674
+		c.Assert(err, checker.IsNil, check.Commentf(out))
675
+		out, err = d.Cmd("network", "connect", nw, cName)
676
+		c.Assert(err, checker.IsNil, check.Commentf(out))
677
+	}
678
+}
679
+
680
+func verifyContainerIsConnectedToNetworks(c *check.C, d *Daemon, cName string, nws []string) {
681
+	// Verify container is connected to all three networks
682
+	for _, nw := range nws {
683
+		out, err := d.Cmd("inspect", "-f", fmt.Sprintf("{{.NetworkSettings.Networks.%s}}", nw), cName)
684
+		c.Assert(err, checker.IsNil, check.Commentf(out))
685
+		c.Assert(out, checker.Not(checker.Equals), "<no value>\n")
686
+	}
687
+}
688
+
689
+func (s *DockerNetworkSuite) TestDockerNetworkMultipleNetworksGracefulDaemonRestart(c *check.C) {
690
+	cName := "bb"
691
+	nwList := []string{"nw1", "nw2", "nw3"}
692
+
693
+	s.d.Start()
694
+
695
+	connectContainerToNetworks(c, s.d, cName, nwList)
696
+	verifyContainerIsConnectedToNetworks(c, s.d, cName, nwList)
697
+
698
+	// Reload daemon
699
+	s.d.Restart()
700
+
701
+	_, err := s.d.Cmd("start", cName)
702
+	c.Assert(err, checker.IsNil)
703
+
704
+	verifyContainerIsConnectedToNetworks(c, s.d, cName, nwList)
705
+}
706
+
707
+func (s *DockerNetworkSuite) TestDockerNetworkMultipleNetworksUngracefulDaemonRestart(c *check.C) {
708
+	cName := "cc"
709
+	nwList := []string{"nw1", "nw2", "nw3"}
710
+
711
+	s.d.Start()
712
+
713
+	connectContainerToNetworks(c, s.d, cName, nwList)
714
+	verifyContainerIsConnectedToNetworks(c, s.d, cName, nwList)
715
+
716
+	// Kill daemon and restart
717
+	if err := s.d.cmd.Process.Kill(); err != nil {
718
+		c.Fatal(err)
719
+	}
720
+	s.d.Restart()
721
+
722
+	// Restart container
723
+	_, err := s.d.Cmd("start", cName)
724
+	c.Assert(err, checker.IsNil)
725
+
726
+	verifyContainerIsConnectedToNetworks(c, s.d, cName, nwList)
727
+}