package events
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/tendermint/tendermint/libs/log"
|
|
)
|
|
|
|
func TestEventCache_Flush(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
logger := log.NewTestingLogger(t)
|
|
evsw := NewEventSwitch(logger)
|
|
err := evsw.Start(ctx)
|
|
require.NoError(t, err)
|
|
|
|
err = evsw.AddListenerForEvent("nothingness", "", func(_ context.Context, data EventData) error {
|
|
// Check we are not initializing an empty buffer full of zeroed eventInfos in the EventCache
|
|
require.FailNow(t, "We should never receive a message on this switch since none are fired")
|
|
return nil
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
evc := NewEventCache(evsw)
|
|
evc.Flush(ctx)
|
|
// Check after reset
|
|
evc.Flush(ctx)
|
|
fail := true
|
|
pass := false
|
|
err = evsw.AddListenerForEvent("somethingness", "something", func(_ context.Context, data EventData) error {
|
|
if fail {
|
|
require.FailNow(t, "Shouldn't see a message until flushed")
|
|
}
|
|
pass = true
|
|
return nil
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
evc.FireEvent("something", struct{ int }{1})
|
|
evc.FireEvent("something", struct{ int }{2})
|
|
evc.FireEvent("something", struct{ int }{3})
|
|
fail = false
|
|
evc.Flush(ctx)
|
|
assert.True(t, pass)
|
|
}
|