- package client_test
-
- import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- abci "github.com/tendermint/tendermint/abci/types"
- tmrand "github.com/tendermint/tendermint/libs/rand"
- "github.com/tendermint/tendermint/rpc/client"
- "github.com/tendermint/tendermint/rpc/coretypes"
- "github.com/tendermint/tendermint/types"
- )
-
- const waitForEventTimeout = 2 * time.Second
-
- // MakeTxKV returns a text transaction, allong with expected key, value pair
- func MakeTxKV() ([]byte, []byte, []byte) {
- k := []byte(tmrand.Str(8))
- v := []byte(tmrand.Str(8))
- return k, v, append(k, append([]byte("="), v...)...)
- }
-
- func testTxEventsSent(ctx context.Context, t *testing.T, broadcastMethod string, c client.Client) {
- t.Helper()
- // make the tx
- _, _, tx := MakeTxKV()
-
- // send
- done := make(chan struct{})
- go func() {
- defer close(done)
- var (
- txres *coretypes.ResultBroadcastTx
- err error
- )
- switch broadcastMethod {
- case "async":
- txres, err = c.BroadcastTxAsync(ctx, tx)
- case "sync":
- txres, err = c.BroadcastTxSync(ctx, tx)
- default:
- require.FailNowf(t, "Unknown broadcastMethod %s", broadcastMethod)
- }
- if assert.NoError(t, err) {
- assert.Equal(t, txres.Code, abci.CodeTypeOK)
- }
- }()
-
- // and wait for confirmation
- ectx, cancel := context.WithTimeout(ctx, waitForEventTimeout)
- defer cancel()
-
- // Wait for the transaction we sent to be confirmed.
- query := fmt.Sprintf(`tm.event = '%s' AND tx.hash = '%X'`,
- types.EventTxValue, types.Tx(tx).Hash())
- evt, err := client.WaitForOneEvent(ectx, c, query)
- require.NoError(t, err)
-
- // and make sure it has the proper info
- txe, ok := evt.(types.EventDataTx)
- require.True(t, ok)
-
- // make sure this is the proper tx
- require.EqualValues(t, tx, txe.Tx)
- require.True(t, txe.Result.IsOK())
- <-done
- }
|