diff --git a/rpc/client/http/rpc_test.go b/rpc/client/http/rpc_test.go index adb420574..b2c0c6e99 100644 --- a/rpc/client/http/rpc_test.go +++ b/rpc/client/http/rpc_test.go @@ -1,6 +1,7 @@ package http_test import ( + "encoding/json" "strings" "testing" "time" @@ -9,6 +10,7 @@ import ( "github.com/stretchr/testify/require" merkle "github.com/tendermint/go-merkle" "github.com/tendermint/tendermint/rpc/client/http" + ctypes "github.com/tendermint/tendermint/rpc/core/types" rpctest "github.com/tendermint/tendermint/rpc/test" "github.com/tendermint/tendermint/types" ) @@ -142,7 +144,7 @@ func TestAppCalls(t *testing.T) { } func TestSubscriptions(t *testing.T) { - assert, require := assert.New(t), require.New(t) + require := require.New(t) c := GetClient() err := c.StartWebsocket() require.Nil(err) @@ -153,30 +155,44 @@ func TestSubscriptions(t *testing.T) { // this causes a panic in tendermint core!!! eventType := types.EventStringTx(types.Tx(tx)) c.Subscribe(eventType) - read := 0 // set up a listener r, e := c.GetEventChannels() go func() { - // read one event in the background - select { - case <-r: - // TODO: actually parse this or something - read += 1 - case err := <-e: - panic(err) - } + // send a tx and wait for it to propogate + _, err = c.BroadcastTxCommit(tx) + require.Nil(err, string(tx)) }() - // make sure nothing has happened yet. - assert.Equal(0, read) + checkData := func(data []byte, kind byte) { + x := []interface{}{} + err := json.Unmarshal(data, &x) + require.Nil(err) + // gotta love wire's json format + require.EqualValues(kind, x[0]) + } - // send a tx and wait for it to propogate - _, err = c.BroadcastTxCommit(tx) - assert.Nil(err, string(tx)) - // wait before querying - time.Sleep(time.Second) + res := <-r + checkData(res, ctypes.ResultTypeSubscribe) + + // read one event, must be success + select { + case res := <-r: + checkData(res, ctypes.ResultTypeEvent) + // this is good.. let's get the data... ugh... + // result := new(ctypes.TMResult) + // wire.ReadJSON(result, res, &err) + // require.Nil(err, "%+v", err) + // event, ok := (*result).(*ctypes.ResultEvent) + // require.True(ok) + // assert.Equal("foo", event.Name) + // data, ok := event.Data.(types.EventDataTx) + // require.True(ok) + // assert.EqualValues(0, data.Code) + // assert.EqualValues(tx, data.Tx) + case err := <-e: + // this is a failure + require.Nil(err) + } - // now make sure the event arrived - assert.Equal(1, read) }