@@ -97,20 +97,34 @@ func (tc *TestContext) ReconnectPortForward() error {
9797 serviceName = fmt .Sprintf ("%s-spectre" , tc .SharedDeployment .ReleaseName )
9898 }
9999
100- // Create new port-forward
101- portForwarder , err := NewPortForwarder (tc .t , tc .Cluster .GetContext (), namespace , serviceName , defaultServicePort )
102- if err != nil {
103- return fmt .Errorf ("failed to create new port-forward: %w" , err )
104- }
105- if err := portForwarder .WaitForReady (30 * time .Second ); err != nil {
106- return fmt .Errorf ("service not reachable via new port-forward: %w" , err )
107- }
100+ var lastErr error
101+ deadline := time .Now ().Add (30 * time .Second )
102+
103+ for time .Now ().Before (deadline ) {
104+ portForwarder , err := NewPortForwarder (tc .t , tc .Cluster .GetContext (), namespace , serviceName , defaultServicePort )
105+ if err != nil {
106+ lastErr = fmt .Errorf ("failed to create new port-forward: %w" , err )
107+ time .Sleep (500 * time .Millisecond )
108+ continue
109+ }
110+ if err := portForwarder .WaitForReady (30 * time .Second ); err != nil {
111+ lastErr = fmt .Errorf ("service not reachable via new port-forward: %w" , err )
112+ _ = portForwarder .Stop ()
113+ time .Sleep (500 * time .Millisecond )
114+ continue
115+ }
108116
109- tc .PortForward = portForwarder
110- tc .APIClient = NewAPIClient (tc .t , portForwarder .GetURL ())
117+ tc .PortForward = portForwarder
118+ tc .APIClient = NewAPIClient (tc .t , portForwarder .GetURL ())
111119
112- tc .t .Logf ("✓ Port-forward reconnected to new pod" )
113- return nil
120+ tc .t .Logf ("✓ Port-forward reconnected to new pod" )
121+ return nil
122+ }
123+
124+ if lastErr == nil {
125+ lastErr = fmt .Errorf ("timed out waiting for replacement port-forward" )
126+ }
127+ return lastErr
114128}
115129
116130// SetupE2ETestWithValuesFile provisions test infrastructure using a custom Helm values file.
0 commit comments