Переглянути джерело

Merge pull request #39671 from arkodg/fix-flaky-addr-pool-init-test

Fix flaky TestServiceWithDefaultAddressPoolInit
Tibor Vass 5 роки тому
батько
коміт
000b563006
1 змінених файлів з 46 додано та 56 видалено
  1. 46 56
      integration/network/service_test.go

+ 46 - 56
integration/network/service_test.go

@@ -215,7 +215,7 @@ func TestServiceWithPredefinedNetwork(t *testing.T) {
 		swarm.ServiceWithNetwork(hostName),
 		swarm.ServiceWithNetwork(hostName),
 	)
 	)
 
 
-	poll.WaitOn(t, serviceRunningCount(c, serviceID, instances), swarm.ServicePoll)
+	poll.WaitOn(t, swarm.RunningTasksCount(c, serviceID, instances), swarm.ServicePoll)
 
 
 	_, _, err := c.ServiceInspectWithRaw(context.Background(), serviceID, types.ServiceInspectOptions{})
 	_, _, err := c.ServiceInspectWithRaw(context.Background(), serviceID, types.ServiceInspectOptions{})
 	assert.NilError(t, err)
 	assert.NilError(t, err)
@@ -254,7 +254,7 @@ func TestServiceRemoveKeepsIngressNetwork(t *testing.T) {
 		}),
 		}),
 	)
 	)
 
 
-	poll.WaitOn(t, serviceRunningCount(c, serviceID, instances), swarm.ServicePoll)
+	poll.WaitOn(t, swarm.RunningTasksCount(c, serviceID, instances), swarm.ServicePoll)
 
 
 	ctx := context.Background()
 	ctx := context.Background()
 	_, _, err := c.ServiceInspectWithRaw(ctx, serviceID, types.ServiceInspectOptions{})
 	_, _, err := c.ServiceInspectWithRaw(ctx, serviceID, types.ServiceInspectOptions{})
@@ -279,20 +279,6 @@ func TestServiceRemoveKeepsIngressNetwork(t *testing.T) {
 	assert.Assert(t, ok, "ingress-sbox not present in ingress network")
 	assert.Assert(t, ok, "ingress-sbox not present in ingress network")
 }
 }
 
 
-func serviceRunningCount(client client.ServiceAPIClient, serviceID string, instances uint64) func(log poll.LogT) poll.Result {
-	return func(log poll.LogT) poll.Result {
-		services, err := client.ServiceList(context.Background(), types.ServiceListOptions{})
-		if err != nil {
-			return poll.Error(err)
-		}
-
-		if len(services) != int(instances) {
-			return poll.Continue("Service count at %d waiting for %d", len(services), instances)
-		}
-		return poll.Success()
-	}
-}
-
 func swarmIngressReady(client client.NetworkAPIClient) func(log poll.LogT) poll.Result {
 func swarmIngressReady(client client.NetworkAPIClient) func(log poll.LogT) poll.Result {
 	return func(log poll.LogT) poll.Result {
 	return func(log poll.LogT) poll.Result {
 		netInfo, err := client.NetworkInspect(context.Background(), ingressNet, types.NetworkInspectOptions{
 		netInfo, err := client.NetworkInspect(context.Background(), ingressNet, types.NetworkInspectOptions{
@@ -333,76 +319,83 @@ func TestServiceWithDataPathPortInit(t *testing.T) {
 	skip.If(t, testEnv.OSType == "windows")
 	skip.If(t, testEnv.OSType == "windows")
 	skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "DataPathPort was added in API v1.40")
 	skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "DataPathPort was added in API v1.40")
 	defer setupTest(t)()
 	defer setupTest(t)()
-	var ops = []func(*daemon.Daemon){}
 	var datapathPort uint32 = 7777
 	var datapathPort uint32 = 7777
-	ops = append(ops, daemon.WithSwarmDataPathPort(datapathPort))
-	d := swarm.NewSwarm(t, testEnv, ops...)
-
+	d := swarm.NewSwarm(t, testEnv, daemon.WithSwarmDataPathPort(datapathPort))
 	c := d.NewClientT(t)
 	c := d.NewClientT(t)
-	defer c.Close()
-
+	ctx := context.Background()
 	// Create a overlay network
 	// Create a overlay network
 	name := "saanvisthira" + t.Name()
 	name := "saanvisthira" + t.Name()
-	network.CreateNoError(context.Background(), t, c, name,
+	overlayID := network.CreateNoError(context.Background(), t, c, name,
 		network.WithDriver("overlay"))
 		network.WithDriver("overlay"))
 
 
 	var instances uint64 = 1
 	var instances uint64 = 1
 	serviceID := swarm.CreateService(t, d,
 	serviceID := swarm.CreateService(t, d,
 		swarm.ServiceWithReplicas(instances),
 		swarm.ServiceWithReplicas(instances),
+		swarm.ServiceWithName(name),
 		swarm.ServiceWithNetwork(name),
 		swarm.ServiceWithNetwork(name),
 	)
 	)
 
 
-	poll.WaitOn(t, serviceRunningCount(c, serviceID, instances), swarm.ServicePoll)
+	poll.WaitOn(t, swarm.RunningTasksCount(c, serviceID, instances), swarm.ServicePoll)
 
 
 	info := d.Info(t)
 	info := d.Info(t)
 	assert.Equal(t, info.Swarm.Cluster.DataPathPort, datapathPort)
 	assert.Equal(t, info.Swarm.Cluster.DataPathPort, datapathPort)
-	err := c.ServiceRemove(context.Background(), serviceID)
+	err := c.ServiceRemove(ctx, serviceID)
+	assert.NilError(t, err)
+	poll.WaitOn(t, noServices(ctx, c), swarm.ServicePoll)
+	poll.WaitOn(t, swarm.NoTasks(ctx, c), swarm.ServicePoll)
+	err = c.NetworkRemove(ctx, overlayID)
+	assert.NilError(t, err)
+	c.Close()
+	err = d.SwarmLeave(t, true)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
-	d.SwarmLeave(t, true)
 	d.Stop(t)
 	d.Stop(t)
 
 
 	// Clean up , set it back to original one to make sure other tests don't fail
 	// Clean up , set it back to original one to make sure other tests don't fail
 	// call without datapath port option.
 	// call without datapath port option.
-	ops = []func(*daemon.Daemon){}
-	d = swarm.NewSwarm(t, testEnv, ops...)
-	c = d.NewClientT(t)
-
+	d = swarm.NewSwarm(t, testEnv)
+	defer d.Stop(t)
+	nc := d.NewClientT(t)
+	defer nc.Close()
 	// Create a overlay network
 	// Create a overlay network
-	name = "saanvisthira" + t.Name()
-	network.CreateNoError(context.Background(), t, c, name,
+	name = "not-saanvisthira" + t.Name()
+	overlayID = network.CreateNoError(ctx, t, nc, name,
 		network.WithDriver("overlay"))
 		network.WithDriver("overlay"))
 
 
 	serviceID = swarm.CreateService(t, d,
 	serviceID = swarm.CreateService(t, d,
 		swarm.ServiceWithReplicas(instances),
 		swarm.ServiceWithReplicas(instances),
+		swarm.ServiceWithName(name),
 		swarm.ServiceWithNetwork(name),
 		swarm.ServiceWithNetwork(name),
 	)
 	)
 
 
-	poll.WaitOn(t, serviceRunningCount(c, serviceID, instances), swarm.ServicePoll)
+	poll.WaitOn(t, swarm.RunningTasksCount(nc, serviceID, instances), swarm.ServicePoll)
 
 
 	info = d.Info(t)
 	info = d.Info(t)
 	var defaultDataPathPort uint32 = 4789
 	var defaultDataPathPort uint32 = 4789
 	assert.Equal(t, info.Swarm.Cluster.DataPathPort, defaultDataPathPort)
 	assert.Equal(t, info.Swarm.Cluster.DataPathPort, defaultDataPathPort)
-	err = c.ServiceRemove(context.Background(), serviceID)
+	err = nc.ServiceRemove(ctx, serviceID)
+	assert.NilError(t, err)
+	poll.WaitOn(t, noServices(ctx, nc), swarm.ServicePoll)
+	poll.WaitOn(t, swarm.NoTasks(ctx, nc), swarm.ServicePoll)
+	err = nc.NetworkRemove(ctx, overlayID)
+	assert.NilError(t, err)
+	err = d.SwarmLeave(t, true)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
-	d.SwarmLeave(t, true)
-	defer d.Stop(t)
 }
 }
 
 
 func TestServiceWithDefaultAddressPoolInit(t *testing.T) {
 func TestServiceWithDefaultAddressPoolInit(t *testing.T) {
 	skip.If(t, testEnv.OSType == "windows")
 	skip.If(t, testEnv.OSType == "windows")
 	defer setupTest(t)()
 	defer setupTest(t)()
-	var ops = []func(*daemon.Daemon){}
-	ipAddr := []string{"20.20.0.0/16"}
-	ops = append(ops, daemon.WithSwarmDefaultAddrPool(ipAddr))
-	ops = append(ops, daemon.WithSwarmDefaultAddrPoolSubnetSize(24))
-	d := swarm.NewSwarm(t, testEnv, ops...)
-
+	d := swarm.NewSwarm(t, testEnv,
+		daemon.WithSwarmDefaultAddrPool([]string{"20.20.0.0/16"}),
+		daemon.WithSwarmDefaultAddrPoolSubnetSize(24))
+	defer d.Stop(t)
 	cli := d.NewClientT(t)
 	cli := d.NewClientT(t)
 	defer cli.Close()
 	defer cli.Close()
+	ctx := context.Background()
 
 
 	// Create a overlay network
 	// Create a overlay network
 	name := "sthira" + t.Name()
 	name := "sthira" + t.Name()
-	overlayID := network.CreateNoError(context.Background(), t, cli, name,
+	overlayID := network.CreateNoError(ctx, t, cli, name,
 		network.WithDriver("overlay"),
 		network.WithDriver("overlay"),
 		network.WithCheckDuplicate(),
 		network.WithCheckDuplicate(),
 	)
 	)
@@ -415,27 +408,24 @@ func TestServiceWithDefaultAddressPoolInit(t *testing.T) {
 		swarm.ServiceWithNetwork(name),
 		swarm.ServiceWithNetwork(name),
 	)
 	)
 
 
-	poll.WaitOn(t, serviceRunningCount(cli, serviceID, instances), swarm.ServicePoll)
+	poll.WaitOn(t, swarm.RunningTasksCount(cli, serviceID, instances), swarm.ServicePoll)
 
 
-	_, _, err := cli.ServiceInspectWithRaw(context.Background(), serviceID, types.ServiceInspectOptions{})
+	_, _, err := cli.ServiceInspectWithRaw(ctx, serviceID, types.ServiceInspectOptions{})
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
-	out, err := cli.NetworkInspect(context.Background(), overlayID, types.NetworkInspectOptions{Verbose: true})
+	out, err := cli.NetworkInspect(ctx, overlayID, types.NetworkInspectOptions{Verbose: true})
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 	t.Logf("%s: NetworkInspect: %+v", t.Name(), out)
 	t.Logf("%s: NetworkInspect: %+v", t.Name(), out)
 	assert.Assert(t, len(out.IPAM.Config) > 0)
 	assert.Assert(t, len(out.IPAM.Config) > 0)
 	assert.Equal(t, out.IPAM.Config[0].Subnet, "20.20.0.0/24")
 	assert.Equal(t, out.IPAM.Config[0].Subnet, "20.20.0.0/24")
 
 
-	err = cli.ServiceRemove(context.Background(), serviceID)
+	err = cli.ServiceRemove(ctx, serviceID)
+	poll.WaitOn(t, noServices(ctx, cli), swarm.ServicePoll)
+	poll.WaitOn(t, swarm.NoTasks(ctx, cli), swarm.ServicePoll)
+	assert.NilError(t, err)
+	err = cli.NetworkRemove(ctx, overlayID)
+	assert.NilError(t, err)
+	err = d.SwarmLeave(t, true)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
-	d.SwarmLeave(t, true)
-	d.Stop(t)
 
 
-	// Clean up , set it back to original one to make sure other tests don't fail
-	ipAddr = []string{"10.0.0.0/8"}
-	ops = append(ops, daemon.WithSwarmDefaultAddrPool(ipAddr))
-	ops = append(ops, daemon.WithSwarmDefaultAddrPoolSubnetSize(24))
-	d = swarm.NewSwarm(t, testEnv, ops...)
-	d.SwarmLeave(t, true)
-	defer d.Stop(t)
 }
 }