github.com/bkosm/gompose/v2@v2.3.1/common_test.go (about) 1 package gompose 2 3 import ( 4 "errors" 5 "testing" 6 "time" 7 ) 8 9 func Test_doRetry(t *testing.T) { 10 t.Run("should return immediately in case of no error", func(t *testing.T) { 11 start := time.Now() 12 defer func() { 13 if time.Since(start) > time.Second { 14 t.Fail() 15 } 16 }() 17 18 err := doRetry(1, time.Second, func() error { 19 return nil 20 }) 21 assertNoError(t, err) 22 }) 23 24 t.Run("should return error after all attempts", func(t *testing.T) { 25 start := time.Now() 26 defer func() { 27 if time.Since(start) < time.Millisecond*10 { 28 t.Fail() 29 } 30 }() 31 32 err := doRetry(3, time.Millisecond*10, func() error { 33 return errors.New("boom") 34 }) 35 assertError(t, err) 36 }) 37 38 t.Run("should return success after a retry if the operation passed", func(t *testing.T) { 39 start := time.Now() 40 defer func() { 41 if time.Since(start) < time.Millisecond*10 { 42 t.Fail() 43 } 44 }() 45 46 var ( 47 i = 0 48 innerErr = errors.New("boom") 49 ) 50 err := doRetry(3, time.Millisecond*10, func() error { 51 if i == 2 { 52 return nil 53 } 54 i++ 55 return innerErr 56 }) 57 assertNoError(t, err) 58 }) 59 }