github.com/cilium/cilium@v1.16.2/pkg/resiliency/helpers_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package resiliency_test 5 6 import ( 7 "context" 8 "errors" 9 "testing" 10 "time" 11 12 "github.com/stretchr/testify/assert" 13 14 "github.com/cilium/cilium/pkg/resiliency" 15 ) 16 17 func TestRetries(t *testing.T) { 18 var maxRetries int 19 20 uu := map[string]struct { 21 d time.Duration 22 m int 23 f resiliency.RetryFunc 24 err error 25 e int 26 }{ 27 "no-retries": { 28 d: 10 * time.Millisecond, 29 m: 3, 30 f: func(ctx context.Context, retries int) (bool, error) { 31 maxRetries = retries 32 return true, nil 33 }, 34 e: 1, 35 }, 36 "happy": { 37 d: 10 * time.Millisecond, 38 m: 3, 39 f: func(ctx context.Context, retries int) (bool, error) { 40 maxRetries = retries 41 if retries < 3 { 42 return false, nil 43 } 44 return true, nil 45 }, 46 e: 3, 47 }, 48 "error-complete": { 49 d: 10 * time.Millisecond, 50 m: 3, 51 f: func(ctx context.Context, retries int) (bool, error) { 52 maxRetries = retries 53 return true, errors.New("boom") 54 }, 55 err: errors.New("boom"), 56 e: 1, 57 }, 58 "error-retry": { 59 d: 10 * time.Millisecond, 60 m: 3, 61 f: func(ctx context.Context, retries int) (bool, error) { 62 maxRetries = retries 63 return false, errors.New("boom") 64 }, 65 err: errors.New("boom"), 66 e: 1, 67 }, 68 } 69 70 for k := range uu { 71 u := uu[k] 72 maxRetries = 0 73 t.Run(k, func(t *testing.T) { 74 err := resiliency.Retry(context.Background(), u.d, u.m, u.f) 75 if err != nil { 76 assert.Equal(t, u.err, err) 77 } 78 assert.Equal(t, u.e, maxRetries) 79 }) 80 } 81 }