Signed-off-by: Alessandro Boch <aboch@docker.com>
(cherry picked from commit e16e794805ec1e578951f271af7993d9619a4ede)
... | ... |
@@ -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 |
+} |