bbcd662532
The API endpoint `/containers/create` accepts several EndpointsConfig since v1.22 but the daemon would error out in such case. This check is moved from the daemon to the api and is now applied only for API < 1.44, effectively allowing the daemon to create containers connected to several networks. Signed-off-by: Albin Kerouanton <albinker@gmail.com>
45 lines
1.5 KiB
Go
45 lines
1.5 KiB
Go
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)
|
|
}
|