57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package timer
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestTimer_Reset(t *testing.T) {
|
|
tt := New()
|
|
|
|
tt.Reset(1, 2, time.Millisecond*100)
|
|
time.Sleep(time.Millisecond * 200)
|
|
shouldReceive(t, tt, 1, 2, "no value in timer")
|
|
|
|
tt.Reset(1, 2, time.Second)
|
|
tt.Reset(2, 3, 0)
|
|
shouldReceive(t, tt, 2, 3, "no value in timer after reset(0)")
|
|
|
|
tt.Reset(1, 2, time.Millisecond*100)
|
|
time.Sleep(time.Millisecond * 200)
|
|
tt.Reset(1, 3, time.Millisecond*100)
|
|
time.Sleep(time.Millisecond * 200)
|
|
shouldReceive(t, tt, 1, 3, "invalid value after reset")
|
|
|
|
tt.Reset(3, 1, time.Millisecond*100)
|
|
shouldNotReceive(t, tt, "value arrived too early")
|
|
|
|
tt.Extend(time.Millisecond * 300)
|
|
time.Sleep(time.Millisecond * 200)
|
|
shouldNotReceive(t, tt, "value arrived too early after extend")
|
|
|
|
time.Sleep(time.Millisecond * 300)
|
|
shouldReceive(t, tt, 3, 1, "no value in timer after extend")
|
|
}
|
|
|
|
func shouldReceive(t *testing.T, tt *Timer, height uint32, view byte, msg string) {
|
|
select {
|
|
case <-tt.C():
|
|
gotHeight := tt.Height()
|
|
gotView := tt.View()
|
|
require.Equal(t, height, gotHeight)
|
|
require.Equal(t, view, gotView)
|
|
default:
|
|
require.Fail(t, msg)
|
|
}
|
|
}
|
|
|
|
func shouldNotReceive(t *testing.T, tt *Timer, msg string) {
|
|
select {
|
|
case <-tt.C():
|
|
require.Fail(t, msg)
|
|
default:
|
|
}
|
|
}
|