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) }