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  }