github.com/instana/go-sensor@v1.62.2-0.20240520081010-4919868049e1/autoprofile/internal/timer_test.go (about) 1 // (c) Copyright IBM Corp. 2021 2 // (c) Copyright Instana Inc. 2020 3 4 package internal_test 5 6 import ( 7 "sync/atomic" 8 "testing" 9 "time" 10 11 "github.com/instana/go-sensor/autoprofile/internal" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestTimer_Stop_Restart(t *testing.T) { 16 var fired int64 17 scheduleTime := 60 * time.Millisecond 18 19 start := time.Now() 20 timer := internal.NewTimer(0, scheduleTime, func() { 21 atomic.AddInt64(&fired, 1) 22 }) 23 24 time.Sleep(100 * time.Millisecond) 25 timer.Stop() 26 27 elapsed := time.Since(start) 28 expectation := elapsed / scheduleTime 29 30 assert.EqualValues(t, expectation, atomic.LoadInt64(&fired)) 31 32 time.Sleep(200 * time.Millisecond) 33 assert.EqualValues(t, expectation, atomic.LoadInt64(&fired), "a stopped timer should not be restarted") 34 } 35 36 func TestTimer_Sleep_Stopped(t *testing.T) { 37 timer := internal.NewTimer(20*time.Millisecond, 0, func() { 38 t.Error("stopped timer has fired") 39 }) 40 41 timer.Stop() 42 time.Sleep(30 * time.Millisecond) 43 }