github.com/number571/tendermint@v0.34.11-gost/internal/libs/sync/waker_test.go (about) 1 package sync_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 tmsync "github.com/number571/tendermint/internal/libs/sync" 9 ) 10 11 func TestWaker(t *testing.T) { 12 13 // A new waker should block when sleeping. 14 waker := tmsync.NewWaker() 15 16 select { 17 case <-waker.Sleep(): 18 require.Fail(t, "unexpected wakeup") 19 default: 20 } 21 22 // Wakeups should not block, and should cause the next sleeper to awaken. 23 waker.Wake() 24 25 select { 26 case <-waker.Sleep(): 27 default: 28 require.Fail(t, "expected wakeup, but sleeping instead") 29 } 30 31 // Multiple wakeups should only wake a single sleeper. 32 waker.Wake() 33 waker.Wake() 34 waker.Wake() 35 36 select { 37 case <-waker.Sleep(): 38 default: 39 require.Fail(t, "expected wakeup, but sleeping instead") 40 } 41 42 select { 43 case <-waker.Sleep(): 44 require.Fail(t, "unexpected wakeup") 45 default: 46 } 47 }