package network // import "github.com/docker/docker/integration/network" import ( "context" "testing" "github.com/docker/docker/api/types" "github.com/docker/docker/integration/internal/network" "github.com/docker/docker/integration/internal/swarm" "gotest.tools/v3/assert" "gotest.tools/v3/poll" "gotest.tools/v3/skip" ) func TestInspectNetwork(t *testing.T) { skip.If(t, testEnv.OSType == "windows", "FIXME") skip.If(t, testEnv.IsRootless, "rootless mode doesn't support Swarm-mode") defer setupTest(t)() d := swarm.NewSwarm(t, testEnv) defer d.Stop(t) c := d.NewClientT(t) defer c.Close() networkName := "Overlay" + t.Name() overlayID := network.CreateNoError(context.Background(), t, c, networkName, network.WithDriver("overlay"), network.WithCheckDuplicate(), ) var instances uint64 = 2 serviceName := "TestService" + t.Name() serviceID := swarm.CreateService(t, d, swarm.ServiceWithReplicas(instances), swarm.ServiceWithName(serviceName), swarm.ServiceWithNetwork(networkName), ) poll.WaitOn(t, swarm.RunningTasksCount(c, serviceID, instances), swarm.ServicePoll) tests := []struct { name string network string opts types.NetworkInspectOptions }{ { name: "full network id", network: overlayID, opts: types.NetworkInspectOptions{ Verbose: true, }, }, { name: "partial network id", network: overlayID[0:11], opts: types.NetworkInspectOptions{ Verbose: true, }, }, { name: "network name", network: networkName, opts: types.NetworkInspectOptions{ Verbose: true, }, }, { name: "network name and swarm scope", network: networkName, opts: types.NetworkInspectOptions{ Verbose: true, Scope: "swarm", }, }, } ctx := context.Background() for _, tc := range tests { tc := tc t.Run(tc.name, func(t *testing.T) { nw, err := c.NetworkInspect(ctx, tc.network, tc.opts) assert.NilError(t, err) if service, ok := nw.Services[serviceName]; ok { assert.Equal(t, len(service.Tasks), int(instances)) } assert.Assert(t, nw.IPAM.Config != nil) for _, cfg := range nw.IPAM.Config { assert.Assert(t, cfg.Gateway != "") assert.Assert(t, cfg.Subnet != "") } }) } // TODO find out why removing networks is needed; other tests fail if the network is not removed, even though they run on a new daemon. err := c.ServiceRemove(ctx, serviceID) assert.NilError(t, err) poll.WaitOn(t, swarm.NoTasksForService(ctx, c, serviceID), swarm.ServicePoll) err = c.NetworkRemove(ctx, overlayID) assert.NilError(t, err) poll.WaitOn(t, network.IsRemoved(ctx, c, overlayID), swarm.NetworkPoll) }