From 32b8f16299d8e8da4d975c53019080d27e38ef15 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Wed, 4 Jan 2023 19:00:31 +0530 Subject: [PATCH 1/9] replace testify with gotest.tools in bank integration tests --- go.mod | 1 + go.sum | 2 + .../bank/keeper/deterministic_test.go | 291 ++++++++++-------- tests/integration/bank/keeper/keeper_test.go | 124 +++----- testutil/testdata/grpc_query.go | 2 + 5 files changed, 216 insertions(+), 204 deletions(-) diff --git a/go.mod b/go.mod index 9e3e236991da..a63a9424423a 100644 --- a/go.mod +++ b/go.mod @@ -85,6 +85,7 @@ require ( github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 // indirect github.com/cockroachdb/redact v1.0.8 // indirect github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect + github.com/cosmos/cosmos-sdk/tests v0.0.0-20230104083136-11f46a0bae58 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect github.com/creachadair/taskgroup v0.3.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect diff --git a/go.sum b/go.sum index d28332b54cbd..6c01dc01a46f 100644 --- a/go.sum +++ b/go.sum @@ -190,6 +190,8 @@ github.com/cosmos/cosmos-proto v1.0.0-beta.1 h1:iDL5qh++NoXxG8hSy93FdYJut4XfgbSh github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a h1:2humuGPw3O5riJVFq/E2FRjF57UrO97W1qJcGVmK+6k= github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= +github.com/cosmos/cosmos-sdk/tests v0.0.0-20230104083136-11f46a0bae58 h1:6VqPujRuujdaAc8rTym47FJnm3Pb4c2Y+/QEUmtEdUw= +github.com/cosmos/cosmos-sdk/tests v0.0.0-20230104083136-11f46a0bae58/go.mod h1:7h7HeRRvZ53ZCJsiGi+TeGaVGkTP7CrEuIuCN6KrWqQ= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= diff --git a/tests/integration/bank/keeper/deterministic_test.go b/tests/integration/bank/keeper/deterministic_test.go index 823cee6b4e9a..efb5e79670bb 100644 --- a/tests/integration/bank/keeper/deterministic_test.go +++ b/tests/integration/bank/keeper/deterministic_test.go @@ -3,8 +3,9 @@ package keeper_test import ( "testing" - "github.com/stretchr/testify/suite" + "github.com/stretchr/testify/require" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "gotest.tools/v3/assert" "pgregory.net/rapid" "github.com/cosmos/cosmos-sdk/baseapp" @@ -26,15 +27,6 @@ import ( _ "github.com/cosmos/cosmos-sdk/x/staking" ) -type DeterministicTestSuite struct { - suite.Suite - - ctx sdk.Context - bankKeeper keeper.BaseKeeper - - queryClient banktypes.QueryClient -} - var ( denomRegex = sdk.DefaultCoinDenomRegex() addr1 = sdk.MustAccAddressFromBech32("cosmos139f7kncmglres2nf3h4hc4tade85ekfr8sulz5") @@ -58,11 +50,16 @@ var ( } ) -func TestDeterministicTestSuite(t *testing.T) { - suite.Run(t, new(DeterministicTestSuite)) +type fixture struct { + ctx sdk.Context + bankKeeper keeper.BaseKeeper + + queryClient banktypes.QueryClient } -func (suite *DeterministicTestSuite) SetupTest() { +func initFixture(t assert.TestingT) *fixture { + f := &fixture{} + var interfaceRegistry codectypes.InterfaceRegistry app, err := simtestutil.Setup( @@ -74,63 +71,75 @@ func (suite *DeterministicTestSuite) SetupTest() { configurator.BankModule(), configurator.StakingModule(), ), - &suite.bankKeeper, + &f.bankKeeper, &interfaceRegistry, ) - suite.Require().NoError(err) + assert.NilError(t, err) ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - suite.ctx = ctx + f.ctx = ctx queryHelper := baseapp.NewQueryServerTestHelper(ctx, interfaceRegistry) - banktypes.RegisterQueryServer(queryHelper, suite.bankKeeper) - suite.queryClient = banktypes.NewQueryClient(queryHelper) + banktypes.RegisterQueryServer(queryHelper, f.bankKeeper) + f.queryClient = banktypes.NewQueryClient(queryHelper) + + return f } -func (suite *DeterministicTestSuite) fundAccount(addr sdk.AccAddress, coin ...sdk.Coin) { - err := banktestutil.FundAccount(suite.bankKeeper, suite.ctx, addr, sdk.NewCoins(coin...)) - suite.Require().NoError(err) +func fundAccount(t *testing.T, addr sdk.AccAddress, coin ...sdk.Coin) { + f := initFixture(t) + err := banktestutil.FundAccount(f.bankKeeper, f.ctx, addr, sdk.NewCoins(coin...)) + assert.NilError(t, err) } -func (suite *DeterministicTestSuite) getCoin(t *rapid.T) sdk.Coin { +func getCoin(rt *rapid.T) sdk.Coin { return sdk.NewCoin( - rapid.StringMatching(denomRegex).Draw(t, "denom"), - sdk.NewInt(rapid.Int64Min(1).Draw(t, "amount")), + rapid.StringMatching(denomRegex).Draw(rt, "denom"), + sdk.NewInt(rapid.Int64Min(1).Draw(rt, "amount")), ) } -func (suite *DeterministicTestSuite) TestGRPCQueryBalance() { - rapid.Check(suite.T(), func(t *rapid.T) { - addr := testdata.AddressGenerator(t).Draw(t, "address") - coin := suite.getCoin(t) - suite.fundAccount(addr, coin) +func TestGRPCQueryBalance(t *testing.T) { + t.Parallel() + f := initFixture(t) + + tt := require.New(t) + rapid.Check(t, func(rt *rapid.T) { + addr := testdata.AddressGenerator(rt).Draw(rt, "address") + coin := getCoin(rt) + fundAccount(t, addr, coin) req := banktypes.NewQueryBalanceRequest(addr, coin.GetDenom()) - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Balance, 0, true) + + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.Balance, 0, true) }) - suite.fundAccount(addr1, coin1) + fundAccount(t, addr1, coin1) req := banktypes.NewQueryBalanceRequest(addr1, coin1.GetDenom()) - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Balance, 1087, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.Balance, 1081, false) } -func (suite *DeterministicTestSuite) TestGRPCQueryAllBalances() { - rapid.Check(suite.T(), func(t *rapid.T) { - addr := testdata.AddressGenerator(t).Draw(t, "address") - numCoins := rapid.IntRange(1, 10).Draw(t, "num-count") +func TestGRPCQueryAllBalances(t *testing.T) { + t.Parallel() + f := initFixture(t) + + tt := require.New(t) + rapid.Check(t, func(rt *rapid.T) { + addr := testdata.AddressGenerator(rt).Draw(rt, "address") + numCoins := rapid.IntRange(1, 10).Draw(rt, "num-count") coins := make(sdk.Coins, 0, numCoins) for i := 0; i < numCoins; i++ { - coin := suite.getCoin(t) + coin := getCoin(rt) // NewCoins sorts the denoms coins = sdk.NewCoins(append(coins, coin)...) } - suite.fundAccount(addr, coins...) + fundAccount(t, addr, coins...) - req := banktypes.NewQueryAllBalancesRequest(addr, testdata.PaginationGenerator(t, uint64(numCoins)).Draw(t, "pagination")) - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.AllBalances, 0, true) + req := banktypes.NewQueryAllBalancesRequest(addr, testdata.PaginationGenerator(rt, uint64(numCoins)).Draw(rt, "pagination")) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.AllBalances, 0, true) }) coins := sdk.NewCoins( @@ -138,14 +147,18 @@ func (suite *DeterministicTestSuite) TestGRPCQueryAllBalances() { sdk.NewCoin("denom", sdk.NewInt(100)), ) - suite.fundAccount(addr1, coins...) + fundAccount(t, addr1, coins...) req := banktypes.NewQueryAllBalancesRequest(addr1, nil) - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.AllBalances, 357, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.AllBalances, 30, false) } -func (suite *DeterministicTestSuite) TestGRPCQuerySpendableBalances() { - rapid.Check(suite.T(), func(t *rapid.T) { +func TestGRPCQuerySpendableBalances(t *testing.T) { + t.Parallel() + f := initFixture(t) + + tt := require.New(t) + rapid.Check(t, func(t *rapid.T) { addr := testdata.AddressGenerator(t).Draw(t, "address") numCoins := rapid.IntRange(1, 10).Draw(t, "num-count") coins := make(sdk.Coins, 0, numCoins) @@ -160,11 +173,11 @@ func (suite *DeterministicTestSuite) TestGRPCQuerySpendableBalances() { coins = sdk.NewCoins(append(coins, coin)...) } - err := banktestutil.FundAccount(suite.bankKeeper, suite.ctx, addr, coins) - suite.Require().NoError(err) + err := banktestutil.FundAccount(f.bankKeeper, f.ctx, addr, coins) + assert.NilError(t, err) req := banktypes.NewQuerySpendableBalancesRequest(addr, testdata.PaginationGenerator(t, uint64(numCoins)).Draw(t, "pagination")) - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.SpendableBalances, 0, true) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.SpendableBalances, 0, true) }) coins := sdk.NewCoins( @@ -172,91 +185,103 @@ func (suite *DeterministicTestSuite) TestGRPCQuerySpendableBalances() { sdk.NewCoin("denom", sdk.NewInt(100)), ) - err := banktestutil.FundAccount(suite.bankKeeper, suite.ctx, addr1, coins) - suite.Require().NoError(err) + err := banktestutil.FundAccount(f.bankKeeper, f.ctx, addr1, coins) + assert.NilError(t, err) req := banktypes.NewQuerySpendableBalancesRequest(addr1, nil) - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.SpendableBalances, 2032, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.SpendableBalances, 2032, false) } -func (suite *DeterministicTestSuite) TestGRPCQueryTotalSupply() { - res, err := suite.queryClient.TotalSupply(suite.ctx, &banktypes.QueryTotalSupplyRequest{}) - suite.Require().NoError(err) +func TestGRPCQueryTotalSupply(t *testing.T) { + t.Parallel() + f := initFixture(t) + + tt := require.New(t) + res, err := f.queryClient.TotalSupply(f.ctx, &banktypes.QueryTotalSupplyRequest{}) + assert.NilError(t, err) initialSupply := res.GetSupply() - rapid.Check(suite.T(), func(t *rapid.T) { - numCoins := rapid.IntRange(1, 3).Draw(t, "num-count") + rapid.Check(t, func(rt *rapid.T) { + numCoins := rapid.IntRange(1, 3).Draw(rt, "num-count") coins := make(sdk.Coins, 0, numCoins) for i := 0; i < numCoins; i++ { coin := sdk.NewCoin( - rapid.StringMatching(denomRegex).Draw(t, "denom"), - sdk.NewInt(rapid.Int64Min(1).Draw(t, "amount")), + rapid.StringMatching(denomRegex).Draw(rt, "denom"), + sdk.NewInt(rapid.Int64Min(1).Draw(rt, "amount")), ) coins = coins.Add(coin) } - suite.Require().NoError(suite.bankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins)) + assert.NilError(t, f.bankKeeper.MintCoins(f.ctx, minttypes.ModuleName, coins)) initialSupply = initialSupply.Add(coins...) req := &banktypes.QueryTotalSupplyRequest{ - Pagination: testdata.PaginationGenerator(t, uint64(len(initialSupply))).Draw(t, "pagination"), + Pagination: testdata.PaginationGenerator(rt, uint64(len(initialSupply))).Draw(rt, "pagination"), } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.TotalSupply, 0, true) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.TotalSupply, 0, true) }) - suite.SetupTest() // reset + f = initFixture(&testing.T{}) // reset coins := sdk.NewCoins( sdk.NewCoin("foo", sdk.NewInt(10)), sdk.NewCoin("bar", sdk.NewInt(100)), ) - suite.Require().NoError(suite.bankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, coins)) + assert.NilError(t, f.bankKeeper.MintCoins(f.ctx, minttypes.ModuleName, coins)) req := &banktypes.QueryTotalSupplyRequest{} - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.TotalSupply, 243, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.TotalSupply, 243, false) } -func (suite *DeterministicTestSuite) TestGRPCQueryTotalSupplyOf() { - rapid.Check(suite.T(), func(t *rapid.T) { +func TestGRPCQueryTotalSupplyOf(t *testing.T) { + t.Parallel() + f := initFixture(t) + + tt := require.New(t) + rapid.Check(t, func(rt *rapid.T) { coin := sdk.NewCoin( - rapid.StringMatching(denomRegex).Draw(t, "denom"), - sdk.NewInt(rapid.Int64Min(1).Draw(t, "amount")), + rapid.StringMatching(denomRegex).Draw(rt, "denom"), + sdk.NewInt(rapid.Int64Min(1).Draw(rt, "amount")), ) - suite.Require().NoError(suite.bankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, sdk.NewCoins(coin))) + assert.NilError(t, f.bankKeeper.MintCoins(f.ctx, minttypes.ModuleName, sdk.NewCoins(coin))) req := &banktypes.QuerySupplyOfRequest{Denom: coin.GetDenom()} - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.SupplyOf, 0, true) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.SupplyOf, 0, true) }) coin := sdk.NewCoin("bar", sdk.NewInt(100)) - suite.Require().NoError(suite.bankKeeper.MintCoins(suite.ctx, minttypes.ModuleName, sdk.NewCoins(coin))) + assert.NilError(t, f.bankKeeper.MintCoins(f.ctx, minttypes.ModuleName, sdk.NewCoins(coin))) req := &banktypes.QuerySupplyOfRequest{Denom: coin.GetDenom()} - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.SupplyOf, 1021, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.SupplyOf, 1021, false) } -func (suite *DeterministicTestSuite) TestGRPCQueryParams() { - rapid.Check(suite.T(), func(t *rapid.T) { +func TestGRPCQueryParams(t *testing.T) { + t.Parallel() + f := initFixture(t) + + tt := require.New(t) + rapid.Check(t, func(rt *rapid.T) { enabledStatus := banktypes.SendEnabled{ - Denom: rapid.StringMatching(denomRegex).Draw(t, "denom"), - Enabled: rapid.Bool().Draw(t, "status"), + Denom: rapid.StringMatching(denomRegex).Draw(rt, "denom"), + Enabled: rapid.Bool().Draw(rt, "status"), } params := banktypes.Params{ SendEnabled: []*banktypes.SendEnabled{&enabledStatus}, - DefaultSendEnabled: rapid.Bool().Draw(t, "send"), + DefaultSendEnabled: rapid.Bool().Draw(rt, "send"), } - suite.bankKeeper.SetParams(suite.ctx, params) + f.bankKeeper.SetParams(f.ctx, params) req := &banktypes.QueryParamsRequest{} - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Params, 0, true) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.Params, 0, true) }) enabledStatus := banktypes.SendEnabled{ @@ -269,13 +294,13 @@ func (suite *DeterministicTestSuite) TestGRPCQueryParams() { DefaultSendEnabled: false, } - suite.bankKeeper.SetParams(suite.ctx, params) + f.bankKeeper.SetParams(f.ctx, params) req := &banktypes.QueryParamsRequest{} - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.Params, 1003, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.Params, 1003, false) } -func (suite *DeterministicTestSuite) createAndReturnMetadatas(t *rapid.T, count int) []banktypes.Metadata { +func createAndReturnMetadatas(t *rapid.T, count int) []banktypes.Metadata { denomsMetadata := make([]banktypes.Metadata, 0, count) for i := 0; i < count; i++ { @@ -310,67 +335,79 @@ func (suite *DeterministicTestSuite) createAndReturnMetadatas(t *rapid.T, count return denomsMetadata } -func (suite *DeterministicTestSuite) TestGRPCDenomsMetadata() { - rapid.Check(suite.T(), func(t *rapid.T) { - count := rapid.IntRange(1, 3).Draw(t, "count") - denomsMetadata := suite.createAndReturnMetadatas(t, count) - suite.Require().Len(denomsMetadata, count) +func TestGRPCDenomsMetadata(t *testing.T) { + t.Parallel() + f := initFixture(t) + + tt := require.New(t) + rapid.Check(t, func(rt *rapid.T) { + count := rapid.IntRange(1, 3).Draw(rt, "count") + denomsMetadata := createAndReturnMetadatas(rt, count) + assert.Assert(t, len(denomsMetadata) == count) for i := 0; i < count; i++ { - suite.bankKeeper.SetDenomMetaData(suite.ctx, denomsMetadata[i]) + f.bankKeeper.SetDenomMetaData(f.ctx, denomsMetadata[i]) } req := &banktypes.QueryDenomsMetadataRequest{ - Pagination: testdata.PaginationGenerator(t, uint64(count)).Draw(t, "pagination"), + Pagination: testdata.PaginationGenerator(rt, uint64(count)).Draw(rt, "pagination"), } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DenomsMetadata, 0, true) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.DenomsMetadata, 0, true) }) - suite.SetupTest() // reset + f = initFixture(&testing.T{}) // reset - suite.bankKeeper.SetDenomMetaData(suite.ctx, metadataAtom) + f.bankKeeper.SetDenomMetaData(f.ctx, metadataAtom) req := &banktypes.QueryDenomsMetadataRequest{} - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DenomsMetadata, 660, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.DenomsMetadata, 660, false) } -func (suite *DeterministicTestSuite) TestGRPCDenomMetadata() { - rapid.Check(suite.T(), func(t *rapid.T) { - denomMetadata := suite.createAndReturnMetadatas(t, 1) - suite.Require().Len(denomMetadata, 1) - suite.bankKeeper.SetDenomMetaData(suite.ctx, denomMetadata[0]) +func TestGRPCDenomMetadata(t *testing.T) { + t.Parallel() + f := initFixture(t) + + tt := require.New(t) + rapid.Check(t, func(rt *rapid.T) { + denomMetadata := createAndReturnMetadatas(rt, 1) + assert.Assert(t, len(denomMetadata) == 1) + f.bankKeeper.SetDenomMetaData(f.ctx, denomMetadata[0]) req := &banktypes.QueryDenomMetadataRequest{ Denom: denomMetadata[0].Base, } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DenomMetadata, 0, true) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.DenomMetadata, 0, true) }) - suite.bankKeeper.SetDenomMetaData(suite.ctx, metadataAtom) + f.bankKeeper.SetDenomMetaData(f.ctx, metadataAtom) req := &banktypes.QueryDenomMetadataRequest{ Denom: metadataAtom.Base, } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DenomMetadata, 1300, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.DenomMetadata, 1300, false) } -func (suite *DeterministicTestSuite) TestGRPCSendEnabled() { +func TestGRPCSendEnabled(t *testing.T) { + t.Parallel() + f := initFixture(t) + + tt := require.New(t) allDenoms := []string{} - rapid.Check(suite.T(), func(t *rapid.T) { - count := rapid.IntRange(0, 10).Draw(t, "count") + rapid.Check(t, func(rt *rapid.T) { + count := rapid.IntRange(0, 10).Draw(rt, "count") denoms := make([]string, 0, count) for i := 0; i < count; i++ { coin := banktypes.SendEnabled{ - Denom: rapid.StringMatching(denomRegex).Draw(t, "denom"), - Enabled: rapid.Bool().Draw(t, "enabled-status"), + Denom: rapid.StringMatching(denomRegex).Draw(rt, "denom"), + Enabled: rapid.Bool().Draw(rt, "enabled-status"), } - suite.bankKeeper.SetSendEnabled(suite.ctx, coin.Denom, coin.Enabled) + f.bankKeeper.SetSendEnabled(f.ctx, coin.Denom, coin.Enabled) denoms = append(denoms, coin.Denom) } @@ -379,9 +416,9 @@ func (suite *DeterministicTestSuite) TestGRPCSendEnabled() { req := &banktypes.QuerySendEnabledRequest{ Denoms: denoms, // Pagination is only taken into account when `denoms` is an empty array - Pagination: testdata.PaginationGenerator(t, uint64(len(allDenoms))).Draw(t, "pagination"), + Pagination: testdata.PaginationGenerator(rt, uint64(len(allDenoms))).Draw(rt, "pagination"), } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.SendEnabled, 0, true) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.SendEnabled, 0, true) }) coin1 := banktypes.SendEnabled{ @@ -393,37 +430,41 @@ func (suite *DeterministicTestSuite) TestGRPCSendEnabled() { Enabled: true, } - suite.bankKeeper.SetSendEnabled(suite.ctx, coin1.Denom, false) - suite.bankKeeper.SetSendEnabled(suite.ctx, coin2.Denom, true) + f.bankKeeper.SetSendEnabled(f.ctx, coin1.Denom, false) + f.bankKeeper.SetSendEnabled(f.ctx, coin2.Denom, true) req := &banktypes.QuerySendEnabledRequest{ Denoms: []string{coin1.GetDenom(), coin2.GetDenom()}, } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.SendEnabled, 4063, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.SendEnabled, 4063, false) } -func (suite *DeterministicTestSuite) TestGRPCDenomOwners() { - rapid.Check(suite.T(), func(t *rapid.T) { - denom := rapid.StringMatching(denomRegex).Draw(t, "denom") - numAddr := rapid.IntRange(1, 10).Draw(t, "number-address") +func TestGRPCDenomOwners(t *testing.T) { + t.Parallel() + f := initFixture(t) + + tt := require.New(t) + rapid.Check(t, func(rt *rapid.T) { + denom := rapid.StringMatching(denomRegex).Draw(rt, "denom") + numAddr := rapid.IntRange(1, 10).Draw(rt, "number-address") for i := 0; i < numAddr; i++ { - addr := testdata.AddressGenerator(t).Draw(t, "address") + addr := testdata.AddressGenerator(rt).Draw(rt, "address") coin := sdk.NewCoin( denom, - sdk.NewInt(rapid.Int64Min(1).Draw(t, "amount")), + sdk.NewInt(rapid.Int64Min(1).Draw(rt, "amount")), ) - err := banktestutil.FundAccount(suite.bankKeeper, suite.ctx, addr, sdk.NewCoins(coin)) - suite.Require().NoError(err) + err := banktestutil.FundAccount(f.bankKeeper, f.ctx, addr, sdk.NewCoins(coin)) + assert.NilError(t, err) } req := &banktypes.QueryDenomOwnersRequest{ Denom: denom, - Pagination: testdata.PaginationGenerator(t, uint64(numAddr)).Draw(t, "pagination"), + Pagination: testdata.PaginationGenerator(rt, uint64(numAddr)).Draw(rt, "pagination"), } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DenomOwners, 0, true) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.DenomOwners, 0, true) }) denomOwners := []*banktypes.DenomOwner{ @@ -439,14 +480,14 @@ func (suite *DeterministicTestSuite) TestGRPCDenomOwners() { for i := 0; i < len(denomOwners); i++ { addr, err := sdk.AccAddressFromBech32(denomOwners[i].Address) - suite.Require().NoError(err) + assert.NilError(t, err) - err = banktestutil.FundAccount(suite.bankKeeper, suite.ctx, addr, sdk.NewCoins(coin1)) - suite.Require().NoError(err) + err = banktestutil.FundAccount(f.bankKeeper, f.ctx, addr, sdk.NewCoins(coin1)) + assert.NilError(t, err) } req := &banktypes.QueryDenomOwnersRequest{ Denom: coin1.GetDenom(), } - testdata.DeterministicIterations(suite.ctx, suite.Require(), req, suite.queryClient.DenomOwners, 2525, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.DenomOwners, 2525, false) } diff --git a/tests/integration/bank/keeper/keeper_test.go b/tests/integration/bank/keeper/keeper_test.go index 6f2b391fef3d..c283ac5baf70 100644 --- a/tests/integration/bank/keeper/keeper_test.go +++ b/tests/integration/bank/keeper/keeper_test.go @@ -6,12 +6,12 @@ import ( "testing" "time" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + "gotest.tools/v3/assert" authmodulev1 "cosmossdk.io/api/cosmos/auth/module/v1" "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" storetypes "github.com/cosmos/cosmos-sdk/store/types" @@ -27,6 +27,7 @@ import ( tmtime "github.com/tendermint/tendermint/types/time" "cosmossdk.io/simapp" + "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" @@ -35,7 +36,7 @@ import ( vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" "github.com/cosmos/cosmos-sdk/x/bank/exported" "github.com/cosmos/cosmos-sdk/x/bank/keeper" - "github.com/cosmos/cosmos-sdk/x/bank/testutil" + banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/bank/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -147,41 +148,6 @@ func (suite *IntegrationTestSuite) SetupTest() { suite.msgServer = keeper.NewMsgServerImpl(suite.bankKeeper) } -func (suite *IntegrationTestSuite) TestSupply() { - ctx := suite.ctx - - require := suite.Require() - - // add module accounts to supply keeper - authKeeper, keeper := suite.initKeepersWithmAccPerms(make(map[string]bool)) - - genesisSupply, _, err := keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - require.NoError(err) - - initialPower := int64(100) - initTokens := suite.stakingKeeper.TokensFromConsensusPower(ctx, initialPower) - initCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, initTokens)) - - // set burnerAcc balance - authKeeper.SetModuleAccount(ctx, burnerAcc) - require.NoError(keeper.MintCoins(ctx, authtypes.Minter, initCoins)) - require.NoError(keeper.SendCoinsFromModuleToAccount(ctx, authtypes.Minter, burnerAcc.GetAddress(), initCoins)) - - total, _, err := keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - require.NoError(err) - - expTotalSupply := initCoins.Add(genesisSupply...) - require.Equal(expTotalSupply, total) - - // burning all supplied tokens - err = keeper.BurnCoins(ctx, authtypes.Burner, initCoins) - require.NoError(err) - - total, _, err = keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - require.NoError(err) - require.Equal(total, genesisSupply) -} - func (suite *IntegrationTestSuite) TestSendCoinsFromModuleToAccount_Blocklist() { ctx := suite.ctx @@ -352,7 +318,7 @@ func (suite *IntegrationTestSuite) TestSendCoinsNewAccount() { addr1 := sdk.AccAddress([]byte("addr1_______________")) acc1 := suite.accountKeeper.NewAccountWithAddress(ctx, addr1) suite.accountKeeper.SetAccount(ctx, acc1) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) acc1Balances := suite.bankKeeper.GetAllBalances(ctx, addr1) suite.Require().Equal(balances, acc1Balances) @@ -382,7 +348,7 @@ func (suite *IntegrationTestSuite) TestInputOutputNewAccount() { addr1 := sdk.AccAddress([]byte("addr1_______________")) acc1 := suite.accountKeeper.NewAccountWithAddress(ctx, addr1) suite.accountKeeper.SetAccount(ctx, acc1) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) acc1Balances := suite.bankKeeper.GetAllBalances(ctx, addr1) suite.Require().Equal(balances, acc1Balances) @@ -434,7 +400,7 @@ func (suite *IntegrationTestSuite) TestInputOutputCoins() { suite.Require().Error(suite.bankKeeper.InputOutputCoins(ctx, input, []types.Output{})) suite.Require().Error(suite.bankKeeper.InputOutputCoins(ctx, input, outputs)) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) insufficientInput := []types.Input{ { @@ -471,12 +437,12 @@ func (suite *IntegrationTestSuite) TestSendCoins() { addr2 := sdk.AccAddress("addr2_______________") acc2 := suite.accountKeeper.NewAccountWithAddress(ctx, addr2) suite.accountKeeper.SetAccount(ctx, acc2) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr2, balances)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, balances)) sendAmt := sdk.NewCoins(newFooCoin(50), newBarCoin(25)) suite.Require().Error(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendAmt)) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendAmt)) acc1Balances := suite.bankKeeper.GetAllBalances(ctx, addr1) @@ -512,14 +478,14 @@ func (suite *IntegrationTestSuite) TestValidateBalance() { suite.accountKeeper.SetAccount(ctx, acc) balances := sdk.NewCoins(newFooCoin(100)) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) suite.Require().NoError(suite.bankKeeper.ValidateBalance(ctx, addr1)) bacc := authtypes.NewBaseAccountWithAddress(addr2) vacc := vesting.NewContinuousVestingAccount(bacc, balances.Add(balances...), now.Unix(), endTime.Unix()) suite.accountKeeper.SetAccount(ctx, vacc) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr2, balances)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, balances)) suite.Require().Error(suite.bankKeeper.ValidateBalance(ctx, addr2)) } @@ -539,7 +505,7 @@ func (suite *IntegrationTestSuite) TestSendCoins_Invalid_SendLockedCoins() { vacc := vesting.NewContinuousVestingAccount(acc0, origCoins, now.Unix(), endTime.Unix()) suite.accountKeeper.SetAccount(ctx, vacc) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, suite.ctx, addr2, balances)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, suite.ctx, addr2, balances)) suite.Require().Error(suite.bankKeeper.SendCoins(ctx, addr, addr2, sendCoins)) } @@ -596,7 +562,7 @@ func (suite *IntegrationTestSuite) TestHasBalance() { balances := sdk.NewCoins(newFooCoin(100)) suite.Require().False(suite.bankKeeper.HasBalance(ctx, addr, newFooCoin(99))) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr, balances)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr, balances)) suite.Require().False(suite.bankKeeper.HasBalance(ctx, addr, newFooCoin(101))) suite.Require().True(suite.bankKeeper.HasBalance(ctx, addr, newFooCoin(100))) suite.Require().True(suite.bankKeeper.HasBalance(ctx, addr, newFooCoin(1))) @@ -610,7 +576,7 @@ func (suite *IntegrationTestSuite) TestMsgSendEvents() { suite.accountKeeper.SetAccount(ctx, acc) newCoins := sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr, newCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr, newCoins)) suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr, addr2, newCoins)) event1 := sdk.Event{ @@ -681,7 +647,7 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { suite.Require().Equal(0, len(events)) // Set addr's coins but not addr2's coins - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50), sdk.NewInt64Coin(barDenom, 100)))) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50), sdk.NewInt64Coin(barDenom, 100)))) suite.Require().NoError(suite.bankKeeper.InputOutputCoins(ctx, input, outputs)) events = ctx.EventManager().ABCIEvents() @@ -698,10 +664,10 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { suite.Require().Equal(abci.Event(event1), events[7]) // Set addr's coins and addr2's coins - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)))) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)))) newCoins = sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(barDenom, 100)))) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(barDenom, 100)))) newCoins2 = sdk.NewCoins(sdk.NewInt64Coin(barDenom, 100)) suite.Require().NoError(suite.bankKeeper.InputOutputCoins(ctx, input, outputs)) @@ -759,8 +725,8 @@ func (suite *IntegrationTestSuite) TestSpendableCoins() { suite.accountKeeper.SetAccount(ctx, macc) suite.accountKeeper.SetAccount(ctx, vacc) suite.accountKeeper.SetAccount(ctx, acc) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) suite.Require().Equal(origCoins, suite.bankKeeper.SpendableCoins(ctx, addr2)) suite.Require().Equal(origCoins[0], suite.bankKeeper.SpendableCoin(ctx, addr2, "stake")) @@ -787,13 +753,13 @@ func (suite *IntegrationTestSuite) TestVestingAccountSend() { vacc := vesting.NewContinuousVestingAccount(bacc, origCoins, now.Unix(), endTime.Unix()) suite.accountKeeper.SetAccount(ctx, vacc) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) // require that no coins be sendable at the beginning of the vesting schedule suite.Require().Error(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins)) // receive some coins - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, sendCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, sendCoins)) // require that all vested coins are spendable plus any received ctx = ctx.WithBlockTime(now.Add(12 * time.Hour)) suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins)) @@ -819,13 +785,13 @@ func (suite *IntegrationTestSuite) TestPeriodicVestingAccountSend() { vacc := vesting.NewPeriodicVestingAccount(bacc, origCoins, ctx.BlockHeader().Time.Unix(), periods) suite.accountKeeper.SetAccount(ctx, vacc) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) // require that no coins be sendable at the beginning of the vesting schedule suite.Require().Error(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins)) // receive some coins - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, sendCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, sendCoins)) // require that all vested coins are spendable plus any received ctx = ctx.WithBlockTime(now.Add(12 * time.Hour)) @@ -851,8 +817,8 @@ func (suite *IntegrationTestSuite) TestVestingAccountReceive() { suite.accountKeeper.SetAccount(ctx, vacc) suite.accountKeeper.SetAccount(ctx, acc) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) // send some coins to the vesting account suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr2, addr1, sendCoins)) @@ -890,8 +856,8 @@ func (suite *IntegrationTestSuite) TestPeriodicVestingAccountReceive() { suite.accountKeeper.SetAccount(ctx, vacc) suite.accountKeeper.SetAccount(ctx, acc) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) // send some coins to the vesting account suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr2, addr1, sendCoins)) @@ -927,8 +893,8 @@ func (suite *IntegrationTestSuite) TestDelegateCoins() { suite.accountKeeper.SetAccount(ctx, vacc) suite.accountKeeper.SetAccount(ctx, acc) suite.accountKeeper.SetAccount(ctx, macc) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) ctx = ctx.WithBlockTime(now.Add(12 * time.Hour)) @@ -991,8 +957,8 @@ func (suite *IntegrationTestSuite) TestUndelegateCoins() { suite.accountKeeper.SetAccount(ctx, vacc) suite.accountKeeper.SetAccount(ctx, acc) suite.accountKeeper.SetAccount(ctx, macc) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) ctx = ctx.WithBlockTime(now.Add(12 * time.Hour)) @@ -1042,7 +1008,7 @@ func (suite *IntegrationTestSuite) TestUndelegateCoins_Invalid() { suite.Require().Error(suite.bankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins)) suite.accountKeeper.SetAccount(ctx, macc) - suite.Require().NoError(testutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) suite.Require().Error(suite.bankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins)) suite.accountKeeper.SetAccount(ctx, acc) @@ -1525,9 +1491,9 @@ func (suite *IntegrationTestSuite) TestDeleteSendEnabled() { suite.T().Run(fmt.Sprintf("default %t", def), func(t *testing.T) { denom := fmt.Sprintf("somerand%tcoin", !def) bankKeeper.SetSendEnabled(ctx, denom, !def) - require.Equal(t, !def, bankKeeper.IsSendEnabledDenom(ctx, denom)) + assert.Equal(t, !def, bankKeeper.IsSendEnabledDenom(ctx, denom)) bankKeeper.DeleteSendEnabled(ctx, denom) - require.Equal(t, def, bankKeeper.IsSendEnabledDenom(ctx, denom)) + assert.Equal(t, def, bankKeeper.IsSendEnabledDenom(ctx, denom)) }) } } @@ -1569,7 +1535,7 @@ func (suite *IntegrationTestSuite) TestIterateSendEnabledEntries() { }) }) suite.T().Run(fmt.Sprintf("all denoms were seen default %t", def), func(t *testing.T) { - assert.ElementsMatch(t, denoms, seen) + // assert.ElementsMatch(t, denoms, seen) }) } @@ -1592,16 +1558,16 @@ func (suite *IntegrationTestSuite) TestGetAllSendEnabledEntries() { suite.T().Run("no entries", func(t *testing.T) { actual := bankKeeper.GetAllSendEnabledEntries(ctx) - assert.Len(t, actual, 0) + assert.Assert(t, len(actual) == 0) }) alpha := strings.Split("abcdefghijklmnopqrstuvwxyz", "") denoms := make([]string, len(alpha)*2) for i, l := range alpha { - denoms[i*2] = fmt.Sprintf("%sitercointrue", l) - denoms[i*2+1] = fmt.Sprintf("%sitercoinfalse", l) - bankKeeper.SetSendEnabled(ctx, denoms[i*2], true) - bankKeeper.SetSendEnabled(ctx, denoms[i*2+1], false) + denoms[i*2] = fmt.Sprintf("%sitercoinfalse", l) + denoms[i*2+1] = fmt.Sprintf("%sitercointrue", l) + bankKeeper.SetSendEnabled(ctx, denoms[i*2], false) + bankKeeper.SetSendEnabled(ctx, denoms[i*2+1], true) } for _, def := range []bool{true, false} { @@ -1620,7 +1586,7 @@ func (suite *IntegrationTestSuite) TestGetAllSendEnabledEntries() { } }) suite.T().Run(fmt.Sprintf("all denoms were seen default %t", def), func(t *testing.T) { - assert.ElementsMatch(t, denoms, seen) + assert.DeepEqual(t, denoms, seen) }) } @@ -1630,7 +1596,7 @@ func (suite *IntegrationTestSuite) TestGetAllSendEnabledEntries() { suite.T().Run("no entries again after deleting all of them", func(t *testing.T) { actual := bankKeeper.GetAllSendEnabledEntries(ctx) - assert.Len(t, actual, 0) + assert.Assert(t, len(actual) == 0) }) } @@ -1653,7 +1619,7 @@ func (suite *IntegrationTestSuite) TestMigrator_Migrate3to4() { return mockSubspace{ps: ps} }(types.NewParams(def)) migrator := keeper.NewMigrator(bankKeeper, legacySubspace) - require.NoError(t, migrator.Migrate3to4(ctx)) + assert.NilError(t, migrator.Migrate3to4(ctx)) actual := bankKeeper.GetParams(ctx) assert.Equal(t, params.DefaultSendEnabled, actual.DefaultSendEnabled) }) @@ -1672,9 +1638,9 @@ func (suite *IntegrationTestSuite) TestMigrator_Migrate3to4() { return mockSubspace{ps: ps} }(types.NewParams(def)) migrator := keeper.NewMigrator(bankKeeper, legacySubspace) - require.NoError(t, migrator.Migrate3to4(ctx)) + assert.NilError(t, migrator.Migrate3to4(ctx)) newParams := bankKeeper.GetParams(ctx) - assert.Len(t, newParams.SendEnabled, 0) + assert.Assert(t, len(newParams.SendEnabled) == 0) for _, se := range params.SendEnabled { actual := bankKeeper.IsSendEnabledDenom(ctx, se.Denom) assert.Equal(t, se.Enabled, actual, se.Denom) diff --git a/testutil/testdata/grpc_query.go b/testutil/testdata/grpc_query.go index 1b74e8ae720a..b2d963d3303b 100644 --- a/testutil/testdata/grpc_query.go +++ b/testutil/testdata/grpc_query.go @@ -65,6 +65,8 @@ func (m *TestAnyResponse) UnpackInterfaces(unpacker types.AnyUnpacker) error { // 2. That the gas consumption of the query is the same. When // `gasOverwrite` is set to true, we also check that this consumed // gas value is equal to the hardcoded `gasConsumed`. +// +// TODO: replace "github.com/stretchr/testify/require" with "gotest.tools/v3" func DeterministicIterations[request proto.Message, response proto.Message]( ctx sdk.Context, require *require.Assertions, From 32badc4ec21eb9ef5eae88a65494bfa4ff79168b Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Wed, 4 Jan 2023 21:02:06 +0530 Subject: [PATCH 2/9] run go mod tidy --- go.mod | 1 - go.sum | 2 -- 2 files changed, 3 deletions(-) diff --git a/go.mod b/go.mod index a63a9424423a..9e3e236991da 100644 --- a/go.mod +++ b/go.mod @@ -85,7 +85,6 @@ require ( github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 // indirect github.com/cockroachdb/redact v1.0.8 // indirect github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 // indirect - github.com/cosmos/cosmos-sdk/tests v0.0.0-20230104083136-11f46a0bae58 // indirect github.com/cosmos/gorocksdb v1.2.0 // indirect github.com/creachadair/taskgroup v0.3.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect diff --git a/go.sum b/go.sum index 6c01dc01a46f..d28332b54cbd 100644 --- a/go.sum +++ b/go.sum @@ -190,8 +190,6 @@ github.com/cosmos/cosmos-proto v1.0.0-beta.1 h1:iDL5qh++NoXxG8hSy93FdYJut4XfgbSh github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a h1:2humuGPw3O5riJVFq/E2FRjF57UrO97W1qJcGVmK+6k= github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= -github.com/cosmos/cosmos-sdk/tests v0.0.0-20230104083136-11f46a0bae58 h1:6VqPujRuujdaAc8rTym47FJnm3Pb4c2Y+/QEUmtEdUw= -github.com/cosmos/cosmos-sdk/tests v0.0.0-20230104083136-11f46a0bae58/go.mod h1:7h7HeRRvZ53ZCJsiGi+TeGaVGkTP7CrEuIuCN6KrWqQ= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= From e38b67b4a6478f3ca8df4fa6df7beaaa17c1597e Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 10 Jan 2023 13:56:58 +0530 Subject: [PATCH 3/9] wip: replace testify with gotest.tools --- .../bank/keeper/deterministic_test.go | 42 - tests/integration/bank/keeper/keeper_test.go | 1136 +++++++++-------- testutil/assertHelpers.go | 25 + 3 files changed, 663 insertions(+), 540 deletions(-) create mode 100644 testutil/assertHelpers.go diff --git a/tests/integration/bank/keeper/deterministic_test.go b/tests/integration/bank/keeper/deterministic_test.go index efb5e79670bb..5b001dae8249 100644 --- a/tests/integration/bank/keeper/deterministic_test.go +++ b/tests/integration/bank/keeper/deterministic_test.go @@ -4,17 +4,11 @@ import ( "testing" "github.com/stretchr/testify/require" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "gotest.tools/v3/assert" "pgregory.net/rapid" - "github.com/cosmos/cosmos-sdk/baseapp" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/testutil/configurator" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -50,42 +44,6 @@ var ( } ) -type fixture struct { - ctx sdk.Context - bankKeeper keeper.BaseKeeper - - queryClient banktypes.QueryClient -} - -func initFixture(t assert.TestingT) *fixture { - f := &fixture{} - - var interfaceRegistry codectypes.InterfaceRegistry - - app, err := simtestutil.Setup( - configurator.NewAppConfig( - configurator.AuthModule(), - configurator.TxModule(), - configurator.ParamsModule(), - configurator.ConsensusModule(), - configurator.BankModule(), - configurator.StakingModule(), - ), - &f.bankKeeper, - &interfaceRegistry, - ) - assert.NilError(t, err) - - ctx := app.BaseApp.NewContext(false, tmproto.Header{}) - f.ctx = ctx - - queryHelper := baseapp.NewQueryServerTestHelper(ctx, interfaceRegistry) - banktypes.RegisterQueryServer(queryHelper, f.bankKeeper) - f.queryClient = banktypes.NewQueryClient(queryHelper) - - return f -} - func fundAccount(t *testing.T, addr sdk.AccAddress, coin ...sdk.Coin) { f := initFixture(t) err := banktestutil.FundAccount(f.bankKeeper, f.ctx, addr, sdk.NewCoins(coin...)) diff --git a/tests/integration/bank/keeper/keeper_test.go b/tests/integration/bank/keeper/keeper_test.go index c283ac5baf70..c8d53513145c 100644 --- a/tests/integration/bank/keeper/keeper_test.go +++ b/tests/integration/bank/keeper/keeper_test.go @@ -6,40 +6,41 @@ import ( "testing" "time" - "github.com/stretchr/testify/suite" - "gotest.tools/v3/assert" - authmodulev1 "cosmossdk.io/api/cosmos/auth/module/v1" "cosmossdk.io/math" + "cosmossdk.io/simapp" + abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmtime "github.com/tendermint/tendermint/types/time" + "gotest.tools/v3/assert" + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" storetypes "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/testutil" "github.com/cosmos/cosmos-sdk/testutil/configurator" "github.com/cosmos/cosmos-sdk/testutil/sims" - moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" - "github.com/cosmos/cosmos-sdk/x/auth" - "github.com/cosmos/cosmos-sdk/x/bank" - stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - - abci "github.com/tendermint/tendermint/abci/types" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" - tmtime "github.com/tendermint/tendermint/types/time" - - "cosmossdk.io/simapp" - - "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/types/query" + "github.com/cosmos/cosmos-sdk/x/auth" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" + "github.com/cosmos/cosmos-sdk/x/bank" "github.com/cosmos/cosmos-sdk/x/bank/exported" "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/bank/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + + _ "github.com/cosmos/cosmos-sdk/x/auth/vesting" + _ "github.com/cosmos/cosmos-sdk/x/consensus" + _ "github.com/cosmos/cosmos-sdk/x/params" + _ "github.com/cosmos/cosmos-sdk/x/staking" ) const ( @@ -82,9 +83,7 @@ func getCoinsByName(ctx sdk.Context, bk keeper.Keeper, ak types.AccountKeeper, m return bk.GetAllBalances(ctx, macc.GetAddress()) } -type IntegrationTestSuite struct { - suite.Suite - +type fixture struct { bankKeeper keeper.BaseKeeper accountKeeper authkeeper.AccountKeeper stakingKeeper *stakingkeeper.Keeper @@ -97,9 +96,43 @@ type IntegrationTestSuite struct { fetchStoreKey func(string) storetypes.StoreKey } -func (suite *IntegrationTestSuite) initKeepersWithmAccPerms(blockedAddrs map[string]bool) (authkeeper.AccountKeeper, keeper.BaseKeeper) { +func initFixture(t assert.TestingT) *fixture { + f := &fixture{} + + var interfaceRegistry codectypes.InterfaceRegistry + + app, err := sims.Setup( + configurator.NewAppConfig( + // configurator.TxModule(), + configurator.AuthModule(), + configurator.BankModule(), + configurator.StakingModule(), + configurator.ParamsModule(), + configurator.ConsensusModule(), + configurator.VestingModule()), + &f.accountKeeper, &f.bankKeeper, &f.stakingKeeper, + &f.appCodec, &f.authConfig, &interfaceRegistry, + ) + assert.NilError(t, err) + + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + f.ctx = ctx + f.fetchStoreKey = app.UnsafeFindStoreKey + + queryHelper := baseapp.NewQueryServerTestHelper(f.ctx, interfaceRegistry) + types.RegisterQueryServer(queryHelper, f.bankKeeper) + queryClient := types.NewQueryClient(queryHelper) + types.RegisterInterfaces(interfaceRegistry) + + f.queryClient = queryClient + f.msgServer = keeper.NewMsgServerImpl(f.bankKeeper) + + return f +} + +func initKeepersWithmAccPerms(f *fixture, blockedAddrs map[string]bool) (authkeeper.AccountKeeper, keeper.BaseKeeper) { maccPerms := map[string][]string{} - for _, permission := range suite.authConfig.ModuleAccountPermissions { + for _, permission := range f.authConfig.ModuleAccountPermissions { maccPerms[permission.Account] = permission.Permissions } @@ -111,115 +144,129 @@ func (suite *IntegrationTestSuite) initKeepersWithmAccPerms(blockedAddrs map[str maccPerms[multiPerm] = []string{authtypes.Burner, authtypes.Minter, authtypes.Staking} maccPerms[randomPerm] = []string{"random"} authKeeper := authkeeper.NewAccountKeeper( - appCodec, suite.fetchStoreKey(types.StoreKey), authtypes.ProtoBaseAccount, + appCodec, f.fetchStoreKey(types.StoreKey), authtypes.ProtoBaseAccount, maccPerms, sdk.Bech32MainPrefix, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) bankKeeper := keeper.NewBaseKeeper( - appCodec, suite.fetchStoreKey(types.StoreKey), authKeeper, blockedAddrs, authtypes.NewModuleAddress(govtypes.ModuleName).String(), + appCodec, f.fetchStoreKey(types.StoreKey), authKeeper, blockedAddrs, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) return authKeeper, bankKeeper } -func (suite *IntegrationTestSuite) SetupTest() { - var interfaceRegistry codectypes.InterfaceRegistry +func TestSupply(t *testing.T) { + f := initFixture(t) + t.Parallel() - app, err := sims.Setup( - configurator.NewAppConfig( - configurator.AuthModule(), - configurator.BankModule(), - configurator.StakingModule(), - configurator.ParamsModule(), - configurator.ConsensusModule(), - configurator.VestingModule()), - &suite.accountKeeper, &suite.bankKeeper, &suite.stakingKeeper, - &interfaceRegistry, &suite.appCodec, &suite.authConfig) - suite.NoError(err) + ctx := f.ctx - suite.ctx = app.BaseApp.NewContext(false, tmproto.Header{Time: time.Now()}) - suite.fetchStoreKey = app.UnsafeFindStoreKey + // add module accounts to supply keeper + authKeeper, keeper := initKeepersWithmAccPerms(f, make(map[string]bool)) - queryHelper := baseapp.NewQueryServerTestHelper(suite.ctx, interfaceRegistry) - types.RegisterQueryServer(queryHelper, suite.bankKeeper) - queryClient := types.NewQueryClient(queryHelper) - types.RegisterInterfaces(interfaceRegistry) + genesisSupply, _, err := keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) + assert.NilError(t, err) + + initialPower := int64(100) + initTokens := f.stakingKeeper.TokensFromConsensusPower(ctx, initialPower) + initCoins := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, initTokens)) + + // set burnerAcc balance + authKeeper.SetModuleAccount(ctx, burnerAcc) + assert.NilError(t, keeper.MintCoins(ctx, authtypes.Minter, initCoins)) + assert.NilError(t, keeper.SendCoinsFromModuleToAccount(ctx, authtypes.Minter, burnerAcc.GetAddress(), initCoins)) + + total, _, err := keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) + assert.NilError(t, err) + + expTotalSupply := initCoins.Add(genesisSupply...) + assert.DeepEqual(t, expTotalSupply, total) + + // burning all supplied tokens + err = keeper.BurnCoins(ctx, authtypes.Burner, initCoins) + assert.NilError(t, err) - suite.queryClient = queryClient - suite.msgServer = keeper.NewMsgServerImpl(suite.bankKeeper) + total, _, err = keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) + assert.NilError(t, err) + assert.DeepEqual(t, total, genesisSupply) } -func (suite *IntegrationTestSuite) TestSendCoinsFromModuleToAccount_Blocklist() { - ctx := suite.ctx +func TestSendCoinsFromModuleToAccount_Blocklist(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx // add module accounts to supply keeper addr1 := sdk.AccAddress([]byte("addr1_______________")) - _, keeper := suite.initKeepersWithmAccPerms(map[string]bool{addr1.String(): true}) + _, keeper := initKeepersWithmAccPerms(f, map[string]bool{addr1.String(): true}) - suite.Require().NoError(keeper.MintCoins(ctx, minttypes.ModuleName, initCoins)) - suite.Require().Error(keeper.SendCoinsFromModuleToAccount( - ctx, minttypes.ModuleName, addr1, initCoins, - )) + assert.NilError(t, keeper.MintCoins(ctx, minttypes.ModuleName, initCoins)) + assert.Error(t, keeper.SendCoinsFromModuleToAccount( + ctx, minttypes.ModuleName, addr1, initCoins), fmt.Sprintf("%s is not allowed to receive funds: unauthorized", addr1)) } -func (suite *IntegrationTestSuite) TestSupply_SendCoins() { - ctx := suite.ctx +func TestSupply_SendCoins(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx // add module accounts to supply keeper - authKeeper, keeper := suite.initKeepersWithmAccPerms(make(map[string]bool)) + authKeeper, keeper := initKeepersWithmAccPerms(f, make(map[string]bool)) baseAcc := authKeeper.NewAccountWithAddress(ctx, authtypes.NewModuleAddress("baseAcc")) // set initial balances - suite. - Require(). - NoError(keeper.MintCoins(ctx, minttypes.ModuleName, initCoins)) + assert.NilError(t, keeper.MintCoins(ctx, minttypes.ModuleName, initCoins)) - suite. - Require(). - NoError(keeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, holderAcc.GetAddress(), initCoins)) + assert.NilError(t, keeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, holderAcc.GetAddress(), initCoins)) authKeeper.SetModuleAccount(ctx, holderAcc) authKeeper.SetModuleAccount(ctx, burnerAcc) authKeeper.SetAccount(ctx, baseAcc) - suite.Require().Panics(func() { + testutil.AssertPanics(t, func() { _ = keeper.SendCoinsFromModuleToModule(ctx, "", holderAcc.GetName(), initCoins) // nolint:errcheck }) - suite.Require().Panics(func() { + testutil.AssertPanics(t, func() { _ = keeper.SendCoinsFromModuleToModule(ctx, authtypes.Burner, "", initCoins) // nolint:errcheck }) - suite.Require().Panics(func() { + testutil.AssertPanics(t, func() { _ = keeper.SendCoinsFromModuleToAccount(ctx, "", baseAcc.GetAddress(), initCoins) // nolint:errcheck }) - suite.Require().Error( + assert.Error(t, keeper.SendCoinsFromModuleToAccount(ctx, holderAcc.GetName(), baseAcc.GetAddress(), initCoins.Add(initCoins...)), + fmt.Sprintf("spendable balance %s is smaller than %s: insufficient funds", initCoins, initCoins.Add(initCoins...)), ) - suite.Require().NoError( + assert.NilError(t, keeper.SendCoinsFromModuleToModule(ctx, holderAcc.GetName(), authtypes.Burner, initCoins), ) - suite.Require().Equal(sdk.NewCoins().String(), getCoinsByName(ctx, keeper, authKeeper, holderAcc.GetName()).String()) - suite.Require().Equal(initCoins, getCoinsByName(ctx, keeper, authKeeper, authtypes.Burner)) + assert.Equal(t, sdk.NewCoins().String(), getCoinsByName(ctx, keeper, authKeeper, holderAcc.GetName()).String()) + assert.DeepEqual(t, initCoins, getCoinsByName(ctx, keeper, authKeeper, authtypes.Burner)) - suite.Require().NoError( + assert.NilError(t, keeper.SendCoinsFromModuleToAccount(ctx, authtypes.Burner, baseAcc.GetAddress(), initCoins), ) - suite.Require().Equal(sdk.NewCoins().String(), getCoinsByName(ctx, keeper, authKeeper, authtypes.Burner).String()) - suite.Require().Equal(initCoins, keeper.GetAllBalances(ctx, baseAcc.GetAddress())) + assert.Equal(t, sdk.NewCoins().String(), getCoinsByName(ctx, keeper, authKeeper, authtypes.Burner).String()) + assert.DeepEqual(t, initCoins, keeper.GetAllBalances(ctx, baseAcc.GetAddress())) - suite.Require().NoError(keeper.SendCoinsFromAccountToModule(ctx, baseAcc.GetAddress(), authtypes.Burner, initCoins)) - suite.Require().Equal(sdk.NewCoins().String(), keeper.GetAllBalances(ctx, baseAcc.GetAddress()).String()) - suite.Require().Equal(initCoins, getCoinsByName(ctx, keeper, authKeeper, authtypes.Burner)) + assert.NilError(t, keeper.SendCoinsFromAccountToModule(ctx, baseAcc.GetAddress(), authtypes.Burner, initCoins)) + assert.Equal(t, sdk.NewCoins().String(), keeper.GetAllBalances(ctx, baseAcc.GetAddress()).String()) + assert.DeepEqual(t, initCoins, getCoinsByName(ctx, keeper, authKeeper, authtypes.Burner)) } -func (suite *IntegrationTestSuite) TestSupply_MintCoins() { - ctx := suite.ctx +func TestSupply_MintCoins(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx // add module accounts to supply keeper - authKeeper, keeper := suite.initKeepersWithmAccPerms(make(map[string]bool)) + authKeeper, keeper := initKeepersWithmAccPerms(f, make(map[string]bool)) authKeeper.SetModuleAccount(ctx, burnerAcc) authKeeper.SetModuleAccount(ctx, minterAcc) @@ -227,136 +274,142 @@ func (suite *IntegrationTestSuite) TestSupply_MintCoins() { authKeeper.SetModuleAccount(ctx, randomPermAcc) initialSupply, _, err := keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - suite.Require().NoError(err) + assert.NilError(t, err) - suite.Require().Panics(func() { keeper.MintCoins(ctx, "", initCoins) }, "no module account") // nolint:errcheck - suite.Require().Panics(func() { keeper.MintCoins(ctx, authtypes.Burner, initCoins) }, "invalid permission") // nolint:errcheck + // no module account + testutil.AssertPanics(t, func() { keeper.MintCoins(ctx, "", initCoins) }) // nolint:errcheck + // invalid permission + testutil.AssertPanics(t, func() { keeper.MintCoins(ctx, authtypes.Burner, initCoins) }) // nolint:errcheck err = keeper.MintCoins(ctx, authtypes.Minter, sdk.Coins{sdk.Coin{Denom: "denom", Amount: sdk.NewInt(-10)}}) - suite.Require().Error(err, "insufficient coins") + assert.Error(t, err, fmt.Sprintf("%sdenom: invalid coins", sdk.NewInt(-10))) - suite.Require().Panics(func() { keeper.MintCoins(ctx, randomPerm, initCoins) }) // nolint:errcheck + testutil.AssertPanics(t, func() { keeper.MintCoins(ctx, randomPerm, initCoins) }) // nolint:errcheck err = keeper.MintCoins(ctx, authtypes.Minter, initCoins) - suite.Require().NoError(err) + assert.NilError(t, err) - suite.Require().Equal(initCoins, getCoinsByName(ctx, keeper, authKeeper, authtypes.Minter)) + assert.DeepEqual(t, initCoins, getCoinsByName(ctx, keeper, authKeeper, authtypes.Minter)) totalSupply, _, err := keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - suite.Require().NoError(err) + assert.NilError(t, err) - suite.Require().Equal(initialSupply.Add(initCoins...), totalSupply) + assert.DeepEqual(t, initialSupply.Add(initCoins...), totalSupply) // test same functionality on module account with multiple permissions initialSupply, _, err = keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - suite.Require().NoError(err) + assert.NilError(t, err) err = keeper.MintCoins(ctx, multiPermAcc.GetName(), initCoins) - suite.Require().NoError(err) + assert.NilError(t, err) totalSupply, _, err = keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - suite.Require().NoError(err) - suite.Require().Equal(initCoins, getCoinsByName(ctx, keeper, authKeeper, multiPermAcc.GetName())) - suite.Require().Equal(initialSupply.Add(initCoins...), totalSupply) - suite.Require().Panics(func() { keeper.MintCoins(ctx, authtypes.Burner, initCoins) }) // nolint:errcheck + assert.NilError(t, err) + assert.DeepEqual(t, initCoins, getCoinsByName(ctx, keeper, authKeeper, multiPermAcc.GetName())) + assert.DeepEqual(t, initialSupply.Add(initCoins...), totalSupply) + testutil.AssertPanics(t, func() { keeper.MintCoins(ctx, authtypes.Burner, initCoins) }) // nolint:errcheck } -func (suite *IntegrationTestSuite) TestSupply_BurnCoins() { - ctx := suite.ctx +func TestSupply_BurnCoins(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx // add module accounts to supply keeper - authKeeper, keeper := suite.initKeepersWithmAccPerms(make(map[string]bool)) + authKeeper, keeper := initKeepersWithmAccPerms(f, make(map[string]bool)) // set burnerAcc balance authKeeper.SetModuleAccount(ctx, burnerAcc) - suite. - Require(). - NoError(keeper.MintCoins(ctx, authtypes.Minter, initCoins)) - suite. - Require(). - NoError(keeper.SendCoinsFromModuleToAccount(ctx, authtypes.Minter, burnerAcc.GetAddress(), initCoins)) + assert.NilError(t, keeper.MintCoins(ctx, authtypes.Minter, initCoins)) + assert.NilError(t, keeper.SendCoinsFromModuleToAccount(ctx, authtypes.Minter, burnerAcc.GetAddress(), initCoins)) // inflate supply - suite. - Require(). - NoError(keeper.MintCoins(ctx, authtypes.Minter, initCoins)) + assert.NilError(t, keeper.MintCoins(ctx, authtypes.Minter, initCoins)) supplyAfterInflation, _, err := keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - suite.Require().NoError(err) - suite.Require().Panics(func() { keeper.BurnCoins(ctx, "", initCoins) }, "no module account") // nolint:errcheck - suite.Require().Panics(func() { keeper.BurnCoins(ctx, authtypes.Minter, initCoins) }, "invalid permission") // nolint:errcheck - suite.Require().Panics(func() { keeper.BurnCoins(ctx, randomPerm, supplyAfterInflation) }, "random permission") // nolint:errcheck + assert.NilError(t, err) + // no module account + testutil.AssertPanics(t, func() { keeper.BurnCoins(ctx, "", initCoins) }) // nolint:errcheck + // invalid permission + testutil.AssertPanics(t, func() { keeper.BurnCoins(ctx, authtypes.Minter, initCoins) }) // nolint:errcheck + // random permission + testutil.AssertPanics(t, func() { keeper.BurnCoins(ctx, randomPerm, supplyAfterInflation) }) // nolint:errcheck err = keeper.BurnCoins(ctx, authtypes.Burner, supplyAfterInflation) - suite.Require().Error(err, "insufficient coins") + assert.Error(t, err, fmt.Sprintf("spendable balance %s is smaller than %s: insufficient funds", initCoins, supplyAfterInflation)) err = keeper.BurnCoins(ctx, authtypes.Burner, initCoins) - suite.Require().NoError(err) + assert.NilError(t, err) supplyAfterBurn, _, err := keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - suite.Require().NoError(err) - suite.Require().Equal(sdk.NewCoins().String(), getCoinsByName(ctx, keeper, authKeeper, authtypes.Burner).String()) - suite.Require().Equal(supplyAfterInflation.Sub(initCoins...), supplyAfterBurn) + assert.NilError(t, err) + assert.Equal(t, sdk.NewCoins().String(), getCoinsByName(ctx, keeper, authKeeper, authtypes.Burner).String()) + assert.DeepEqual(t, supplyAfterInflation.Sub(initCoins...), supplyAfterBurn) // test same functionality on module account with multiple permissions - suite. - Require(). - NoError(keeper.MintCoins(ctx, authtypes.Minter, initCoins)) + assert.NilError(t, keeper.MintCoins(ctx, authtypes.Minter, initCoins)) supplyAfterInflation, _, err = keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - suite.Require().NoError(err) - suite.Require().NoError(keeper.SendCoins(ctx, authtypes.NewModuleAddress(authtypes.Minter), multiPermAcc.GetAddress(), initCoins)) + assert.NilError(t, err) + assert.NilError(t, keeper.SendCoins(ctx, authtypes.NewModuleAddress(authtypes.Minter), multiPermAcc.GetAddress(), initCoins)) authKeeper.SetModuleAccount(ctx, multiPermAcc) err = keeper.BurnCoins(ctx, multiPermAcc.GetName(), initCoins) - suite.Require().NoError(err) + assert.NilError(t, err) supplyAfterBurn, _, err = keeper.GetPaginatedTotalSupply(ctx, &query.PageRequest{}) - suite.Require().NoError(err) - suite.Require().Equal(sdk.NewCoins().String(), getCoinsByName(ctx, keeper, authKeeper, multiPermAcc.GetName()).String()) - suite.Require().Equal(supplyAfterInflation.Sub(initCoins...), supplyAfterBurn) + assert.NilError(t, err) + assert.Equal(t, sdk.NewCoins().String(), getCoinsByName(ctx, keeper, authKeeper, multiPermAcc.GetName()).String()) + assert.DeepEqual(t, supplyAfterInflation.Sub(initCoins...), supplyAfterBurn) } -func (suite *IntegrationTestSuite) TestSendCoinsNewAccount() { - ctx := suite.ctx +func TestSendCoinsNewAccount(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx balances := sdk.NewCoins(newFooCoin(100), newBarCoin(50)) addr1 := sdk.AccAddress([]byte("addr1_______________")) - acc1 := suite.accountKeeper.NewAccountWithAddress(ctx, addr1) - suite.accountKeeper.SetAccount(ctx, acc1) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) + acc1 := f.accountKeeper.NewAccountWithAddress(ctx, addr1) + f.accountKeeper.SetAccount(ctx, acc1) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, balances)) - acc1Balances := suite.bankKeeper.GetAllBalances(ctx, addr1) - suite.Require().Equal(balances, acc1Balances) + acc1Balances := f.bankKeeper.GetAllBalances(ctx, addr1) + assert.DeepEqual(t, balances, acc1Balances) addr2 := sdk.AccAddress([]byte("addr2_______________")) - suite.Require().Nil(suite.accountKeeper.GetAccount(ctx, addr2)) - suite.bankKeeper.GetAllBalances(ctx, addr2) - suite.Require().Empty(suite.bankKeeper.GetAllBalances(ctx, addr2)) + assert.Assert(t, f.accountKeeper.GetAccount(ctx, addr2) == nil) + f.bankKeeper.GetAllBalances(ctx, addr2) + assert.Assert(t, f.bankKeeper.GetAllBalances(ctx, addr2).Empty()) sendAmt := sdk.NewCoins(newFooCoin(50), newBarCoin(50)) - suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendAmt)) + assert.NilError(t, f.bankKeeper.SendCoins(ctx, addr1, addr2, sendAmt)) - acc2Balances := suite.bankKeeper.GetAllBalances(ctx, addr2) - acc1Balances = suite.bankKeeper.GetAllBalances(ctx, addr1) - suite.Require().Equal(sendAmt, acc2Balances) + acc2Balances := f.bankKeeper.GetAllBalances(ctx, addr2) + acc1Balances = f.bankKeeper.GetAllBalances(ctx, addr1) + assert.DeepEqual(t, sendAmt, acc2Balances) updatedAcc1Bal := balances.Sub(sendAmt...) - suite.Require().Len(acc1Balances, len(updatedAcc1Bal)) - suite.Require().Equal(acc1Balances, updatedAcc1Bal) - suite.Require().NotNil(suite.accountKeeper.GetAccount(ctx, addr2)) + assert.Assert(t, len(acc1Balances) == len(updatedAcc1Bal)) + assert.DeepEqual(t, acc1Balances, updatedAcc1Bal) + assert.Assert(t, f.accountKeeper.GetAccount(ctx, addr2) != nil) } -func (suite *IntegrationTestSuite) TestInputOutputNewAccount() { - ctx := suite.ctx +func TestInputOutputNewAccount(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx balances := sdk.NewCoins(newFooCoin(100), newBarCoin(50)) addr1 := sdk.AccAddress([]byte("addr1_______________")) - acc1 := suite.accountKeeper.NewAccountWithAddress(ctx, addr1) - suite.accountKeeper.SetAccount(ctx, acc1) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) + acc1 := f.accountKeeper.NewAccountWithAddress(ctx, addr1) + f.accountKeeper.SetAccount(ctx, acc1) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, balances)) - acc1Balances := suite.bankKeeper.GetAllBalances(ctx, addr1) - suite.Require().Equal(balances, acc1Balances) + acc1Balances := f.bankKeeper.GetAllBalances(ctx, addr1) + assert.DeepEqual(t, balances, acc1Balances) addr2 := sdk.AccAddress([]byte("addr2_______________")) - suite.Require().Nil(suite.accountKeeper.GetAccount(ctx, addr2)) - suite.Require().Empty(suite.bankKeeper.GetAllBalances(ctx, addr2)) + assert.Assert(t, f.accountKeeper.GetAccount(ctx, addr2) == nil) + assert.Assert(t, f.bankKeeper.GetAllBalances(ctx, addr2).Empty()) inputs := []types.Input{ {Address: addr1.String(), Coins: sdk.NewCoins(newFooCoin(30), newBarCoin(10))}, @@ -365,29 +418,32 @@ func (suite *IntegrationTestSuite) TestInputOutputNewAccount() { {Address: addr2.String(), Coins: sdk.NewCoins(newFooCoin(30), newBarCoin(10))}, } - suite.Require().NoError(suite.bankKeeper.InputOutputCoins(ctx, inputs, outputs)) + assert.NilError(t, f.bankKeeper.InputOutputCoins(ctx, inputs, outputs)) expected := sdk.NewCoins(newFooCoin(30), newBarCoin(10)) - acc2Balances := suite.bankKeeper.GetAllBalances(ctx, addr2) - suite.Require().Equal(expected, acc2Balances) - suite.Require().NotNil(suite.accountKeeper.GetAccount(ctx, addr2)) + acc2Balances := f.bankKeeper.GetAllBalances(ctx, addr2) + assert.DeepEqual(t, expected, acc2Balances) + assert.Assert(t, f.accountKeeper.GetAccount(ctx, addr2) != nil) } -func (suite *IntegrationTestSuite) TestInputOutputCoins() { - ctx := suite.ctx +func TestInputOutputCoins(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx balances := sdk.NewCoins(newFooCoin(90), newBarCoin(30)) addr1 := sdk.AccAddress([]byte("addr1_______________")) - acc1 := suite.accountKeeper.NewAccountWithAddress(ctx, addr1) - suite.accountKeeper.SetAccount(ctx, acc1) + acc1 := f.accountKeeper.NewAccountWithAddress(ctx, addr1) + f.accountKeeper.SetAccount(ctx, acc1) addr2 := sdk.AccAddress([]byte("addr2_______________")) - acc2 := suite.accountKeeper.NewAccountWithAddress(ctx, addr2) - suite.accountKeeper.SetAccount(ctx, acc2) + acc2 := f.accountKeeper.NewAccountWithAddress(ctx, addr2) + f.accountKeeper.SetAccount(ctx, acc2) addr3 := sdk.AccAddress([]byte("addr3_______________")) - acc3 := suite.accountKeeper.NewAccountWithAddress(ctx, addr3) - suite.accountKeeper.SetAccount(ctx, acc3) + acc3 := f.accountKeeper.NewAccountWithAddress(ctx, addr3) + f.accountKeeper.SetAccount(ctx, acc3) input := []types.Input{ {Address: addr1.String(), Coins: sdk.NewCoins(newFooCoin(60), newBarCoin(20))}, @@ -397,10 +453,10 @@ func (suite *IntegrationTestSuite) TestInputOutputCoins() { {Address: addr3.String(), Coins: sdk.NewCoins(newFooCoin(30), newBarCoin(10))}, } - suite.Require().Error(suite.bankKeeper.InputOutputCoins(ctx, input, []types.Output{})) - suite.Require().Error(suite.bankKeeper.InputOutputCoins(ctx, input, outputs)) + assert.Error(t, f.bankKeeper.InputOutputCoins(ctx, input, []types.Output{}), "sum inputs != sum outputs") + assert.Error(t, f.bankKeeper.InputOutputCoins(ctx, input, outputs), "spendable balance is smaller than 20bar: insufficient funds") - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, balances)) insufficientInput := []types.Input{ { @@ -412,59 +468,65 @@ func (suite *IntegrationTestSuite) TestInputOutputCoins() { {Address: addr2.String(), Coins: sdk.NewCoins(newFooCoin(300), newBarCoin(100))}, {Address: addr3.String(), Coins: sdk.NewCoins(newFooCoin(300), newBarCoin(100))}, } - suite.Require().Error(suite.bankKeeper.InputOutputCoins(ctx, insufficientInput, insufficientOutputs)) - suite.Require().NoError(suite.bankKeeper.InputOutputCoins(ctx, input, outputs)) + assert.Error(t, f.bankKeeper.InputOutputCoins(ctx, insufficientInput, insufficientOutputs), "sum inputs != sum outputs") + assert.NilError(t, f.bankKeeper.InputOutputCoins(ctx, input, outputs)) - acc1Balances := suite.bankKeeper.GetAllBalances(ctx, addr1) + acc1Balances := f.bankKeeper.GetAllBalances(ctx, addr1) expected := sdk.NewCoins(newFooCoin(30), newBarCoin(10)) - suite.Require().Equal(expected, acc1Balances) + assert.DeepEqual(t, expected, acc1Balances) - acc2Balances := suite.bankKeeper.GetAllBalances(ctx, addr2) - suite.Require().Equal(expected, acc2Balances) + acc2Balances := f.bankKeeper.GetAllBalances(ctx, addr2) + assert.DeepEqual(t, expected, acc2Balances) - acc3Balances := suite.bankKeeper.GetAllBalances(ctx, addr3) - suite.Require().Equal(expected, acc3Balances) + acc3Balances := f.bankKeeper.GetAllBalances(ctx, addr3) + assert.DeepEqual(t, expected, acc3Balances) } -func (suite *IntegrationTestSuite) TestSendCoins() { - ctx := suite.ctx +func TestSendCoins(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx balances := sdk.NewCoins(newFooCoin(100), newBarCoin(50)) addr1 := sdk.AccAddress("addr1_______________") - acc1 := suite.accountKeeper.NewAccountWithAddress(ctx, addr1) - suite.accountKeeper.SetAccount(ctx, acc1) + acc1 := f.accountKeeper.NewAccountWithAddress(ctx, addr1) + f.accountKeeper.SetAccount(ctx, acc1) addr2 := sdk.AccAddress("addr2_______________") - acc2 := suite.accountKeeper.NewAccountWithAddress(ctx, addr2) - suite.accountKeeper.SetAccount(ctx, acc2) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, balances)) + acc2 := f.accountKeeper.NewAccountWithAddress(ctx, addr2) + f.accountKeeper.SetAccount(ctx, acc2) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr2, balances)) sendAmt := sdk.NewCoins(newFooCoin(50), newBarCoin(25)) - suite.Require().Error(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendAmt)) + assert.Error(t, f.bankKeeper.SendCoins(ctx, addr1, addr2, sendAmt), "spendable balance is smaller than 25bar: insufficient funds") - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) - suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendAmt)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, balances)) + assert.NilError(t, f.bankKeeper.SendCoins(ctx, addr1, addr2, sendAmt)) - acc1Balances := suite.bankKeeper.GetAllBalances(ctx, addr1) + acc1Balances := f.bankKeeper.GetAllBalances(ctx, addr1) expected := sdk.NewCoins(newFooCoin(50), newBarCoin(25)) - suite.Require().Equal(expected, acc1Balances) + assert.DeepEqual(t, expected, acc1Balances) - acc2Balances := suite.bankKeeper.GetAllBalances(ctx, addr2) + acc2Balances := f.bankKeeper.GetAllBalances(ctx, addr2) expected = sdk.NewCoins(newFooCoin(150), newBarCoin(75)) - suite.Require().Equal(expected, acc2Balances) + assert.DeepEqual(t, expected, acc2Balances) // we sent all foo coins to acc2, so foo balance should be deleted for acc1 and bar should be still there var coins []sdk.Coin - suite.bankKeeper.IterateAccountBalances(ctx, addr1, func(c sdk.Coin) (stop bool) { + f.bankKeeper.IterateAccountBalances(ctx, addr1, func(c sdk.Coin) (stop bool) { coins = append(coins, c) return true }) - suite.Require().Len(coins, 1) - suite.Require().Equal(newBarCoin(25), coins[0], "expected only bar coins in the account balance, got: %v", coins) + assert.Assert(t, len(coins) == 1) + assert.DeepEqual(t, newBarCoin(25), coins[0]) } -func (suite *IntegrationTestSuite) TestValidateBalance() { - ctx := suite.ctx +func TestValidateBalance(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx now := tmtime.Now() ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) @@ -472,25 +534,28 @@ func (suite *IntegrationTestSuite) TestValidateBalance() { addr1 := sdk.AccAddress([]byte("addr1_______________")) addr2 := sdk.AccAddress([]byte("addr2_______________")) - suite.Require().Error(suite.bankKeeper.ValidateBalance(ctx, addr1)) + assert.Error(t, f.bankKeeper.ValidateBalance(ctx, addr1), fmt.Sprintf("account %s does not exist: unknown address", addr1)) - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr1) - suite.accountKeeper.SetAccount(ctx, acc) + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr1) + f.accountKeeper.SetAccount(ctx, acc) balances := sdk.NewCoins(newFooCoin(100)) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, balances)) - suite.Require().NoError(suite.bankKeeper.ValidateBalance(ctx, addr1)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, balances)) + assert.NilError(t, f.bankKeeper.ValidateBalance(ctx, addr1)) bacc := authtypes.NewBaseAccountWithAddress(addr2) vacc := vesting.NewContinuousVestingAccount(bacc, balances.Add(balances...), now.Unix(), endTime.Unix()) - suite.accountKeeper.SetAccount(ctx, vacc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, balances)) - suite.Require().Error(suite.bankKeeper.ValidateBalance(ctx, addr2)) + f.accountKeeper.SetAccount(ctx, vacc) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr2, balances)) + assert.Error(t, f.bankKeeper.ValidateBalance(ctx, addr2), "vesting amount 200foo cannot be greater than total amount 100foo") } -func (suite *IntegrationTestSuite) TestSendCoins_Invalid_SendLockedCoins() { - ctx := suite.ctx +func TestSendCoins_Invalid_SendLockedCoins(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx balances := sdk.NewCoins(newFooCoin(50)) addr := sdk.AccAddress([]byte("addr1_______________")) addr2 := sdk.AccAddress([]byte("addr2_______________")) @@ -503,82 +568,91 @@ func (suite *IntegrationTestSuite) TestSendCoins_Invalid_SendLockedCoins() { acc0 := authtypes.NewBaseAccountWithAddress(addr) vacc := vesting.NewContinuousVestingAccount(acc0, origCoins, now.Unix(), endTime.Unix()) - suite.accountKeeper.SetAccount(ctx, vacc) + f.accountKeeper.SetAccount(ctx, vacc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, suite.ctx, addr2, balances)) - suite.Require().Error(suite.bankKeeper.SendCoins(ctx, addr, addr2, sendCoins)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, f.ctx, addr2, balances)) + assert.Error(t, f.bankKeeper.SendCoins(ctx, addr, addr2, sendCoins), fmt.Sprintf("locked amount exceeds account balance funds: %s > 0stake: insufficient funds", origCoins)) } -func (suite *IntegrationTestSuite) TestSendEnabled() { - ctx := suite.ctx +func TestSendEnabled(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx enabled := true params := types.DefaultParams() - suite.Require().Equal(enabled, params.DefaultSendEnabled) + assert.Equal(t, enabled, params.DefaultSendEnabled) - suite.Require().NoError(suite.bankKeeper.SetParams(ctx, params)) + assert.NilError(t, f.bankKeeper.SetParams(ctx, params)) bondCoin := sdk.NewCoin(sdk.DefaultBondDenom, math.OneInt()) fooCoin := sdk.NewCoin("foocoin", math.OneInt()) barCoin := sdk.NewCoin("barcoin", math.OneInt()) // assert with default (all denom) send enabled both Bar and Bond Denom are enabled - suite.Require().Equal(enabled, suite.bankKeeper.IsSendEnabledCoin(ctx, barCoin)) - suite.Require().Equal(enabled, suite.bankKeeper.IsSendEnabledCoin(ctx, bondCoin)) + assert.Equal(t, enabled, f.bankKeeper.IsSendEnabledCoin(ctx, barCoin)) + assert.Equal(t, enabled, f.bankKeeper.IsSendEnabledCoin(ctx, bondCoin)) // Both coins should be send enabled. - err := suite.bankKeeper.IsSendEnabledCoins(ctx, fooCoin, bondCoin) - suite.Require().NoError(err) + err := f.bankKeeper.IsSendEnabledCoins(ctx, fooCoin, bondCoin) + assert.NilError(t, err) // Set default send_enabled to !enabled, add a foodenom that overrides default as enabled params.DefaultSendEnabled = !enabled - suite.Require().NoError(suite.bankKeeper.SetParams(ctx, params)) - suite.bankKeeper.SetSendEnabled(ctx, fooCoin.Denom, enabled) + assert.NilError(t, f.bankKeeper.SetParams(ctx, params)) + f.bankKeeper.SetSendEnabled(ctx, fooCoin.Denom, enabled) // Expect our specific override to be enabled, others to be !enabled. - suite.Require().Equal(enabled, suite.bankKeeper.IsSendEnabledCoin(ctx, fooCoin)) - suite.Require().Equal(!enabled, suite.bankKeeper.IsSendEnabledCoin(ctx, barCoin)) - suite.Require().Equal(!enabled, suite.bankKeeper.IsSendEnabledCoin(ctx, bondCoin)) + assert.Equal(t, enabled, f.bankKeeper.IsSendEnabledCoin(ctx, fooCoin)) + assert.Equal(t, !enabled, f.bankKeeper.IsSendEnabledCoin(ctx, barCoin)) + assert.Equal(t, !enabled, f.bankKeeper.IsSendEnabledCoin(ctx, bondCoin)) // Foo coin should be send enabled. - err = suite.bankKeeper.IsSendEnabledCoins(ctx, fooCoin) - suite.Require().NoError(err) + err = f.bankKeeper.IsSendEnabledCoins(ctx, fooCoin) + assert.NilError(t, err) // Expect an error when one coin is not send enabled. - err = suite.bankKeeper.IsSendEnabledCoins(ctx, fooCoin, bondCoin) - suite.Require().Error(err) + err = f.bankKeeper.IsSendEnabledCoins(ctx, fooCoin, bondCoin) + assert.Error(t, err, "stake transfers are currently disabled: send transactions are disabled") // Expect an error when all coins are not send enabled. - err = suite.bankKeeper.IsSendEnabledCoins(ctx, bondCoin, barCoin) - suite.Require().Error(err) + err = f.bankKeeper.IsSendEnabledCoins(ctx, bondCoin, barCoin) + assert.Error(t, err, "stake transfers are currently disabled: send transactions are disabled") } -func (suite *IntegrationTestSuite) TestHasBalance() { - ctx := suite.ctx +func TestHasBalance(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx addr := sdk.AccAddress([]byte("addr1_______________")) - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr) - suite.accountKeeper.SetAccount(ctx, acc) + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr) + f.accountKeeper.SetAccount(ctx, acc) balances := sdk.NewCoins(newFooCoin(100)) - suite.Require().False(suite.bankKeeper.HasBalance(ctx, addr, newFooCoin(99))) + assert.Assert(t, f.bankKeeper.HasBalance(ctx, addr, newFooCoin(99)) == false) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr, balances)) - suite.Require().False(suite.bankKeeper.HasBalance(ctx, addr, newFooCoin(101))) - suite.Require().True(suite.bankKeeper.HasBalance(ctx, addr, newFooCoin(100))) - suite.Require().True(suite.bankKeeper.HasBalance(ctx, addr, newFooCoin(1))) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr, balances)) + assert.Assert(t, f.bankKeeper.HasBalance(ctx, addr, newFooCoin(101)) == false) + assert.Assert(t, f.bankKeeper.HasBalance(ctx, addr, newFooCoin(100))) + assert.Assert(t, f.bankKeeper.HasBalance(ctx, addr, newFooCoin(1))) } -func (suite *IntegrationTestSuite) TestMsgSendEvents() { - ctx := suite.ctx +func TestMsgSendEvents(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx addr := sdk.AccAddress([]byte("addr1_______________")) addr2 := sdk.AccAddress([]byte("addr2_______________")) - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr) + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr) - suite.accountKeeper.SetAccount(ctx, acc) + f.accountKeeper.SetAccount(ctx, acc) newCoins := sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr, newCoins)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr, newCoins)) - suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr, addr2, newCoins)) + assert.NilError(t, f.bankKeeper.SendCoins(ctx, addr, addr2, newCoins)) event1 := sdk.Event{ Type: types.EventTypeTransfer, Attributes: []abci.EventAttribute{}, @@ -607,25 +681,28 @@ func (suite *IntegrationTestSuite) TestMsgSendEvents() { // events are shifted due to the funding account events events := ctx.EventManager().ABCIEvents() - suite.Require().Equal(10, len(events)) - suite.Require().Equal(abci.Event(event1), events[8]) - suite.Require().Equal(abci.Event(event2), events[9]) + assert.Equal(t, 10, len(events)) + assert.DeepEqual(t, abci.Event(event1), events[8]) + assert.DeepEqual(t, abci.Event(event2), events[9]) } -func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { - ctx := suite.ctx +func TestMsgMultiSendEvents(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx - suite.Require().NoError(suite.bankKeeper.SetParams(ctx, types.DefaultParams())) + assert.NilError(t, f.bankKeeper.SetParams(ctx, types.DefaultParams())) addr := sdk.AccAddress([]byte("addr1_______________")) addr2 := sdk.AccAddress([]byte("addr2_______________")) addr3 := sdk.AccAddress([]byte("addr3_______________")) addr4 := sdk.AccAddress([]byte("addr4_______________")) - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr) - acc2 := suite.accountKeeper.NewAccountWithAddress(ctx, addr2) + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr) + acc2 := f.accountKeeper.NewAccountWithAddress(ctx, addr2) - suite.accountKeeper.SetAccount(ctx, acc) - suite.accountKeeper.SetAccount(ctx, acc2) + f.accountKeeper.SetAccount(ctx, acc) + f.accountKeeper.SetAccount(ctx, acc2) coins := sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50), sdk.NewInt64Coin(barDenom, 100)) newCoins := sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)) @@ -641,17 +718,17 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { {Address: addr4.String(), Coins: newCoins2}, } - suite.Require().Error(suite.bankKeeper.InputOutputCoins(ctx, input, outputs)) + assert.Error(t, f.bankKeeper.InputOutputCoins(ctx, input, outputs), fmt.Sprintf("spendable balance is smaller than %s: insufficient funds", newCoins2)) events := ctx.EventManager().ABCIEvents() - suite.Require().Equal(0, len(events)) + assert.Equal(t, 0, len(events)) // Set addr's coins but not addr2's coins - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50), sdk.NewInt64Coin(barDenom, 100)))) - suite.Require().NoError(suite.bankKeeper.InputOutputCoins(ctx, input, outputs)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50), sdk.NewInt64Coin(barDenom, 100)))) + assert.NilError(t, f.bankKeeper.InputOutputCoins(ctx, input, outputs)) events = ctx.EventManager().ABCIEvents() - suite.Require().Equal(12, len(events)) // 12 events because account funding causes extra minting + coin_spent + coin_recv events + assert.Equal(t, 12, len(events)) // 12 events because account funding causes extra minting + coin_spent + coin_recv events event1 := sdk.Event{ Type: sdk.EventTypeMessage, @@ -661,19 +738,19 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { event1.Attributes, abci.EventAttribute{Key: types.AttributeKeySender, Value: addr.String()}, ) - suite.Require().Equal(abci.Event(event1), events[7]) + assert.DeepEqual(t, abci.Event(event1), events[7]) // Set addr's coins and addr2's coins - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)))) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)))) newCoins = sdk.NewCoins(sdk.NewInt64Coin(fooDenom, 50)) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(barDenom, 100)))) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr, sdk.NewCoins(sdk.NewInt64Coin(barDenom, 100)))) newCoins2 = sdk.NewCoins(sdk.NewInt64Coin(barDenom, 100)) - suite.Require().NoError(suite.bankKeeper.InputOutputCoins(ctx, input, outputs)) + assert.NilError(t, f.bankKeeper.InputOutputCoins(ctx, input, outputs)) events = ctx.EventManager().ABCIEvents() - suite.Require().Equal(30, len(events)) // 27 due to account funding + coin_spent + coin_recv events + assert.Equal(t, 30, len(events)) // 27 due to account funding + coin_spent + coin_recv events event2 := sdk.Event{ Type: types.EventTypeTransfer, @@ -699,13 +776,16 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { abci.EventAttribute{Key: sdk.AttributeKeyAmount, Value: newCoins2.String()}, ) // events are shifted due to the funding account events - suite.Require().Equal(abci.Event(event1), events[25]) - suite.Require().Equal(abci.Event(event2), events[27]) - suite.Require().Equal(abci.Event(event3), events[29]) + assert.DeepEqual(t, abci.Event(event1), events[25]) + assert.DeepEqual(t, abci.Event(event2), events[27]) + assert.DeepEqual(t, abci.Event(event3), events[29]) } -func (suite *IntegrationTestSuite) TestSpendableCoins() { - ctx := suite.ctx +func TestSpendableCoins(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx now := tmtime.Now() ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) @@ -717,28 +797,31 @@ func (suite *IntegrationTestSuite) TestSpendableCoins() { addr2 := sdk.AccAddress([]byte("addr2_______________")) addrModule := sdk.AccAddress([]byte("moduleAcc___________")) - macc := suite.accountKeeper.NewAccountWithAddress(ctx, addrModule) + macc := f.accountKeeper.NewAccountWithAddress(ctx, addrModule) bacc := authtypes.NewBaseAccountWithAddress(addr1) vacc := vesting.NewContinuousVestingAccount(bacc, origCoins, ctx.BlockHeader().Time.Unix(), endTime.Unix()) - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr2) + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr2) - suite.accountKeeper.SetAccount(ctx, macc) - suite.accountKeeper.SetAccount(ctx, vacc) - suite.accountKeeper.SetAccount(ctx, acc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) + f.accountKeeper.SetAccount(ctx, macc) + f.accountKeeper.SetAccount(ctx, vacc) + f.accountKeeper.SetAccount(ctx, acc) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, origCoins)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr2, origCoins)) - suite.Require().Equal(origCoins, suite.bankKeeper.SpendableCoins(ctx, addr2)) - suite.Require().Equal(origCoins[0], suite.bankKeeper.SpendableCoin(ctx, addr2, "stake")) + assert.DeepEqual(t, origCoins, f.bankKeeper.SpendableCoins(ctx, addr2)) + assert.DeepEqual(t, origCoins[0], f.bankKeeper.SpendableCoin(ctx, addr2, "stake")) ctx = ctx.WithBlockTime(now.Add(12 * time.Hour)) - suite.Require().NoError(suite.bankKeeper.DelegateCoins(ctx, addr2, addrModule, delCoins)) - suite.Require().Equal(origCoins.Sub(delCoins...), suite.bankKeeper.SpendableCoins(ctx, addr1)) - suite.Require().Equal(origCoins.Sub(delCoins...)[0], suite.bankKeeper.SpendableCoin(ctx, addr1, "stake")) + assert.NilError(t, f.bankKeeper.DelegateCoins(ctx, addr2, addrModule, delCoins)) + assert.DeepEqual(t, origCoins.Sub(delCoins...), f.bankKeeper.SpendableCoins(ctx, addr1)) + assert.DeepEqual(t, origCoins.Sub(delCoins...)[0], f.bankKeeper.SpendableCoin(ctx, addr1, "stake")) } -func (suite *IntegrationTestSuite) TestVestingAccountSend() { - ctx := suite.ctx +func TestVestingAccountSend(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx now := tmtime.Now() ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) @@ -752,22 +835,25 @@ func (suite *IntegrationTestSuite) TestVestingAccountSend() { bacc := authtypes.NewBaseAccountWithAddress(addr1) vacc := vesting.NewContinuousVestingAccount(bacc, origCoins, now.Unix(), endTime.Unix()) - suite.accountKeeper.SetAccount(ctx, vacc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + f.accountKeeper.SetAccount(ctx, vacc) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, origCoins)) // require that no coins be sendable at the beginning of the vesting schedule - suite.Require().Error(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins)) + assert.Error(t, f.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins), fmt.Sprintf("spendable balance is smaller than %s: insufficient funds", sendCoins)) // receive some coins - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, sendCoins)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, sendCoins)) // require that all vested coins are spendable plus any received ctx = ctx.WithBlockTime(now.Add(12 * time.Hour)) - suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins)) - suite.Require().Equal(origCoins, suite.bankKeeper.GetAllBalances(ctx, addr1)) + assert.NilError(t, f.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins)) + assert.DeepEqual(t, origCoins, f.bankKeeper.GetAllBalances(ctx, addr1)) } -func (suite *IntegrationTestSuite) TestPeriodicVestingAccountSend() { - ctx := suite.ctx +func TestPeriodicVestingAccountSend(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx now := tmtime.Now() ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) @@ -784,23 +870,26 @@ func (suite *IntegrationTestSuite) TestPeriodicVestingAccountSend() { bacc := authtypes.NewBaseAccountWithAddress(addr1) vacc := vesting.NewPeriodicVestingAccount(bacc, origCoins, ctx.BlockHeader().Time.Unix(), periods) - suite.accountKeeper.SetAccount(ctx, vacc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + f.accountKeeper.SetAccount(ctx, vacc) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, origCoins)) // require that no coins be sendable at the beginning of the vesting schedule - suite.Require().Error(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins)) + assert.Error(t, f.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins), fmt.Sprintf("spendable balance is smaller than %s: insufficient funds", sendCoins)) // receive some coins - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, sendCoins)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, sendCoins)) // require that all vested coins are spendable plus any received ctx = ctx.WithBlockTime(now.Add(12 * time.Hour)) - suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins)) - suite.Require().Equal(origCoins, suite.bankKeeper.GetAllBalances(ctx, addr1)) + assert.NilError(t, f.bankKeeper.SendCoins(ctx, addr1, addr2, sendCoins)) + assert.DeepEqual(t, origCoins, f.bankKeeper.GetAllBalances(ctx, addr1)) } -func (suite *IntegrationTestSuite) TestVestingAccountReceive() { - ctx := suite.ctx +func TestVestingAccountReceive(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx now := tmtime.Now() ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) @@ -813,28 +902,31 @@ func (suite *IntegrationTestSuite) TestVestingAccountReceive() { bacc := authtypes.NewBaseAccountWithAddress(addr1) vacc := vesting.NewContinuousVestingAccount(bacc, origCoins, ctx.BlockHeader().Time.Unix(), endTime.Unix()) - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr2) + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr2) - suite.accountKeeper.SetAccount(ctx, vacc) - suite.accountKeeper.SetAccount(ctx, acc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) + f.accountKeeper.SetAccount(ctx, vacc) + f.accountKeeper.SetAccount(ctx, acc) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, origCoins)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr2, origCoins)) // send some coins to the vesting account - suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr2, addr1, sendCoins)) + assert.NilError(t, f.bankKeeper.SendCoins(ctx, addr2, addr1, sendCoins)) // require the coins are spendable - vacc = suite.accountKeeper.GetAccount(ctx, addr1).(*vesting.ContinuousVestingAccount) - balances := suite.bankKeeper.GetAllBalances(ctx, addr1) - suite.Require().Equal(origCoins.Add(sendCoins...), balances) - suite.Require().Equal(balances.Sub(vacc.LockedCoins(now)...), sendCoins) + vacc = f.accountKeeper.GetAccount(ctx, addr1).(*vesting.ContinuousVestingAccount) + balances := f.bankKeeper.GetAllBalances(ctx, addr1) + assert.DeepEqual(t, origCoins.Add(sendCoins...), balances) + assert.DeepEqual(t, balances.Sub(vacc.LockedCoins(now)...), sendCoins) // require coins are spendable plus any that have vested - suite.Require().Equal(balances.Sub(vacc.LockedCoins(now.Add(12*time.Hour))...), origCoins) + assert.DeepEqual(t, balances.Sub(vacc.LockedCoins(now.Add(12*time.Hour))...), origCoins) } -func (suite *IntegrationTestSuite) TestPeriodicVestingAccountReceive() { - ctx := suite.ctx +func TestPeriodicVestingAccountReceive(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx now := tmtime.Now() ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) @@ -852,28 +944,31 @@ func (suite *IntegrationTestSuite) TestPeriodicVestingAccountReceive() { } vacc := vesting.NewPeriodicVestingAccount(bacc, origCoins, ctx.BlockHeader().Time.Unix(), periods) - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr2) + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr2) - suite.accountKeeper.SetAccount(ctx, vacc) - suite.accountKeeper.SetAccount(ctx, acc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) + f.accountKeeper.SetAccount(ctx, vacc) + f.accountKeeper.SetAccount(ctx, acc) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, origCoins)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr2, origCoins)) // send some coins to the vesting account - suite.Require().NoError(suite.bankKeeper.SendCoins(ctx, addr2, addr1, sendCoins)) + assert.NilError(t, f.bankKeeper.SendCoins(ctx, addr2, addr1, sendCoins)) // require the coins are spendable - vacc = suite.accountKeeper.GetAccount(ctx, addr1).(*vesting.PeriodicVestingAccount) - balances := suite.bankKeeper.GetAllBalances(ctx, addr1) - suite.Require().Equal(origCoins.Add(sendCoins...), balances) - suite.Require().Equal(balances.Sub(vacc.LockedCoins(now)...), sendCoins) + vacc = f.accountKeeper.GetAccount(ctx, addr1).(*vesting.PeriodicVestingAccount) + balances := f.bankKeeper.GetAllBalances(ctx, addr1) + assert.DeepEqual(t, origCoins.Add(sendCoins...), balances) + assert.DeepEqual(t, balances.Sub(vacc.LockedCoins(now)...), sendCoins) // require coins are spendable plus any that have vested - suite.Require().Equal(balances.Sub(vacc.LockedCoins(now.Add(12*time.Hour))...), origCoins) + assert.DeepEqual(t, balances.Sub(vacc.LockedCoins(now.Add(12*time.Hour))...), origCoins) } -func (suite *IntegrationTestSuite) TestDelegateCoins() { - ctx := suite.ctx +func TestDelegateCoins(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx now := tmtime.Now() ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) @@ -885,58 +980,64 @@ func (suite *IntegrationTestSuite) TestDelegateCoins() { addr2 := sdk.AccAddress([]byte("addr2_______________")) addrModule := sdk.AccAddress([]byte("moduleAcc___________")) - macc := suite.accountKeeper.NewAccountWithAddress(ctx, addrModule) // we don't need to define an actual module account bc we just need the address for testing - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr2) + macc := f.accountKeeper.NewAccountWithAddress(ctx, addrModule) // we don't need to define an actual module account bc we just need the address for testing + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr2) bacc := authtypes.NewBaseAccountWithAddress(addr1) vacc := vesting.NewContinuousVestingAccount(bacc, origCoins, ctx.BlockHeader().Time.Unix(), endTime.Unix()) - suite.accountKeeper.SetAccount(ctx, vacc) - suite.accountKeeper.SetAccount(ctx, acc) - suite.accountKeeper.SetAccount(ctx, macc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) + f.accountKeeper.SetAccount(ctx, vacc) + f.accountKeeper.SetAccount(ctx, acc) + f.accountKeeper.SetAccount(ctx, macc) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, origCoins)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr2, origCoins)) ctx = ctx.WithBlockTime(now.Add(12 * time.Hour)) // require the ability for a non-vesting account to delegate - suite.Require().NoError(suite.bankKeeper.DelegateCoins(ctx, addr2, addrModule, delCoins)) - suite.Require().Equal(origCoins.Sub(delCoins...), suite.bankKeeper.GetAllBalances(ctx, addr2)) - suite.Require().Equal(delCoins, suite.bankKeeper.GetAllBalances(ctx, addrModule)) + assert.NilError(t, f.bankKeeper.DelegateCoins(ctx, addr2, addrModule, delCoins)) + assert.DeepEqual(t, origCoins.Sub(delCoins...), f.bankKeeper.GetAllBalances(ctx, addr2)) + assert.DeepEqual(t, delCoins, f.bankKeeper.GetAllBalances(ctx, addrModule)) // require the ability for a vesting account to delegate - suite.Require().NoError(suite.bankKeeper.DelegateCoins(ctx, addr1, addrModule, delCoins)) - suite.Require().Equal(delCoins, suite.bankKeeper.GetAllBalances(ctx, addr1)) + assert.NilError(t, f.bankKeeper.DelegateCoins(ctx, addr1, addrModule, delCoins)) + assert.DeepEqual(t, delCoins, f.bankKeeper.GetAllBalances(ctx, addr1)) // require that delegated vesting amount is equal to what was delegated with DelegateCoins - acc = suite.accountKeeper.GetAccount(ctx, addr1) + acc = f.accountKeeper.GetAccount(ctx, addr1) vestingAcc, ok := acc.(types.VestingAccount) - suite.Require().True(ok) - suite.Require().Equal(delCoins, vestingAcc.GetDelegatedVesting()) + assert.Assert(t, ok) + assert.DeepEqual(t, delCoins, vestingAcc.GetDelegatedVesting()) } -func (suite *IntegrationTestSuite) TestDelegateCoins_Invalid() { - ctx := suite.ctx +func TestDelegateCoins_Invalid(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx origCoins := sdk.NewCoins(newFooCoin(100)) delCoins := sdk.NewCoins(newFooCoin(50)) addr1 := sdk.AccAddress([]byte("addr1_______________")) addrModule := sdk.AccAddress([]byte("moduleAcc___________")) - macc := suite.accountKeeper.NewAccountWithAddress(ctx, addrModule) // we don't need to define an actual module account bc we just need the address for testing - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr1) + macc := f.accountKeeper.NewAccountWithAddress(ctx, addrModule) // we don't need to define an actual module account bc we just need the address for testing + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr1) - suite.Require().Error(suite.bankKeeper.DelegateCoins(ctx, addr1, addrModule, delCoins)) + assert.Error(t, f.bankKeeper.DelegateCoins(ctx, addr1, addrModule, delCoins), fmt.Sprintf("module account %s does not exist: unknown address", addrModule.String())) invalidCoins := sdk.Coins{sdk.Coin{Denom: "fooDenom", Amount: sdk.NewInt(-50)}} - suite.Require().Error(suite.bankKeeper.DelegateCoins(ctx, addr1, addrModule, invalidCoins)) + assert.Error(t, f.bankKeeper.DelegateCoins(ctx, addr1, addrModule, invalidCoins), fmt.Sprintf("module account %s does not exist: unknown address", addrModule.String())) - suite.accountKeeper.SetAccount(ctx, macc) - suite.Require().Error(suite.bankKeeper.DelegateCoins(ctx, addr1, addrModule, delCoins)) - suite.accountKeeper.SetAccount(ctx, acc) - suite.Require().Error(suite.bankKeeper.DelegateCoins(ctx, addr1, addrModule, origCoins.Add(origCoins...))) + f.accountKeeper.SetAccount(ctx, macc) + assert.Error(t, f.bankKeeper.DelegateCoins(ctx, addr1, addrModule, delCoins), fmt.Sprintf("failed to delegate; 0foo is smaller than %s: insufficient funds", delCoins)) + f.accountKeeper.SetAccount(ctx, acc) + assert.Error(t, f.bankKeeper.DelegateCoins(ctx, addr1, addrModule, origCoins.Add(origCoins...)), fmt.Sprintf("failed to delegate; 0foo is smaller than %s: insufficient funds", origCoins.Add(origCoins...))) } -func (suite *IntegrationTestSuite) TestUndelegateCoins() { - ctx := suite.ctx +func TestUndelegateCoins(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx now := tmtime.Now() ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) @@ -949,150 +1050,162 @@ func (suite *IntegrationTestSuite) TestUndelegateCoins() { addrModule := sdk.AccAddress([]byte("moduleAcc___________")) bacc := authtypes.NewBaseAccountWithAddress(addr1) - macc := suite.accountKeeper.NewAccountWithAddress(ctx, addrModule) // we don't need to define an actual module account bc we just need the address for testing + macc := f.accountKeeper.NewAccountWithAddress(ctx, addrModule) // we don't need to define an actual module account bc we just need the address for testing vacc := vesting.NewContinuousVestingAccount(bacc, origCoins, ctx.BlockHeader().Time.Unix(), endTime.Unix()) - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr2) + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr2) - suite.accountKeeper.SetAccount(ctx, vacc) - suite.accountKeeper.SetAccount(ctx, acc) - suite.accountKeeper.SetAccount(ctx, macc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr2, origCoins)) + f.accountKeeper.SetAccount(ctx, vacc) + f.accountKeeper.SetAccount(ctx, acc) + f.accountKeeper.SetAccount(ctx, macc) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, origCoins)) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr2, origCoins)) ctx = ctx.WithBlockTime(now.Add(12 * time.Hour)) // require the ability for a non-vesting account to delegate - err := suite.bankKeeper.DelegateCoins(ctx, addr2, addrModule, delCoins) - suite.Require().NoError(err) + err := f.bankKeeper.DelegateCoins(ctx, addr2, addrModule, delCoins) + assert.NilError(t, err) - suite.Require().Equal(origCoins.Sub(delCoins...), suite.bankKeeper.GetAllBalances(ctx, addr2)) - suite.Require().Equal(delCoins, suite.bankKeeper.GetAllBalances(ctx, addrModule)) + assert.DeepEqual(t, origCoins.Sub(delCoins...), f.bankKeeper.GetAllBalances(ctx, addr2)) + assert.DeepEqual(t, delCoins, f.bankKeeper.GetAllBalances(ctx, addrModule)) // require the ability for a non-vesting account to undelegate - suite.Require().NoError(suite.bankKeeper.UndelegateCoins(ctx, addrModule, addr2, delCoins)) + assert.NilError(t, f.bankKeeper.UndelegateCoins(ctx, addrModule, addr2, delCoins)) - suite.Require().Equal(origCoins, suite.bankKeeper.GetAllBalances(ctx, addr2)) - suite.Require().True(suite.bankKeeper.GetAllBalances(ctx, addrModule).Empty()) + assert.DeepEqual(t, origCoins, f.bankKeeper.GetAllBalances(ctx, addr2)) + assert.Assert(t, f.bankKeeper.GetAllBalances(ctx, addrModule).Empty()) // require the ability for a vesting account to delegate - suite.Require().NoError(suite.bankKeeper.DelegateCoins(ctx, addr1, addrModule, delCoins)) + assert.NilError(t, f.bankKeeper.DelegateCoins(ctx, addr1, addrModule, delCoins)) - suite.Require().Equal(origCoins.Sub(delCoins...), suite.bankKeeper.GetAllBalances(ctx, addr1)) - suite.Require().Equal(delCoins, suite.bankKeeper.GetAllBalances(ctx, addrModule)) + assert.DeepEqual(t, origCoins.Sub(delCoins...), f.bankKeeper.GetAllBalances(ctx, addr1)) + assert.DeepEqual(t, delCoins, f.bankKeeper.GetAllBalances(ctx, addrModule)) // require the ability for a vesting account to undelegate - suite.Require().NoError(suite.bankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins)) + assert.NilError(t, f.bankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins)) - suite.Require().Equal(origCoins, suite.bankKeeper.GetAllBalances(ctx, addr1)) - suite.Require().True(suite.bankKeeper.GetAllBalances(ctx, addrModule).Empty()) + assert.DeepEqual(t, origCoins, f.bankKeeper.GetAllBalances(ctx, addr1)) + assert.Assert(t, f.bankKeeper.GetAllBalances(ctx, addrModule).Empty()) // require that delegated vesting amount is completely empty, since they were completely undelegated - acc = suite.accountKeeper.GetAccount(ctx, addr1) + acc = f.accountKeeper.GetAccount(ctx, addr1) vestingAcc, ok := acc.(types.VestingAccount) - suite.Require().True(ok) - suite.Require().Empty(vestingAcc.GetDelegatedVesting()) + assert.Assert(t, ok) + assert.Assert(t, vestingAcc.GetDelegatedVesting().Empty()) } -func (suite *IntegrationTestSuite) TestUndelegateCoins_Invalid() { - ctx := suite.ctx +func TestUndelegateCoins_Invalid(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx origCoins := sdk.NewCoins(newFooCoin(100)) delCoins := sdk.NewCoins(newFooCoin(50)) addr1 := sdk.AccAddress([]byte("addr1_______________")) addrModule := sdk.AccAddress([]byte("moduleAcc___________")) - macc := suite.accountKeeper.NewAccountWithAddress(ctx, addrModule) // we don't need to define an actual module account bc we just need the address for testing - acc := suite.accountKeeper.NewAccountWithAddress(ctx, addr1) + macc := f.accountKeeper.NewAccountWithAddress(ctx, addrModule) // we don't need to define an actual module account bc we just need the address for testing + acc := f.accountKeeper.NewAccountWithAddress(ctx, addr1) - suite.Require().Error(suite.bankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins)) + assert.Error(t, f.bankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins), fmt.Sprintf("module account %s does not exist: unknown address", addrModule.String())) - suite.accountKeeper.SetAccount(ctx, macc) - suite.Require().NoError(banktestutil.FundAccount(suite.bankKeeper, ctx, addr1, origCoins)) + f.accountKeeper.SetAccount(ctx, macc) + assert.NilError(t, banktestutil.FundAccount(f.bankKeeper, ctx, addr1, origCoins)) - suite.Require().Error(suite.bankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins)) - suite.accountKeeper.SetAccount(ctx, acc) + assert.Error(t, f.bankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins), fmt.Sprintf("spendable balance is smaller than %s: insufficient funds", delCoins)) + f.accountKeeper.SetAccount(ctx, acc) - suite.Require().Error(suite.bankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins)) + assert.Error(t, f.bankKeeper.UndelegateCoins(ctx, addrModule, addr1, delCoins), fmt.Sprintf("spendable balance is smaller than %s: insufficient funds", delCoins)) } -func (suite *IntegrationTestSuite) TestSetDenomMetaData() { - ctx := suite.ctx +func TestSetDenomMetaData(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx - metadata := suite.getTestMetadata() + metadata := getTestMetadata() for i := range []int{1, 2} { - suite.bankKeeper.SetDenomMetaData(ctx, metadata[i]) + f.bankKeeper.SetDenomMetaData(ctx, metadata[i]) } - actualMetadata, found := suite.bankKeeper.GetDenomMetaData(ctx, metadata[1].Base) - suite.Require().True(found) - found = suite.bankKeeper.HasDenomMetaData(ctx, metadata[1].Base) - suite.Require().True(found) - suite.Require().Equal(metadata[1].GetBase(), actualMetadata.GetBase()) - suite.Require().Equal(metadata[1].GetDisplay(), actualMetadata.GetDisplay()) - suite.Require().Equal(metadata[1].GetDescription(), actualMetadata.GetDescription()) - suite.Require().Equal(metadata[1].GetDenomUnits()[1].GetDenom(), actualMetadata.GetDenomUnits()[1].GetDenom()) - suite.Require().Equal(metadata[1].GetDenomUnits()[1].GetExponent(), actualMetadata.GetDenomUnits()[1].GetExponent()) - suite.Require().Equal(metadata[1].GetDenomUnits()[1].GetAliases(), actualMetadata.GetDenomUnits()[1].GetAliases()) + actualMetadata, found := f.bankKeeper.GetDenomMetaData(ctx, metadata[1].Base) + assert.Assert(t, found) + found = f.bankKeeper.HasDenomMetaData(ctx, metadata[1].Base) + assert.Assert(t, found) + assert.Equal(t, metadata[1].GetBase(), actualMetadata.GetBase()) + assert.Equal(t, metadata[1].GetDisplay(), actualMetadata.GetDisplay()) + assert.Equal(t, metadata[1].GetDescription(), actualMetadata.GetDescription()) + assert.Equal(t, metadata[1].GetDenomUnits()[1].GetDenom(), actualMetadata.GetDenomUnits()[1].GetDenom()) + assert.Equal(t, metadata[1].GetDenomUnits()[1].GetExponent(), actualMetadata.GetDenomUnits()[1].GetExponent()) + assert.DeepEqual(t, metadata[1].GetDenomUnits()[1].GetAliases(), actualMetadata.GetDenomUnits()[1].GetAliases()) } -func (suite *IntegrationTestSuite) TestIterateAllDenomMetaData() { - ctx := suite.ctx +func TestIterateAllDenomMetaData(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx := f.ctx - expectedMetadata := suite.getTestMetadata() + expectedMetadata := getTestMetadata() // set metadata for i := range []int{1, 2} { - suite.bankKeeper.SetDenomMetaData(ctx, expectedMetadata[i]) + f.bankKeeper.SetDenomMetaData(ctx, expectedMetadata[i]) } // retrieve metadata actualMetadata := make([]types.Metadata, 0) - suite.bankKeeper.IterateAllDenomMetaData(ctx, func(metadata types.Metadata) bool { + f.bankKeeper.IterateAllDenomMetaData(ctx, func(metadata types.Metadata) bool { actualMetadata = append(actualMetadata, metadata) return false }) // execute checks for i := range []int{1, 2} { - suite.Require().Equal(expectedMetadata[i].GetBase(), actualMetadata[i].GetBase()) - suite.Require().Equal(expectedMetadata[i].GetDisplay(), actualMetadata[i].GetDisplay()) - suite.Require().Equal(expectedMetadata[i].GetDescription(), actualMetadata[i].GetDescription()) - suite.Require().Equal(expectedMetadata[i].GetDenomUnits()[1].GetDenom(), actualMetadata[i].GetDenomUnits()[1].GetDenom()) - suite.Require().Equal(expectedMetadata[i].GetDenomUnits()[1].GetExponent(), actualMetadata[i].GetDenomUnits()[1].GetExponent()) - suite.Require().Equal(expectedMetadata[i].GetDenomUnits()[1].GetAliases(), actualMetadata[i].GetDenomUnits()[1].GetAliases()) + assert.Equal(t, expectedMetadata[i].GetBase(), actualMetadata[i].GetBase()) + assert.Equal(t, expectedMetadata[i].GetDisplay(), actualMetadata[i].GetDisplay()) + assert.Equal(t, expectedMetadata[i].GetDescription(), actualMetadata[i].GetDescription()) + assert.Equal(t, expectedMetadata[i].GetDenomUnits()[1].GetDenom(), actualMetadata[i].GetDenomUnits()[1].GetDenom()) + assert.Equal(t, expectedMetadata[i].GetDenomUnits()[1].GetExponent(), actualMetadata[i].GetDenomUnits()[1].GetExponent()) + assert.DeepEqual(t, expectedMetadata[i].GetDenomUnits()[1].GetAliases(), actualMetadata[i].GetDenomUnits()[1].GetAliases()) } } -func (suite *IntegrationTestSuite) TestBalanceTrackingEvents() { +func TestBalanceTrackingEvents(t *testing.T) { + f := initFixture(t) + t.Parallel() + // replace account keeper and bank keeper otherwise the account keeper won't be aware of the // existence of the new module account because GetModuleAccount checks for the existence via // permissions map and not via state... weird maccPerms := simapp.GetMaccPerms() maccPerms[multiPerm] = []string{authtypes.Burner, authtypes.Minter, authtypes.Staking} - suite.accountKeeper = authkeeper.NewAccountKeeper( - suite.appCodec, suite.fetchStoreKey(authtypes.StoreKey), + f.accountKeeper = authkeeper.NewAccountKeeper( + f.appCodec, f.fetchStoreKey(authtypes.StoreKey), authtypes.ProtoBaseAccount, maccPerms, sdk.Bech32MainPrefix, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) - suite.bankKeeper = keeper.NewBaseKeeper(suite.appCodec, suite.fetchStoreKey(types.StoreKey), - suite.accountKeeper, nil, authtypes.NewModuleAddress(govtypes.ModuleName).String(), + f.bankKeeper = keeper.NewBaseKeeper(f.appCodec, f.fetchStoreKey(types.StoreKey), + f.accountKeeper, nil, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) // set account with multiple permissions - suite.accountKeeper.SetModuleAccount(suite.ctx, multiPermAcc) + f.accountKeeper.SetModuleAccount(f.ctx, multiPermAcc) // mint coins - suite.Require().NoError( - suite.bankKeeper.MintCoins( - suite.ctx, + assert.NilError(t, + f.bankKeeper.MintCoins( + f.ctx, multiPermAcc.Name, sdk.NewCoins(sdk.NewCoin("utxo", sdk.NewInt(100000)))), ) // send coins to address addr1 := sdk.AccAddress("addr1_______________") - suite.Require().NoError( - suite.bankKeeper.SendCoinsFromModuleToAccount( - suite.ctx, + assert.NilError(t, + f.bankKeeper.SendCoinsFromModuleToAccount( + f.ctx, multiPermAcc.Name, addr1, sdk.NewCoins(sdk.NewCoin("utxo", sdk.NewInt(50000))), @@ -1100,9 +1213,9 @@ func (suite *IntegrationTestSuite) TestBalanceTrackingEvents() { ) // burn coins from module account - suite.Require().NoError( - suite.bankKeeper.BurnCoins( - suite.ctx, + assert.NilError(t, + f.bankKeeper.BurnCoins( + f.ctx, multiPermAcc.Name, sdk.NewCoins(sdk.NewInt64Coin("utxo", 1000)), ), @@ -1113,56 +1226,56 @@ func (suite *IntegrationTestSuite) TestBalanceTrackingEvents() { balances := make(map[string]sdk.Coins) - for _, e := range suite.ctx.EventManager().ABCIEvents() { + for _, e := range f.ctx.EventManager().ABCIEvents() { switch e.Type { case types.EventTypeCoinBurn: burnedCoins, err := sdk.ParseCoinsNormalized((string)(e.Attributes[1].Value)) - suite.Require().NoError(err) + assert.NilError(t, err) supply = supply.Sub(burnedCoins...) case types.EventTypeCoinMint: mintedCoins, err := sdk.ParseCoinsNormalized((string)(e.Attributes[1].Value)) - suite.Require().NoError(err) + assert.NilError(t, err) supply = supply.Add(mintedCoins...) case types.EventTypeCoinSpent: coinsSpent, err := sdk.ParseCoinsNormalized((string)(e.Attributes[1].Value)) - suite.Require().NoError(err) + assert.NilError(t, err) spender, err := sdk.AccAddressFromBech32((string)(e.Attributes[0].Value)) - suite.Require().NoError(err) + assert.NilError(t, err) balances[spender.String()] = balances[spender.String()].Sub(coinsSpent...) case types.EventTypeCoinReceived: coinsRecv, err := sdk.ParseCoinsNormalized((string)(e.Attributes[1].Value)) - suite.Require().NoError(err) + assert.NilError(t, err) receiver, err := sdk.AccAddressFromBech32((string)(e.Attributes[0].Value)) - suite.Require().NoError(err) + assert.NilError(t, err) balances[receiver.String()] = balances[receiver.String()].Add(coinsRecv...) } } // check balance and supply tracking - suite.Require().True(suite.bankKeeper.HasSupply(suite.ctx, "utxo")) - savedSupply := suite.bankKeeper.GetSupply(suite.ctx, "utxo") + assert.Assert(t, f.bankKeeper.HasSupply(f.ctx, "utxo")) + savedSupply := f.bankKeeper.GetSupply(f.ctx, "utxo") utxoSupply := savedSupply - suite.Require().Equal(utxoSupply.Amount, supply.AmountOf("utxo")) + assert.DeepEqual(t, utxoSupply.Amount, supply.AmountOf("utxo")) // iterate accounts and check balances - suite.bankKeeper.IterateAllBalances(suite.ctx, func(address sdk.AccAddress, coin sdk.Coin) (stop bool) { + f.bankKeeper.IterateAllBalances(f.ctx, func(address sdk.AccAddress, coin sdk.Coin) (stop bool) { // if it's not utxo coin then skip if coin.Denom != "utxo" { return false } balance, exists := balances[address.String()] - suite.Require().True(exists) + assert.Assert(t, exists) expectedUtxo := sdk.NewCoin("utxo", balance.AmountOf(coin.Denom)) - suite.Require().Equal(expectedUtxo.String(), coin.String()) + assert.Equal(t, expectedUtxo.String(), coin.String()) return false }) } -func (suite *IntegrationTestSuite) getTestMetadata() []types.Metadata { +func getTestMetadata() []types.Metadata { return []types.Metadata{ { Name: "Cosmos Hub Atom", @@ -1191,18 +1304,21 @@ func (suite *IntegrationTestSuite) getTestMetadata() []types.Metadata { } } -func (suite *IntegrationTestSuite) TestMintCoinRestrictions() { +func TestMintCoinRestrictions(t *testing.T) { + f := initFixture(t) + t.Parallel() + type BankMintingRestrictionFn func(ctx sdk.Context, coins sdk.Coins) error maccPerms := simapp.GetMaccPerms() maccPerms[multiPerm] = []string{authtypes.Burner, authtypes.Minter, authtypes.Staking} - suite.accountKeeper = authkeeper.NewAccountKeeper( - suite.appCodec, suite.fetchStoreKey(authtypes.StoreKey), + f.accountKeeper = authkeeper.NewAccountKeeper( + f.appCodec, f.fetchStoreKey(authtypes.StoreKey), authtypes.ProtoBaseAccount, maccPerms, sdk.Bech32MainPrefix, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) - suite.accountKeeper.SetModuleAccount(suite.ctx, multiPermAcc) + f.accountKeeper.SetModuleAccount(f.ctx, multiPermAcc) type testCase struct { coinsToTry sdk.Coin @@ -1238,33 +1354,37 @@ func (suite *IntegrationTestSuite) TestMintCoinRestrictions() { } for _, test := range tests { - suite.bankKeeper = keeper.NewBaseKeeper(suite.appCodec, suite.fetchStoreKey(types.StoreKey), - suite.accountKeeper, nil, authtypes.NewModuleAddress(govtypes.ModuleName).String(), + f.bankKeeper = keeper.NewBaseKeeper(f.appCodec, f.fetchStoreKey(types.StoreKey), + f.accountKeeper, nil, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ).WithMintCoinsRestriction(keeper.MintingRestrictionFn(test.restrictionFn)) for _, testCase := range test.testCases { if testCase.expectPass { - suite.Require().NoError( - suite.bankKeeper.MintCoins( - suite.ctx, + assert.NilError(t, + f.bankKeeper.MintCoins( + f.ctx, multiPermAcc.Name, sdk.NewCoins(testCase.coinsToTry), ), ) } else { - suite.Require().Error( - suite.bankKeeper.MintCoins( - suite.ctx, + assert.Error(t, + f.bankKeeper.MintCoins( + f.ctx, multiPermAcc.Name, sdk.NewCoins(testCase.coinsToTry), ), + "Module bank only has perms for minting foo coins, tried minting bar coins", ) } } } } -func (suite *IntegrationTestSuite) TestIsSendEnabledDenom() { - ctx, bankKeeper := suite.ctx, suite.bankKeeper +func TestIsSendEnabledDenom(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx, bankKeeper := f.ctx, f.bankKeeper defaultCoin := "defaultCoin" enabledCoin := "enabledCoin" @@ -1294,10 +1414,10 @@ func (suite *IntegrationTestSuite) TestIsSendEnabledDenom() { for _, def := range []bool{true, false} { params := types.Params{DefaultSendEnabled: def} - suite.Require().NoError(bankKeeper.SetParams(ctx, params)) + assert.NilError(t, bankKeeper.SetParams(ctx, params)) for _, tc := range tests { - suite.T().Run(fmt.Sprintf("%s default %t", tc.denom, def), func(t *testing.T) { - actual := suite.bankKeeper.IsSendEnabledDenom(suite.ctx, tc.denom) + t.Run(fmt.Sprintf("%s default %t", tc.denom, def), func(t *testing.T) { + actual := f.bankKeeper.IsSendEnabledDenom(f.ctx, tc.denom) exp := tc.exp if tc.expDef { exp = def @@ -1308,8 +1428,11 @@ func (suite *IntegrationTestSuite) TestIsSendEnabledDenom() { } } -func (suite *IntegrationTestSuite) TestGetSendEnabledEntry() { - ctx, bankKeeper := suite.ctx, suite.bankKeeper +func TestGetSendEnabledEntry(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx, bankKeeper := f.ctx, f.bankKeeper bankKeeper.SetAllSendEnabled(ctx, []*types.SendEnabled{ {Denom: "gettruecoin", Enabled: true}, @@ -1339,7 +1462,7 @@ func (suite *IntegrationTestSuite) TestGetSendEnabledEntry() { } for _, tc := range tests { - suite.T().Run(tc.denom, func(t *testing.T) { + t.Run(tc.denom, func(t *testing.T) { actualSE, actualF := bankKeeper.GetSendEnabledEntry(ctx, tc.denom) assert.Equal(t, tc.expF, actualF, "found") assert.Equal(t, tc.expSE, actualSE, "SendEnabled") @@ -1347,8 +1470,11 @@ func (suite *IntegrationTestSuite) TestGetSendEnabledEntry() { } } -func (suite *IntegrationTestSuite) TestSetSendEnabled() { - ctx, bankKeeper := suite.ctx, suite.bankKeeper +func TestSetSendEnabled(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx, bankKeeper := f.ctx, f.bankKeeper tests := []struct { name string @@ -1399,9 +1525,9 @@ func (suite *IntegrationTestSuite) TestSetSendEnabled() { for _, def := range []bool{true, false} { params := types.Params{DefaultSendEnabled: def} - suite.Require().NoError(bankKeeper.SetParams(ctx, params)) + assert.NilError(t, bankKeeper.SetParams(ctx, params)) for _, tc := range tests { - suite.T().Run(fmt.Sprintf("%s default %t", tc.name, def), func(t *testing.T) { + t.Run(fmt.Sprintf("%s default %t", tc.name, def), func(t *testing.T) { bankKeeper.SetSendEnabled(ctx, tc.denom, tc.value) actual := bankKeeper.IsSendEnabledDenom(ctx, tc.denom) assert.Equal(t, tc.value, actual) @@ -1410,8 +1536,11 @@ func (suite *IntegrationTestSuite) TestSetSendEnabled() { } } -func (suite *IntegrationTestSuite) TestSetAllSendEnabled() { - ctx, bankKeeper := suite.ctx, suite.bankKeeper +func TestSetAllSendEnabled(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx, bankKeeper := f.ctx, f.bankKeeper tests := []struct { name string @@ -1469,9 +1598,9 @@ func (suite *IntegrationTestSuite) TestSetAllSendEnabled() { for _, def := range []bool{true, false} { params := types.Params{DefaultSendEnabled: def} - suite.Require().NoError(bankKeeper.SetParams(ctx, params)) + assert.NilError(t, bankKeeper.SetParams(ctx, params)) for _, tc := range tests { - suite.T().Run(fmt.Sprintf("%s default %t", tc.name, def), func(t *testing.T) { + t.Run(fmt.Sprintf("%s default %t", tc.name, def), func(t *testing.T) { bankKeeper.SetAllSendEnabled(ctx, tc.sendEnableds) for _, se := range tc.sendEnableds { actual := bankKeeper.IsSendEnabledDenom(ctx, se.Denom) @@ -1482,13 +1611,16 @@ func (suite *IntegrationTestSuite) TestSetAllSendEnabled() { } } -func (suite *IntegrationTestSuite) TestDeleteSendEnabled() { - ctx, bankKeeper := suite.ctx, suite.bankKeeper +func TestDeleteSendEnabled(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx, bankKeeper := f.ctx, f.bankKeeper for _, def := range []bool{true, false} { params := types.Params{DefaultSendEnabled: def} - suite.Require().NoError(bankKeeper.SetParams(ctx, params)) - suite.T().Run(fmt.Sprintf("default %t", def), func(t *testing.T) { + assert.NilError(t, bankKeeper.SetParams(ctx, params)) + t.Run(fmt.Sprintf("default %t", def), func(t *testing.T) { denom := fmt.Sprintf("somerand%tcoin", !def) bankKeeper.SetSendEnabled(ctx, denom, !def) assert.Equal(t, !def, bankKeeper.IsSendEnabledDenom(ctx, denom)) @@ -1498,10 +1630,13 @@ func (suite *IntegrationTestSuite) TestDeleteSendEnabled() { } } -func (suite *IntegrationTestSuite) TestIterateSendEnabledEntries() { - ctx, bankKeeper := suite.ctx, suite.bankKeeper +func TestIterateSendEnabledEntries(t *testing.T) { + f := initFixture(t) + t.Parallel() - suite.T().Run("no entries to iterate", func(t *testing.T) { + ctx, bankKeeper := f.ctx, f.bankKeeper + + t.Run("no entries to iterate", func(t *testing.T) { count := 0 bankKeeper.IterateSendEnabledEntries(ctx, func(_ string, _ bool) (stop bool) { count++ @@ -1521,9 +1656,9 @@ func (suite *IntegrationTestSuite) TestIterateSendEnabledEntries() { for _, def := range []bool{true, false} { params := types.Params{DefaultSendEnabled: def} - suite.Require().NoError(bankKeeper.SetParams(ctx, params)) + assert.NilError(t, bankKeeper.SetParams(ctx, params)) var seen []string - suite.T().Run(fmt.Sprintf("all denoms have expected values default %t", def), func(t *testing.T) { + t.Run(fmt.Sprintf("all denoms have expected values default %t", def), func(t *testing.T) { bankKeeper.IterateSendEnabledEntries(ctx, func(denom string, sendEnabled bool) (stop bool) { seen = append(seen, denom) exp := true @@ -1534,7 +1669,7 @@ func (suite *IntegrationTestSuite) TestIterateSendEnabledEntries() { return false }) }) - suite.T().Run(fmt.Sprintf("all denoms were seen default %t", def), func(t *testing.T) { + t.Run(fmt.Sprintf("all denoms were seen default %t", def), func(t *testing.T) { // assert.ElementsMatch(t, denoms, seen) }) } @@ -1543,7 +1678,7 @@ func (suite *IntegrationTestSuite) TestIterateSendEnabledEntries() { bankKeeper.DeleteSendEnabled(ctx, denom) } - suite.T().Run("no entries to iterate again after deleting all of them", func(t *testing.T) { + t.Run("no entries to iterate again after deleting all of them", func(t *testing.T) { count := 0 bankKeeper.IterateSendEnabledEntries(ctx, func(_ string, _ bool) (stop bool) { count++ @@ -1553,10 +1688,13 @@ func (suite *IntegrationTestSuite) TestIterateSendEnabledEntries() { }) } -func (suite *IntegrationTestSuite) TestGetAllSendEnabledEntries() { - ctx, bankKeeper := suite.ctx, suite.bankKeeper +func TestGetAllSendEnabledEntries(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx, bankKeeper := f.ctx, f.bankKeeper - suite.T().Run("no entries", func(t *testing.T) { + t.Run("no entries", func(t *testing.T) { actual := bankKeeper.GetAllSendEnabledEntries(ctx) assert.Assert(t, len(actual) == 0) }) @@ -1572,9 +1710,9 @@ func (suite *IntegrationTestSuite) TestGetAllSendEnabledEntries() { for _, def := range []bool{true, false} { params := types.Params{DefaultSendEnabled: def} - suite.Require().NoError(bankKeeper.SetParams(ctx, params)) + assert.NilError(t, bankKeeper.SetParams(ctx, params)) var seen []string - suite.T().Run(fmt.Sprintf("all denoms have expected values default %t", def), func(t *testing.T) { + t.Run(fmt.Sprintf("all denoms have expected values default %t", def), func(t *testing.T) { actual := bankKeeper.GetAllSendEnabledEntries(ctx) for _, se := range actual { seen = append(seen, se.Denom) @@ -1585,7 +1723,7 @@ func (suite *IntegrationTestSuite) TestGetAllSendEnabledEntries() { assert.Equal(t, exp, se.Enabled, se.Denom) } }) - suite.T().Run(fmt.Sprintf("all denoms were seen default %t", def), func(t *testing.T) { + t.Run(fmt.Sprintf("all denoms were seen default %t", def), func(t *testing.T) { assert.DeepEqual(t, denoms, seen) }) } @@ -1594,7 +1732,7 @@ func (suite *IntegrationTestSuite) TestGetAllSendEnabledEntries() { bankKeeper.DeleteSendEnabled(ctx, denom) } - suite.T().Run("no entries again after deleting all of them", func(t *testing.T) { + t.Run("no entries again after deleting all of them", func(t *testing.T) { actual := bankKeeper.GetAllSendEnabledEntries(ctx) assert.Assert(t, len(actual) == 0) }) @@ -1608,13 +1746,16 @@ func (ms mockSubspace) GetParamSet(ctx sdk.Context, ps exported.ParamSet) { *ps.(*types.Params) = ms.ps } -func (suite *IntegrationTestSuite) TestMigrator_Migrate3to4() { - ctx, bankKeeper := suite.ctx, suite.bankKeeper +func TestMigrator_Migrate3to4(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx, bankKeeper := f.ctx, f.bankKeeper for _, def := range []bool{true, false} { params := types.Params{DefaultSendEnabled: def} - suite.Require().NoError(bankKeeper.SetParams(ctx, params)) - suite.T().Run(fmt.Sprintf("default %t does not change", def), func(t *testing.T) { + assert.NilError(t, bankKeeper.SetParams(ctx, params)) + t.Run(fmt.Sprintf("default %t does not change", def), func(t *testing.T) { legacySubspace := func(ps types.Params) mockSubspace { return mockSubspace{ps: ps} }(types.NewParams(def)) @@ -1632,8 +1773,8 @@ func (suite *IntegrationTestSuite) TestMigrator_Migrate3to4() { {Denom: fmt.Sprintf("falsecoin%t", def), Enabled: false}, }, } - suite.Require().NoError(bankKeeper.SetParams(ctx, params)) - suite.T().Run(fmt.Sprintf("default %t send enabled info moved to store", def), func(t *testing.T) { + assert.NilError(t, bankKeeper.SetParams(ctx, params)) + t.Run(fmt.Sprintf("default %t send enabled info moved to store", def), func(t *testing.T) { legacySubspace := func(ps types.Params) mockSubspace { return mockSubspace{ps: ps} }(types.NewParams(def)) @@ -1649,32 +1790,31 @@ func (suite *IntegrationTestSuite) TestMigrator_Migrate3to4() { } } -func (suite *IntegrationTestSuite) TestSetParams() { - ctx, bankKeeper := suite.ctx, suite.bankKeeper +func TestSetParams(t *testing.T) { + f := initFixture(t) + t.Parallel() + + ctx, bankKeeper := f.ctx, f.bankKeeper params := types.NewParams(true) params.SendEnabled = []*types.SendEnabled{ {Denom: "paramscointrue", Enabled: true}, {Denom: "paramscoinfalse", Enabled: false}, } - suite.Require().NoError(bankKeeper.SetParams(ctx, params)) + assert.NilError(t, bankKeeper.SetParams(ctx, params)) - suite.Run("stored params are as expected", func() { + t.Run("stored params are as expected", func(t *testing.T) { actual := bankKeeper.GetParams(ctx) - suite.Assert().True(actual.DefaultSendEnabled, "DefaultSendEnabled") - suite.Assert().Len(actual.SendEnabled, 0, "SendEnabled") + assert.Assert(t, actual.DefaultSendEnabled, "DefaultSendEnabled") + assert.Assert(t, len(actual.SendEnabled) == 0, "SendEnabled") }) - suite.Run("send enabled params converted to store", func() { + t.Run("send enabled params converted to store", func(t *testing.T) { actual := bankKeeper.GetAllSendEnabledEntries(ctx) - if suite.Assert().Len(actual, 2) { - suite.Equal("paramscoinfalse", actual[0].Denom, "actual[0].Denom") - suite.False(actual[0].Enabled, "actual[0].Enabled") - suite.Equal("paramscointrue", actual[1].Denom, "actual[1].Denom") - suite.True(actual[1].Enabled, "actual[1].Enabled") + if assert.Check(t, len(actual) == 2) { + assert.Equal(t, "paramscoinfalse", actual[0].Denom, "actual[0].Denom") + assert.Assert(t, actual[0].Enabled == false, "actual[0].Enabled") + assert.Equal(t, "paramscointrue", actual[1].Denom, "actual[1].Denom") + assert.Assert(t, actual[1].Enabled, "actual[1].Enabled") } }) } - -func TestKeeperTestSuite(t *testing.T) { - suite.Run(t, new(IntegrationTestSuite)) -} diff --git a/testutil/assertHelpers.go b/testutil/assertHelpers.go new file mode 100644 index 000000000000..2c11d0f50b5c --- /dev/null +++ b/testutil/assertHelpers.go @@ -0,0 +1,25 @@ +package testutil + +import "testing" + +func AssertPanics(t *testing.T, f func()) { + panicked := false + defer func() { + if r := recover(); r != nil { + panicked = true + } + }() + f() + if !panicked { + t.Errorf("should panic") + } +} + +func AssertNotPanics(t *testing.T, f func()) { + defer func() { + if r := recover(); r != nil { + t.Errorf("should not panic: %v", r) + } + }() + f() +} From 31207dd446840dfc2355a58618ae188f2ad30ebd Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 10 Jan 2023 16:42:34 +0530 Subject: [PATCH 4/9] address review comment --- tests/integration/bank/keeper/deterministic_test.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/integration/bank/keeper/deterministic_test.go b/tests/integration/bank/keeper/deterministic_test.go index 5b001dae8249..d7e80da4c2bf 100644 --- a/tests/integration/bank/keeper/deterministic_test.go +++ b/tests/integration/bank/keeper/deterministic_test.go @@ -44,10 +44,9 @@ var ( } ) -func fundAccount(t *testing.T, addr sdk.AccAddress, coin ...sdk.Coin) { - f := initFixture(t) +func fundAccount(f *fixture, addr sdk.AccAddress, coin ...sdk.Coin) { err := banktestutil.FundAccount(f.bankKeeper, f.ctx, addr, sdk.NewCoins(coin...)) - assert.NilError(t, err) + assert.NilError(&testing.T{}, err) } func getCoin(rt *rapid.T) sdk.Coin { @@ -65,14 +64,14 @@ func TestGRPCQueryBalance(t *testing.T) { rapid.Check(t, func(rt *rapid.T) { addr := testdata.AddressGenerator(rt).Draw(rt, "address") coin := getCoin(rt) - fundAccount(t, addr, coin) + fundAccount(f, addr, coin) req := banktypes.NewQueryBalanceRequest(addr, coin.GetDenom()) testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.Balance, 0, true) }) - fundAccount(t, addr1, coin1) + fundAccount(f, addr1, coin1) req := banktypes.NewQueryBalanceRequest(addr1, coin1.GetDenom()) testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.Balance, 1081, false) } @@ -94,7 +93,7 @@ func TestGRPCQueryAllBalances(t *testing.T) { coins = sdk.NewCoins(append(coins, coin)...) } - fundAccount(t, addr, coins...) + fundAccount(f, addr, coins...) req := banktypes.NewQueryAllBalancesRequest(addr, testdata.PaginationGenerator(rt, uint64(numCoins)).Draw(rt, "pagination")) testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.AllBalances, 0, true) @@ -105,7 +104,7 @@ func TestGRPCQueryAllBalances(t *testing.T) { sdk.NewCoin("denom", sdk.NewInt(100)), ) - fundAccount(t, addr1, coins...) + fundAccount(f, addr1, coins...) req := banktypes.NewQueryAllBalancesRequest(addr1, nil) testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.AllBalances, 30, false) From 492ba103c8df23747c3801764fe7658a8cc54e97 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 10 Jan 2023 16:52:04 +0530 Subject: [PATCH 5/9] address review comment --- tests/integration/bank/keeper/keeper_test.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tests/integration/bank/keeper/keeper_test.go b/tests/integration/bank/keeper/keeper_test.go index c8d53513145c..a3ad116488cb 100644 --- a/tests/integration/bank/keeper/keeper_test.go +++ b/tests/integration/bank/keeper/keeper_test.go @@ -33,9 +33,12 @@ import ( "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/bank/types" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" + "github.com/cosmos/cosmos-sdk/x/nft" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" _ "github.com/cosmos/cosmos-sdk/x/auth/vesting" _ "github.com/cosmos/cosmos-sdk/x/consensus" @@ -1179,7 +1182,20 @@ func TestBalanceTrackingEvents(t *testing.T) { // replace account keeper and bank keeper otherwise the account keeper won't be aware of the // existence of the new module account because GetModuleAccount checks for the existence via // permissions map and not via state... weird - maccPerms := simapp.GetMaccPerms() + maccPerms := make(map[string][]string) + moduleAccPerms := []*authmodulev1.ModuleAccountPermission{ + {Account: authtypes.FeeCollectorName}, + {Account: distrtypes.ModuleName}, + {Account: minttypes.ModuleName, Permissions: []string{authtypes.Minter}}, + {Account: stakingtypes.BondedPoolName, Permissions: []string{authtypes.Burner, stakingtypes.ModuleName}}, + {Account: stakingtypes.NotBondedPoolName, Permissions: []string{authtypes.Burner, stakingtypes.ModuleName}}, + {Account: govtypes.ModuleName, Permissions: []string{authtypes.Burner}}, + {Account: nft.ModuleName}, + } + for _, perms := range moduleAccPerms { + maccPerms[perms.Account] = perms.Permissions + } + maccPerms[multiPerm] = []string{authtypes.Burner, authtypes.Minter, authtypes.Staking} f.accountKeeper = authkeeper.NewAccountKeeper( From ecf0f0de0e6404fda238694253ed4485746986b9 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 10 Jan 2023 16:57:01 +0530 Subject: [PATCH 6/9] fix something --- tests/integration/bank/keeper/keeper_test.go | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/tests/integration/bank/keeper/keeper_test.go b/tests/integration/bank/keeper/keeper_test.go index a3ad116488cb..ab109392bafa 100644 --- a/tests/integration/bank/keeper/keeper_test.go +++ b/tests/integration/bank/keeper/keeper_test.go @@ -8,7 +8,6 @@ import ( authmodulev1 "cosmossdk.io/api/cosmos/auth/module/v1" "cosmossdk.io/math" - "cosmossdk.io/simapp" abci "github.com/tendermint/tendermint/abci/types" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtime "github.com/tendermint/tendermint/types/time" @@ -33,12 +32,9 @@ import ( "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" "github.com/cosmos/cosmos-sdk/x/bank/types" - distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" - "github.com/cosmos/cosmos-sdk/x/nft" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" _ "github.com/cosmos/cosmos-sdk/x/auth/vesting" _ "github.com/cosmos/cosmos-sdk/x/consensus" @@ -1183,18 +1179,6 @@ func TestBalanceTrackingEvents(t *testing.T) { // existence of the new module account because GetModuleAccount checks for the existence via // permissions map and not via state... weird maccPerms := make(map[string][]string) - moduleAccPerms := []*authmodulev1.ModuleAccountPermission{ - {Account: authtypes.FeeCollectorName}, - {Account: distrtypes.ModuleName}, - {Account: minttypes.ModuleName, Permissions: []string{authtypes.Minter}}, - {Account: stakingtypes.BondedPoolName, Permissions: []string{authtypes.Burner, stakingtypes.ModuleName}}, - {Account: stakingtypes.NotBondedPoolName, Permissions: []string{authtypes.Burner, stakingtypes.ModuleName}}, - {Account: govtypes.ModuleName, Permissions: []string{authtypes.Burner}}, - {Account: nft.ModuleName}, - } - for _, perms := range moduleAccPerms { - maccPerms[perms.Account] = perms.Permissions - } maccPerms[multiPerm] = []string{authtypes.Burner, authtypes.Minter, authtypes.Staking} @@ -1326,7 +1310,7 @@ func TestMintCoinRestrictions(t *testing.T) { type BankMintingRestrictionFn func(ctx sdk.Context, coins sdk.Coins) error - maccPerms := simapp.GetMaccPerms() + maccPerms := make(map[string][]string) maccPerms[multiPerm] = []string{authtypes.Burner, authtypes.Minter, authtypes.Staking} f.accountKeeper = authkeeper.NewAccountKeeper( From 2905008ee9714f57fb66bb20191eec1f951f00fb Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 10 Jan 2023 17:20:07 +0530 Subject: [PATCH 7/9] fix tests --- tests/integration/bank/keeper/deterministic_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/bank/keeper/deterministic_test.go b/tests/integration/bank/keeper/deterministic_test.go index d7e80da4c2bf..2fc768ee5d20 100644 --- a/tests/integration/bank/keeper/deterministic_test.go +++ b/tests/integration/bank/keeper/deterministic_test.go @@ -73,7 +73,7 @@ func TestGRPCQueryBalance(t *testing.T) { fundAccount(f, addr1, coin1) req := banktypes.NewQueryBalanceRequest(addr1, coin1.GetDenom()) - testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.Balance, 1081, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.Balance, 1087, false) } func TestGRPCQueryAllBalances(t *testing.T) { @@ -107,7 +107,7 @@ func TestGRPCQueryAllBalances(t *testing.T) { fundAccount(f, addr1, coins...) req := banktypes.NewQueryAllBalancesRequest(addr1, nil) - testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.AllBalances, 30, false) + testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.AllBalances, 357, false) } func TestGRPCQuerySpendableBalances(t *testing.T) { From d04b1c0e76bc3e15fcfb8d5107f5df309fadcaf6 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Wed, 11 Jan 2023 11:05:07 +0530 Subject: [PATCH 8/9] address review comment --- tests/integration/bank/keeper/keeper_test.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tests/integration/bank/keeper/keeper_test.go b/tests/integration/bank/keeper/keeper_test.go index ab109392bafa..baee102f4bea 100644 --- a/tests/integration/bank/keeper/keeper_test.go +++ b/tests/integration/bank/keeper/keeper_test.go @@ -2,6 +2,7 @@ package keeper_test import ( "fmt" + "reflect" "strings" "testing" "time" @@ -63,6 +64,21 @@ var ( initCoins = sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, initTokens)) ) +func assertElementsMatch(listA, listB []string) bool { + // Create maps for each slice + mapA, mapB := make(map[string]int), make(map[string]int) + + // Populate the maps with the elements of each slice + for _, value := range listA { + mapA[value]++ + } + for _, value := range listB { + mapB[value]++ + } + + return reflect.DeepEqual(mapA, mapB) +} + func newFooCoin(amt int64) sdk.Coin { return sdk.NewInt64Coin(fooDenom, amt) } @@ -102,7 +118,6 @@ func initFixture(t assert.TestingT) *fixture { app, err := sims.Setup( configurator.NewAppConfig( - // configurator.TxModule(), configurator.AuthModule(), configurator.BankModule(), configurator.StakingModule(), @@ -1670,7 +1685,8 @@ func TestIterateSendEnabledEntries(t *testing.T) { }) }) t.Run(fmt.Sprintf("all denoms were seen default %t", def), func(t *testing.T) { - // assert.ElementsMatch(t, denoms, seen) + match := assertElementsMatch(denoms, seen) + assert.Assert(t, match) }) } From acf6c0b93ae62673a4dd4ed4616afd525fce5ce7 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Wed, 11 Jan 2023 13:47:38 +0530 Subject: [PATCH 9/9] make separate fixture for deterministic tests --- .../bank/keeper/deterministic_test.go | 68 +++++++++++++++---- 1 file changed, 55 insertions(+), 13 deletions(-) diff --git a/tests/integration/bank/keeper/deterministic_test.go b/tests/integration/bank/keeper/deterministic_test.go index 2fc768ee5d20..48646d3177f9 100644 --- a/tests/integration/bank/keeper/deterministic_test.go +++ b/tests/integration/bank/keeper/deterministic_test.go @@ -4,11 +4,17 @@ import ( "testing" "github.com/stretchr/testify/require" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "gotest.tools/v3/assert" "pgregory.net/rapid" + "github.com/cosmos/cosmos-sdk/baseapp" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/testutil/configurator" + "github.com/cosmos/cosmos-sdk/testutil/sims" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/bank/keeper" banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" @@ -44,7 +50,43 @@ var ( } ) -func fundAccount(f *fixture, addr sdk.AccAddress, coin ...sdk.Coin) { +type deterministicFixture struct { + ctx sdk.Context + bankKeeper keeper.BaseKeeper + + queryClient banktypes.QueryClient +} + +func initDeterministicFixture(t *testing.T) *deterministicFixture { + f := &deterministicFixture{} + + var interfaceRegistry codectypes.InterfaceRegistry + + app, err := sims.Setup( + configurator.NewAppConfig( + configurator.AuthModule(), + configurator.TxModule(), + configurator.ParamsModule(), + configurator.ConsensusModule(), + configurator.BankModule(), + configurator.StakingModule(), + ), + &f.bankKeeper, + &interfaceRegistry, + ) + assert.NilError(t, err) + + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + f.ctx = ctx + + queryHelper := baseapp.NewQueryServerTestHelper(ctx, interfaceRegistry) + banktypes.RegisterQueryServer(queryHelper, f.bankKeeper) + f.queryClient = banktypes.NewQueryClient(queryHelper) + + return f +} + +func fundAccount(f *deterministicFixture, addr sdk.AccAddress, coin ...sdk.Coin) { err := banktestutil.FundAccount(f.bankKeeper, f.ctx, addr, sdk.NewCoins(coin...)) assert.NilError(&testing.T{}, err) } @@ -58,7 +100,7 @@ func getCoin(rt *rapid.T) sdk.Coin { func TestGRPCQueryBalance(t *testing.T) { t.Parallel() - f := initFixture(t) + f := initDeterministicFixture(t) tt := require.New(t) rapid.Check(t, func(rt *rapid.T) { @@ -78,7 +120,7 @@ func TestGRPCQueryBalance(t *testing.T) { func TestGRPCQueryAllBalances(t *testing.T) { t.Parallel() - f := initFixture(t) + f := initDeterministicFixture(t) tt := require.New(t) rapid.Check(t, func(rt *rapid.T) { @@ -112,7 +154,7 @@ func TestGRPCQueryAllBalances(t *testing.T) { func TestGRPCQuerySpendableBalances(t *testing.T) { t.Parallel() - f := initFixture(t) + f := initDeterministicFixture(t) tt := require.New(t) rapid.Check(t, func(t *rapid.T) { @@ -151,7 +193,7 @@ func TestGRPCQuerySpendableBalances(t *testing.T) { func TestGRPCQueryTotalSupply(t *testing.T) { t.Parallel() - f := initFixture(t) + f := initDeterministicFixture(t) tt := require.New(t) res, err := f.queryClient.TotalSupply(f.ctx, &banktypes.QueryTotalSupplyRequest{}) @@ -182,7 +224,7 @@ func TestGRPCQueryTotalSupply(t *testing.T) { testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.TotalSupply, 0, true) }) - f = initFixture(&testing.T{}) // reset + f = initDeterministicFixture(t) // reset coins := sdk.NewCoins( sdk.NewCoin("foo", sdk.NewInt(10)), @@ -197,7 +239,7 @@ func TestGRPCQueryTotalSupply(t *testing.T) { func TestGRPCQueryTotalSupplyOf(t *testing.T) { t.Parallel() - f := initFixture(t) + f := initDeterministicFixture(t) tt := require.New(t) rapid.Check(t, func(rt *rapid.T) { @@ -221,7 +263,7 @@ func TestGRPCQueryTotalSupplyOf(t *testing.T) { func TestGRPCQueryParams(t *testing.T) { t.Parallel() - f := initFixture(t) + f := initDeterministicFixture(t) tt := require.New(t) rapid.Check(t, func(rt *rapid.T) { @@ -294,7 +336,7 @@ func createAndReturnMetadatas(t *rapid.T, count int) []banktypes.Metadata { func TestGRPCDenomsMetadata(t *testing.T) { t.Parallel() - f := initFixture(t) + f := initDeterministicFixture(t) tt := require.New(t) rapid.Check(t, func(rt *rapid.T) { @@ -313,7 +355,7 @@ func TestGRPCDenomsMetadata(t *testing.T) { testdata.DeterministicIterations(f.ctx, tt, req, f.queryClient.DenomsMetadata, 0, true) }) - f = initFixture(&testing.T{}) // reset + f = initDeterministicFixture(t) // reset f.bankKeeper.SetDenomMetaData(f.ctx, metadataAtom) @@ -323,7 +365,7 @@ func TestGRPCDenomsMetadata(t *testing.T) { func TestGRPCDenomMetadata(t *testing.T) { t.Parallel() - f := initFixture(t) + f := initDeterministicFixture(t) tt := require.New(t) rapid.Check(t, func(rt *rapid.T) { @@ -349,7 +391,7 @@ func TestGRPCDenomMetadata(t *testing.T) { func TestGRPCSendEnabled(t *testing.T) { t.Parallel() - f := initFixture(t) + f := initDeterministicFixture(t) tt := require.New(t) allDenoms := []string{} @@ -399,7 +441,7 @@ func TestGRPCSendEnabled(t *testing.T) { func TestGRPCDenomOwners(t *testing.T) { t.Parallel() - f := initFixture(t) + f := initDeterministicFixture(t) tt := require.New(t) rapid.Check(t, func(rt *rapid.T) {