github.com/alwitt/goutils@v0.6.4/timer_test.go (about) 1 package goutils 2 3 import ( 4 "context" 5 "sync" 6 "testing" 7 "time" 8 9 "github.com/apex/log" 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestIntervalTimerOneShot(t *testing.T) { 14 assert := assert.New(t) 15 16 wg := sync.WaitGroup{} 17 defer wg.Wait() 18 ctxt, cancel := context.WithCancel(context.Background()) 19 defer cancel() 20 uut, err := GetIntervalTimerInstance(ctxt, &wg, log.Fields{"instance": "unit-tester"}) 21 assert.Nil(err) 22 23 value := 0 24 callback := func() error { 25 value++ 26 return nil 27 } 28 29 assert.Nil(uut.Start(time.Millisecond*100, callback, true)) 30 time.Sleep(time.Millisecond * 150) 31 assert.Equal(1, value) 32 33 time.Sleep(time.Millisecond * 100) 34 assert.Equal(1, value) 35 36 assert.Nil(uut.Start(time.Millisecond*50, callback, true)) 37 time.Sleep(time.Millisecond * 60) 38 assert.Equal(2, value) 39 } 40 41 func TestExponentialSeq(t *testing.T) { 42 assert := assert.New(t) 43 44 uut, err := GetExponentialSeq(float64(time.Second), 1.25) 45 assert.Nil(err) 46 uutCast, ok := uut.(*exponentialSequence) 47 assert.True(ok) 48 49 assert.InDelta(float64(time.Second), uutCast.current, 1e-3) 50 val1 := uut.NextValue() 51 assert.Greater(val1, float64(time.Second)) 52 val2 := uut.NextValue() 53 assert.Greater(val2, val1) 54 }