From 91c2b12205dd8ad35d9d754e364c7b2f01a19aba Mon Sep 17 00:00:00 2001 From: Alex Stockinger Date: Thu, 27 Jan 2022 21:13:45 +0100 Subject: Make default options for newly created networks configurable Signed-off-by: Alex Stockinger Co-authored-by: Sergei Egorov Co-authored-by: Cory Snider --- integration/network/network_test.go | 74 +++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) (limited to 'integration') diff --git a/integration/network/network_test.go b/integration/network/network_test.go index 00603094a2..bfc6e2998e 100644 --- a/integration/network/network_test.go +++ b/integration/network/network_test.go @@ -4,12 +4,14 @@ import ( "bytes" "context" "encoding/json" + "fmt" "net/http" "os/exec" "strings" "testing" "github.com/docker/docker/api/types" + ntypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/integration/internal/container" "github.com/docker/docker/integration/internal/network" "github.com/docker/docker/testutil/daemon" @@ -175,3 +177,75 @@ func TestHostIPv4BridgeLabel(t *testing.T) { // Make sure the SNAT rule exists icmd.RunCommand("iptables", "-t", "nat", "-C", "POSTROUTING", "-s", out.IPAM.Config[0].Subnet, "!", "-o", bridgeName, "-j", "SNAT", "--to-source", ipv4SNATAddr).Assert(t, icmd.Success) } + +func TestDefaultNetworkOpts(t *testing.T) { + skip.If(t, testEnv.OSType == "windows") + skip.If(t, testEnv.IsRemoteDaemon) + skip.If(t, testEnv.IsRootless, "rootless mode has different view of network") + + tests := []struct { + name string + mtu int + configFrom bool + args []string + }{ + { + name: "default value", + mtu: 1500, + args: []string{}, + }, + { + name: "cmdline value", + mtu: 1234, + args: []string{"--default-network-opt", "bridge=com.docker.network.driver.mtu=1234"}, + }, + { + name: "config-from value", + configFrom: true, + mtu: 1233, + args: []string{"--default-network-opt", "bridge=com.docker.network.driver.mtu=1234"}, + }, + } + + for _, tc := range tests { + tc := tc + t.Run(tc.name, func(t *testing.T) { + d := daemon.New(t) + d.StartWithBusybox(t, tc.args...) + defer d.Stop(t) + c := d.NewClientT(t) + defer c.Close() + ctx := context.Background() + + if tc.configFrom { + // Create a new network config + network.CreateNoError(ctx, t, c, "from-net", func(create *types.NetworkCreate) { + create.ConfigOnly = true + create.Options = map[string]string{ + "com.docker.network.driver.mtu": fmt.Sprint(tc.mtu), + } + }) + defer c.NetworkRemove(ctx, "from-net") + } + + // Create a new network + networkName := "testnet" + network.CreateNoError(ctx, t, c, networkName, func(create *types.NetworkCreate) { + if tc.configFrom { + create.ConfigFrom = &ntypes.ConfigReference{ + Network: "from-net", + } + } + }) + defer c.NetworkRemove(ctx, networkName) + + // Start a container to inspect the MTU of its network interface + id1 := container.Run(ctx, t, c, container.WithNetworkMode(networkName)) + defer c.ContainerRemove(ctx, id1, types.ContainerRemoveOptions{Force: true}) + + result, err := container.Exec(ctx, c, id1, []string{"ip", "l", "show", "eth0"}) + assert.NilError(t, err) + assert.Check(t, is.Contains(result.Combined(), fmt.Sprintf(" mtu %d ", tc.mtu)), "Network MTU should have been set to %d", tc.mtu) + }) + } +} -- cgit v1.2.1