package client_test import ( "testing" "time" "github.com/stretchr/testify/require" merktest "github.com/tendermint/merkleeyes/testutil" "github.com/tendermint/tendermint/rpc/client" "github.com/tendermint/tendermint/types" ) func TestHeaderEvents(t *testing.T) { require := require.New(t) for i, c := range GetClients() { // start for this test it if it wasn't already running if !c.IsRunning() { // if so, then we start it, listen, and stop it. st, err := c.Start() require.Nil(err, "%d: %+v", i, err) require.True(st, "%d", i) defer c.Stop() } evtTyp := types.EventStringNewBlockHeader() evt, err := client.WaitForOneEvent(c, evtTyp, 1*time.Second) require.Nil(err, "%d: %+v", i, err) _, ok := evt.Unwrap().(types.EventDataNewBlockHeader) require.True(ok, "%d: %#v", i, evt) // TODO: more checks... } } func TestBlockEvents(t *testing.T) { require := require.New(t) for i, c := range GetClients() { // start for this test it if it wasn't already running if !c.IsRunning() { // if so, then we start it, listen, and stop it. st, err := c.Start() require.Nil(err, "%d: %+v", i, err) require.True(st, "%d", i) defer c.Stop() } // listen for a new block; ensure height increases by 1 var firstBlockHeight int for i := 0; i < 3; i++ { evtTyp := types.EventStringNewBlock() evt, err := client.WaitForOneEvent(c, evtTyp, 1*time.Second) require.Nil(err, "%d: %+v", i, err) blockEvent, ok := evt.Unwrap().(types.EventDataNewBlock) require.True(ok, "%d: %#v", i, evt) block := blockEvent.Block if i == 0 { firstBlockHeight = block.Header.Height continue } require.Equal(block.Header.Height, firstBlockHeight+i) } } } func TestTxEventsSentWithBroadcastTxAsync(t *testing.T) { require := require.New(t) for i, c := range GetClients() { // start for this test it if it wasn't already running if !c.IsRunning() { // if so, then we start it, listen, and stop it. st, err := c.Start() require.Nil(err, "%d: %+v", i, err) require.True(st, "%d", i) defer c.Stop() } // make the tx _, _, tx := merktest.MakeTxKV() evtTyp := types.EventStringTx(types.Tx(tx)) // send async txres, err := c.BroadcastTxAsync(tx) require.Nil(err, "%+v", err) require.True(txres.Code.IsOK()) // and wait for confirmation evt, err := client.WaitForOneEvent(c, evtTyp, 1*time.Second) require.Nil(err, "%d: %+v", i, err) // and make sure it has the proper info txe, ok := evt.Unwrap().(types.EventDataTx) require.True(ok, "%d: %#v", i, evt) // make sure this is the proper tx require.EqualValues(tx, txe.Tx) require.True(txe.Code.IsOK()) } } func TestTxEventsSentWithBroadcastTxSync(t *testing.T) { require := require.New(t) for i, c := range GetClients() { // start for this test it if it wasn't already running if !c.IsRunning() { // if so, then we start it, listen, and stop it. st, err := c.Start() require.Nil(err, "%d: %+v", i, err) require.True(st, "%d", i) defer c.Stop() } // make the tx _, _, tx := merktest.MakeTxKV() evtTyp := types.EventStringTx(types.Tx(tx)) // send async txres, err := c.BroadcastTxSync(tx) require.Nil(err, "%+v", err) require.True(txres.Code.IsOK()) // and wait for confirmation evt, err := client.WaitForOneEvent(c, evtTyp, 1*time.Second) require.Nil(err, "%d: %+v", i, err) // and make sure it has the proper info txe, ok := evt.Unwrap().(types.EventDataTx) require.True(ok, "%d: %#v", i, evt) // make sure this is the proper tx require.EqualValues(tx, txe.Tx) require.True(txe.Code.IsOK()) } }