Skip to content

Commit f19b850

Browse files
edwardrfedw-defanglionello
authored
Create interface to allow retry unit test to be faster (#1014)
* Create interface to allow retry unit test to be faster * Apply suggestions from code review --------- Co-authored-by: Edward J <[email protected]> Co-authored-by: Lio李歐 <[email protected]>
1 parent e55a2d7 commit f19b850

File tree

5 files changed

+23
-3
lines changed

5 files changed

+23
-3
lines changed

src/pkg/cli/client/byoc/baseclient.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ type ProjectBackend interface {
4848
}
4949

5050
type ByocBaseClient struct {
51+
client.RetryDelayer
52+
5153
PulumiStack string
5254
SetupDone bool
5355
ShouldDelegateSubdomain bool

src/pkg/cli/client/playground.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
type PlaygroundProvider struct {
1414
GrpcClient
15+
RetryDelayer
1516
}
1617

1718
var _ Provider = (*PlaygroundProvider)(nil)

src/pkg/cli/client/provider.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import (
44
"context"
55
"fmt"
66
"strings"
7+
"time"
78

9+
"github.com/DefangLabs/defang/src/pkg"
810
"github.com/DefangLabs/defang/src/pkg/types"
911
defangv1 "github.com/DefangLabs/defang/src/protos/io/defang/v1"
1012
composeTypes "github.com/compose-spec/compose-go/v2/types"
@@ -126,6 +128,7 @@ type Provider interface {
126128
Delete(context.Context, *defangv1.DeleteRequest) (*defangv1.DeleteResponse, error)
127129
DeleteConfig(context.Context, *defangv1.Secrets) error
128130
Deploy(context.Context, *defangv1.DeployRequest) (*defangv1.DeployResponse, error)
131+
DelayBeforeRetry(context.Context) error
129132
Destroy(context.Context, *defangv1.DestroyRequest) (types.ETag, error)
130133
Follow(context.Context, *defangv1.TailRequest) (ServerStream[defangv1.TailResponse], error)
131134
GetService(context.Context, *defangv1.GetRequest) (*defangv1.ServiceInfo, error)
@@ -152,3 +155,14 @@ type Loader interface {
152155
LoadProject(context.Context) (*composeTypes.Project, error)
153156
LoadProjectName(context.Context) (string, error)
154157
}
158+
159+
type RetryDelayer struct {
160+
Delay time.Duration
161+
}
162+
163+
func (r *RetryDelayer) DelayBeforeRetry(ctx context.Context) error {
164+
if r.Delay == 0 {
165+
r.Delay = 1 * time.Second // Minimum 1 second delay to be consistent with the old behavior
166+
}
167+
return pkg.SleepWithContext(ctx, r.Delay)
168+
}

src/pkg/cli/subscribe.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package cli
33
import (
44
"context"
55
"errors"
6-
"time"
76

87
"github.com/DefangLabs/defang/src/pkg"
98
"github.com/DefangLabs/defang/src/pkg/cli/client"
@@ -48,7 +47,9 @@ func WaitServiceState(
4847
if !serverStream.Receive() {
4948
// Reconnect on Error: internal: stream error: stream ID 5; INTERNAL_ERROR; received from peer
5049
if isTransientError(serverStream.Err()) {
51-
pkg.SleepWithContext(ctx, 1*time.Second)
50+
if err := provider.DelayBeforeRetry(ctx); err != nil {
51+
return err
52+
}
5253
serverStream, err = provider.Subscribe(ctx, &subscribeRequest)
5354
if err != nil {
5455
return err

src/pkg/cli/subscribe_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"errors"
66
"testing"
7+
"time"
78

89
"github.com/DefangLabs/defang/src/pkg"
910
"github.com/DefangLabs/defang/src/pkg/cli/client"
@@ -267,6 +268,7 @@ func (m *MockSubscribeServerStreamForReconnectTest) Err() error {
267268
type mockSubscribeProviderForReconnectTest struct {
268269
client.MockProvider
269270
stream *MockSubscribeServerStreamForReconnectTest
271+
client.RetryDelayer
270272
}
271273

272274
func (m *mockSubscribeProviderForReconnectTest) Subscribe(
@@ -316,7 +318,7 @@ func TestWaitServiceStateStreamReceive(t *testing.T) {
316318
for _, tt := range tests {
317319
t.Run(tt.name, func(t *testing.T) {
318320
ctx := context.Background()
319-
provider := &mockSubscribeProviderForReconnectTest{stream: tt.stream}
321+
provider := &mockSubscribeProviderForReconnectTest{stream: tt.stream, RetryDelayer: client.RetryDelayer{Delay: 1 * time.Millisecond}}
320322
err := WaitServiceState(
321323
ctx, provider,
322324
defangv1.ServiceState_DEPLOYMENT_COMPLETED,

0 commit comments

Comments
 (0)