github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/order/keeper/test_common.go (about) 1 package keeper 2 3 import ( 4 "fmt" 5 "os" 6 "testing" 7 "time" 8 9 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/mpt" 10 11 "github.com/fibonacci-chain/fbc/x/common" 12 13 "github.com/fibonacci-chain/fbc/x/common/monitor" 14 15 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 16 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store" 17 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 18 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth" 19 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank" 20 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply" 21 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 22 "github.com/fibonacci-chain/fbc/libs/tendermint/crypto/ed25519" 23 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/log" 24 dbm "github.com/fibonacci-chain/fbc/libs/tm-db" 25 "github.com/fibonacci-chain/fbc/x/params" 26 "github.com/stretchr/testify/require" 27 28 "github.com/fibonacci-chain/fbc/x/dex" 29 "github.com/fibonacci-chain/fbc/x/order/types" 30 "github.com/fibonacci-chain/fbc/x/token" 31 ) 32 33 var mockOrder = types.MockOrder 34 35 // TestInput stores some variables for testing 36 type TestInput struct { 37 Ctx sdk.Context 38 Cdc *codec.Codec 39 TestAddrs []sdk.AccAddress 40 41 OrderKeeper Keeper 42 TokenKeeper token.Keeper 43 AccountKeeper auth.AccountKeeper 44 SupplyKeeper supply.Keeper 45 DexKeeper dex.Keeper 46 } 47 48 // MakeTestCodec creates a codec used only for testing 49 func MakeTestCodec() *codec.Codec { 50 var cdc = codec.New() 51 bank.RegisterCodec(cdc) 52 auth.RegisterCodec(cdc) 53 supply.RegisterCodec(cdc) 54 sdk.RegisterCodec(cdc) 55 dex.RegisterCodec(cdc) 56 codec.RegisterCrypto(cdc) 57 58 types.RegisterCodec(cdc) // order 59 token.RegisterCodec(cdc) // token 60 return cdc 61 } 62 63 // CreateTestInputWithBalance creates TestInput with the number of account and the quantity 64 func CreateTestInputWithBalance(t *testing.T, numAddrs, initQuantity int64) TestInput { 65 66 db := dbm.NewMemDB() 67 68 keyAcc := sdk.NewKVStoreKey(auth.StoreKey) 69 keyMpt := sdk.NewKVStoreKey(mpt.StoreKey) 70 keySupply := sdk.NewKVStoreKey(supply.StoreKey) 71 keyParams := sdk.NewKVStoreKey(params.StoreKey) 72 tkeyParams := sdk.NewTransientStoreKey(params.TStoreKey) 73 74 // order module 75 keyOrder := sdk.NewKVStoreKey(types.OrderStoreKey) 76 77 // token module 78 keyToken := sdk.NewKVStoreKey(token.StoreKey) 79 keyLock := sdk.NewKVStoreKey(token.KeyLock) 80 //keyTokenPair := sdk.NewKVStoreKey(token.KeyTokenPair) 81 82 // dex module 83 storeKey := sdk.NewKVStoreKey(dex.StoreKey) 84 keyTokenPair := sdk.NewKVStoreKey(dex.TokenPairStoreKey) 85 86 ms := store.NewCommitMultiStore(db) 87 ms.MountStoreWithDB(keyAcc, sdk.StoreTypeIAVL, db) 88 ms.MountStoreWithDB(keyMpt, sdk.StoreTypeMPT, db) 89 ms.MountStoreWithDB(keySupply, sdk.StoreTypeIAVL, db) 90 ms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db) 91 ms.MountStoreWithDB(tkeyParams, sdk.StoreTypeTransient, db) 92 93 ms.MountStoreWithDB(keyOrder, sdk.StoreTypeIAVL, db) 94 95 ms.MountStoreWithDB(keyToken, sdk.StoreTypeIAVL, db) 96 ms.MountStoreWithDB(keyLock, sdk.StoreTypeIAVL, db) 97 ms.MountStoreWithDB(storeKey, sdk.StoreTypeIAVL, db) 98 ms.MountStoreWithDB(keyTokenPair, sdk.StoreTypeIAVL, db) 99 100 err := ms.LoadLatestVersion() 101 require.Nil(t, err) 102 103 ctx := sdk.NewContext(ms, abci.Header{Time: time.Unix(0, 0)}, false, log.NewTMLogger(os.Stdout)) 104 cdc := MakeTestCodec() 105 106 feeCollectorAcc := supply.NewEmptyModuleAccount(auth.FeeCollectorName) 107 108 blacklistedAddrs := make(map[string]bool) 109 blacklistedAddrs[feeCollectorAcc.String()] = true 110 111 paramsKeeper := params.NewKeeper(cdc, keyParams, tkeyParams, ctx.Logger()) 112 accountKeeper := auth.NewAccountKeeper(cdc, keyAcc, keyMpt, 113 paramsKeeper.Subspace(auth.DefaultParamspace), auth.ProtoBaseAccount) 114 bankKeeper := bank.NewBaseKeeper(accountKeeper, paramsKeeper.Subspace(bank.DefaultParamspace), 115 blacklistedAddrs) 116 maccPerms := map[string][]string{ 117 auth.FeeCollectorName: nil, 118 token.ModuleName: {supply.Minter, supply.Burner}, 119 } 120 supplyKeeper := supply.NewKeeper(cdc, keySupply, accountKeeper, bank.NewBankKeeperAdapter(bankKeeper), maccPerms) 121 supplyKeeper.SetSupply(ctx, supply.NewSupply(sdk.Coins{})) 122 123 // set module accounts 124 supplyKeeper.SetModuleAccount(ctx, feeCollectorAcc) 125 126 // token keeper 127 tokenKeepr := token.NewKeeper(bankKeeper, paramsKeeper.Subspace(token.DefaultParamspace), 128 auth.FeeCollectorName, supplyKeeper, keyToken, keyLock, cdc, true, accountKeeper) 129 130 // dex keeper 131 paramsSubspace := paramsKeeper.Subspace(dex.DefaultParamspace) 132 dexKeeper := dex.NewKeeper(auth.FeeCollectorName, supplyKeeper, paramsSubspace, tokenKeepr, nil, bankKeeper, storeKey, keyTokenPair, cdc) 133 134 // order keeper 135 orderKeeper := NewKeeper(tokenKeepr, supplyKeeper, dexKeeper, 136 paramsKeeper.Subspace(types.DefaultParamspace), auth.FeeCollectorName, keyOrder, 137 cdc, true, monitor.NopOrderMetrics()) 138 139 defaultParams := types.DefaultTestParams() 140 orderKeeper.SetParams(ctx, &defaultParams) 141 142 // init account tokens 143 decCoins, err := sdk.ParseDecCoins(fmt.Sprintf("%d%s,%d%s", 144 initQuantity, common.NativeToken, initQuantity, common.TestToken)) 145 require.Nil(t, err) 146 147 initCoins := decCoins 148 149 var testAddrs []sdk.AccAddress 150 for i := int64(0); i < numAddrs; i++ { 151 pk := ed25519.GenPrivKey().PubKey() 152 addr := sdk.AccAddress(pk.Address()) 153 testAddrs = append(testAddrs, addr) 154 //_, err := bankKeeper.AddCoins(ctx, addr, initCoins) 155 err := orderKeeper.supplyKeeper.MintCoins(ctx, token.ModuleName, initCoins) 156 require.Nil(t, err) 157 err = orderKeeper.supplyKeeper.SendCoinsFromModuleToAccount(ctx, token.ModuleName, addr, initCoins) 158 require.Nil(t, err) 159 } 160 161 return TestInput{ctx, cdc, testAddrs, orderKeeper, tokenKeepr, accountKeeper, supplyKeeper, dexKeeper} 162 } 163 164 // CreateTestInput creates TestInput with default params 165 func CreateTestInput(t *testing.T) TestInput { 166 return CreateTestInputWithBalance(t, 2, 100) 167 }