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

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