github.com/Finschia/finschia-sdk@v0.49.1/x/fbridge/testutil/setup.go (about)

     1  package testutil
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/Finschia/ostracon/libs/log"
     7  	"github.com/golang/mock/gomock"
     8  	"github.com/stretchr/testify/assert"
     9  	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
    10  	dbm "github.com/tendermint/tm-db"
    11  
    12  	"github.com/Finschia/finschia-sdk/client"
    13  	"github.com/Finschia/finschia-sdk/codec"
    14  	codectypes "github.com/Finschia/finschia-sdk/codec/types"
    15  	"github.com/Finschia/finschia-sdk/crypto/keys/secp256k1"
    16  	"github.com/Finschia/finschia-sdk/std"
    17  	"github.com/Finschia/finschia-sdk/store"
    18  	storetypes "github.com/Finschia/finschia-sdk/store/types"
    19  	sdk "github.com/Finschia/finschia-sdk/types"
    20  	"github.com/Finschia/finschia-sdk/x/auth/tx"
    21  	authtypes "github.com/Finschia/finschia-sdk/x/auth/types"
    22  	"github.com/Finschia/finschia-sdk/x/fbridge/types"
    23  )
    24  
    25  func DefaultContextWithDB(tb testing.TB, key, mkey, tkey storetypes.StoreKey) sdk.Context {
    26  	tb.Helper()
    27  	db := dbm.NewMemDB()
    28  	cms := store.NewCommitMultiStore(db)
    29  	cms.MountStoreWithDB(key, storetypes.StoreTypeIAVL, db)
    30  	cms.MountStoreWithDB(mkey, storetypes.StoreTypeMemory, db)
    31  	cms.MountStoreWithDB(tkey, storetypes.StoreTypeTransient, db)
    32  	err := cms.LoadLatestVersion()
    33  	assert.NoError(tb, err)
    34  
    35  	ctx := sdk.NewContext(cms, tmproto.Header{}, false, log.NewNopLogger())
    36  
    37  	return ctx
    38  }
    39  
    40  type TestEncodingConfig struct {
    41  	InterfaceRegistry codectypes.InterfaceRegistry
    42  	Codec             codec.Codec
    43  	TxConfig          client.TxConfig
    44  	Amino             *codec.LegacyAmino
    45  }
    46  
    47  func MakeTestEncodingConfig() TestEncodingConfig {
    48  	cdc := codec.NewLegacyAmino()
    49  	interfaceRegistry := codectypes.NewInterfaceRegistry()
    50  	marshaler := codec.NewProtoCodec(interfaceRegistry)
    51  
    52  	encCfg := TestEncodingConfig{
    53  		InterfaceRegistry: interfaceRegistry,
    54  		Codec:             marshaler,
    55  		TxConfig:          tx.NewTxConfig(marshaler, tx.DefaultSignModes),
    56  		Amino:             cdc,
    57  	}
    58  
    59  	std.RegisterLegacyAminoCodec(encCfg.Amino)
    60  	std.RegisterInterfaces(encCfg.InterfaceRegistry)
    61  	types.RegisterLegacyAminoCodec(encCfg.Amino)
    62  	types.RegisterInterfaces(encCfg.InterfaceRegistry)
    63  	return encCfg
    64  }
    65  
    66  func PrepareFbridgeTest(tb testing.TB, n int) (*sdk.KVStoreKey, *sdk.MemoryStoreKey, sdk.Context, TestEncodingConfig, *MockAccountKeeper, *MockBankKeeper, []sdk.AccAddress) {
    67  	tb.Helper()
    68  
    69  	ctrl := gomock.NewController(tb)
    70  	key := storetypes.NewKVStoreKey(types.StoreKey)
    71  	memKey := storetypes.NewMemoryStoreKey(types.MemStoreKey)
    72  	ctx := DefaultContextWithDB(tb, key, memKey, sdk.NewTransientStoreKey("transient_test"))
    73  	encCfg := MakeTestEncodingConfig()
    74  
    75  	authKeeper := NewMockAccountKeeper(ctrl)
    76  	authKeeper.EXPECT().GetModuleAddress(types.ModuleName).Return(authtypes.NewEmptyModuleAccount("fbridge").GetAddress()).AnyTimes()
    77  	bankKeeper := NewMockBankKeeper(ctrl)
    78  
    79  	addrs := make([]sdk.AccAddress, n)
    80  	for i := 0; i < n; i++ {
    81  		addrs[i] = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address())
    82  	}
    83  
    84  	return key, memKey, ctx, encCfg, authKeeper, bankKeeper, addrs
    85  }