Skip to content

Commit 79f1305

Browse files
Deflake TestDiscoveryServer when checking for created UserTasks (#52512) (#52883)
* Deflake TestDiscoveryServer when checking for created UserTasks The DiscoveryService is highly async and it might happen that only one of cluster was reported as an issue, even when right after another one is going to be reported. * decrease tick interval to 50ms * use assert in eventually loop * Update lib/srv/discovery/discovery_test.go --------- Co-authored-by: Zac Bergquist <zac.bergquist@goteleport.com>
1 parent 5104553 commit 79f1305

File tree

1 file changed

+47
-26
lines changed

1 file changed

+47
-26
lines changed

lib/srv/discovery/discovery_test.go

+47-26
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,8 @@ func TestDiscoveryServer(t *testing.T) {
369369
staticMatchers Matchers
370370
wantInstalledInstances []string
371371
wantDiscoveryConfigStatus *discoveryconfig.Status
372-
userTasksDiscoverCheck require.ValueAssertionFunc
373372
cloudClients cloud.Clients
373+
userTasksDiscoverCheck func(t *testing.T, userTasksClt services.UserTasks)
374374
ssmRunError error
375375
}{
376376
{
@@ -701,10 +701,9 @@ func TestDiscoveryServer(t *testing.T) {
701701
staticMatchers: Matchers{},
702702
discoveryConfig: discoveryConfigForUserTaskEC2Test,
703703
wantInstalledInstances: []string{},
704-
userTasksDiscoverCheck: func(tt require.TestingT, i1 interface{}, i2 ...interface{}) {
705-
existingTasks, ok := i1.([]*usertasksv1.UserTask)
706-
require.True(t, ok, "failed to get existing tasks: %T", i1)
707-
require.Len(t, existingTasks, 1)
704+
userTasksDiscoverCheck: func(t *testing.T, userTasksClt services.UserTasks) {
705+
atLeastOneUserTask := 1
706+
existingTasks := fetchAllUserTasks(t, userTasksClt, atLeastOneUserTask, 0)
708707
existingTask := existingTasks[0]
709708

710709
require.Equal(t, "OPEN", existingTask.GetSpec().State)
@@ -771,10 +770,10 @@ func TestDiscoveryServer(t *testing.T) {
771770
staticMatchers: Matchers{},
772771
discoveryConfig: discoveryConfigForUserTaskEKSTest,
773772
wantInstalledInstances: []string{},
774-
userTasksDiscoverCheck: func(tt require.TestingT, i1 interface{}, i2 ...interface{}) {
775-
existingTasks, ok := i1.([]*usertasksv1.UserTask)
776-
require.True(t, ok, "failed to get existing tasks: %T", i1)
777-
require.Len(t, existingTasks, 1)
773+
userTasksDiscoverCheck: func(t *testing.T, userTasksClt services.UserTasks) {
774+
atLeastOneUserTask := 1
775+
atLeastTwoTaskItems := 2
776+
existingTasks := fetchAllUserTasks(t, userTasksClt, atLeastOneUserTask, atLeastTwoTaskItems)
778777
existingTask := existingTasks[0]
779778

780779
require.Equal(t, "OPEN", existingTask.GetSpec().State)
@@ -841,10 +840,10 @@ func TestDiscoveryServer(t *testing.T) {
841840
staticMatchers: Matchers{},
842841
discoveryConfig: discoveryConfigWithAndWithoutAppDiscovery,
843842
wantInstalledInstances: []string{},
844-
userTasksDiscoverCheck: func(t require.TestingT, i1 interface{}, i2 ...interface{}) {
845-
existingTasks, ok := i1.([]*usertasksv1.UserTask)
846-
require.True(t, ok, "failed to get existing tasks: %T", i1)
847-
require.Len(t, existingTasks, 2)
843+
userTasksDiscoverCheck: func(t *testing.T, userTasksClt services.UserTasks) {
844+
atLeastOneUserTask := 2
845+
atLeastTwoTaskItems := 2
846+
existingTasks := fetchAllUserTasks(t, userTasksClt, atLeastOneUserTask, atLeastTwoTaskItems)
848847
existingTask := existingTasks[0]
849848
if existingTask.Spec.DiscoverEks.AppAutoDiscover == false {
850849
existingTask = existingTasks[1]
@@ -987,26 +986,48 @@ func TestDiscoveryServer(t *testing.T) {
987986
require.Equal(t, expectedValue, got.IntegrationDiscoveredResources[expectedKey])
988987
}
989988
return true
990-
}, 500*time.Millisecond, 50*time.Millisecond)
989+
}, 1*time.Second, 50*time.Millisecond)
991990
}
992991
if tc.userTasksDiscoverCheck != nil {
993-
var allUserTasks []*usertasksv1.UserTask
994-
var nextToken string
995-
for {
996-
var userTasks []*usertasksv1.UserTask
997-
userTasks, nextToken, err = tlsServer.Auth().UserTasks.ListUserTasks(context.Background(), 0, "", &usertasksv1.ListUserTasksFilters{})
998-
require.NoError(t, err)
999-
allUserTasks = append(allUserTasks, userTasks...)
1000-
if nextToken == "" {
1001-
break
1002-
}
1003-
}
1004-
tc.userTasksDiscoverCheck(t, allUserTasks)
992+
tc.userTasksDiscoverCheck(t, tlsServer.Auth().UserTasks)
1005993
}
1006994
})
1007995
}
1008996
}
1009997

998+
func fetchAllUserTasks(t *testing.T, userTasksClt services.UserTasks, minUserTasks, minUserTaskResources int) []*usertasksv1.UserTask {
999+
var existingTasks []*usertasksv1.UserTask
1000+
require.EventuallyWithT(t, func(t *assert.CollectT) {
1001+
var allTasks []*usertasksv1.UserTask
1002+
var nextToken string
1003+
for {
1004+
var userTasks []*usertasksv1.UserTask
1005+
userTasks, nextTokenResp, err := userTasksClt.ListUserTasks(context.Background(), 0, nextToken, &usertasksv1.ListUserTasksFilters{})
1006+
assert.NoError(t, err)
1007+
allTasks = append(allTasks, userTasks...)
1008+
if nextTokenResp == "" {
1009+
break
1010+
}
1011+
nextToken = nextTokenResp
1012+
}
1013+
existingTasks = allTasks
1014+
1015+
if !assert.GreaterOrEqual(t, len(allTasks), minUserTasks) {
1016+
return
1017+
}
1018+
1019+
gotResources := 0
1020+
for _, task := range allTasks {
1021+
gotResources += len(task.GetSpec().GetDiscoverEc2().GetInstances())
1022+
gotResources += len(task.GetSpec().GetDiscoverEks().GetClusters())
1023+
gotResources += len(task.GetSpec().GetDiscoverRds().GetDatabases())
1024+
}
1025+
assert.GreaterOrEqual(t, gotResources, minUserTaskResources)
1026+
}, 5*time.Second, 50*time.Millisecond)
1027+
1028+
return existingTasks
1029+
}
1030+
10101031
func TestDiscoveryServerConcurrency(t *testing.T) {
10111032
t.Parallel()
10121033
ctx := context.Background()

0 commit comments

Comments
 (0)