github.com/Finschia/finschia-sdk@v0.48.1/x/bankplus/keeper/inactive_test.go (about)

     1  package keeper
     2  
     3  import (
     4  	"math/rand"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
     9  	dbm "github.com/tendermint/tm-db"
    10  
    11  	"github.com/Finschia/ostracon/libs/log"
    12  
    13  	"github.com/Finschia/finschia-sdk/codec"
    14  	codectypes "github.com/Finschia/finschia-sdk/codec/types"
    15  	"github.com/Finschia/finschia-sdk/store"
    16  	sdk "github.com/Finschia/finschia-sdk/types"
    17  	accountkeeper "github.com/Finschia/finschia-sdk/x/auth/keeper"
    18  	accounttypes "github.com/Finschia/finschia-sdk/x/auth/types"
    19  	banktypes "github.com/Finschia/finschia-sdk/x/bank/types"
    20  	paramtypes "github.com/Finschia/finschia-sdk/x/params/types"
    21  )
    22  
    23  func genAddress() sdk.AccAddress {
    24  	b := make([]byte, 20)
    25  	rand.Read(b)
    26  	return b
    27  }
    28  
    29  func setupKeeper(storeKey *sdk.KVStoreKey) BaseKeeper {
    30  	registry := codectypes.NewInterfaceRegistry()
    31  	cdc := codec.NewProtoCodec(registry)
    32  	amino := codec.NewLegacyAmino()
    33  	testTransientStoreKey := sdk.NewTransientStoreKey("test")
    34  
    35  	accountStoreKey := sdk.NewKVStoreKey(accounttypes.StoreKey)
    36  	accountSubspace := paramtypes.NewSubspace(cdc, amino, accountStoreKey, testTransientStoreKey, accounttypes.ModuleName)
    37  	accountKeeper := accountkeeper.NewAccountKeeper(cdc, accountStoreKey, accountSubspace, accounttypes.ProtoBaseAccount, nil)
    38  
    39  	bankSubspace := paramtypes.NewSubspace(cdc, amino, storeKey, testTransientStoreKey, banktypes.StoreKey)
    40  	return NewBaseKeeper(cdc, storeKey, accountKeeper, bankSubspace, nil, false)
    41  }
    42  
    43  func setupContext(t *testing.T, storeKey *sdk.KVStoreKey) sdk.Context {
    44  	db := dbm.NewMemDB()
    45  	stateStore := store.NewCommitMultiStore(db)
    46  	stateStore.MountStoreWithDB(storeKey, sdk.StoreTypeIAVL, db)
    47  	require.NoError(t, stateStore.LoadLatestVersion())
    48  
    49  	return sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger())
    50  }
    51  
    52  func TestInactiveAddr(t *testing.T) {
    53  	storeKey := sdk.NewKVStoreKey(banktypes.StoreKey)
    54  	bankKeeper := setupKeeper(storeKey)
    55  	ctx := setupContext(t, storeKey)
    56  
    57  	addr := genAddress()
    58  
    59  	require.Equal(t, 0, len(bankKeeper.inactiveAddrs))
    60  
    61  	bankKeeper.addToInactiveAddr(ctx, addr)
    62  	require.True(t, bankKeeper.isStoredInactiveAddr(ctx, addr))
    63  
    64  	// duplicate addition, no error expects.
    65  	bankKeeper.addToInactiveAddr(ctx, addr)
    66  	require.True(t, bankKeeper.isStoredInactiveAddr(ctx, addr))
    67  
    68  	bankKeeper.deleteFromInactiveAddr(ctx, addr)
    69  	require.False(t, bankKeeper.isStoredInactiveAddr(ctx, addr))
    70  
    71  	addr2 := genAddress()
    72  	require.False(t, bankKeeper.isStoredInactiveAddr(ctx, addr2))
    73  
    74  	// expect no error
    75  	bankKeeper.deleteFromInactiveAddr(ctx, addr2)
    76  
    77  	// test loadAllInactiveAddrs
    78  	bankKeeper.addToInactiveAddr(ctx, addr)
    79  	bankKeeper.addToInactiveAddr(ctx, addr2)
    80  	require.Equal(t, 0, len(bankKeeper.inactiveAddrs))
    81  	bankKeeper.loadAllInactiveAddrs(ctx)
    82  	require.Equal(t, 2, len(bankKeeper.inactiveAddrs))
    83  }