github.com/weaveworks/common@v0.0.0-20230728070032-dd9e68f319d5/backoff/backoff_test.go (about) 1 package backoff_test 2 3 import ( 4 "errors" 5 "testing" 6 "time" 7 8 log "github.com/sirupsen/logrus" 9 "github.com/sirupsen/logrus/hooks/test" 10 "github.com/weaveworks/common/backoff" 11 ) 12 13 func TestLog(t *testing.T) { 14 hook := test.NewGlobal() 15 16 err := errors.New("sample") 17 cases := []struct { 18 returns []error 19 expectedLastLevel log.Level 20 expectedCount int 21 }{ 22 {[]error{nil}, log.InfoLevel, 1}, 23 {[]error{nil, nil /*x*/}, log.InfoLevel, 1}, 24 {[]error{nil, err}, log.WarnLevel, 2}, 25 {[]error{nil, err, nil}, log.InfoLevel, 3}, 26 {[]error{nil, err, nil, nil /*x*/}, log.InfoLevel, 3}, 27 {[]error{nil, err}, log.WarnLevel, 2}, 28 {[]error{nil, err, err}, log.WarnLevel, 3}, 29 {[]error{nil, err, err, err /*x*/}, log.WarnLevel, 3}, 30 {[]error{nil, err, err, err /*x*/, nil}, log.InfoLevel, 4}, 31 } 32 33 for ci, c := range cases { 34 hook.Reset() 35 36 ri := 0 37 bo := backoff.New(func() (done bool, err error) { 38 if ri >= len(c.returns) { 39 done, err = true, nil // abort 40 } else { 41 done, err = false, c.returns[ri] 42 } 43 ri++ 44 return 45 }, "test") 46 bo.SetInitialBackoff(1 * time.Millisecond) 47 bo.SetMaxBackoff(4 * time.Millisecond) // exceeded at 3rd consecutive error 48 bo.Start() 49 50 if len(hook.Entries) != c.expectedCount { 51 t.Errorf("case #%d failed: expected log count %d but got %d", ci, c.expectedCount, len(hook.Entries)) 52 } else if hook.LastEntry().Level != c.expectedLastLevel { 53 t.Errorf("case #%d failed: expected level %d but got %d", ci, c.expectedLastLevel, hook.LastEntry().Level) 54 } 55 } 56 }