github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/order/app_test.go (about) 1 //go:build ignore 2 3 package order 4 5 import ( 6 "fmt" 7 "testing" 8 9 "github.com/fibonacci-chain/fbc/x/common/monitor" 10 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 12 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 13 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth" 14 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank" 15 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mock" 16 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply" 17 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply/exported" 18 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 19 "github.com/fibonacci-chain/fbc/libs/tendermint/crypto/secp256k1" 20 "github.com/fibonacci-chain/fbc/x/staking/types" 21 "github.com/stretchr/testify/require" 22 23 "github.com/fibonacci-chain/fbc/x/common" 24 "github.com/fibonacci-chain/fbc/x/dex" 25 "github.com/fibonacci-chain/fbc/x/token" 26 ) 27 28 type MockApp struct { 29 *mock.App 30 31 keyOrder *sdk.KVStoreKey 32 keyToken *sdk.KVStoreKey 33 keyLock *sdk.KVStoreKey 34 keyDex *sdk.KVStoreKey 35 keyTokenPair *sdk.KVStoreKey 36 37 keySupply *sdk.KVStoreKey 38 39 bankKeeper bank.Keeper 40 orderKeeper Keeper 41 tokenKeeper token.Keeper 42 supplyKeeper supply.Keeper 43 dexKeeper dex.Keeper 44 } 45 46 func registerCodec(cdc *codec.Codec) { 47 RegisterCodec(cdc) 48 token.RegisterCodec(cdc) 49 supply.RegisterCodec(cdc) 50 } 51 52 func getMockApp(t *testing.T, numGenAccs int) (mockApp *MockApp, addrKeysSlice mock.AddrKeysSlice) { 53 return getMockAppWithBalance(t, numGenAccs, 100) 54 } 55 56 // initialize the mock application for this module 57 func getMockAppWithBalance(t *testing.T, numGenAccs int, balance int64) (mockApp *MockApp, 58 addrKeysSlice mock.AddrKeysSlice) { 59 mapp := mock.NewApp() 60 registerCodec(mapp.Cdc.GetCdc()) 61 62 mockApp = &MockApp{ 63 App: mapp, 64 keyOrder: sdk.NewKVStoreKey(OrderStoreKey), 65 66 keyToken: sdk.NewKVStoreKey(token.StoreKey), 67 keyLock: sdk.NewKVStoreKey(token.KeyLock), 68 keyDex: sdk.NewKVStoreKey(dex.StoreKey), 69 keyTokenPair: sdk.NewKVStoreKey(dex.TokenPairStoreKey), 70 71 keySupply: sdk.NewKVStoreKey(supply.StoreKey), 72 } 73 74 feeCollector := supply.NewEmptyModuleAccount(auth.FeeCollectorName) 75 blacklistedAddrs := make(map[string]bool) 76 blacklistedAddrs[feeCollector.String()] = true 77 78 mockApp.bankKeeper = bank.NewBaseKeeper(mockApp.AccountKeeper, 79 mockApp.ParamsKeeper.Subspace(bank.DefaultParamspace), 80 blacklistedAddrs) 81 82 maccPerms := map[string][]string{ 83 auth.FeeCollectorName: nil, 84 token.ModuleName: {supply.Minter, supply.Burner}, 85 } 86 mockApp.supplyKeeper = supply.NewKeeper(mockApp.Cdc.GetCdc(), mockApp.keySupply, mockApp.AccountKeeper, 87 mockApp.bankKeeper, maccPerms) 88 89 mockApp.tokenKeeper = token.NewKeeper( 90 mockApp.bankKeeper, 91 mockApp.ParamsKeeper.Subspace(token.DefaultParamspace), 92 auth.FeeCollectorName, 93 mockApp.supplyKeeper, 94 mockApp.keyToken, 95 mockApp.keyLock, 96 mockApp.Cdc.GetCdc(), 97 true, mockApp.AccountKeeper) 98 99 mockApp.dexKeeper = dex.NewKeeper( 100 auth.FeeCollectorName, 101 mockApp.supplyKeeper, 102 mockApp.ParamsKeeper.Subspace(dex.DefaultParamspace), 103 mockApp.tokenKeeper, 104 nil, 105 mockApp.bankKeeper, 106 mockApp.keyDex, 107 mockApp.keyTokenPair, 108 mockApp.Cdc.GetCdc()) 109 110 mockApp.orderKeeper = NewKeeper( 111 mockApp.tokenKeeper, 112 mockApp.supplyKeeper, 113 mockApp.dexKeeper, 114 mockApp.ParamsKeeper.Subspace(DefaultParamspace), 115 auth.FeeCollectorName, 116 mockApp.keyOrder, 117 mockApp.Cdc.GetCdc(), 118 true, 119 monitor.NopOrderMetrics()) 120 121 mockApp.Router().AddRoute(RouterKey, NewOrderHandler(mockApp.orderKeeper)) 122 mockApp.QueryRouter().AddRoute(QuerierRoute, NewQuerier(mockApp.orderKeeper)) 123 124 mockApp.SetBeginBlocker(getBeginBlocker(mockApp.orderKeeper)) 125 mockApp.SetEndBlocker(getEndBlocker(mockApp.orderKeeper)) 126 mockApp.SetInitChainer(getInitChainer(mockApp.App, mockApp.supplyKeeper, 127 []exported.ModuleAccountI{feeCollector})) 128 129 decCoins, err := sdk.ParseDecCoins(fmt.Sprintf("%d%s,%d%s", 130 balance, common.NativeToken, balance, common.TestToken)) 131 require.Nil(t, err) 132 coins := decCoins 133 134 keysSlice, genAccs := CreateGenAccounts(numGenAccs, coins) 135 addrKeysSlice = keysSlice 136 137 // todo: checkTx in mock app 138 mockApp.SetAnteHandler(nil) 139 140 app := mockApp 141 require.NoError(t, app.CompleteSetup( 142 app.keyOrder, 143 app.keyToken, 144 app.keyDex, 145 app.keyTokenPair, 146 app.keyLock, 147 app.keySupply, 148 )) 149 mock.SetGenesis(mockApp.App, genAccs) 150 151 for i := 0; i < numGenAccs; i++ { 152 mock.CheckBalance(t, app.App, keysSlice[i].Address, coins) 153 mockApp.TotalCoinsSupply = mockApp.TotalCoinsSupply.Add2(coins) 154 } 155 156 return mockApp, addrKeysSlice 157 } 158 159 func getBeginBlocker(keeper Keeper) sdk.BeginBlocker { 160 return func(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock { 161 BeginBlocker(ctx, keeper) 162 return abci.ResponseBeginBlock{} 163 } 164 } 165 166 func getEndBlocker(keeper Keeper) sdk.EndBlocker { 167 return func(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock { 168 EndBlocker(ctx, keeper) 169 return abci.ResponseEndBlock{} 170 } 171 } 172 173 func getInitChainer(mapp *mock.App, supplyKeeper types.SupplyKeeper, 174 blacklistedAddrs []exported.ModuleAccountI) sdk.InitChainer { 175 return func(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { 176 mapp.InitChainer(ctx, req) 177 // set module accounts 178 for _, macc := range blacklistedAddrs { 179 supplyKeeper.SetModuleAccount(ctx, macc) 180 } 181 return abci.ResponseInitChain{} 182 } 183 } 184 185 //func produceOrderTxs(app *MockApp, ctx sdk.Context, numToGenerate int, addrKeys mock.AddrKeys, 186 // orderMsg *MsgNewOrder) []auth.StdTx { 187 // txs := make([]auth.StdTx, numToGenerate) 188 // orderMsg.Sender = addrKeys.Address 189 // for i := 0; i < numToGenerate; i++ { 190 // txs[i] = buildTx(app, ctx, addrKeys, *orderMsg) 191 // } 192 // return txs 193 //} 194 195 //func buildTx(app *MockApp, ctx sdk.Context, addrKeys mock.AddrKeys, msg sdk.Msg) auth.StdTx { 196 // accs := app.AccountKeeper.GetAccount(ctx, addrKeys.Address) 197 // accNum := accs.GetAccountNumber() 198 // seqNum := accs.GetSequence() 199 // 200 // tx := mock.GenTx( 201 // []sdk.Msg{msg}, []uint64{uint64(accNum)}, []uint64{uint64(seqNum)}, addrKeys.PrivKey) 202 // res := app.Check(tx) 203 // if !res.IsOK() { 204 // panic(fmt.Sprintf("something wrong in checking transaction: %v", res)) 205 // } 206 // return tx 207 //} 208 // 209 //func mockApplyBlock(app *MockApp, blockHeight int64, txs []auth.StdTx) { 210 // app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: blockHeight}}) 211 // 212 // newCtx := app.NewContext(false, abci.Header{}) 213 // param := DefaultTestParams() 214 // app.orderKeeper.SetParams(newCtx, ¶m) 215 // for _, tx := range txs { 216 // app.Deliver(tx) 217 // } 218 // 219 // app.EndBlock(abci.RequestEndBlock{Height: blockHeight}) 220 // app.Commit() 221 //} 222 223 func CreateGenAccounts(numAccs int, genCoins sdk.Coins) (addrKeysSlice mock.AddrKeysSlice, 224 genAccs []auth.Account) { 225 for i := 0; i < numAccs; i++ { 226 privKey := secp256k1.GenPrivKey() 227 pubKey := privKey.PubKey() 228 addr := sdk.AccAddress(pubKey.Address()) 229 230 addrKeys := mock.NewAddrKeys(addr, pubKey, privKey) 231 account := &auth.BaseAccount{ 232 Address: addr, 233 Coins: genCoins, 234 } 235 genAccs = append(genAccs, account) 236 addrKeysSlice = append(addrKeysSlice, addrKeys) 237 } 238 return 239 }