|
@@ -9,10 +9,189 @@ import (
|
|
|
swarmtypes "github.com/docker/docker/api/types/swarm"
|
|
|
"github.com/docker/docker/client"
|
|
|
"github.com/docker/docker/integration/internal/swarm"
|
|
|
+ "github.com/docker/docker/internal/test/daemon"
|
|
|
"github.com/gotestyourself/gotestyourself/assert"
|
|
|
+ "github.com/gotestyourself/gotestyourself/icmd"
|
|
|
"github.com/gotestyourself/gotestyourself/poll"
|
|
|
)
|
|
|
|
|
|
+// delInterface removes given network interface
|
|
|
+func delInterface(t *testing.T, ifName string) {
|
|
|
+ icmd.RunCommand("ip", "link", "delete", ifName).Assert(t, icmd.Success)
|
|
|
+ icmd.RunCommand("iptables", "-t", "nat", "--flush").Assert(t, icmd.Success)
|
|
|
+ icmd.RunCommand("iptables", "--flush").Assert(t, icmd.Success)
|
|
|
+}
|
|
|
+
|
|
|
+func TestDaemonRestartWithLiveRestore(t *testing.T) {
|
|
|
+ d := daemon.New(t)
|
|
|
+ defer d.Stop(t)
|
|
|
+ d.Start(t)
|
|
|
+ d.Restart(t, "--live-restore=true",
|
|
|
+ "--default-address-pool", "base=175.30.0.0/16,size=16",
|
|
|
+ "--default-address-pool", "base=175.33.0.0/16,size=24")
|
|
|
+
|
|
|
+ // Verify bridge network's subnet
|
|
|
+ cli, err := d.NewClient()
|
|
|
+ assert.Assert(t, err)
|
|
|
+ defer cli.Close()
|
|
|
+ out, err := cli.NetworkInspect(context.Background(), "bridge", types.NetworkInspectOptions{})
|
|
|
+ assert.NilError(t, err)
|
|
|
+ // Make sure docker0 doesn't get override with new IP in live restore case
|
|
|
+ assert.Equal(t, out.IPAM.Config[0].Subnet, "172.18.0.0/16")
|
|
|
+}
|
|
|
+
|
|
|
+func TestDaemonDefaultNetworkPools(t *testing.T) {
|
|
|
+ // Remove docker0 bridge and the start daemon defining the predefined address pools
|
|
|
+ defaultNetworkBridge := "docker0"
|
|
|
+ delInterface(t, defaultNetworkBridge)
|
|
|
+ d := daemon.New(t)
|
|
|
+ defer d.Stop(t)
|
|
|
+ d.Start(t,
|
|
|
+ "--default-address-pool", "base=175.30.0.0/16,size=16",
|
|
|
+ "--default-address-pool", "base=175.33.0.0/16,size=24")
|
|
|
+
|
|
|
+ // Verify bridge network's subnet
|
|
|
+ cli, err := d.NewClient()
|
|
|
+ assert.Assert(t, err)
|
|
|
+ defer cli.Close()
|
|
|
+ out, err := cli.NetworkInspect(context.Background(), "bridge", types.NetworkInspectOptions{})
|
|
|
+ assert.NilError(t, err)
|
|
|
+ assert.Equal(t, out.IPAM.Config[0].Subnet, "175.30.0.0/16")
|
|
|
+
|
|
|
+ // Create a bridge network and verify its subnet is the second default pool
|
|
|
+ name := "elango"
|
|
|
+ networkCreate := types.NetworkCreate{
|
|
|
+ CheckDuplicate: false,
|
|
|
+ }
|
|
|
+ networkCreate.Driver = "bridge"
|
|
|
+ _, err = cli.NetworkCreate(context.Background(), name, networkCreate)
|
|
|
+ assert.NilError(t, err)
|
|
|
+ out, err = cli.NetworkInspect(context.Background(), name, types.NetworkInspectOptions{})
|
|
|
+ assert.NilError(t, err)
|
|
|
+ assert.Equal(t, out.IPAM.Config[0].Subnet, "175.33.0.0/24")
|
|
|
+
|
|
|
+ // Create a bridge network and verify its subnet is the third default pool
|
|
|
+ name = "saanvi"
|
|
|
+ networkCreate = types.NetworkCreate{
|
|
|
+ CheckDuplicate: false,
|
|
|
+ }
|
|
|
+ networkCreate.Driver = "bridge"
|
|
|
+ _, err = cli.NetworkCreate(context.Background(), name, networkCreate)
|
|
|
+ assert.NilError(t, err)
|
|
|
+ out, err = cli.NetworkInspect(context.Background(), name, types.NetworkInspectOptions{})
|
|
|
+ assert.NilError(t, err)
|
|
|
+ assert.Equal(t, out.IPAM.Config[0].Subnet, "175.33.1.0/24")
|
|
|
+ delInterface(t, defaultNetworkBridge)
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+func TestDaemonRestartWithExistingNetwork(t *testing.T) {
|
|
|
+ defaultNetworkBridge := "docker0"
|
|
|
+ d := daemon.New(t)
|
|
|
+ d.Start(t)
|
|
|
+ defer d.Stop(t)
|
|
|
+ // Verify bridge network's subnet
|
|
|
+ cli, err := d.NewClient()
|
|
|
+ assert.Assert(t, err)
|
|
|
+ defer cli.Close()
|
|
|
+
|
|
|
+ // Create a bridge network
|
|
|
+ name := "elango"
|
|
|
+ networkCreate := types.NetworkCreate{
|
|
|
+ CheckDuplicate: false,
|
|
|
+ }
|
|
|
+ networkCreate.Driver = "bridge"
|
|
|
+ _, err = cli.NetworkCreate(context.Background(), name, networkCreate)
|
|
|
+ assert.NilError(t, err)
|
|
|
+ out, err := cli.NetworkInspect(context.Background(), name, types.NetworkInspectOptions{})
|
|
|
+ assert.NilError(t, err)
|
|
|
+ networkip := out.IPAM.Config[0].Subnet
|
|
|
+
|
|
|
+ // Restart daemon with default address pool option
|
|
|
+ d.Restart(t,
|
|
|
+ "--default-address-pool", "base=175.30.0.0/16,size=16",
|
|
|
+ "--default-address-pool", "base=175.33.0.0/16,size=24")
|
|
|
+
|
|
|
+ out1, err := cli.NetworkInspect(context.Background(), name, types.NetworkInspectOptions{})
|
|
|
+ assert.NilError(t, err)
|
|
|
+ assert.Equal(t, out1.IPAM.Config[0].Subnet, networkip)
|
|
|
+ delInterface(t, defaultNetworkBridge)
|
|
|
+}
|
|
|
+
|
|
|
+func TestDaemonRestartWithExistingNetworkWithDefaultPoolRange(t *testing.T) {
|
|
|
+ defaultNetworkBridge := "docker0"
|
|
|
+ d := daemon.New(t)
|
|
|
+ d.Start(t)
|
|
|
+ defer d.Stop(t)
|
|
|
+ // Verify bridge network's subnet
|
|
|
+ cli, err := d.NewClient()
|
|
|
+ assert.Assert(t, err)
|
|
|
+ defer cli.Close()
|
|
|
+
|
|
|
+ // Create a bridge network
|
|
|
+ name := "elango"
|
|
|
+ networkCreate := types.NetworkCreate{
|
|
|
+ CheckDuplicate: false,
|
|
|
+ }
|
|
|
+ networkCreate.Driver = "bridge"
|
|
|
+ _, err = cli.NetworkCreate(context.Background(), name, networkCreate)
|
|
|
+ assert.NilError(t, err)
|
|
|
+ out, err := cli.NetworkInspect(context.Background(), name, types.NetworkInspectOptions{})
|
|
|
+ assert.NilError(t, err)
|
|
|
+ networkip := out.IPAM.Config[0].Subnet
|
|
|
+
|
|
|
+ // Create a bridge network
|
|
|
+ name = "sthira"
|
|
|
+ networkCreate = types.NetworkCreate{
|
|
|
+ CheckDuplicate: false,
|
|
|
+ }
|
|
|
+ networkCreate.Driver = "bridge"
|
|
|
+ _, err = cli.NetworkCreate(context.Background(), name, networkCreate)
|
|
|
+ assert.NilError(t, err)
|
|
|
+ out, err = cli.NetworkInspect(context.Background(), name, types.NetworkInspectOptions{})
|
|
|
+ assert.NilError(t, err)
|
|
|
+ networkip2 := out.IPAM.Config[0].Subnet
|
|
|
+
|
|
|
+ // Restart daemon with default address pool option
|
|
|
+ d.Restart(t,
|
|
|
+ "--default-address-pool", "base=175.18.0.0/16,size=16",
|
|
|
+ "--default-address-pool", "base=175.19.0.0/16,size=24")
|
|
|
+
|
|
|
+ // Create a bridge network
|
|
|
+ name = "saanvi"
|
|
|
+ networkCreate = types.NetworkCreate{
|
|
|
+ CheckDuplicate: false,
|
|
|
+ }
|
|
|
+ networkCreate.Driver = "bridge"
|
|
|
+ _, err = cli.NetworkCreate(context.Background(), name, networkCreate)
|
|
|
+ assert.NilError(t, err)
|
|
|
+ out1, err := cli.NetworkInspect(context.Background(), name, types.NetworkInspectOptions{})
|
|
|
+ assert.NilError(t, err)
|
|
|
+
|
|
|
+ assert.Check(t, (out1.IPAM.Config[0].Subnet != networkip))
|
|
|
+ assert.Check(t, (out1.IPAM.Config[0].Subnet != networkip2))
|
|
|
+ delInterface(t, defaultNetworkBridge)
|
|
|
+}
|
|
|
+
|
|
|
+func TestDaemonWithBipAndDefaultNetworkPool(t *testing.T) {
|
|
|
+ defaultNetworkBridge := "docker0"
|
|
|
+ d := daemon.New(t)
|
|
|
+ defer d.Stop(t)
|
|
|
+ d.Start(t, "--bip=172.60.0.1/16",
|
|
|
+ "--default-address-pool", "base=175.30.0.0/16,size=16",
|
|
|
+ "--default-address-pool", "base=175.33.0.0/16,size=24")
|
|
|
+
|
|
|
+ // Verify bridge network's subnet
|
|
|
+ cli, err := d.NewClient()
|
|
|
+ assert.Assert(t, err)
|
|
|
+ defer cli.Close()
|
|
|
+ out, err := cli.NetworkInspect(context.Background(), "bridge", types.NetworkInspectOptions{})
|
|
|
+ assert.NilError(t, err)
|
|
|
+ // Make sure BIP IP doesn't get override with new default address pool .
|
|
|
+ assert.Equal(t, out.IPAM.Config[0].Subnet, "172.60.0.1/16")
|
|
|
+ delInterface(t, defaultNetworkBridge)
|
|
|
+}
|
|
|
+
|
|
|
func TestServiceWithPredefinedNetwork(t *testing.T) {
|
|
|
defer setupTest(t)()
|
|
|
d := swarm.NewSwarm(t, testEnv)
|