package wsutil import ( "testing" "time" ) func TestBackoffSequence(t *testing.T) { t.Parallel() b := NewBackoff(2*time.Second, 60*time.Second) want := []time.Duration{2, 4, 8, 16, 32, 60, 60, 60} for i, exp := range want { if got := b.Next(); got != exp*time.Second { t.Fatalf("Next[%d] = %v, want %v", i, got, exp*time.Second) } } } func TestBackoffReset(t *testing.T) { t.Parallel() b := NewBackoff(time.Second, time.Minute) _ = b.Next() _ = b.Next() b.Reset() if got := b.Next(); got != time.Second { t.Errorf("after Reset, Next = %v, want 1s", got) } } func TestBackoffDefaults(t *testing.T) { t.Parallel() b := NewBackoff(0, 0) if got := b.Next(); got != time.Second { t.Errorf("default base Next = %v, want 1s", got) } if got := b.Next(); got != 2*time.Second { t.Errorf("default Next2 = %v, want 2s", got) } // cap of 60s by default: 1,2,4,8,16,32,60... for i := 0; i < 7; i++ { _ = b.Next() } if got := b.Next(); got != 60*time.Second { t.Errorf("default cap Next = %v, want 60s", got) } } func TestBackoffNoOverflow(t *testing.T) { t.Parallel() b := NewBackoff(time.Second, time.Second) for i := 0; i < 200; i++ { if got := b.Next(); got != time.Second { t.Fatalf("Next[%d] = %v, want 1s (cap)", i, got) } } }