@@ -540,6 +540,71 @@ func waitForObjectsBySchema(ctx context.Context, proxyStore *sqlproxy.Store, sch
540540 })
541541}
542542
543+ // Do not call this if there are no projects -- the function will run until it times out.
544+ func waitForProjectsDisplayName (ctx context.Context , proxyStore * sqlproxy.Store , schema * types.APISchema ) error {
545+ return wait .PollUntilContextCancel (ctx , time .Second * 10 , true , func (ctx context.Context ) (done bool , err error ) {
546+ req , err := http .NewRequest ("GET" , "http://localhost:8080" , nil )
547+ if err != nil {
548+ return false , err
549+ }
550+ apiOp := & types.APIRequest {
551+ Request : req ,
552+ }
553+ partitions := []partition.Partition {defaultPartition }
554+ list , total , _ , err := proxyStore .ListByPartitions (apiOp , schema , partitions )
555+ if err != nil || total == 0 {
556+ // note that we don't return the error since that would stop the polling
557+ return false , nil
558+ }
559+ // Moving on, if there are errors return them
560+ for _ , item := range list .Items {
561+ displayName , ok , err := unstructured .NestedFieldNoCopy (item .Object , "spec" , "displayName" )
562+ if ! ok || displayName == "" || err != nil {
563+ if err == nil && ok {
564+ fmt .Printf ("No displayName yet for mcio.project %q\n " , item .GetName ())
565+ }
566+ return false , err
567+ }
568+ clusterName , ok , err := unstructured .NestedFieldNoCopy (item .Object , "spec" , "clusterName" )
569+ if ! ok || clusterName == "" || err != nil {
570+ if err == nil {
571+ fmt .Printf ("No clusterName yet for mcio.project %q\n " , item .GetName ())
572+ }
573+ return false , err
574+ }
575+ }
576+ return true , nil
577+ })
578+ }
579+
580+ func waitForTransferredFields (ctx context.Context , proxyStore * sqlproxy.Store , schema * types.APISchema , labelTest string , expectedNum int , transferredFields ... string ) error {
581+ if expectedNum == 0 {
582+ return nil
583+ }
584+ return wait .PollUntilContextCancel (ctx , time .Second * 10 , true , func (ctx context.Context ) (done bool , err error ) {
585+ q := "?filter="
586+ nextFilter := ""
587+ if labelTest != "" {
588+ q = fmt .Sprintf ("?%s=%s" , testFilter , labelTest )
589+ nextFilter = "&"
590+ }
591+ for _ , s := range transferredFields {
592+ q += fmt .Sprintf (`%s%s!=""` , nextFilter , s )
593+ nextFilter = "&"
594+ }
595+ req , err := http .NewRequest ("GET" , "http://localhost:8080" + q , nil )
596+ if err != nil {
597+ return false , err
598+ }
599+ apiOp := & types.APIRequest {
600+ Request : req ,
601+ }
602+ partitions := []partition.Partition {defaultPartition }
603+ _ , total , _ , err := proxyStore .ListByPartitions (apiOp , schema , partitions )
604+ return err == nil && total == expectedNum , err
605+ })
606+ }
607+
543608type ResetFunc func (k8sschema.GroupVersionKind ) error
544609
545610func (f ResetFunc ) Reset (gvk k8sschema.GroupVersionKind ) error {
@@ -1131,6 +1196,8 @@ func (i *IntegrationSuite) TestNamespaceProjectDependencies() {
11311196 requireT .NoError (err )
11321197 err = waitForObjectsBySchema (ctx , proxyStore , nsSchema , labelTest , len (namespaceInfo ))
11331198 requireT .NoError (err )
1199+ err = waitForProjectsDisplayName (ctx , proxyStore , mcioSchema )
1200+ requireT .NoError (err )
11341201
11351202 partitions := []partition.Partition {defaultPartition }
11361203 for _ , test := range tests {
@@ -1211,12 +1278,14 @@ func (i *IntegrationSuite) TestSecretProjectDependencies() {
12111278 err = ctrl .Start (ctx )
12121279 requireT .NoError (err )
12131280 secretInfo := [][2 ]string {
1281+ // metadata.name, metadata.projects[management.cattle.io/project-scoped-secret]
12141282 {"morocco" , "rabat" },
12151283 {"eritrea" , "asmara" },
12161284 {"kenya" , "nairobi" },
12171285 {"benin" , "portonovo" },
12181286 }
12191287 projectInfo := [][3 ]string {
1288+ // metadata.name, spec.clusterName, spec.displayName
12201289 {"rabat" , "arabic" , "casablanca" },
12211290 {"asmara" , "tigrinya" , "keren" },
12221291 {"nairobi" , "english" , "mombasa" },
@@ -1305,8 +1374,24 @@ func (i *IntegrationSuite) TestSecretProjectDependencies() {
13051374 }
13061375
13071376 err = waitForObjectsBySchema (ctx , proxyStore , mcioSchema , labelTest , len (projectInfo ))
1377+ if err != nil {
1378+ fmt .Printf ("Error in secret/project tests: waitFor mico projects failed: %s\n " , err )
1379+ }
13081380 requireT .NoError (err )
13091381 err = waitForObjectsBySchema (ctx , proxyStore , secretSchema , labelTest , len (secretInfo ))
1382+ if err != nil {
1383+ fmt .Printf ("Error in secret/project tests: waitFor secrets failed: %s\n " , err )
1384+ }
1385+ requireT .NoError (err )
1386+ err = waitForProjectsDisplayName (ctx , proxyStore , mcioSchema )
1387+ if err != nil {
1388+ fmt .Printf ("Error in secret/project tests: waitFor ProjectsDisplayName failed: %s\n " , err )
1389+ }
1390+ requireT .NoError (err )
1391+ err = waitForTransferredFields (ctx , proxyStore , secretSchema , labelTest , len (secretInfo ), "spec.clusterName" , "spec.displayName" )
1392+ if err != nil {
1393+ fmt .Printf ("Error in secret/project tests: waitFor secrets transferred-fields failed: %s\n " , err )
1394+ }
13101395 requireT .NoError (err )
13111396
13121397 partitions := []partition.Partition {defaultPartition }
@@ -1319,17 +1404,20 @@ func (i *IntegrationSuite) TestSecretProjectDependencies() {
13191404 apiOp := & types.APIRequest {
13201405 Request : req ,
13211406 }
1407+ requireT .EventuallyWithT (func (c * assert.CollectT ) {
1408+
1409+ got , total , continueToken , err := proxyStore .ListByPartitions (apiOp , secretSchema , partitions )
1410+ if err != nil {
1411+ require .NoError (c , err )
1412+ return
1413+ }
1414+ require .Equal (c , len (test .wantNames ), total )
1415+ require .Equal (c , "" , continueToken )
1416+ require .Equal (c , len (got .Items ), len (test .wantNames ))
1417+ gotNames := stringsFromULIst (got )
1418+ require .Equal (c , test .wantNames , gotNames )
1419+ }, 15 * time .Second , 500 * time .Millisecond )
13221420
1323- got , total , continueToken , err := proxyStore .ListByPartitions (apiOp , secretSchema , partitions )
1324- if err != nil {
1325- i .Assert ().NoError (err )
1326- return
1327- }
1328- i .Assert ().Equal (len (test .wantNames ), total )
1329- i .Assert ().Equal ("" , continueToken )
1330- i .Assert ().Len (got .Items , len (test .wantNames ))
1331- gotNames := stringsFromULIst (got )
1332- i .Assert ().Equal (test .wantNames , gotNames )
13331421 })
13341422 }
13351423}
0 commit comments