From 82adcea79165d805e609215cb0692d303ccfd87a Mon Sep 17 00:00:00 2001 From: Likhita Polavarapu <78951027+likhita-809@users.noreply.github.com> Date: Wed, 7 Jun 2023 17:38:52 +0530 Subject: [PATCH] test: deduplicate e2e tests (#16356) --- tests/e2e/auth/suite.go | 36 - tests/e2e/crisis/cli_test.go | 107 --- tests/e2e/feegrant/cli_test.go | 19 - tests/e2e/feegrant/suite.go | 993 --------------------------- tests/e2e/group/query.go | 828 ---------------------- tests/e2e/nft/cli_test.go | 20 - tests/e2e/nft/grpc.go | 414 ----------- tests/e2e/nft/tx.go | 163 ----- x/feegrant/client/cli/tx_test.go | 3 +- x/feegrant/keeper/grpc_query_test.go | 11 + x/group/keeper/msg_server_test.go | 32 +- 11 files changed, 43 insertions(+), 2583 deletions(-) delete mode 100644 tests/e2e/crisis/cli_test.go delete mode 100644 tests/e2e/feegrant/cli_test.go delete mode 100644 tests/e2e/feegrant/suite.go delete mode 100644 tests/e2e/nft/cli_test.go delete mode 100644 tests/e2e/nft/grpc.go delete mode 100644 tests/e2e/nft/tx.go diff --git a/tests/e2e/auth/suite.go b/tests/e2e/auth/suite.go index 7b81085ba1..e6a1fc2963 100644 --- a/tests/e2e/auth/suite.go +++ b/tests/e2e/auth/suite.go @@ -84,42 +84,6 @@ func (s *E2ETestSuite) TearDownSuite() { s.network.Cleanup() } -func (s *E2ETestSuite) TestCLIValidateSignatures() { - val := s.network.Validators[0] - sendTokens := sdk.NewCoins( - sdk.NewCoin(fmt.Sprintf("%stoken", val.Moniker), sdk.NewInt(10)), - sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))) - - res, err := s.createBankMsg(val, val.Address, sendTokens, - fmt.Sprintf("--%s=true", flags.FlagGenerateOnly)) - s.Require().NoError(err) - - // write unsigned tx to file - unsignedTx := testutil.WriteToNewTempFile(s.T(), res.String()) - defer unsignedTx.Close() - res, err = authclitestutil.TxSignExec(val.ClientCtx, val.Address, unsignedTx.Name()) - s.Require().NoError(err) - signedTx, err := val.ClientCtx.TxConfig.TxJSONDecoder()(res.Bytes()) - s.Require().NoError(err) - - signedTxFile := testutil.WriteToNewTempFile(s.T(), res.String()) - defer signedTxFile.Close() - txBuilder, err := val.ClientCtx.TxConfig.WrapTxBuilder(signedTx) - s.Require().NoError(err) - _, err = authclitestutil.TxValidateSignaturesExec(val.ClientCtx, signedTxFile.Name()) - s.Require().NoError(err) - - txBuilder.SetMemo("MODIFIED TX") - bz, err := val.ClientCtx.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) - s.Require().NoError(err) - - modifiedTxFile := testutil.WriteToNewTempFile(s.T(), string(bz)) - defer modifiedTxFile.Close() - - _, err = authclitestutil.TxValidateSignaturesExec(val.ClientCtx, modifiedTxFile.Name()) - s.Require().EqualError(err, "signatures validation failed") -} - func (s *E2ETestSuite) TestCLISignGenOnly() { val := s.network.Validators[0] val2 := s.network.Validators[1] diff --git a/tests/e2e/crisis/cli_test.go b/tests/e2e/crisis/cli_test.go deleted file mode 100644 index 9a33c89774..0000000000 --- a/tests/e2e/crisis/cli_test.go +++ /dev/null @@ -1,107 +0,0 @@ -//go:build e2e -// +build e2e - -package crisis - -import ( - "fmt" - "testing" - - "cosmossdk.io/simapp" - "github.com/cosmos/cosmos-sdk/client/flags" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/cosmos/cosmos-sdk/testutil/network" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/crisis/client/cli" - "github.com/cosmos/gogoproto/proto" - "gotest.tools/v3/assert" -) - -type fixture struct { - cfg network.Config - network *network.Network -} - -func initFixture(t *testing.T) *fixture { - cfg := network.DefaultConfig(simapp.NewTestNetworkFixture) - cfg.NumValidators = 1 - - network, err := network.New(t, t.TempDir(), cfg) - assert.NilError(t, err) - assert.NilError(t, network.WaitForNextBlock()) - - return &fixture{ - cfg: cfg, - network: network, - } -} - -func TestNewMsgVerifyInvariantTxCmd(t *testing.T) { - t.Parallel() - f := initFixture(t) - defer f.network.Cleanup() - - val := f.network.Validators[0] - - testCases := []struct { - name string - args []string - expectErrMsg string - expectedCode uint32 - respType proto.Message - }{ - { - "missing module", - []string{ - "", "total-supply", - fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(f.cfg.BondDenom, sdk.NewInt(10))).String()), - }, - "invalid module name", 0, nil, - }, - { - "missing invariant route", - []string{ - "bank", "", - fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(f.cfg.BondDenom, sdk.NewInt(10))).String()), - }, - "invalid invariant route", 0, nil, - }, - { - "valid traclientCtx.Codec.UnmarshalJSON(out.Bytes(), nsaction", - []string{ - "bank", "total-supply", - fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(f.cfg.BondDenom, sdk.NewInt(10))).String()), - }, - "", 0, &sdk.TxResponse{}, - }, - } - - for _, tc := range testCases { - tc := tc - - t.Run(tc.name, func(t *testing.T) { - cmd := cli.NewMsgVerifyInvariantTxCmd() - clientCtx := val.ClientCtx - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErrMsg != "" { - assert.ErrorContains(t, err, tc.expectErrMsg) - } else { - assert.NilError(t, err) - assert.NilError(t, clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String()) - - txResp := tc.respType.(*sdk.TxResponse) - assert.NilError(t, clitestutil.CheckTxCode(f.network, clientCtx, txResp.TxHash, tc.expectedCode)) - } - }) - } -} diff --git a/tests/e2e/feegrant/cli_test.go b/tests/e2e/feegrant/cli_test.go deleted file mode 100644 index 23cd068ecb..0000000000 --- a/tests/e2e/feegrant/cli_test.go +++ /dev/null @@ -1,19 +0,0 @@ -//go:build e2e -// +build e2e - -package feegrant - -import ( - "testing" - - "cosmossdk.io/simapp" - "github.com/cosmos/cosmos-sdk/testutil/network" - - "github.com/stretchr/testify/suite" -) - -func TestE2ETestSuite(t *testing.T) { - cfg := network.DefaultConfig(simapp.NewTestNetworkFixture) - cfg.NumValidators = 3 - suite.Run(t, NewE2ETestSuite(cfg)) -} diff --git a/tests/e2e/feegrant/suite.go b/tests/e2e/feegrant/suite.go deleted file mode 100644 index 9797f42ed0..0000000000 --- a/tests/e2e/feegrant/suite.go +++ /dev/null @@ -1,993 +0,0 @@ -package feegrant - -import ( - "fmt" - "strings" - "testing" - "time" - - "github.com/cosmos/gogoproto/proto" - "github.com/stretchr/testify/suite" - - // without this import amino json encoding will fail when resolving any types - _ "cosmossdk.io/api/cosmos/feegrant/v1beta1" - "cosmossdk.io/x/feegrant" - "cosmossdk.io/x/feegrant/client/cli" - "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/flags" - codecaddress "github.com/cosmos/cosmos-sdk/codec/address" - "github.com/cosmos/cosmos-sdk/crypto/hd" - "github.com/cosmos/cosmos-sdk/crypto/keyring" - "github.com/cosmos/cosmos-sdk/testutil" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/cosmos/cosmos-sdk/testutil/network" - sdk "github.com/cosmos/cosmos-sdk/types" - govtestutil "github.com/cosmos/cosmos-sdk/x/gov/client/testutil" - govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" -) - -const ( - oneYear = 365 * 24 * 60 * 60 - tenHours = 10 * 60 * 60 - oneHour = 60 * 60 -) - -type E2ETestSuite struct { - suite.Suite - - cfg network.Config - network *network.Network - addedGranter sdk.AccAddress - addedGrantee sdk.AccAddress - addedGrant feegrant.Grant -} - -func NewE2ETestSuite(cfg network.Config) *E2ETestSuite { - return &E2ETestSuite{cfg: cfg} -} - -func (s *E2ETestSuite) SetupSuite() { - s.T().Log("setting up e2e test suite") - - if testing.Short() { - s.T().Skip("skipping test in unit-tests mode.") - } - - var err error - s.network, err = network.New(s.T(), s.T().TempDir(), s.cfg) - s.Require().NoError(err) - - s.Require().NoError(s.network.WaitForNextBlock()) - - val := s.network.Validators[0] - granter := val.Address - grantee := s.network.Validators[1].Address - - s.createGrant(granter, grantee) - - grant, err := feegrant.NewGrant(granter, grantee, &feegrant.BasicAllowance{ - SpendLimit: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100))), - }) - s.Require().NoError(err) - - s.addedGrant = grant - s.addedGranter = granter - s.addedGrantee = grantee -} - -// createGrant creates a new basic allowance fee grant from granter to grantee. -func (s *E2ETestSuite) createGrant(granter, grantee sdk.Address) { - val := s.network.Validators[0] - - clientCtx := val.ClientCtx - commonFlags := []string{ - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100))).String()), - } - - fee := sdk.NewCoin("stake", sdk.NewInt(100)) - - args := append( - []string{ - granter.String(), - grantee.String(), - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, fee.String()), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - fmt.Sprintf("--%s=%s", cli.FlagExpiration, getFormattedExpiration(oneYear)), - }, - commonFlags..., - ) - - cmd := cli.NewCmdFeeGrant(codecaddress.NewBech32Codec("cosmos")) - - _, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, args) - s.Require().NoError(err) - s.Require().NoError(s.network.WaitForNextBlock()) -} - -func (s *E2ETestSuite) TearDownSuite() { - s.T().Log("tearing down e2e test suite") - s.network.Cleanup() -} - -func (s *E2ETestSuite) TestCmdGetFeeGrant() { - val := s.network.Validators[0] - granter := val.Address - grantee := s.addedGrantee - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErrMsg string - expectErr bool - respType *feegrant.Grant - resp *feegrant.Grant - }{ - { - "wrong granter", - []string{ - "wrong_granter", - grantee.String(), - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - "decoding bech32 failed", - true, nil, nil, - }, - { - "wrong grantee", - []string{ - granter.String(), - "wrong_grantee", - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - "decoding bech32 failed", - true, nil, nil, - }, - { - "non existed grant", - []string{ - "cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl", - grantee.String(), - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - "fee-grant not found", - true, nil, nil, - }, - { - "valid req", - []string{ - granter.String(), - grantee.String(), - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - "", - false, - &feegrant.Grant{}, - &s.addedGrant, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := cli.GetCmdQueryFeeGrant(codecaddress.NewBech32Codec("cosmos")) - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - - if tc.expectErr { - s.Require().Error(err) - s.Require().Contains(err.Error(), tc.expectErrMsg) - } else { - s.Require().NoError(err) - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String()) - s.Require().Equal(tc.respType.Grantee, tc.respType.Grantee) - s.Require().Equal(tc.respType.Granter, tc.respType.Granter) - grant, err := tc.respType.GetGrant() - s.Require().NoError(err) - grant1, err1 := tc.resp.GetGrant() - s.Require().NoError(err1) - s.Require().Equal( - grant.(*feegrant.BasicAllowance).SpendLimit, - grant1.(*feegrant.BasicAllowance).SpendLimit, - ) - } - }) - } -} - -func (s *E2ETestSuite) TestCmdGetFeeGrantsByGrantee() { - val := s.network.Validators[0] - grantee := s.addedGrantee - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - resp *feegrant.QueryAllowancesResponse - expectLength int - }{ - { - "wrong grantee", - []string{ - "wrong_grantee", - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - true, nil, 0, - }, - { - "non existent grantee", - []string{ - "cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl", - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - false, &feegrant.QueryAllowancesResponse{}, 0, - }, - { - "valid req", - []string{ - grantee.String(), - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - false, &feegrant.QueryAllowancesResponse{}, 1, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := cli.GetCmdQueryFeeGrantsByGrantee(codecaddress.NewBech32Codec("cosmos")) - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - - if tc.expectErr { - s.Require().Error(err) - } else { - s.Require().NoError(err) - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.resp), out.String()) - - s.Require().Len(tc.resp.Allowances, tc.expectLength) - } - }) - } -} - -func (s *E2ETestSuite) TestCmdGetFeeGrantsByGranter() { - val := s.network.Validators[0] - granter := s.addedGranter - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - resp *feegrant.QueryAllowancesByGranterResponse - expectLength int - }{ - { - "wrong grantee", - []string{ - "wrong_grantee", - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - true, nil, 0, - }, - { - "non existent grantee", - []string{ - "cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl", - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - false, &feegrant.QueryAllowancesByGranterResponse{}, 0, - }, - { - "valid req", - []string{ - granter.String(), - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - false, &feegrant.QueryAllowancesByGranterResponse{}, 1, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := cli.GetCmdQueryFeeGrantsByGranter(codecaddress.NewBech32Codec("cosmos")) - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - - if tc.expectErr { - s.Require().Error(err) - } else { - s.Require().NoError(err) - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.resp), out.String()) - s.Require().Len(tc.resp.Allowances, tc.expectLength) - } - }) - } -} - -func (s *E2ETestSuite) TestNewCmdFeeGrant() { - val := s.network.Validators[0] - granter := val.Address - alreadyExistedGrantee := s.addedGrantee - clientCtx := val.ClientCtx - - fromAddr, fromName, _, err := client.GetFromFields(clientCtx, clientCtx.Keyring, granter.String()) - s.Require().Equal(fromAddr, granter) - s.Require().NoError(err) - - commonFlags := []string{ - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), - } - - testCases := []struct { - name string - args []string - expectErr bool - expectedCode uint32 - respType proto.Message - }{ - { - "wrong granter address", - append( - []string{ - "wrong_granter", - "cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - true, 0, nil, - }, - { - "wrong grantee address", - append( - []string{ - granter.String(), - "wrong_grantee", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - true, 0, nil, - }, - { - "wrong granter key name", - append( - []string{ - "invalid_granter", - "cosmos16dun6ehcc86e03wreqqww89ey569wuj4em572w", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - true, 0, nil, - }, - { - "valid basic fee grant", - append( - []string{ - granter.String(), - "cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "valid basic fee grant with granter key name", - append( - []string{ - fromName, - "cosmos16dun6ehcc86e03wreqqww89ey569wuj4em572w", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, fromName), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "valid basic fee grant with amino", - append( - []string{ - granter.String(), - "cosmos1v57fx2l2rt6ehujuu99u2fw05779m5e2ux4z2h", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - fmt.Sprintf("--%s=%s", flags.FlagSignMode, flags.SignModeLegacyAminoJSON), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "valid basic fee grant without spend limit", - append( - []string{ - granter.String(), - "cosmos17h5lzptx3ghvsuhk7wx4c4hnl7rsswxjer97em", - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "valid basic fee grant without expiration", - append( - []string{ - granter.String(), - "cosmos16dlc38dcqt0uralyd8hksxyrny6kaeqfjvjwp5", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "valid basic fee grant without spend-limit and expiration", - append( - []string{ - granter.String(), - "cosmos1ku40qup9vwag4wtf8cls9mkszxfthaklxkp3c8", - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "try to add existed grant", - append( - []string{ - granter.String(), - alreadyExistedGrantee.String(), - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - false, 18, &sdk.TxResponse{}, - }, - { - "invalid number of args(periodic fee grant)", - append( - []string{ - granter.String(), - "cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%s", cli.FlagPeriodLimit, "10stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - fmt.Sprintf("--%s=%s", cli.FlagExpiration, getFormattedExpiration(tenHours)), - }, - commonFlags..., - ), - true, 0, nil, - }, - { - "period mentioned and period limit omitted, invalid periodic grant", - append( - []string{ - granter.String(), - "cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%d", cli.FlagPeriod, tenHours), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - fmt.Sprintf("--%s=%s", cli.FlagExpiration, getFormattedExpiration(oneHour)), - }, - commonFlags..., - ), - true, 0, nil, - }, - { - "period cannot be greater than the actual expiration(periodic fee grant)", - append( - []string{ - granter.String(), - "cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%d", cli.FlagPeriod, tenHours), - fmt.Sprintf("--%s=%s", cli.FlagPeriodLimit, "10stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - fmt.Sprintf("--%s=%s", cli.FlagExpiration, getFormattedExpiration(oneHour)), - }, - commonFlags..., - ), - true, 0, nil, - }, - { - "valid periodic fee grant", - append( - []string{ - granter.String(), - "cosmos1w55kgcf3ltaqdy4ww49nge3klxmrdavrr6frmp", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%d", cli.FlagPeriod, oneHour), - fmt.Sprintf("--%s=%s", cli.FlagPeriodLimit, "10stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - fmt.Sprintf("--%s=%s", cli.FlagExpiration, getFormattedExpiration(tenHours)), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "valid periodic fee grant without spend-limit", - append( - []string{ - granter.String(), - "cosmos1vevyks8pthkscvgazc97qyfjt40m6g9xe85ry8", - fmt.Sprintf("--%s=%d", cli.FlagPeriod, oneHour), - fmt.Sprintf("--%s=%s", cli.FlagPeriodLimit, "10stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - fmt.Sprintf("--%s=%s", cli.FlagExpiration, getFormattedExpiration(tenHours)), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "valid periodic fee grant without expiration", - append( - []string{ - granter.String(), - "cosmos14cm33pvnrv2497tyt8sp9yavhmw83nwej3m0e8", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%d", cli.FlagPeriod, oneHour), - fmt.Sprintf("--%s=%s", cli.FlagPeriodLimit, "10stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "valid periodic fee grant without spend-limit and expiration", - append( - []string{ - granter.String(), - "cosmos12nyk4pcf4arshznkpz882e4l4ts0lt0ap8ce54", - fmt.Sprintf("--%s=%d", cli.FlagPeriod, oneHour), - fmt.Sprintf("--%s=%s", cli.FlagPeriodLimit, "10stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "invalid expiration", - append( - []string{ - granter.String(), - "cosmos1vevyks8pthkscvgazc97qyfjt40m6g9xe85ry8", - fmt.Sprintf("--%s=%d", cli.FlagPeriod, oneHour), - fmt.Sprintf("--%s=%s", cli.FlagPeriodLimit, "10stake"), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - fmt.Sprintf("--%s=%s", cli.FlagExpiration, "invalid"), - }, - commonFlags..., - ), - true, 0, nil, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := cli.NewCmdFeeGrant(codecaddress.NewBech32Codec("cosmos")) - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - - if tc.expectErr { - s.Require().Error(err) - } else { - s.Require().NoError(err) - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String()) - - txResp := tc.respType.(*sdk.TxResponse) - s.Require().NoError(clitestutil.CheckTxCode(s.network, clientCtx, txResp.TxHash, tc.expectedCode)) - } - }) - } -} - -func (s *E2ETestSuite) TestNewCmdRevokeFeegrant() { - val := s.network.Validators[0] - granter := s.addedGranter - grantee := s.addedGrantee - clientCtx := val.ClientCtx - - commonFlags := []string{ - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), - } - - address := "cosmos16ydaqh0fcnh4qt7a3jme4mmztm2qel5axcpw00" - // Create new fee grant specifically to test amino. - aminoGrantee, err := codecaddress.NewBech32Codec("cosmos").StringToBytes(address) - s.Require().NoError(err) - s.createGrant(granter, sdk.AccAddress(aminoGrantee)) - - testCases := []struct { - name string - args []string - expectErr bool - expectedCode uint32 - respType proto.Message - }{ - { - "invalid grantee", - append( - []string{ - "wrong_granter", - grantee.String(), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - true, 0, nil, - }, - { - "invalid grantee", - append( - []string{ - granter.String(), - "wrong_grantee", - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - true, 0, nil, - }, - { - "Non existed grant", - append( - []string{ - granter.String(), - "cosmos1aeuqja06474dfrj7uqsvukm6rael982kk89mqr", - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - false, 38, &sdk.TxResponse{}, - }, - { - "Valid revoke", - append( - []string{ - granter.String(), - grantee.String(), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - { - "Valid revoke with amino", - append( - []string{ - granter.String(), - address, - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - fmt.Sprintf("--%s=%s", flags.FlagSignMode, flags.SignModeLegacyAminoJSON), - }, - commonFlags..., - ), - false, 0, &sdk.TxResponse{}, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := cli.NewCmdRevokeFeegrant(codecaddress.NewBech32Codec("cosmos")) - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - - if tc.expectErr { - s.Require().Error(err) - } else { - s.Require().NoError(err) - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String()) - - txResp := tc.respType.(*sdk.TxResponse) - s.Require().NoError(clitestutil.CheckTxCode(s.network, clientCtx, txResp.TxHash, tc.expectedCode)) - } - }) - } -} - -func (s *E2ETestSuite) TestTxWithFeeGrant() { - s.T().Skip() // TODO to re-enable in #12274 - - val := s.network.Validators[0] - clientCtx := val.ClientCtx - granter := val.Address - - // creating an account manually (This account won't be exist in state) - k, _, err := val.ClientCtx.Keyring.NewMnemonic("grantee", keyring.English, sdk.FullFundraiserPath, keyring.DefaultBIP39Passphrase, hd.Secp256k1) - s.Require().NoError(err) - pub, err := k.GetPubKey() - s.Require().NoError(err) - grantee := sdk.AccAddress(pub.Address()) - - commonFlags := []string{ - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), - } - - fee := sdk.NewCoin("stake", sdk.NewInt(100)) - - args := append( - []string{ - granter.String(), - grantee.String(), - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, fee.String()), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - fmt.Sprintf("--%s=%s", cli.FlagExpiration, getFormattedExpiration(oneYear)), - }, - commonFlags..., - ) - - cmd := cli.NewCmdFeeGrant(codecaddress.NewBech32Codec("cosmos")) - - _, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, args) - s.Require().NoError(err) - s.Require().NoError(s.network.WaitForNextBlock()) - - testcases := []struct { - name string - from string - flags []string - expErrCode uint32 - }{ - { - name: "granted fee allowance for an account which is not in state and creating any tx with it by using --fee-granter shouldn't fail", - from: grantee.String(), - flags: []string{fmt.Sprintf("--%s=%s", flags.FlagFeeGranter, granter.String())}, - }, - { - name: "--fee-payer should also sign the tx (direct)", - from: grantee.String(), - flags: []string{fmt.Sprintf("--%s=%s", flags.FlagFeePayer, granter.String())}, - expErrCode: 4, - }, - { - name: "--fee-payer should also sign the tx (amino-json)", - from: grantee.String(), - flags: []string{ - fmt.Sprintf("--%s=%s", flags.FlagFeePayer, granter.String()), - fmt.Sprintf("--%s=%s", flags.FlagSignMode, flags.SignModeLegacyAminoJSON), - }, - expErrCode: 4, - }, - { - name: "use --fee-payer and --fee-granter together works", - from: grantee.String(), - flags: []string{ - fmt.Sprintf("--%s=%s", flags.FlagFeePayer, grantee.String()), - fmt.Sprintf("--%s=%s", flags.FlagFeeGranter, granter.String()), - }, - }, - } - - for _, tc := range testcases { - s.Run(tc.name, func() { - out, err := govtestutil.MsgSubmitLegacyProposal(val.ClientCtx, tc.from, - "Text Proposal", "No desc", govv1beta1.ProposalTypeText, - tc.flags..., - ) - s.Require().NoError(err) - - var resp sdk.TxResponse - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &resp), out.String()) - s.Require().Equal(tc.expErrCode, resp.Code, resp) - }) - } -} - -func (s *E2ETestSuite) TestFilteredFeeAllowance() { - s.T().Skip() // TODO to re-enable in #12274 - - val := s.network.Validators[0] - - granter := val.Address - k, _, err := val.ClientCtx.Keyring.NewMnemonic("grantee1", keyring.English, sdk.FullFundraiserPath, keyring.DefaultBIP39Passphrase, hd.Secp256k1) - s.Require().NoError(err) - pub, err := k.GetPubKey() - s.Require().NoError(err) - grantee := sdk.AccAddress(pub.Address()) - - clientCtx := val.ClientCtx - - commonFlags := []string{ - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100))).String()), - } - spendLimit := sdk.NewCoin("stake", sdk.NewInt(1000)) - - allowMsgs := strings.Join([]string{sdk.MsgTypeURL(&govv1beta1.MsgSubmitProposal{}), sdk.MsgTypeURL(&govv1.MsgVoteWeighted{})}, ",") - - testCases := []struct { - name string - args []string - expectErr bool - respType proto.Message - expectedCode uint32 - }{ - { - "invalid granter address", - append( - []string{ - "not an address", - "cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl", - fmt.Sprintf("--%s=%s", cli.FlagAllowedMsgs, allowMsgs), - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, spendLimit.String()), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - true, &sdk.TxResponse{}, 0, - }, - { - "invalid grantee address", - append( - []string{ - granter.String(), - "not an address", - fmt.Sprintf("--%s=%s", cli.FlagAllowedMsgs, allowMsgs), - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, spendLimit.String()), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - true, &sdk.TxResponse{}, 0, - }, - { - "valid filter fee grant", - append( - []string{ - granter.String(), - grantee.String(), - fmt.Sprintf("--%s=%s", cli.FlagAllowedMsgs, allowMsgs), - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, spendLimit.String()), - fmt.Sprintf("--%s=%s", flags.FlagFrom, granter), - }, - commonFlags..., - ), - false, &sdk.TxResponse{}, 0, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := cli.NewCmdFeeGrant(codecaddress.NewBech32Codec("cosmos")) - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - - if tc.expectErr { - s.Require().Error(err) - } else { - s.Require().NoError(err) - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String()) - - txResp := tc.respType.(*sdk.TxResponse) - s.Require().NoError(clitestutil.CheckTxCode(s.network, clientCtx, txResp.TxHash, tc.expectedCode)) - } - }) - } - - args := []string{ - granter.String(), - grantee.String(), - fmt.Sprintf("--%s=json", flags.FlagOutput), - } - - // get filtered fee allowance and check info - cmd := cli.GetCmdQueryFeeGrant(codecaddress.NewBech32Codec("cosmos")) - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, args) - s.Require().NoError(err) - - resp := &feegrant.Grant{} - - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), resp), out.String()) - s.Require().Equal(resp.Grantee, resp.Grantee) - s.Require().Equal(resp.Granter, resp.Granter) - - grant, err := resp.GetGrant() - s.Require().NoError(err) - - filteredFeeGrant, err := grant.(*feegrant.AllowedMsgAllowance).GetAllowance() - s.Require().NoError(err) - - s.Require().Equal( - filteredFeeGrant.(*feegrant.BasicAllowance).SpendLimit.String(), - spendLimit.String(), - ) - - // exec filtered fee allowance - cases := []struct { - name string - malleate func() (testutil.BufferWriter, error) - respType proto.Message - expectedCode uint32 - }{ - { - "valid proposal tx", - func() (testutil.BufferWriter, error) { - return govtestutil.MsgSubmitLegacyProposal(val.ClientCtx, grantee.String(), - "Text Proposal", "No desc", govv1beta1.ProposalTypeText, - fmt.Sprintf("--%s=%s", flags.FlagFeeGranter, granter.String()), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100))).String()), - ) - }, - &sdk.TxResponse{}, - 0, - }, - { - "valid weighted_vote tx", - func() (testutil.BufferWriter, error) { - return govtestutil.MsgVote(val.ClientCtx, grantee.String(), "0", "yes", - fmt.Sprintf("--%s=%s", flags.FlagFeeGranter, granter.String()), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(100))).String()), - ) - }, - &sdk.TxResponse{}, - 2, - }, - { - "should fail with unauthorized msgs", - func() (testutil.BufferWriter, error) { - args := append( - []string{ - grantee.String(), - "cosmos14cm33pvnrv2497tyt8sp9yavhmw83nwej3m0e8", - fmt.Sprintf("--%s=%s", cli.FlagSpendLimit, "100stake"), - fmt.Sprintf("--%s=%s", flags.FlagFeeGranter, granter), - }, - commonFlags..., - ) - cmd := cli.NewCmdFeeGrant(codecaddress.NewBech32Codec("cosmos")) - return clitestutil.ExecTestCLICmd(clientCtx, cmd, args) - }, - &sdk.TxResponse{}, - 7, - }, - } - - for _, tc := range cases { - tc := tc - - s.Run(tc.name, func() { - out, err := tc.malleate() - s.Require().NoError(err) - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String()) - txResp := tc.respType.(*sdk.TxResponse) - s.Require().NoError(clitestutil.CheckTxCode(s.network, clientCtx, txResp.TxHash, tc.expectedCode)) - }) - } -} - -func getFormattedExpiration(duration int64) string { - return time.Now().Add(time.Duration(duration) * time.Second).Format(time.RFC3339) -} diff --git a/tests/e2e/group/query.go b/tests/e2e/group/query.go index fc7db9cb56..293b8f046d 100644 --- a/tests/e2e/group/query.go +++ b/tests/e2e/group/query.go @@ -2,842 +2,14 @@ package group import ( "fmt" - "strconv" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/group" client "github.com/cosmos/cosmos-sdk/x/group/client/cli" ) -func (s *E2ETestSuite) TestQueryGroupInfo() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - }{ - { - "group not found", - []string{"12345", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "group: not found", - }, - { - "group id invalid", - []string{"", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "strconv.ParseUint: parsing \"\": invalid syntax", - }, - { - "group found", - []string{strconv.FormatUint(s.group.Id, 10), fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryGroupInfoCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - - var g group.GroupInfo - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &g)) - s.Require().Equal(s.group.Id, g.Id) - s.Require().Equal(s.group.Admin, g.Admin) - s.Require().Equal(s.group.TotalWeight, g.TotalWeight) - s.Require().Equal(s.group.Metadata, g.Metadata) - s.Require().Equal(s.group.Version, g.Version) - } - }) - } -} - -func (s *E2ETestSuite) TestQueryGroupsByMembers() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - require := s.Require() - - cmd := client.QueryGroupsByAdminCmd() - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{val.Address.String(), fmt.Sprintf("--%s=json", flags.FlagOutput)}) - require.NoError(err) - - var groups group.QueryGroupsByAdminResponse - val.ClientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &groups) - require.Len(groups.Groups, 1) - - cmd = client.QueryGroupMembersCmd() - out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{fmt.Sprintf("%d", groups.Groups[0].Id), fmt.Sprintf("--%s=json", flags.FlagOutput)}) - require.NoError(err) - - var members group.QueryGroupMembersResponse - val.ClientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &members) - require.Len(members.Members, 1) - - testAddr := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address()) - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - numItems int - expectGroups []*group.GroupInfo - }{ - { - "invalid address", - []string{"abcd", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "invalid bech32 string", - 0, - []*group.GroupInfo{}, - }, - { - "not part of any group", - []string{testAddr.String(), fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - 0, - []*group.GroupInfo{}, - }, - { - "expect one group (request with pagination)", - []string{ - members.Members[0].Member.Address, - fmt.Sprintf("--%s=json", flags.FlagOutput), - "--limit=1", - }, - false, - "", - 1, - groups.Groups, - }, - { - "expect one group", - []string{ - members.Members[0].Member.Address, - fmt.Sprintf("--%s=json", flags.FlagOutput), - }, - false, - "", - 1, - groups.Groups, - }, - } - - for _, tc := range testCases { - tc := tc - s.Run(tc.name, func() { - cmd := client.QueryGroupsByMemberCmd() - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - require.Contains(out.String(), tc.expectErrMsg) - } else { - require.NoError(err, out.String()) - - var resp group.QueryGroupsByMemberResponse - val.ClientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &resp) - require.Len(resp.Groups, tc.numItems) - - require.Equal(tc.expectGroups, resp.Groups) - } - }) - } -} - -func (s *E2ETestSuite) TestQueryGroupMembers() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - expectMembers []*group.GroupMember - }{ - { - "no group", - []string{"12345", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.GroupMember{}, - }, - { - "members found", - []string{strconv.FormatUint(s.group.Id, 10), fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.GroupMember{ - { - GroupId: s.group.Id, - Member: &group.Member{ - Address: val.Address.String(), - Weight: "3", - Metadata: validMetadata, - }, - }, - }, - }, - { - "members found (request with pagination)", - []string{ - strconv.FormatUint(s.group.Id, 10), - fmt.Sprintf("--%s=json", flags.FlagOutput), - "--limit=1", - }, - false, - "", - []*group.GroupMember{ - { - GroupId: s.group.Id, - Member: &group.Member{ - Address: val.Address.String(), - Weight: "3", - Metadata: validMetadata, - }, - }, - }, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryGroupMembersCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - - var res group.QueryGroupMembersResponse - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &res)) - s.Require().Equal(len(res.Members), len(tc.expectMembers)) - for i := range res.Members { - s.Require().Equal(res.Members[i].GroupId, tc.expectMembers[i].GroupId) - s.Require().Equal(res.Members[i].Member.Address, tc.expectMembers[i].Member.Address) - s.Require().Equal(res.Members[i].Member.Metadata, tc.expectMembers[i].Member.Metadata) - s.Require().Equal(res.Members[i].Member.Weight, tc.expectMembers[i].Member.Weight) - } - } - }) - } -} - -func (s *E2ETestSuite) TestQueryGroupsByAdmin() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - expectGroups []*group.GroupInfo - }{ - { - "invalid admin address", - []string{"invalid"}, - true, - "decoding bech32 failed: invalid bech32 string", - []*group.GroupInfo{}, - }, - { - "no group", - []string{"cosmos139f7kncmglres2nf3h4hc4tade85ekfr8sulz5", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.GroupInfo{}, - }, - { - "found groups", - []string{val.Address.String(), fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.GroupInfo{ - s.group, - }, - }, - { - "found groups (request with pagination)", - []string{ - val.Address.String(), - fmt.Sprintf("--%s=json", flags.FlagOutput), - "--limit=2", - }, - false, - "", - []*group.GroupInfo{ - s.group, - }, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryGroupsByAdminCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - - var res group.QueryGroupsByAdminResponse - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &res)) - s.Require().Equal(len(res.Groups), len(tc.expectGroups)) - for i := range res.Groups { - s.Require().Equal(res.Groups[i].Id, tc.expectGroups[i].Id) - s.Require().Equal(res.Groups[i].Metadata, tc.expectGroups[i].Metadata) - s.Require().Equal(res.Groups[i].Version, tc.expectGroups[i].Version) - s.Require().Equal(res.Groups[i].TotalWeight, tc.expectGroups[i].TotalWeight) - s.Require().Equal(res.Groups[i].Admin, tc.expectGroups[i].Admin) - } - } - }) - } -} - -func (s *E2ETestSuite) TestQueryGroupPolicyInfo() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - }{ - { - "group policy not found", - []string{val.Address.String(), fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "not found", - }, - { - "group policy found", - []string{s.groupPolicies[0].Address, fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryGroupPolicyInfoCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - - var g group.GroupPolicyInfo - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &g)) - s.Require().Equal(s.groupPolicies[0].GroupId, g.GroupId) - s.Require().Equal(s.groupPolicies[0].Address, g.Address) - s.Require().Equal(s.groupPolicies[0].Admin, g.Admin) - s.Require().Equal(s.groupPolicies[0].Metadata, g.Metadata) - s.Require().Equal(s.groupPolicies[0].Version, g.Version) - dp1, err := s.groupPolicies[0].GetDecisionPolicy() - s.Require().NoError(err) - dp2, err := g.GetDecisionPolicy() - s.Require().NoError(err) - s.Require().Equal(dp1, dp2) - } - }) - } -} - -func (s *E2ETestSuite) TestQueryGroupPoliciesByGroup() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - expectGroupPolicies []*group.GroupPolicyInfo - }{ - { - "invalid group id", - []string{""}, - true, - "strconv.ParseUint: parsing \"\": invalid syntax", - []*group.GroupPolicyInfo{}, - }, - { - "no group policy", - []string{"12345", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.GroupPolicyInfo{}, - }, - { - "found group policies", - []string{strconv.FormatUint(s.group.Id, 10), fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.GroupPolicyInfo{ - s.groupPolicies[0], - s.groupPolicies[1], - s.groupPolicies[2], - s.groupPolicies[3], - s.groupPolicies[4], - s.groupPolicies[5], - }, - }, - { - "found group policies (request with pagination)", - []string{ - strconv.FormatUint(s.group.Id, 10), - fmt.Sprintf("--%s=json", flags.FlagOutput), - "--limit=2", - }, - false, - "", - []*group.GroupPolicyInfo{ - s.groupPolicies[0], - s.groupPolicies[1], - }, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryGroupPoliciesByGroupCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - - var res group.QueryGroupPoliciesByGroupResponse - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &res)) - s.Require().Equal(len(res.GroupPolicies), len(tc.expectGroupPolicies)) - for i := range res.GroupPolicies { - s.Require().Equal(res.GroupPolicies[i].GroupId, tc.expectGroupPolicies[i].GroupId) - s.Require().Equal(res.GroupPolicies[i].Metadata, tc.expectGroupPolicies[i].Metadata) - s.Require().Equal(res.GroupPolicies[i].Version, tc.expectGroupPolicies[i].Version) - s.Require().Equal(res.GroupPolicies[i].Admin, tc.expectGroupPolicies[i].Admin) - dp1, err := s.groupPolicies[i].GetDecisionPolicy() - s.Require().NoError(err) - dp2, err := tc.expectGroupPolicies[i].GetDecisionPolicy() - s.Require().NoError(err) - s.Require().Equal(dp1, dp2) - } - } - }) - } -} - -func (s *E2ETestSuite) TestQueryGroupPoliciesByAdmin() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - expectGroupPolicies []*group.GroupPolicyInfo - }{ - { - "invalid admin address", - []string{"invalid"}, - true, - "decoding bech32 failed: invalid bech32 string", - []*group.GroupPolicyInfo{}, - }, - { - "no group policy", - []string{"cosmos139f7kncmglres2nf3h4hc4tade85ekfr8sulz5", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.GroupPolicyInfo{}, - }, - { - "found group policies", - []string{val.Address.String(), fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.GroupPolicyInfo{ - s.groupPolicies[0], - s.groupPolicies[1], - s.groupPolicies[2], - s.groupPolicies[3], - s.groupPolicies[4], - s.groupPolicies[5], - }, - }, - { - "found group policies (request with pagination)", - []string{ - val.Address.String(), - fmt.Sprintf("--%s=json", flags.FlagOutput), - "--limit=2", - }, - false, - "", - - []*group.GroupPolicyInfo{ - s.groupPolicies[0], - s.groupPolicies[1], - }, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryGroupPoliciesByAdminCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - - var res group.QueryGroupPoliciesByAdminResponse - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &res)) - s.Require().Equal(len(res.GroupPolicies), len(tc.expectGroupPolicies)) - for i := range res.GroupPolicies { - s.Require().Equal(res.GroupPolicies[i].GroupId, tc.expectGroupPolicies[i].GroupId) - s.Require().Equal(res.GroupPolicies[i].Metadata, tc.expectGroupPolicies[i].Metadata) - s.Require().Equal(res.GroupPolicies[i].Version, tc.expectGroupPolicies[i].Version) - s.Require().Equal(res.GroupPolicies[i].Admin, tc.expectGroupPolicies[i].Admin) - dp1, err := s.groupPolicies[i].GetDecisionPolicy() - s.Require().NoError(err) - dp2, err := tc.expectGroupPolicies[i].GetDecisionPolicy() - s.Require().NoError(err) - s.Require().Equal(dp1, dp2) - } - } - }) - } -} - -func (s *E2ETestSuite) TestQueryProposal() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - }{ - { - "not found", - []string{"12345", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "not found", - }, - { - "invalid proposal id", - []string{"", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "strconv.ParseUint: parsing \"\": invalid syntax", - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryProposalCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - } - }) - } -} - -func (s *E2ETestSuite) TestQueryProposalsByGroupPolicy() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - expectProposals []*group.Proposal - }{ - { - "invalid group policy address", - []string{"invalid"}, - true, - "decoding bech32 failed: invalid bech32 string", - []*group.Proposal{}, - }, - { - "no group policy", - []string{"cosmos139f7kncmglres2nf3h4hc4tade85ekfr8sulz5", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.Proposal{}, - }, - { - "found proposals", - []string{s.groupPolicies[0].Address, fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.Proposal{ - s.proposal, - }, - }, - { - "found proposals (request with pagination)", - []string{ - s.groupPolicies[0].Address, - fmt.Sprintf("--%s=json", flags.FlagOutput), - "--limit=2", - }, - false, - "", - []*group.Proposal{ - s.proposal, - }, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryProposalsByGroupPolicyCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - - var res group.QueryProposalsByGroupPolicyResponse - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &res)) - s.Require().Equal(len(res.Proposals), len(tc.expectProposals)) - for i := range res.Proposals { - s.Require().Equal(res.Proposals[i], tc.expectProposals[i]) - } - } - }) - } -} - -func (s *E2ETestSuite) TestQueryVoteByProposalVoter() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - }{ - { - "invalid voter address", - []string{"1", "invalid", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "decoding bech32 failed: invalid bech32", - }, - { - "invalid proposal id", - []string{"", val.Address.String(), fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "strconv.ParseUint: parsing \"\": invalid syntax", - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryVoteByProposalVoterCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - } - }) - } -} - -func (s *E2ETestSuite) TestQueryVotesByProposal() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - expectVotes []*group.Vote - }{ - { - "invalid proposal id", - []string{"", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "strconv.ParseUint: parsing \"\": invalid syntax", - []*group.Vote{}, - }, - { - "no votes", - []string{"12345", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.Vote{}, - }, - { - "found votes", - []string{"1", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.Vote{ - s.vote, - }, - }, - { - "found votes (request with pagination)", - []string{ - "1", - fmt.Sprintf("--%s=json", flags.FlagOutput), - "--limit=2", - }, - false, - "", - []*group.Vote{ - s.vote, - }, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryVotesByProposalCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - - var res group.QueryVotesByProposalResponse - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &res)) - s.Require().Equal(len(res.Votes), len(tc.expectVotes)) - for i := range res.Votes { - s.Require().Equal(res.Votes[i], tc.expectVotes[i]) - } - } - }) - } -} - -func (s *E2ETestSuite) TestQueryVotesByVoter() { - val := s.network.Validators[0] - clientCtx := val.ClientCtx - - testCases := []struct { - name string - args []string - expectErr bool - expectErrMsg string - expectVotes []*group.Vote - }{ - { - "invalid voter address", - []string{"abcd", fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "decoding bech32 failed: invalid bech32", - []*group.Vote{}, - }, - { - "no votes", - []string{s.groupPolicies[0].Address, fmt.Sprintf("--%s=json", flags.FlagOutput)}, - true, - "", - []*group.Vote{}, - }, - { - "found votes", - []string{val.Address.String(), fmt.Sprintf("--%s=json", flags.FlagOutput)}, - false, - "", - []*group.Vote{ - s.vote, - }, - }, - { - "found votes (request with pagination)", - []string{ - val.Address.String(), - fmt.Sprintf("--%s=json", flags.FlagOutput), - "--limit=2", - }, - false, - "", - []*group.Vote{ - s.vote, - }, - }, - } - - for _, tc := range testCases { - tc := tc - - s.Run(tc.name, func() { - cmd := client.QueryVotesByVoterCmd() - - out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) - if tc.expectErr { - s.Require().Contains(out.String(), tc.expectErrMsg) - } else { - s.Require().NoError(err, out.String()) - - var res group.QueryVotesByVoterResponse - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &res)) - s.Require().Equal(len(res.Votes), len(tc.expectVotes)) - for i := range res.Votes { - s.Require().Equal(res.Votes[i], tc.expectVotes[i]) - } - } - }) - } -} - func (s *E2ETestSuite) TestTallyResult() { val := s.network.Validators[0] clientCtx := val.ClientCtx diff --git a/tests/e2e/nft/cli_test.go b/tests/e2e/nft/cli_test.go deleted file mode 100644 index c77b861d50..0000000000 --- a/tests/e2e/nft/cli_test.go +++ /dev/null @@ -1,20 +0,0 @@ -//go:build e2e -// +build e2e - -package nft - -import ( - "testing" - - "github.com/stretchr/testify/suite" - - "cosmossdk.io/simapp" - - "github.com/cosmos/cosmos-sdk/testutil/network" -) - -func TestE2ETestSuite(t *testing.T) { - cfg := network.DefaultConfig(simapp.NewTestNetworkFixture) - cfg.NumValidators = 1 - suite.Run(t, NewE2ETestSuite(cfg)) -} diff --git a/tests/e2e/nft/grpc.go b/tests/e2e/nft/grpc.go deleted file mode 100644 index fef3550721..0000000000 --- a/tests/e2e/nft/grpc.go +++ /dev/null @@ -1,414 +0,0 @@ -package nft - -import ( - "fmt" - - "cosmossdk.io/x/nft" - "github.com/cosmos/cosmos-sdk/testutil" -) - -func (s *E2ETestSuite) TestQueryBalanceGRPC() { - val := s.network.Validators[0] - testCases := []struct { - name string - args struct { - ClassID string - Owner string - } - expectErr bool - errMsg string - expectValue uint64 - }{ - { - name: "fail not exist owner", - args: struct { - ClassID string - Owner string - }{ - ClassID: ExpNFT.ClassId, - Owner: s.owner.String(), - }, - expectErr: false, - expectValue: 0, - }, - { - name: "success", - args: struct { - ClassID string - Owner string - }{ - ClassID: ExpNFT.ClassId, - Owner: val.Address.String(), - }, - expectErr: false, - expectValue: 1, - }, - } - balanceURL := val.APIAddress + "/cosmos/nft/v1beta1/balance/%s/%s" - for _, tc := range testCases { - uri := fmt.Sprintf(balanceURL, tc.args.Owner, tc.args.ClassID) - s.Run(tc.name, func() { - resp, _ := testutil.GetRequest(uri) - if tc.expectErr { - s.Require().Contains(string(resp), tc.errMsg) - } else { - var g nft.QueryBalanceResponse - err := val.ClientCtx.Codec.UnmarshalJSON(resp, &g) - s.Require().NoError(err) - s.Require().Equal(tc.expectValue, g.Amount) - } - }) - } -} - -func (s *E2ETestSuite) TestQueryOwnerGRPC() { - val := s.network.Validators[0] - - testCases := []struct { - name string - args struct { - ClassID string - ID string - } - expectErr bool - errMsg string - expectResult string - }{ - { - name: "class id does not exist", - args: struct { - ClassID string - ID string - }{ - ClassID: "class-id", - ID: ExpNFT.Id, - }, - expectErr: false, - expectResult: "", - }, - { - name: "nft id does not exist", - args: struct { - ClassID string - ID string - }{ - ClassID: ExpNFT.ClassId, - ID: "nft-id", - }, - expectErr: false, - expectResult: "", - }, - { - name: "nft exist", - args: struct { - ClassID string - ID string - }{ - ClassID: ExpNFT.ClassId, - ID: ExpNFT.Id, - }, - expectErr: false, - expectResult: val.Address.String(), - }, - } - ownerURL := val.APIAddress + "/cosmos/nft/v1beta1/owner/%s/%s" - for _, tc := range testCases { - uri := fmt.Sprintf(ownerURL, tc.args.ClassID, tc.args.ID) - s.Run(tc.name, func() { - resp, err := testutil.GetRequest(uri) - if tc.expectErr { - s.Require().Contains(string(resp), tc.errMsg) - } else { - s.Require().NoError(err) - var result nft.QueryOwnerResponse - err = val.ClientCtx.Codec.UnmarshalJSON(resp, &result) - s.Require().NoError(err) - s.Require().EqualValues(tc.expectResult, result.Owner) - } - }) - } -} - -func (s *E2ETestSuite) TestQuerySupplyGRPC() { - val := s.network.Validators[0] - - testCases := []struct { - name string - args struct { - ClassID string - } - expectErr bool - errMsg string - expectResult uint64 - }{ - { - name: "class id is empty", - args: struct { - ClassID string - }{ - ClassID: "", - }, - expectErr: true, - errMsg: nft.ErrEmptyClassID.Error(), - expectResult: 0, - }, - { - name: "class id does not exist", - args: struct { - ClassID string - }{ - ClassID: "class-id", - }, - expectErr: false, - expectResult: 0, - }, - { - name: "class id exist", - args: struct { - ClassID string - }{ - ClassID: ExpNFT.ClassId, - }, - expectErr: false, - expectResult: 1, - }, - } - supplyURL := val.APIAddress + "/cosmos/nft/v1beta1/supply/%s" - for _, tc := range testCases { - uri := fmt.Sprintf(supplyURL, tc.args.ClassID) - s.Run(tc.name, func() { - resp, err := testutil.GetRequest(uri) - if tc.expectErr { - s.Require().Contains(string(resp), tc.errMsg) - } else { - s.Require().NoError(err) - var result nft.QuerySupplyResponse - err = val.ClientCtx.Codec.UnmarshalJSON(resp, &result) - s.Require().NoError(err) - s.Require().EqualValues(tc.expectResult, result.Amount) - } - }) - } -} - -func (s *E2ETestSuite) TestQueryNFTsGRPC() { - val := s.network.Validators[0] - testCases := []struct { - name string - args struct { - ClassID string - Owner string - } - expectErr bool - errorMsg string - expectResult []*nft.NFT - }{ - { - name: "classID and owner are both empty", - args: struct { - ClassID string - Owner string - }{}, - errorMsg: "must provide at least one of classID or owner", - expectErr: true, - expectResult: []*nft.NFT{}, - }, - { - name: "classID is invalid", - args: struct { - ClassID string - Owner string - }{ - ClassID: "invalid_class_id", - }, - expectErr: true, - expectResult: []*nft.NFT{}, - }, - { - name: "classID does not exist", - args: struct { - ClassID string - Owner string - }{ - ClassID: "class-id", - }, - expectErr: false, - expectResult: []*nft.NFT{}, - }, - { - name: "success query by classID", - args: struct { - ClassID string - Owner string - }{ - ClassID: ExpNFT.ClassId, - }, - expectErr: false, - expectResult: []*nft.NFT{&ExpNFT}, - }, - { - name: "success query by owner", - args: struct { - ClassID string - Owner string - }{ - Owner: val.Address.String(), - }, - expectErr: false, - expectResult: []*nft.NFT{&ExpNFT}, - }, - { - name: "success query by owner and classID", - args: struct { - ClassID string - Owner string - }{ - ClassID: ExpNFT.ClassId, - Owner: val.Address.String(), - }, - expectErr: false, - expectResult: []*nft.NFT{&ExpNFT}, - }, - } - nftsOfClassURL := val.APIAddress + "/cosmos/nft/v1beta1/nfts?class_id=%s&owner=%s" - for _, tc := range testCases { - uri := fmt.Sprintf(nftsOfClassURL, tc.args.ClassID, tc.args.Owner) - s.Run(tc.name, func() { - resp, err := testutil.GetRequest(uri) - if tc.expectErr { - s.Require().Contains(string(resp), tc.errorMsg) - } else { - s.Require().NoError(err) - var result nft.QueryNFTsResponse - err = val.ClientCtx.Codec.UnmarshalJSON(resp, &result) - s.Require().NoError(err) - s.Require().EqualValues(tc.expectResult, result.Nfts) - } - }) - } -} - -func (s *E2ETestSuite) TestQueryNFTGRPC() { - val := s.network.Validators[0] - testCases := []struct { - name string - args struct { - ClassID string - ID string - } - expectErr bool - errorMsg string - }{ - { - name: "nft id does not exist", - args: struct { - ClassID string - ID string - }{ - ClassID: ExpNFT.ClassId, - ID: "nft-id", - }, - expectErr: true, - errorMsg: "not found nft", - }, - { - name: "exist nft", - args: struct { - ClassID string - ID string - }{ - ClassID: ExpNFT.ClassId, - ID: ExpNFT.Id, - }, - expectErr: false, - }, - { - name: "class id does not exist", - args: struct { - ClassID string - ID string - }{ - ClassID: "class", - ID: ExpNFT.Id, - }, - expectErr: true, - errorMsg: "not found nft", - }, - } - nftURL := val.APIAddress + "/cosmos/nft/v1beta1/nfts/%s/%s" - for _, tc := range testCases { - uri := fmt.Sprintf(nftURL, tc.args.ClassID, tc.args.ID) - s.Run(tc.name, func() { - resp, err := testutil.GetRequest(uri) - if tc.expectErr { - s.Require().Contains(string(resp), tc.errorMsg) - } else { - s.Require().NoError(err) - var result nft.QueryNFTResponse - err = val.ClientCtx.Codec.UnmarshalJSON(resp, &result) - s.Require().NoError(err) - s.Require().EqualValues(ExpNFT, *result.Nft) - } - }) - } -} - -func (s *E2ETestSuite) TestQueryClassGRPC() { - val := s.network.Validators[0] - testCases := []struct { - name string - args struct { - ClassID string - } - expectErr bool - errorMsg string - }{ - { - name: "class id does not exist", - args: struct { - ClassID string - }{ - ClassID: "class-id", - }, - expectErr: true, - errorMsg: "not found class", - }, - { - name: "class id exist", - args: struct { - ClassID string - }{ - ClassID: ExpNFT.ClassId, - }, - expectErr: false, - }, - } - classURL := val.APIAddress + "/cosmos/nft/v1beta1/classes/%s" - for _, tc := range testCases { - uri := fmt.Sprintf(classURL, tc.args.ClassID) - s.Run(tc.name, func() { - resp, err := testutil.GetRequest(uri) - if tc.expectErr { - s.Require().Contains(string(resp), tc.errorMsg) - } else { - s.Require().NoError(err) - var result nft.QueryClassResponse - err = val.ClientCtx.Codec.UnmarshalJSON(resp, &result) - s.Require().NoError(err) - s.Require().EqualValues(ExpClass, *result.Class) - } - }) - } -} - -func (s *E2ETestSuite) TestQueryClassesGRPC() { - val := s.network.Validators[0] - classURL := val.APIAddress + "/cosmos/nft/v1beta1/classes" - resp, err := testutil.GetRequest(classURL) - s.Require().NoError(err) - var result nft.QueryClassesResponse - err = val.ClientCtx.Codec.UnmarshalJSON(resp, &result) - s.Require().NoError(err) - s.Require().Len(result.Classes, 1) - s.Require().EqualValues(ExpClass, *result.Classes[0]) -} diff --git a/tests/e2e/nft/tx.go b/tests/e2e/nft/tx.go deleted file mode 100644 index 732eac8296..0000000000 --- a/tests/e2e/nft/tx.go +++ /dev/null @@ -1,163 +0,0 @@ -package nft - -import ( - "fmt" - - "github.com/stretchr/testify/suite" - - "cosmossdk.io/x/nft" - "cosmossdk.io/x/nft/client/cli" - "github.com/cosmos/cosmos-sdk/client/flags" - addresscodec "github.com/cosmos/cosmos-sdk/codec/address" - clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" - "github.com/cosmos/cosmos-sdk/testutil/network" - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const ( - OwnerName = "owner" - Owner = "cosmos1kznrznww4pd6gx0zwrpthjk68fdmqypjpkj5hp" - OwnerArmor = `-----BEGIN TENDERMINT PRIVATE KEY----- -salt: C3586B75587D2824187D2CDA22B6AFB6 -type: secp256k1 -kdf: bcrypt - -1+15OrCKgjnwym1zO3cjo/SGe3PPqAYChQ5wMHjdUbTZM7mWsH3/ueL6swgjzI3b -DDzEQAPXBQflzNW6wbne9IfT651zCSm+j1MWaGk= -=wEHs ------END TENDERMINT PRIVATE KEY-----` - - testClassID = "kitty" - testClassName = "Crypto Kitty" - testClassSymbol = "kitty" - testClassDescription = "Crypto Kitty" - testClassURI = "class uri" - testID = "kitty1" - testURI = "kitty uri" -) - -var ( - ExpClass = nft.Class{ - Id: testClassID, - Name: testClassName, - Symbol: testClassSymbol, - Description: testClassDescription, - Uri: testClassURI, - } - - ExpNFT = nft.NFT{ - ClassId: testClassID, - Id: testID, - Uri: testURI, - } -) - -type E2ETestSuite struct { - suite.Suite - - cfg network.Config - network *network.Network - owner sdk.AccAddress -} - -func NewE2ETestSuite(cfg network.Config) *E2ETestSuite { - return &E2ETestSuite{cfg: cfg} -} - -func (s *E2ETestSuite) SetupSuite() { - s.T().Log("setting up e2e test suite") - - genesisState := s.cfg.GenesisState - nftGenesis := nft.GenesisState{ - Classes: []*nft.Class{&ExpClass}, - Entries: []*nft.Entry{{ - Owner: Owner, - Nfts: []*nft.NFT{&ExpNFT}, - }}, - } - - nftDataBz, err := s.cfg.Codec.MarshalJSON(&nftGenesis) - s.Require().NoError(err) - genesisState[nft.ModuleName] = nftDataBz - s.cfg.GenesisState = genesisState - s.network, err = network.New(s.T(), s.T().TempDir(), s.cfg) - s.Require().NoError(err) - s.Require().NoError(s.network.WaitForNextBlock()) - - s.initAccount() - s.Require().NoError(s.network.WaitForNextBlock()) -} - -func (s *E2ETestSuite) TearDownSuite() { - s.T().Log("tearing down e2e test suite") - s.network.Cleanup() -} - -func (s *E2ETestSuite) TestCLITxSend() { - cmd := cli.NewCmdSend() - val := s.network.Validators[0] - args := []string{ - fmt.Sprintf("--%s=%s", flags.FlagFrom, OwnerName), - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), - } - testCases := []struct { - name string - args []string - expectedCode uint32 - expectErr bool - }{ - { - "valid transaction", - []string{ - testClassID, - testID, - val.Address.String(), - }, - 0, - false, - }, - } - - for _, tc := range testCases { - tc := tc - s.Run(tc.name, func() { - clientCtx := val.ClientCtx - args = append(args, tc.args...) - - out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, args) - if tc.expectErr { - s.Require().Error(err) - } else { - var txResp sdk.TxResponse - s.Require().NoError(err) - s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &txResp), out.String()) - s.Require().NoError(clitestutil.CheckTxCode(s.network, clientCtx, txResp.TxHash, tc.expectedCode)) - } - }) - } -} - -func (s *E2ETestSuite) initAccount() { - val := s.network.Validators[0] - ctx := val.ClientCtx - err := ctx.Keyring.ImportPrivKey(OwnerName, OwnerArmor, "1234567890") - s.Require().NoError(err) - - keyinfo, err := ctx.Keyring.Key(OwnerName) - s.Require().NoError(err) - - args := []string{ - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), - } - - s.owner, err = keyinfo.GetAddress() - s.Require().NoError(err) - - amount := sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(200))) - _, err = clitestutil.MsgSendExec(ctx, val.Address, s.owner, amount, addresscodec.NewBech32Codec("cosmos"), args...) - s.Require().NoError(err) -} diff --git a/x/feegrant/client/cli/tx_test.go b/x/feegrant/client/cli/tx_test.go index d40e4abf37..85ba10ad8e 100644 --- a/x/feegrant/client/cli/tx_test.go +++ b/x/feegrant/client/cli/tx_test.go @@ -18,6 +18,7 @@ import ( "cosmossdk.io/x/feegrant" "cosmossdk.io/x/feegrant/client/cli" "cosmossdk.io/x/feegrant/module" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" codecaddress "github.com/cosmos/cosmos-sdk/codec/address" @@ -453,7 +454,7 @@ func (s *CLITestSuite) TestNewCmdRevokeFeegrant() { respType proto.Message }{ { - "invalid grantee", + "invalid granter", append( []string{ "wrong_granter", diff --git a/x/feegrant/keeper/grpc_query_test.go b/x/feegrant/keeper/grpc_query_test.go index 9c6e0fba99..25afdd1f3d 100644 --- a/x/feegrant/keeper/grpc_query_test.go +++ b/x/feegrant/keeper/grpc_query_test.go @@ -2,6 +2,7 @@ package keeper_test import ( "cosmossdk.io/x/feegrant" + sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -55,6 +56,16 @@ func (suite *KeeperTestSuite) TestFeeAllowance() { func() {}, func(*feegrant.QueryAllowanceResponse) {}, }, + { + "non existed grant", + &feegrant.QueryAllowanceRequest{ + Granter: invalidGranter, + Grantee: invalidGrantee, + }, + true, + func() {}, + func(*feegrant.QueryAllowanceResponse) {}, + }, { "valid query: expect single grant", &feegrant.QueryAllowanceRequest{ diff --git a/x/group/keeper/msg_server_test.go b/x/group/keeper/msg_server_test.go index 9a48f6292b..70e0e6809b 100644 --- a/x/group/keeper/msg_server_test.go +++ b/x/group/keeper/msg_server_test.go @@ -16,6 +16,7 @@ import ( 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/types/query" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/group" "github.com/cosmos/cosmos-sdk/x/group/internal/math" @@ -1588,6 +1589,14 @@ func (s *TestSuite) TestGroupPoliciesByAdminOrGroup() { s.Assert().Equal(dp1, dp2) } + // no group policy + noPolicies, err := s.groupKeeper.GroupPoliciesByAdmin(s.ctx, &group.QueryGroupPoliciesByAdminRequest{ + Admin: addrs[2].String(), + }) + s.Require().NoError(err) + policyAccs = noPolicies.GroupPolicies + s.Require().Equal(len(policyAccs), 0) + // query group policy by admin policiesByAdminRes, err := s.groupKeeper.GroupPoliciesByAdmin(s.ctx, &group.QueryGroupPoliciesByAdminRequest{ Admin: admin.String(), @@ -2072,12 +2081,31 @@ func (s *TestSuite) TestVote() { s.Require().NoError(err) myProposalID := proposalRes.ProposalId - // proposals by group policy + // no group policy proposalsRes, err := s.groupKeeper.ProposalsByGroupPolicy(s.ctx, &group.QueryProposalsByGroupPolicyRequest{ - Address: accountAddr, + Address: addrs[2].String(), }) s.Require().NoError(err) proposals := proposalsRes.Proposals + s.Require().Equal(len(proposals), 0) + + // proposals by group policy (request with pagination) + proposalsRes, err = s.groupKeeper.ProposalsByGroupPolicy(s.ctx, &group.QueryProposalsByGroupPolicyRequest{ + Address: accountAddr, + Pagination: &query.PageRequest{ + Limit: 2, + }, + }) + s.Require().NoError(err) + proposals = proposalsRes.Proposals + s.Require().Equal(len(proposals), 1) + + // proposals by group policy + proposalsRes, err = s.groupKeeper.ProposalsByGroupPolicy(s.ctx, &group.QueryProposalsByGroupPolicyRequest{ + Address: accountAddr, + }) + s.Require().NoError(err) + proposals = proposalsRes.Proposals s.Require().Equal(len(proposals), 1) s.Assert().Equal(req.GroupPolicyAddress, proposals[0].GroupPolicyAddress) s.Assert().Equal(req.Metadata, proposals[0].Metadata)