From 561eb36f1f41044036859b5911758a5403a85820 Mon Sep 17 00:00:00 2001 From: srdtrk <59252793+srdtrk@users.noreply.github.com> Date: Mon, 31 Jul 2023 16:30:18 +0200 Subject: [PATCH] imp(apps): added 'WithICS4Wrapper' function to keepers (#4187) * imp(ica, transfer): added WithICS4Wrapper api function * docs(ica, transfer): updated 'WithICS4Wrapper's godocs * docs(adr8): updated godocs for withics4wrapper * imp(ica/host): removed withics4wrapper from icahost * style(ica, tranfer): ran golanci-lint * imp(ica/controller_test): added WithICS4Wrapper test * imp(transfer_test): added WithICS4Wrapper test * style(transfer_test, ica/controller_test): added spacing to TestWithICS4Wrapper * feat(ica/host): implemented 'WithICS4Wrapper' * feat(fee): implemented 'WithICS4Wrapper' --- .../controller/keeper/export_test.go | 12 ++++++++++ .../controller/keeper/keeper.go | 7 ++++++ .../controller/keeper/keeper_test.go | 23 +++++++++++++++++++ .../host/keeper/export_test.go | 8 ++++++- .../host/keeper/keeper.go | 7 ++++++ .../host/keeper/keeper_test.go | 23 +++++++++++++++++++ modules/apps/29-fee/keeper/export_test.go | 12 ++++++++++ modules/apps/29-fee/keeper/keeper.go | 7 ++++++ modules/apps/29-fee/keeper/keeper_test.go | 23 +++++++++++++++++++ modules/apps/transfer/keeper/export_test.go | 12 ++++++++++ modules/apps/transfer/keeper/keeper.go | 7 ++++++ modules/apps/transfer/keeper/keeper_test.go | 23 +++++++++++++++++++ 12 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 modules/apps/27-interchain-accounts/controller/keeper/export_test.go create mode 100644 modules/apps/29-fee/keeper/export_test.go create mode 100644 modules/apps/transfer/keeper/export_test.go diff --git a/modules/apps/27-interchain-accounts/controller/keeper/export_test.go b/modules/apps/27-interchain-accounts/controller/keeper/export_test.go new file mode 100644 index 00000000000..3600380f0a8 --- /dev/null +++ b/modules/apps/27-interchain-accounts/controller/keeper/export_test.go @@ -0,0 +1,12 @@ +package keeper + +/* + This file is to allow for unexported functions and fields to be accessible to the testing package. +*/ + +import porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + +// GetICS4Wrapper is a getter for the keeper's ICS4Wrapper. +func (k *Keeper) GetICS4Wrapper() porttypes.ICS4Wrapper { + return k.ics4Wrapper +} diff --git a/modules/apps/27-interchain-accounts/controller/keeper/keeper.go b/modules/apps/27-interchain-accounts/controller/keeper/keeper.go index 20d83a01ab8..df65da0dad7 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/keeper.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/keeper.go @@ -66,6 +66,13 @@ func NewKeeper( } } +// WithICS4Wrapper sets the ICS4Wrapper. This function may be used after +// the keepers creation to set the middleware which is above this module +// in the IBC application stack. +func (k *Keeper) WithICS4Wrapper(wrapper porttypes.ICS4Wrapper) { + k.ics4Wrapper = wrapper +} + // Logger returns the application logger, scoped to the associated module func (k Keeper) Logger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", fmt.Sprintf("x/%s-%s", exported.ModuleName, icatypes.ModuleName)) diff --git a/modules/apps/27-interchain-accounts/controller/keeper/keeper_test.go b/modules/apps/27-interchain-accounts/controller/keeper/keeper_test.go index c89122d1d39..08fb3ded7da 100644 --- a/modules/apps/27-interchain-accounts/controller/keeper/keeper_test.go +++ b/modules/apps/27-interchain-accounts/controller/keeper/keeper_test.go @@ -11,6 +11,8 @@ import ( "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" genesistypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/genesis/types" icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + ibcfeekeeper "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/keeper" + channelkeeper "github.com/cosmos/ibc-go/v7/modules/core/04-channel/keeper" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ibctesting "github.com/cosmos/ibc-go/v7/testing" ) @@ -292,3 +294,24 @@ func (suite *KeeperTestSuite) TestGetAuthority() { expectedAuth := authtypes.NewModuleAddress(govtypes.ModuleName).String() suite.Require().Equal(expectedAuth, authority) } + +func (suite *KeeperTestSuite) TestWithICS4Wrapper() { + suite.SetupTest() + + // test if the ics4 wrapper is the fee keeper initially + ics4Wrapper := suite.chainA.GetSimApp().ICAControllerKeeper.GetICS4Wrapper() + + _, isFeeKeeper := ics4Wrapper.(ibcfeekeeper.Keeper) + suite.Require().True(isFeeKeeper) + _, isChannelKeeper := ics4Wrapper.(channelkeeper.Keeper) + suite.Require().False(isChannelKeeper) + + // set the ics4 wrapper to the channel keeper + suite.chainA.GetSimApp().ICAControllerKeeper.WithICS4Wrapper(suite.chainA.GetSimApp().IBCKeeper.ChannelKeeper) + ics4Wrapper = suite.chainA.GetSimApp().ICAControllerKeeper.GetICS4Wrapper() + + _, isChannelKeeper = ics4Wrapper.(channelkeeper.Keeper) + suite.Require().True(isChannelKeeper) + _, isFeeKeeper = ics4Wrapper.(ibcfeekeeper.Keeper) + suite.Require().False(isFeeKeeper) +} diff --git a/modules/apps/27-interchain-accounts/host/keeper/export_test.go b/modules/apps/27-interchain-accounts/host/keeper/export_test.go index 03c13e894d5..100e5203076 100644 --- a/modules/apps/27-interchain-accounts/host/keeper/export_test.go +++ b/modules/apps/27-interchain-accounts/host/keeper/export_test.go @@ -1,15 +1,21 @@ package keeper /* - This file is to allow for unexported functions to be accessible to the testing package. + This file is to allow for unexported functions and fields to be accessible to the testing package. */ import ( sdk "github.com/cosmos/cosmos-sdk/types" icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" ) +// GetICS4Wrapper is a getter for the keeper's ICS4Wrapper. +func (k *Keeper) GetICS4Wrapper() porttypes.ICS4Wrapper { + return k.ics4Wrapper +} + // GetAppMetadata is a wrapper around getAppMetadata to allow the function to be directly called in tests. func (k Keeper) GetAppMetadata(ctx sdk.Context, portID, channelID string) (icatypes.Metadata, error) { return k.getAppMetadata(ctx, portID, channelID) diff --git a/modules/apps/27-interchain-accounts/host/keeper/keeper.go b/modules/apps/27-interchain-accounts/host/keeper/keeper.go index 40698005c46..7f51d2edb23 100644 --- a/modules/apps/27-interchain-accounts/host/keeper/keeper.go +++ b/modules/apps/27-interchain-accounts/host/keeper/keeper.go @@ -74,6 +74,13 @@ func NewKeeper( } } +// WithICS4Wrapper sets the ICS4Wrapper. This function may be used after +// the keepers creation to set the middleware which is above this module +// in the IBC application stack. +func (k *Keeper) WithICS4Wrapper(wrapper porttypes.ICS4Wrapper) { + k.ics4Wrapper = wrapper +} + // Logger returns the application logger, scoped to the associated module func (k Keeper) Logger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", fmt.Sprintf("x/%s-%s", exported.ModuleName, icatypes.ModuleName)) diff --git a/modules/apps/27-interchain-accounts/host/keeper/keeper_test.go b/modules/apps/27-interchain-accounts/host/keeper/keeper_test.go index b8b91e83df8..6e4b5f1e1ee 100644 --- a/modules/apps/27-interchain-accounts/host/keeper/keeper_test.go +++ b/modules/apps/27-interchain-accounts/host/keeper/keeper_test.go @@ -9,6 +9,8 @@ import ( genesistypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/genesis/types" "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" + ibcfeekeeper "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/keeper" + channelkeeper "github.com/cosmos/ibc-go/v7/modules/core/04-channel/keeper" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ibcerrors "github.com/cosmos/ibc-go/v7/modules/core/errors" ibctesting "github.com/cosmos/ibc-go/v7/testing" @@ -301,3 +303,24 @@ func (suite *KeeperTestSuite) TestUnsetParams() { suite.chainA.GetSimApp().ICAHostKeeper.GetParams(ctx) }) } + +func (suite *KeeperTestSuite) TestWithICS4Wrapper() { + suite.SetupTest() + + // test if the ics4 wrapper is the fee keeper initially + ics4Wrapper := suite.chainA.GetSimApp().ICAHostKeeper.GetICS4Wrapper() + + _, isFeeKeeper := ics4Wrapper.(ibcfeekeeper.Keeper) + suite.Require().True(isFeeKeeper) + _, isChannelKeeper := ics4Wrapper.(channelkeeper.Keeper) + suite.Require().False(isChannelKeeper) + + // set the ics4 wrapper to the channel keeper + suite.chainA.GetSimApp().ICAHostKeeper.WithICS4Wrapper(suite.chainA.GetSimApp().IBCKeeper.ChannelKeeper) + ics4Wrapper = suite.chainA.GetSimApp().ICAHostKeeper.GetICS4Wrapper() + + _, isChannelKeeper = ics4Wrapper.(channelkeeper.Keeper) + suite.Require().True(isChannelKeeper) + _, isFeeKeeper = ics4Wrapper.(ibcfeekeeper.Keeper) + suite.Require().False(isFeeKeeper) +} diff --git a/modules/apps/29-fee/keeper/export_test.go b/modules/apps/29-fee/keeper/export_test.go new file mode 100644 index 00000000000..3600380f0a8 --- /dev/null +++ b/modules/apps/29-fee/keeper/export_test.go @@ -0,0 +1,12 @@ +package keeper + +/* + This file is to allow for unexported functions and fields to be accessible to the testing package. +*/ + +import porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + +// GetICS4Wrapper is a getter for the keeper's ICS4Wrapper. +func (k *Keeper) GetICS4Wrapper() porttypes.ICS4Wrapper { + return k.ics4Wrapper +} diff --git a/modules/apps/29-fee/keeper/keeper.go b/modules/apps/29-fee/keeper/keeper.go index 307e3a48d2e..39c85b2244e 100644 --- a/modules/apps/29-fee/keeper/keeper.go +++ b/modules/apps/29-fee/keeper/keeper.go @@ -50,6 +50,13 @@ func NewKeeper( } } +// WithICS4Wrapper sets the ICS4Wrapper. This function may be used after +// the keepers creation to set the middleware which is above this module +// in the IBC application stack. +func (k *Keeper) WithICS4Wrapper(wrapper porttypes.ICS4Wrapper) { + k.ics4Wrapper = wrapper +} + // Logger returns a module-specific logger. func (k Keeper) Logger(ctx sdk.Context) log.Logger { return ctx.Logger().With("module", "x/"+ibcexported.ModuleName+"-"+types.ModuleName) diff --git a/modules/apps/29-fee/keeper/keeper_test.go b/modules/apps/29-fee/keeper/keeper_test.go index f2265afe695..aa9641b82db 100644 --- a/modules/apps/29-fee/keeper/keeper_test.go +++ b/modules/apps/29-fee/keeper/keeper_test.go @@ -10,7 +10,9 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/keeper" "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types" + channelkeeper "github.com/cosmos/ibc-go/v7/modules/core/04-channel/keeper" channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ibctesting "github.com/cosmos/ibc-go/v7/testing" ibcmock "github.com/cosmos/ibc-go/v7/testing/mock" @@ -297,3 +299,24 @@ func (suite *KeeperTestSuite) TestGetAllCounterpartyPayees() { suite.Require().Len(counterpartyPayeeAddr, len(expectedCounterpartyPayee)) suite.Require().Equal(counterpartyPayeeAddr, expectedCounterpartyPayee) } + +func (suite *KeeperTestSuite) TestWithICS4Wrapper() { + suite.SetupTest() + + // test if the ics4 wrapper is the channel keeper initially + ics4Wrapper := suite.chainA.GetSimApp().IBCFeeKeeper.GetICS4Wrapper() + + _, isChannelKeeper := ics4Wrapper.(channelkeeper.Keeper) + suite.Require().True(isChannelKeeper) + _, isFeeKeeper := ics4Wrapper.(keeper.Keeper) + suite.Require().False(isFeeKeeper) + + // set the ics4 wrapper to itself (don't do this in production) + suite.chainA.GetSimApp().IBCFeeKeeper.WithICS4Wrapper(suite.chainA.GetSimApp().IBCFeeKeeper) + ics4Wrapper = suite.chainA.GetSimApp().IBCFeeKeeper.GetICS4Wrapper() + + _, isFeeKeeper = ics4Wrapper.(keeper.Keeper) + suite.Require().True(isFeeKeeper) + _, isChannelKeeper = ics4Wrapper.(channelkeeper.Keeper) + suite.Require().False(isChannelKeeper) +} diff --git a/modules/apps/transfer/keeper/export_test.go b/modules/apps/transfer/keeper/export_test.go new file mode 100644 index 00000000000..3600380f0a8 --- /dev/null +++ b/modules/apps/transfer/keeper/export_test.go @@ -0,0 +1,12 @@ +package keeper + +/* + This file is to allow for unexported functions and fields to be accessible to the testing package. +*/ + +import porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types" + +// GetICS4Wrapper is a getter for the keeper's ICS4Wrapper. +func (k *Keeper) GetICS4Wrapper() porttypes.ICS4Wrapper { + return k.ics4Wrapper +} diff --git a/modules/apps/transfer/keeper/keeper.go b/modules/apps/transfer/keeper/keeper.go index a2cdd55e2cc..ee04ff1572f 100644 --- a/modules/apps/transfer/keeper/keeper.go +++ b/modules/apps/transfer/keeper/keeper.go @@ -77,6 +77,13 @@ func NewKeeper( } } +// WithICS4Wrapper sets the ICS4Wrapper. This function may be used after +// the keepers creation to set the middleware which is above this module +// in the IBC application stack. +func (k *Keeper) WithICS4Wrapper(wrapper porttypes.ICS4Wrapper) { + k.ics4Wrapper = wrapper +} + // GetAuthority returns the transfer module's authority. func (k Keeper) GetAuthority() string { return k.authority diff --git a/modules/apps/transfer/keeper/keeper_test.go b/modules/apps/transfer/keeper/keeper_test.go index f5c1937543e..af2a338c28b 100644 --- a/modules/apps/transfer/keeper/keeper_test.go +++ b/modules/apps/transfer/keeper/keeper_test.go @@ -13,7 +13,9 @@ import ( storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" + ibcfeekeeper "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/keeper" "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + channelkeeper "github.com/cosmos/ibc-go/v7/modules/core/04-channel/keeper" ibctesting "github.com/cosmos/ibc-go/v7/testing" ) @@ -263,3 +265,24 @@ func (suite *KeeperTestSuite) TestUnsetParams() { suite.chainA.GetSimApp().TransferKeeper.GetParams(ctx) }) } + +func (suite *KeeperTestSuite) TestWithICS4Wrapper() { + suite.SetupTest() + + // test if the ics4 wrapper is the fee keeper initially + ics4Wrapper := suite.chainA.GetSimApp().TransferKeeper.GetICS4Wrapper() + _, isFeeKeeper := ics4Wrapper.(ibcfeekeeper.Keeper) + + suite.Require().True(isFeeKeeper) + _, isChannelKeeper := ics4Wrapper.(channelkeeper.Keeper) + suite.Require().False(isChannelKeeper) + + // set the ics4 wrapper to the channel keeper + suite.chainA.GetSimApp().TransferKeeper.WithICS4Wrapper(suite.chainA.GetSimApp().IBCKeeper.ChannelKeeper) + ics4Wrapper = suite.chainA.GetSimApp().TransferKeeper.GetICS4Wrapper() + + _, isChannelKeeper = ics4Wrapper.(channelkeeper.Keeper) + suite.Require().True(isChannelKeeper) + _, isFeeKeeper = ics4Wrapper.(ibcfeekeeper.Keeper) + suite.Require().False(isFeeKeeper) +}