storj.io/uplink@v1.13.0/private/metaclient/retry_test.go (about) 1 // Copyright (C) 2021 Storj Labs, Inc. 2 // See LICENSE for copying information. 3 4 package metaclient_test 5 6 import ( 7 "context" 8 "errors" 9 "syscall" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 14 "storj.io/common/errs2" 15 "storj.io/uplink/private/metaclient" 16 ) 17 18 func TestWithRetry(t *testing.T) { 19 ctx := context.Background() 20 21 numberOfExecutions := 0 22 err := metaclient.WithRetry(ctx, func(cxt context.Context) error { 23 numberOfExecutions++ 24 return nil 25 }) 26 27 require.NoError(t, err) 28 require.Equal(t, 1, numberOfExecutions) 29 30 numberOfExecutions = 0 31 err = metaclient.WithRetry(ctx, func(cxt context.Context) error { 32 numberOfExecutions++ 33 return syscall.ECONNRESET 34 }) 35 require.Error(t, err) 36 require.True(t, errors.Is(err, syscall.ECONNRESET)) 37 require.Greater(t, numberOfExecutions, 1) 38 39 numberOfExecutions = 0 40 cancelCtx, cancel := context.WithCancel(ctx) 41 cancel() 42 err = metaclient.WithRetry(cancelCtx, func(cxt context.Context) error { 43 numberOfExecutions++ 44 return nil 45 }) 46 require.Error(t, err) 47 require.True(t, errs2.IsCanceled(err)) 48 require.Equal(t, numberOfExecutions, 0) 49 }