diff --git a/tests/systemtests/account_test.go b/tests/systemtests/account_test.go index c3940579e2..42580862e6 100644 --- a/tests/systemtests/account_test.go +++ b/tests/systemtests/account_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/tidwall/gjson" ) @@ -21,6 +22,7 @@ func TestAccountCreation(t *testing.T) { // add genesis account with some tokens account1Addr := cli.AddKey("account1") account2Addr := cli.AddKey("account2") + require.NotEqual(t, account1Addr, account2Addr) sut.ModifyGenesisCLI(t, []string{"genesis", "add-genesis-account", account1Addr, "10000000stake"}, ) @@ -32,15 +34,20 @@ func TestAccountCreation(t *testing.T) { assert.Equal(t, account1Addr, gjson.Get(rsp, "account.value.address").String(), rsp) rsp1 := cli.Run("tx", "bank", "send", account1Addr, account2Addr, "5000stake", "--from="+account1Addr, "--fees=1stake") - RequireTxSuccess(t, rsp1) + txResult, found := cli.AwaitTxCommitted(rsp1) + require.True(t, found) + RequireTxSuccess(t, txResult) // query account2 + assertNotFound := func(t assert.TestingT, err error, msgAndArgs ...interface{}) (ok bool) { + return strings.Contains(err.Error(), "not found: key not found") + } + _ = cli.WithRunErrorMatcher(assertNotFound).CustomQuery("q", "auth", "account", account2Addr) - rsp2 := cli.WithRunErrorsIgnored().CustomQuery("q", "auth", "account", account2Addr) - assert.True(t, strings.Contains(rsp2, "not found: key not found")) - - rsp3 := cli.Run("tx", "bank", "send", account2Addr, account1Addr, "1000stake", "--from="+account1Addr, "--fees=1stake") - RequireTxSuccess(t, rsp3) + rsp3 := cli.Run("tx", "bank", "send", account2Addr, account1Addr, "1000stake", "--from="+account2Addr, "--fees=1stake") + txResult, found = cli.AwaitTxCommitted(rsp3) + require.True(t, found) + RequireTxSuccess(t, txResult) // query account2 to make sure its created rsp4 := cli.CustomQuery("q", "auth", "account", account2Addr) diff --git a/tests/systemtests/cli.go b/tests/systemtests/cli.go index ae0ee0e9ac..404b7849fb 100644 --- a/tests/systemtests/cli.go +++ b/tests/systemtests/cli.go @@ -1,6 +1,8 @@ package systemtests import ( + "bufio" + "bytes" "fmt" "io" "os" @@ -150,6 +152,7 @@ func (c CLIWrapper) WithAssertTXUncommitted() CLIWrapper { // Run main entry for executing cli commands. // When configured, method blocks until tx is committed. func (c CLIWrapper) Run(args ...string) string { + c.t.Helper() if c.fees != "" && !slices.ContainsFunc(args, func(s string) bool { return strings.HasPrefix(s, "--fees") }) { @@ -160,14 +163,15 @@ func (c CLIWrapper) Run(args ...string) string { if !ok { return execOutput } - rsp, committed := c.awaitTxCommitted(execOutput, DefaultWaitTime) + rsp, committed := c.AwaitTxCommitted(execOutput, DefaultWaitTime) c.t.Logf("tx committed: %v", committed) require.Equal(c.t, c.expTXCommitted, committed, "expected tx committed: %v", c.expTXCommitted) return rsp } -// wait for tx committed on chain -func (c CLIWrapper) awaitTxCommitted(submitResp string, timeout ...time.Duration) (string, bool) { +// AwaitTxCommitted wait for tx committed on chain +func (c CLIWrapper) AwaitTxCommitted(submitResp string, timeout ...time.Duration) (string, bool) { + c.t.Helper() RequireTxSuccess(c.t, submitResp) txHash := gjson.Get(submitResp, "txhash") require.True(c.t, txHash.Exists()) @@ -201,10 +205,12 @@ func (c CLIWrapper) CustomQuery(args ...string) string { // execute shell command func (c CLIWrapper) run(args []string) (output string, ok bool) { + c.t.Helper() return c.runWithInput(args, nil) } func (c CLIWrapper) runWithInput(args []string, input io.Reader) (output string, ok bool) { + c.t.Helper() if c.Debug { c.t.Logf("+++ running `%s %s`", c.execBinary, strings.Join(args, " ")) } @@ -219,10 +225,26 @@ func (c CLIWrapper) runWithInput(args []string, input io.Reader) (output string, cmd.Stdin = input return cmd.CombinedOutput() }() + gotOut = filterProtoNoise(gotOut) ok = c.assertErrorFn(c.t, gotErr, string(gotOut)) return strings.TrimSpace(string(gotOut)), ok } +func filterProtoNoise(in []byte) []byte { + // temporary hack to get rid of all the noise on the stderr + var out bytes.Buffer + scanner := bufio.NewScanner(bytes.NewReader(in)) + for scanner.Scan() { + if !strings.Contains(scanner.Text(), " proto: duplicate proto type registered") { + _, _ = out.Write(scanner.Bytes()) + } + } + if err := scanner.Err(); err != nil { + panic(err) + } + return out.Bytes() +} + func (c CLIWrapper) withQueryFlags(args ...string) []string { args = append(args, "--output", "json") return c.withChainFlags(args...) @@ -392,10 +414,10 @@ func RequireTxFailure(t *testing.T, got string, containsMsgs ...string) { func parseResultCode(t *testing.T, got string) (int64, string) { t.Helper() code := gjson.Get(got, "code") - require.True(t, code.Exists(), "got response: %s", got) + require.True(t, code.Exists(), "got response: %q", got) details := got - if log := gjson.Get(got, "raw_log"); log.Exists() { + if log := gjson.Get(got, "raw_log"); log.Exists() && len(log.String()) != 0 { details = log.String() } return code.Int(), details