Skip to content

Commit

Permalink
chore: add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jaeseung-bae committed Feb 1, 2024
1 parent 086afed commit a06f9d0
Show file tree
Hide file tree
Showing 3 changed files with 393 additions and 3 deletions.
15 changes: 12 additions & 3 deletions x/bankplus/keeper/inactive.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package keeper

import (
"context"

storetypes "cosmossdk.io/store/types"

"github.com/cosmos/cosmos-sdk/runtime"
Expand All @@ -17,8 +19,15 @@ func inactiveAddrKey(addr sdk.AccAddress) []byte {
return append(inactiveAddrsKeyPrefix, addr.Bytes()...)
}

// isStoredInactiveAddr checks if the address is stored or not as blocked address
func (keeper BaseKeeper) isStoredInactiveAddr(ctx context.Context, address sdk.AccAddress) bool {
store := keeper.storeService.OpenKVStore(ctx)
bz, _ := store.Get(inactiveAddrKey(address))
return bz != nil
}

// addToInactiveAddr adds a blocked address to the store.
func (keeper BaseKeeper) addToInactiveAddr(ctx sdk.Context, address sdk.AccAddress) {
func (keeper BaseKeeper) addToInactiveAddr(ctx context.Context, address sdk.AccAddress) {
store := keeper.storeService.OpenKVStore(ctx)
blockedCAddr := types.InactiveAddr{Address: address.String()}
bz := keeper.cdc.MustMarshal(&blockedCAddr)
Expand All @@ -29,7 +38,7 @@ func (keeper BaseKeeper) addToInactiveAddr(ctx sdk.Context, address sdk.AccAddre
}

// deleteFromInactiveAddr deletes blocked address from store
func (keeper BaseKeeper) deleteFromInactiveAddr(ctx sdk.Context, address sdk.AccAddress) {
func (keeper BaseKeeper) deleteFromInactiveAddr(ctx context.Context, address sdk.AccAddress) {
store := keeper.storeService.OpenKVStore(ctx)
err := store.Delete(inactiveAddrKey(address))
if err != nil {
Expand All @@ -40,7 +49,7 @@ func (keeper BaseKeeper) deleteFromInactiveAddr(ctx sdk.Context, address sdk.Acc
// loadAllInactiveAddrs loads all blocked address and set to `inactiveAddr`.
// This function is executed when the app is initiated and save all inactive address in caches
// in order to prevent to query to store in every time to send
func (keeper BaseKeeper) loadAllInactiveAddrs(ctx sdk.Context) {
func (keeper BaseKeeper) loadAllInactiveAddrs(ctx context.Context) {
store := keeper.storeService.OpenKVStore(ctx)
adapter := runtime.KVStoreAdapter(store)
iterator := storetypes.KVStorePrefixIterator(adapter, inactiveAddrsKeyPrefix)
Expand Down
115 changes: 115 additions & 0 deletions x/bankplus/keeper/inactive_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package keeper

import (
"context"
"testing"

"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"

"cosmossdk.io/log"
storetypes "cosmossdk.io/store/types"

codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil"
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
"github.com/cosmos/cosmos-sdk/runtime"
"github.com/cosmos/cosmos-sdk/testutil"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/auth/codec"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
)

func TestBankPlus(t *testing.T) {
suite.Run(t, &BankPlusTestSuite{})
}

type BankPlusTestSuite struct {
suite.Suite
mockCtrl *gomock.Controller
keeper BaseKeeper
ctx context.Context
}

func (s *BankPlusTestSuite) SetupTest() {
key := storetypes.NewKVStoreKey(banktypes.StoreKey)
tkey := storetypes.NewTransientStoreKey("transient_test")
kvStoreService := runtime.NewKVStoreService(key)
s.ctx = testutil.DefaultContextWithDB(s.T(), key, tkey).Ctx

ctrl := gomock.NewController(s.T())
mockAccKeeper := banktestutil.NewMockAccountKeeper(ctrl)
mockAccKeeper.EXPECT().AddressCodec().Return(codec.NewBech32Codec("link")).AnyTimes()
codec := codectestutil.CodecOptions{
AccAddressPrefix: "link",
ValAddressPrefix: "linkvaloper",
}.NewCodec()
s.mockCtrl = ctrl

authority := authtypes.NewModuleAddress(govtypes.ModuleName)
s.keeper = NewBaseKeeper(
codec,
kvStoreService,
mockAccKeeper,
map[string]bool{},
true,
authority.String(),
log.NewNopLogger())
}

func (s *BankPlusTestSuite) TearDownTest() {
s.mockCtrl.Finish()
}

func (s *BankPlusTestSuite) TestInactiveAddress() {
require.Equal(s.T(), 0, len(s.keeper.inactiveAddrs))
addr := genAddr()
anotherAddr := genAddr()
s.addAddrOk(addr)
s.duplicateAddOk(addr)
s.deleteAddrOk(addr)
s.falseForUnknownAddr(anotherAddr)
s.noErrorWhenDeletionOfUnknownAddr(anotherAddr)
s.testLoadAllInactiveAddrs(addr, anotherAddr)
}

func (s *BankPlusTestSuite) addAddrOk(addr sdk.AccAddress) {
s.keeper.addToInactiveAddr(s.ctx, addr)
require.True(s.T(), s.keeper.isStoredInactiveAddr(s.ctx, addr))
}

func (s *BankPlusTestSuite) duplicateAddOk(addr sdk.AccAddress) {
s.keeper.addToInactiveAddr(s.ctx, addr)
require.True(s.T(), s.keeper.isStoredInactiveAddr(s.ctx, addr))
}

func (s *BankPlusTestSuite) deleteAddrOk(addr sdk.AccAddress) {
s.keeper.deleteFromInactiveAddr(s.ctx, addr)
require.False(s.T(), s.keeper.isStoredInactiveAddr(s.ctx, addr))
}

func (s *BankPlusTestSuite) falseForUnknownAddr(anotherAddr sdk.AccAddress) {
require.False(s.T(), s.keeper.isStoredInactiveAddr(s.ctx, anotherAddr))
}

func (s *BankPlusTestSuite) noErrorWhenDeletionOfUnknownAddr(anotherAddr sdk.AccAddress) {
require.NotPanicsf(s.T(), func() {
s.keeper.deleteFromInactiveAddr(s.ctx, anotherAddr)
}, "no panic expected")
}

func (s *BankPlusTestSuite) testLoadAllInactiveAddrs(addr, anotherAddr sdk.AccAddress) {
s.keeper.addToInactiveAddr(s.ctx, addr)
s.keeper.addToInactiveAddr(s.ctx, anotherAddr)
require.Equal(s.T(), 0, len(s.keeper.inactiveAddrs))
s.keeper.loadAllInactiveAddrs(s.ctx)
require.Equal(s.T(), 2, len(s.keeper.inactiveAddrs))
}

func genAddr() sdk.AccAddress {
pk := secp256k1.GenPrivKey().PubKey()
return sdk.AccAddress(pk.Address())
}
Loading

0 comments on commit a06f9d0

Please sign in to comment.