diff --git a/testutil/keeper/bankkeeper.go b/testutil/keeper/bankkeeper.go new file mode 100644 index 00000000..8dd3f87b --- /dev/null +++ b/testutil/keeper/bankkeeper.go @@ -0,0 +1,27 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +type MockBankKeeper struct{} + +func (MockBankKeeper) SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins { + return nil +} +func (MockBankKeeper) MintCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error { + return nil +} +func (MockBankKeeper) BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error { + return nil +} +func (MockBankKeeper) SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error { + return nil +} +func (MockBankKeeper) SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error { + return nil +} +func (MockBankKeeper) GetDenomMetaData(ctx sdk.Context, denom string) (banktypes.Metadata, bool) { + return banktypes.Metadata{}, true +} diff --git a/testutil/keeper/tokenfactory.go b/testutil/keeper/tokenfactory.go index c908d767..66eb709f 100644 --- a/testutil/keeper/tokenfactory.go +++ b/testutil/keeper/tokenfactory.go @@ -38,7 +38,7 @@ func TokenfactoryKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { cdc, storeKey, paramsSubspace, - nil, + MockBankKeeper{}, ) ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) diff --git a/testutil/network/network.go b/testutil/network/network.go index f01f0e08..595fb7dd 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -23,11 +23,16 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" genutil "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types/proposal" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" ccvconsumertypes "github.com/cosmos/interchain-security/x/ccv/consumer/types" "github.com/strangelove-ventures/noble/app" "github.com/strangelove-ventures/noble/cmd" "github.com/strangelove-ventures/noble/testutil" + "github.com/strangelove-ventures/noble/testutil/sample" + paramauthoritytypes "github.com/strangelove-ventures/paramauthority/x/params/types/proposal" + paramauthorityupgradetypes "github.com/strangelove-ventures/paramauthority/x/upgrade/types" types1 "github.com/tendermint/tendermint/abci/types" tmtypes "github.com/tendermint/tendermint/types" ) @@ -62,7 +67,7 @@ func DefaultConfig() network.Config { app.ModuleBasics[stakingtypes.ModuleName] = staking.AppModuleBasic{} encoding := cmd.MakeEncodingConfig(app.ModuleBasics) - return network.Config{ + cfg := network.Config{ Codec: encoding.Marshaler, TxConfig: encoding.TxConfig, LegacyAmino: encoding.Amino, @@ -98,6 +103,18 @@ func DefaultConfig() network.Config { SigningAlgo: string(hd.Secp256k1Type), KeyringOptions: []keyring.Option{}, } + + // Authority needs to be present to pass genesis validation + params := paramauthoritytypes.DefaultGenesis() + params.Params.Authority = sample.AccAddress() + cfg.GenesisState[paramstypes.ModuleName] = encoding.Marshaler.MustMarshalJSON(params) + + // Authority needs to be present to pass genesis validation + upgrade := paramauthorityupgradetypes.DefaultGenesis() + upgrade.Params.Authority = sample.AccAddress() + cfg.GenesisState[upgradetypes.ModuleName] = encoding.Marshaler.MustMarshalJSON(upgrade) + + return cfg } func modifyConsumerGenesis(val network.Validator) error { diff --git a/x/tokenfactory/client/cli/query_minter_controller_test.go b/x/tokenfactory/client/cli/query_minter_controller_test.go index 382381f7..95124004 100644 --- a/x/tokenfactory/client/cli/query_minter_controller_test.go +++ b/x/tokenfactory/client/cli/query_minter_controller_test.go @@ -29,7 +29,7 @@ func networkWithMinterControllerObjects(t *testing.T, n int) (*network.Network, for i := 0; i < n; i++ { minterController := types.MinterController{ - Minter: strconv.Itoa(i), + Controller: strconv.Itoa(i), } nullify.Fill(&minterController) state.MinterControllerList = append(state.MinterControllerList, minterController) @@ -57,7 +57,7 @@ func TestShowMinterController(t *testing.T) { }{ { desc: "found", - idMinterAddress: objs[0].Minter, + idMinterAddress: objs[0].Controller, args: common, obj: objs[0], diff --git a/x/tokenfactory/client/cli/query_minting_denom_test.go b/x/tokenfactory/client/cli/query_minting_denom_test.go index aee60b32..f675d1ec 100644 --- a/x/tokenfactory/client/cli/query_minting_denom_test.go +++ b/x/tokenfactory/client/cli/query_minting_denom_test.go @@ -5,6 +5,7 @@ import ( "testing" clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/stretchr/testify/require" tmcli "github.com/tendermint/tendermint/libs/cli" "google.golang.org/grpc/status" @@ -21,12 +22,25 @@ func networkWithMintingDenomObjects(t *testing.T) (*network.Network, types.Minti state := types.GenesisState{} require.NoError(t, cfg.Codec.UnmarshalJSON(cfg.GenesisState[types.ModuleName], &state)) - mintingDenom := &types.MintingDenom{} - nullify.Fill(&mintingDenom) - state.MintingDenom = mintingDenom - buf, err := cfg.Codec.MarshalJSON(&state) + testDenom := "test" + + state.MintingDenom = &types.MintingDenom{ + Denom: testDenom, + } + + bankState := banktypes.DefaultGenesisState() + bankState.DenomMetadata = []banktypes.Metadata{{ + Base: testDenom, + }} + + buf, err := cfg.Codec.MarshalJSON(bankState) + require.NoError(t, err) + cfg.GenesisState[banktypes.ModuleName] = buf + + buf, err = cfg.Codec.MarshalJSON(&state) require.NoError(t, err) cfg.GenesisState[types.ModuleName] = buf + return network.New(t, cfg), *state.MintingDenom } diff --git a/x/tokenfactory/keeper/grpc_query_minter_controller_test.go b/x/tokenfactory/keeper/grpc_query_minter_controller_test.go index 6bb8ea62..c4d769d4 100644 --- a/x/tokenfactory/keeper/grpc_query_minter_controller_test.go +++ b/x/tokenfactory/keeper/grpc_query_minter_controller_test.go @@ -31,14 +31,14 @@ func TestMinterControllerQuerySingle(t *testing.T) { { desc: "First", request: &types.QueryGetMinterControllerRequest{ - ControllerAddress: msgs[0].Minter, + ControllerAddress: msgs[0].Controller, }, response: &types.QueryGetMinterControllerResponse{MinterController: msgs[0]}, }, { desc: "Second", request: &types.QueryGetMinterControllerRequest{ - ControllerAddress: msgs[1].Minter, + ControllerAddress: msgs[1].Controller, }, response: &types.QueryGetMinterControllerResponse{MinterController: msgs[1]}, }, diff --git a/x/tokenfactory/keeper/minter_controller_test.go b/x/tokenfactory/keeper/minter_controller_test.go index 0ca4f80d..969af4cd 100644 --- a/x/tokenfactory/keeper/minter_controller_test.go +++ b/x/tokenfactory/keeper/minter_controller_test.go @@ -19,7 +19,7 @@ var _ = strconv.IntSize func createNMinterController(keeper *keeper.Keeper, ctx sdk.Context, n int) []types.MinterController { items := make([]types.MinterController, n) for i := range items { - items[i].Minter = strconv.Itoa(i) + items[i].Controller = strconv.Itoa(i) keeper.SetMinterController(ctx, items[i]) } @@ -31,7 +31,7 @@ func TestMinterControllerGet(t *testing.T) { items := createNMinterController(keeper, ctx, 10) for _, item := range items { rst, found := keeper.GetMinterController(ctx, - item.Minter, + item.Controller, ) require.True(t, found) require.Equal(t, diff --git a/x/tokenfactory/keeper/minting_denom_test.go b/x/tokenfactory/keeper/minting_denom_test.go index c108d6e0..fc3bb6ef 100644 --- a/x/tokenfactory/keeper/minting_denom_test.go +++ b/x/tokenfactory/keeper/minting_denom_test.go @@ -13,7 +13,9 @@ import ( ) func createTestMintingDenom(keeper *keeper.Keeper, ctx sdk.Context) types.MintingDenom { - item := types.MintingDenom{} + item := types.MintingDenom{ + Denom: "abcd", + } keeper.SetMintingDenom(ctx, item) return item } diff --git a/x/tokenfactory/keeper/owner.go b/x/tokenfactory/keeper/owner.go index 7a61f111..f719ccb1 100644 --- a/x/tokenfactory/keeper/owner.go +++ b/x/tokenfactory/keeper/owner.go @@ -3,7 +3,6 @@ package keeper import ( "github.com/strangelove-ventures/noble/x/tokenfactory/types" - "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -29,6 +28,6 @@ func (k Keeper) GetOwner(ctx sdk.Context) (val types.Owner, found bool) { // RemoveOwner removes owner from the store func (k Keeper) RemoveOwner(ctx sdk.Context) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.OwnerKey)) + store := ctx.KVStore(k.storeKey) store.Delete(types.KeyPrefix(types.OwnerKey)) } diff --git a/x/tokenfactory/keeper/pauser.go b/x/tokenfactory/keeper/pauser.go index cbd99c3b..c040d914 100644 --- a/x/tokenfactory/keeper/pauser.go +++ b/x/tokenfactory/keeper/pauser.go @@ -3,7 +3,6 @@ package keeper import ( "github.com/strangelove-ventures/noble/x/tokenfactory/types" - "github.com/cosmos/cosmos-sdk/store/prefix" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -29,6 +28,6 @@ func (k Keeper) GetPauser(ctx sdk.Context) (val types.Pauser, found bool) { // RemovePauser removes pauser from the store func (k Keeper) RemovePauser(ctx sdk.Context) { - store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.PauserKey)) + store := ctx.KVStore(k.storeKey) store.Delete(types.KeyPrefix(types.PauserKey)) } diff --git a/x/tokenfactory/types/message_blacklist_test.go b/x/tokenfactory/types/message_blacklist_test.go index 37efb263..c93f1c12 100644 --- a/x/tokenfactory/types/message_blacklist_test.go +++ b/x/tokenfactory/types/message_blacklist_test.go @@ -14,16 +14,27 @@ func TestMsgBlacklist_ValidateBasic(t *testing.T) { msg MsgBlacklist err error }{ + { + name: "invalid from", + msg: MsgBlacklist{ + From: "invalid_address", + Address: sample.AccAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, { name: "invalid address", msg: MsgBlacklist{ - From: "invalid_address", + From: sample.AccAddress(), + Address: "invalid_address", }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "valid address and from", msg: MsgBlacklist{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Address: sample.AccAddress(), }, }, } diff --git a/x/tokenfactory/types/message_configure_minter_controller_test.go b/x/tokenfactory/types/message_configure_minter_controller_test.go index 6077ce65..305b243a 100644 --- a/x/tokenfactory/types/message_configure_minter_controller_test.go +++ b/x/tokenfactory/types/message_configure_minter_controller_test.go @@ -15,15 +15,38 @@ func TestMsgConfigureMinterController_ValidateBasic(t *testing.T) { err error }{ { - name: "invalid address", + name: "invalid from", msg: MsgConfigureMinterController{ - From: "invalid_address", + From: "invalid_address", + Controller: sample.AccAddress(), + Minter: sample.AccAddress(), }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "invalid controller", + msg: MsgConfigureMinterController{ + From: sample.AccAddress(), + Controller: "invalid_address", + Minter: sample.AccAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, + { + name: "invalid minter", + msg: MsgConfigureMinterController{ + From: sample.AccAddress(), + Controller: sample.AccAddress(), + Minter: "invalid_address", + }, + err: sdkerrors.ErrInvalidAddress, + }, + { + name: "valid address, minter, and controller", msg: MsgConfigureMinterController{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Controller: sample.AccAddress(), + Minter: sample.AccAddress(), }, }, } diff --git a/x/tokenfactory/types/message_configure_minter_test.go b/x/tokenfactory/types/message_configure_minter_test.go index e437c74f..b16b3317 100644 --- a/x/tokenfactory/types/message_configure_minter_test.go +++ b/x/tokenfactory/types/message_configure_minter_test.go @@ -14,16 +14,27 @@ func TestMsgConfigureMinter_ValidateBasic(t *testing.T) { msg MsgConfigureMinter err error }{ + { + name: "invalid from", + msg: MsgConfigureMinter{ + From: "invalid_address", + Address: sample.AccAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, { name: "invalid address", msg: MsgConfigureMinter{ - From: "invalid_address", + From: sample.AccAddress(), + Address: "invalid_address", }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "valid address and from", msg: MsgConfigureMinter{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Address: sample.AccAddress(), }, }, } diff --git a/x/tokenfactory/types/message_mint_test.go b/x/tokenfactory/types/message_mint_test.go index 89c2bdaa..d369e726 100644 --- a/x/tokenfactory/types/message_mint_test.go +++ b/x/tokenfactory/types/message_mint_test.go @@ -14,16 +14,27 @@ func TestMsgMint_ValidateBasic(t *testing.T) { msg MsgMint err error }{ + { + name: "invalid from", + msg: MsgMint{ + From: "invalid_address", + Address: sample.AccAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, { name: "invalid address", msg: MsgMint{ - From: "invalid_address", + From: sample.AccAddress(), + Address: "invalid_address", }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "valid address and from", msg: MsgMint{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Address: sample.AccAddress(), }, }, } diff --git a/x/tokenfactory/types/message_remove_minter_controller_test.go b/x/tokenfactory/types/message_remove_minter_controller_test.go index 04f92761..4f828f82 100644 --- a/x/tokenfactory/types/message_remove_minter_controller_test.go +++ b/x/tokenfactory/types/message_remove_minter_controller_test.go @@ -15,15 +15,26 @@ func TestMsgRemoveMinterController_ValidateBasic(t *testing.T) { err error }{ { - name: "invalid address", + name: "invalid from", msg: MsgRemoveMinterController{ - From: "invalid_address", + From: "invalid_address", + Controller: sample.AccAddress(), }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "invalid controller", + msg: MsgRemoveMinterController{ + From: sample.AccAddress(), + Controller: "invalid_address", + }, + err: sdkerrors.ErrInvalidAddress, + }, + { + name: "valid controller and from", msg: MsgRemoveMinterController{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Controller: sample.AccAddress(), }, }, } diff --git a/x/tokenfactory/types/message_remove_minter_test.go b/x/tokenfactory/types/message_remove_minter_test.go index cac15f3a..9d4b5794 100644 --- a/x/tokenfactory/types/message_remove_minter_test.go +++ b/x/tokenfactory/types/message_remove_minter_test.go @@ -14,16 +14,27 @@ func TestMsgRemoveMinter_ValidateBasic(t *testing.T) { msg MsgRemoveMinter err error }{ + { + name: "invalid from", + msg: MsgRemoveMinter{ + From: "invalid_address", + Address: sample.AccAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, { name: "invalid address", msg: MsgRemoveMinter{ - From: "invalid_address", + From: sample.AccAddress(), + Address: "invalid_address", }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "valid address and from", msg: MsgRemoveMinter{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Address: sample.AccAddress(), }, }, } diff --git a/x/tokenfactory/types/message_unblacklist_test.go b/x/tokenfactory/types/message_unblacklist_test.go index bd81b91a..87691469 100644 --- a/x/tokenfactory/types/message_unblacklist_test.go +++ b/x/tokenfactory/types/message_unblacklist_test.go @@ -14,16 +14,27 @@ func TestMsgUnblacklist_ValidateBasic(t *testing.T) { msg MsgUnblacklist err error }{ + { + name: "invalid from", + msg: MsgUnblacklist{ + From: "invalid_address", + Address: sample.AccAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, { name: "invalid address", msg: MsgUnblacklist{ - From: "invalid_address", + From: sample.AccAddress(), + Address: "invalid_address", }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "valid address and from", msg: MsgUnblacklist{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Address: sample.AccAddress(), }, }, } diff --git a/x/tokenfactory/types/message_update_blacklister_test.go b/x/tokenfactory/types/message_update_blacklister_test.go index f8bb402c..25bf72ef 100644 --- a/x/tokenfactory/types/message_update_blacklister_test.go +++ b/x/tokenfactory/types/message_update_blacklister_test.go @@ -14,16 +14,27 @@ func TestMsgUpdateBlacklister_ValidateBasic(t *testing.T) { msg MsgUpdateBlacklister err error }{ + { + name: "invalid from", + msg: MsgUpdateBlacklister{ + From: "invalid_address", + Address: sample.AccAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, { name: "invalid address", msg: MsgUpdateBlacklister{ - From: "invalid_address", + From: sample.AccAddress(), + Address: "invalid_address", }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "valid address and from", msg: MsgUpdateBlacklister{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Address: sample.AccAddress(), }, }, } diff --git a/x/tokenfactory/types/message_update_master_minter_test.go b/x/tokenfactory/types/message_update_master_minter_test.go index 3554dbda..2948afa5 100644 --- a/x/tokenfactory/types/message_update_master_minter_test.go +++ b/x/tokenfactory/types/message_update_master_minter_test.go @@ -14,16 +14,27 @@ func TestMsgUpdateMasterMinter_ValidateBasic(t *testing.T) { msg MsgUpdateMasterMinter err error }{ + { + name: "invalid from", + msg: MsgUpdateMasterMinter{ + From: "invalid_address", + Address: sample.AccAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, { name: "invalid address", msg: MsgUpdateMasterMinter{ - From: "invalid_address", + From: sample.AccAddress(), + Address: "invalid_address", }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "valid address and from", msg: MsgUpdateMasterMinter{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Address: sample.AccAddress(), }, }, } diff --git a/x/tokenfactory/types/message_update_owner_test.go b/x/tokenfactory/types/message_update_owner_test.go index 4a344a2e..d6d7b4b6 100644 --- a/x/tokenfactory/types/message_update_owner_test.go +++ b/x/tokenfactory/types/message_update_owner_test.go @@ -14,16 +14,27 @@ func TestMsgUpdateOwner_ValidateBasic(t *testing.T) { msg MsgUpdateOwner err error }{ + { + name: "invalid from", + msg: MsgUpdateOwner{ + From: "invalid_address", + Address: sample.AccAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, { name: "invalid address", msg: MsgUpdateOwner{ - From: "invalid_address", + From: sample.AccAddress(), + Address: "invalid_address", }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "valid address and from", msg: MsgUpdateOwner{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Address: sample.AccAddress(), }, }, } diff --git a/x/tokenfactory/types/message_update_pauser_test.go b/x/tokenfactory/types/message_update_pauser_test.go index 25859f3d..749f37ee 100644 --- a/x/tokenfactory/types/message_update_pauser_test.go +++ b/x/tokenfactory/types/message_update_pauser_test.go @@ -14,16 +14,27 @@ func TestMsgUpdatePauser_ValidateBasic(t *testing.T) { msg MsgUpdatePauser err error }{ + { + name: "invalid from", + msg: MsgUpdatePauser{ + From: "invalid_address", + Address: sample.AccAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, { name: "invalid address", msg: MsgUpdatePauser{ - From: "invalid_address", + From: sample.AccAddress(), + Address: "invalid_address", }, err: sdkerrors.ErrInvalidAddress, - }, { - name: "valid address", + }, + { + name: "valid address and from", msg: MsgUpdatePauser{ - From: sample.AccAddress(), + From: sample.AccAddress(), + Address: sample.AccAddress(), }, }, }