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  }