@@ -470,16 +470,35 @@ func (s *IntegrationTestSuite) verifyLBAvailability(name string, start time.Time
470470 s .Require ().Len (service .Status .LoadBalancer .Ingress , 2 )
471471 addr := service .Status .LoadBalancer .Ingress [0 ].IP
472472
473- response , err := testkit .HelloNginx (addr , 80 )
474- if reachable {
475- s .Assert ().NoError (err , "request failed" )
476- if s .Assert ().NotNil (response , "response is empty" ) {
477- s .Assert ().NotEmpty (response .ServerName )
473+ pollInterval := 500 * time .Millisecond
474+ pollTimeout := 10 * time .Second
475+
476+ err := wait .PollUntilContextTimeout (s .T ().Context (), pollInterval , pollTimeout , true , func (ctx context.Context ) (bool , error ) {
477+ response , err := testkit .HelloNginx (addr , 80 )
478+
479+ if reachable {
480+ if err != nil {
481+ s .T ().Logf ("waiting for connectivity: %s" , err )
482+ return false , nil
483+ }
484+ if response == nil || response .ServerName == "" {
485+ s .T ().Log ("waiting for valid response body" , "response" , response )
486+ return false , nil
487+ }
488+ return true , nil
478489 }
479- } else {
480- s .Assert ().Error (err , "request successful" )
481- s .Assert ().Nil (response , "response is empty" )
482- }
490+
491+ if err == nil {
492+ s .T ().Log ("waiting for service to be unreachable, but got no error" )
493+ return false , nil
494+ }
495+ if response != nil {
496+ s .T ().Log ("waiting for service to be unreachable, but got a response" )
497+ return false , nil
498+ }
499+ return true , nil
500+ })
501+ s .Assert ().NoError (err , "polling failed" )
483502
484503 // we expect no warnings. Errors can happen for a short time when setting to 0 nodes reachable.
485504 s .T ().Log ("Checking log output for errors/warnings" )
0 commit comments