package backoff import ( "errors" "log" "testing" ) func TestTicker(t *testing.T) { const successOn = 3 var i = 0 // This function is successfull on "successOn" calls. f := func() error { i++ log.Printf("function is called %d. time\n", i) if i == successOn { log.Println("OK") return nil } log.Println("error") return errors.New("error") } b := NewExponentialBackOff() ticker := NewTicker(b) var err error for _ = range ticker.C { if err = f(); err != nil { t.Log(err) continue } break } if err != nil { t.Errorf("unexpected error: %s", err.Error()) } if i != successOn { t.Errorf("invalid number of retries: %d", i) } }