|
@@ -0,0 +1,45 @@
|
|
|
|
+package network
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "context"
|
|
|
|
+ "strings"
|
|
|
|
+ "testing"
|
|
|
|
+ "time"
|
|
|
|
+
|
|
|
|
+ networktypes "github.com/docker/docker/api/types/network"
|
|
|
|
+ "github.com/docker/docker/api/types/versions"
|
|
|
|
+ ctr "github.com/docker/docker/integration/internal/container"
|
|
|
|
+ "github.com/docker/docker/integration/internal/network"
|
|
|
|
+ "gotest.tools/v3/assert"
|
|
|
|
+ "gotest.tools/v3/skip"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+func TestCreateWithMultiNetworks(t *testing.T) {
|
|
|
|
+ skip.If(t, testEnv.DaemonInfo.OSType == "windows")
|
|
|
|
+ skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.44"), "requires API v1.44")
|
|
|
|
+
|
|
|
|
+ ctx := setupTest(t)
|
|
|
|
+ apiClient := testEnv.APIClient()
|
|
|
|
+
|
|
|
|
+ network.CreateNoError(ctx, t, apiClient, "testnet1")
|
|
|
|
+ defer network.RemoveNoError(ctx, t, apiClient, "testnet1")
|
|
|
|
+
|
|
|
|
+ network.CreateNoError(ctx, t, apiClient, "testnet2")
|
|
|
|
+ defer network.RemoveNoError(ctx, t, apiClient, "testnet2")
|
|
|
|
+
|
|
|
|
+ attachCtx, cancel := context.WithTimeout(ctx, 1*time.Second)
|
|
|
|
+ defer cancel()
|
|
|
|
+ res := ctr.RunAttach(attachCtx, t, apiClient,
|
|
|
|
+ ctr.WithCmd("ip", "-o", "-4", "addr", "show"),
|
|
|
|
+ ctr.WithNetworkMode("testnet1"),
|
|
|
|
+ ctr.WithEndpointSettings("testnet1", &networktypes.EndpointSettings{}),
|
|
|
|
+ ctr.WithEndpointSettings("testnet2", &networktypes.EndpointSettings{}))
|
|
|
|
+
|
|
|
|
+ assert.Equal(t, res.ExitCode, 0)
|
|
|
|
+ assert.Equal(t, res.Stderr.String(), "")
|
|
|
|
+
|
|
|
|
+ // Only interfaces with an IPv4 address are printed by iproute2 when flag -4 is specified. Here, we should have two
|
|
|
|
+ // interfaces for testnet1 and testnet2, plus lo.
|
|
|
|
+ ifacesWithAddress := strings.Count(res.Stdout.String(), "\n")
|
|
|
|
+ assert.Equal(t, ifacesWithAddress, 3)
|
|
|
|
+}
|