Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: add test for account creation #21053

Merged
merged 4 commits into from
Jul 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion tests/systemtests/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,23 @@
Test framework for system tests.
Starts and interacts with a (multi node) blockchain in Go.
Supports

* CLI
* Servers
* Events
* RPC

Uses:

* testify
* gjson
* sjson
Server and client side are executed on the host machine

## Developer

### Test strategy

System tests cover the full stack via cli and a running (multi node) network. They are more expensive (in terms of time/ cpu)
to run compared to unit or integration tests.
Therefore, we focus on the **critical path** and do not cover every condition.
Expand All @@ -33,7 +37,9 @@ Test cli parameters
* `-nodes-count` int - number of nodes in the cluster (default 4)

# Port ranges

With *n* nodes:

* `26657` - `26657+n` - RPC
* `1317` - `1317+n` - API
* `9090` - `9090+n` - GRPC
Expand All @@ -47,4 +53,4 @@ For example Node *3* listens on `26660` for RPC calls

## Disclaimer

This is based on the system test framework in [wasmd](https://github.com/CosmWasm/wasmd) built by Confio.
This is based on the system test framework in [wasmd](https://github.com/CosmWasm/wasmd) built by Confio.
50 changes: 50 additions & 0 deletions tests/systemtests/account_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package systemtests

import (
"strings"
"testing"

"github.com/stretchr/testify/assert"
"github.com/tidwall/gjson"
)

func TestAccountCreation(t *testing.T) {
// scenario: test account creation
// given a running chain
// when accountA is sending funds to accountB,
// AccountB should not be created
// when accountB is sending funds to accountA,
// AccountB should be created

sut.ResetChain(t)
cli := NewCLIWrapper(t, sut, verbose)
// add genesis account with some tokens
account1Addr := cli.AddKey("account1")
account2Addr := cli.AddKey("account2")
Comment on lines +19 to +23
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add error handling for key addition.

Consider adding error handling for the AddKey function to ensure that the keys are added successfully.

account1Addr, err := cli.AddKey("account1")
assert.NoError(t, err)
account2Addr, err := cli.AddKey("account2")
assert.NoError(t, err)

sut.ModifyGenesisCLI(t,
[]string{"genesis", "add-genesis-account", account1Addr, "10000000stake"},
)
Comment on lines +24 to +26
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check the result of ModifyGenesisCLI.

Ensure that the ModifyGenesisCLI function call is successful by adding error handling.

err := sut.ModifyGenesisCLI(t, []string{"genesis", "add-genesis-account", account1Addr, "10000000stake"})
assert.NoError(t, err)


sut.StartChain(t)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check the result of StartChain.

Ensure that the StartChain function call is successful by adding error handling.

err := sut.StartChain(t)
assert.NoError(t, err)


// query account1
rsp := cli.CustomQuery("q", "auth", "account", account1Addr)
assert.Equal(t, account1Addr, gjson.Get(rsp, "account.value.address").String(), rsp)
Comment on lines +30 to +32
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check the result of CustomQuery.

Ensure that the CustomQuery function call is successful by adding error handling.

rsp, err := cli.CustomQuery("q", "auth", "account", account1Addr)
assert.NoError(t, err)
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)
Comment on lines +34 to +35
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check the result of Run.

Ensure that the Run function call is successful by adding error handling.

rsp1, err := cli.Run("tx", "bank", "send", account1Addr, account2Addr, "5000stake", "--from="+account1Addr, "--fees=1stake")
assert.NoError(t, err)
RequireTxSuccess(t, rsp1)


// query account2

rsp2 := cli.WithRunErrorsIgnored().CustomQuery("q", "auth", "account", account2Addr)
assert.True(t, strings.Contains(rsp2, "not found: key not found"))
Comment on lines +39 to +40
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check the result of WithRunErrorsIgnored().CustomQuery.

Ensure that the CustomQuery function call is successful by adding error handling.

rsp2, err := cli.WithRunErrorsIgnored().CustomQuery("q", "auth", "account", account2Addr)
assert.NoError(t, err)
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)
Comment on lines +42 to +43
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check the result of Run.

Ensure that the Run function call is successful by adding error handling.

rsp3, err := cli.Run("tx", "bank", "send", account2Addr, account1Addr, "1000stake", "--from="+account1Addr, "--fees=1stake")
assert.NoError(t, err)
RequireTxSuccess(t, rsp3)


// query account2 to make sure its created
rsp4 := cli.CustomQuery("q", "auth", "account", account2Addr)
assert.Equal(t, "1", gjson.Get(rsp4, "account.value.sequence").String(), rsp4)
rsp5 := cli.CustomQuery("q", "auth", "account", account1Addr)
assert.Equal(t, "1", gjson.Get(rsp5, "account.value.sequence").String(), rsp5)
Comment on lines +46 to +49
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check the result of CustomQuery.

Ensure that the CustomQuery function calls are successful by adding error handling.

rsp4, err := cli.CustomQuery("q", "auth", "account", account2Addr)
assert.NoError(t, err)
assert.Equal(t, "1", gjson.Get(rsp4, "account.value.sequence").String(), rsp4)

rsp5, err := cli.CustomQuery("q", "auth", "account", account1Addr)
assert.NoError(t, err)
assert.Equal(t, "1", gjson.Get(rsp5, "account.value.sequence").String(), rsp5)

}
Loading