github.com/gravity-devs/liquidity@v1.5.3/x/liquidity/keeper/genesis_test.go (about) 1 package keeper_test 2 3 import ( 4 "fmt" 5 "testing" 6 7 sdk "github.com/cosmos/cosmos-sdk/types" 8 "github.com/stretchr/testify/require" 9 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 10 11 "github.com/gravity-devs/liquidity/app" 12 "github.com/gravity-devs/liquidity/x/liquidity" 13 "github.com/gravity-devs/liquidity/x/liquidity/types" 14 ) 15 16 func TestGenesis(t *testing.T) { 17 simapp, ctx := app.CreateTestInput() 18 19 lk := simapp.LiquidityKeeper 20 21 // default genesis state 22 genState := types.DefaultGenesisState() 23 require.Equal(t, sdk.NewDecWithPrec(3, 3), genState.Params.SwapFeeRate) 24 25 // change swap fee rate 26 params := lk.GetParams(ctx) 27 params.SwapFeeRate = sdk.NewDecWithPrec(5, 3) 28 29 // set params 30 lk.SetParams(ctx, params) 31 32 newGenState := lk.ExportGenesis(ctx) 33 require.Equal(t, sdk.NewDecWithPrec(5, 3), newGenState.Params.SwapFeeRate) 34 35 fmt.Println("newGenState: ", newGenState) 36 } 37 38 func TestGenesisState(t *testing.T) { 39 simapp, ctx := app.CreateTestInput() 40 41 params := simapp.LiquidityKeeper.GetParams(ctx) 42 paramsDefault := simapp.LiquidityKeeper.GetParams(ctx) 43 genesis := types.DefaultGenesisState() 44 45 invalidDenom := "invalid denom---" 46 invalidDenomErrMsg := fmt.Sprintf("invalid denom: %s", invalidDenom) 47 params.PoolCreationFee = sdk.Coins{sdk.Coin{Denom: invalidDenom, Amount: sdk.NewInt(0)}} 48 require.EqualError(t, params.Validate(), invalidDenomErrMsg) 49 50 params = simapp.LiquidityKeeper.GetParams(ctx) 51 params.SwapFeeRate = sdk.NewDec(-1) 52 negativeSwapFeeErrMsg := fmt.Sprintf("swap fee rate must not be negative: %s", params.SwapFeeRate) 53 genesisState := types.NewGenesisState(params, genesis.PoolRecords) 54 require.EqualError(t, types.ValidateGenesis(*genesisState), negativeSwapFeeErrMsg) 55 56 // define test denom X, Y for Liquidity Pool 57 denomX, denomY := types.AlphabeticalDenomPair(DenomX, DenomY) 58 X := sdk.NewInt(100_000_000) 59 Y := sdk.NewInt(200_000_000) 60 61 addrs := app.AddTestAddrsIncremental(simapp, ctx, 20, sdk.NewInt(10_000)) 62 poolID := app.TestCreatePool(t, simapp, ctx, X, Y, denomX, denomY, addrs[0]) 63 64 pool, found := simapp.LiquidityKeeper.GetPool(ctx, poolID) 65 require.True(t, found) 66 67 poolCoins := simapp.LiquidityKeeper.GetPoolCoinTotalSupply(ctx, pool) 68 app.TestDepositPool(t, simapp, ctx, sdk.NewInt(30_000_000), sdk.NewInt(20_000_000), addrs[1:2], poolID, false) 69 70 liquidity.EndBlocker(ctx, simapp.LiquidityKeeper) 71 72 poolCoinBalanceCreator := simapp.BankKeeper.GetBalance(ctx, addrs[0], pool.PoolCoinDenom) 73 poolCoinBalance := simapp.BankKeeper.GetBalance(ctx, addrs[1], pool.PoolCoinDenom) 74 require.Equal(t, sdk.NewInt(100_000), poolCoinBalance.Amount) 75 require.Equal(t, poolCoins.QuoRaw(10), poolCoinBalance.Amount) 76 77 balanceXRefunded := simapp.BankKeeper.GetBalance(ctx, addrs[1], denomX) 78 balanceYRefunded := simapp.BankKeeper.GetBalance(ctx, addrs[1], denomY) 79 require.Equal(t, sdk.NewInt(20000000), balanceXRefunded.Amount) 80 require.Equal(t, sdk.ZeroInt(), balanceYRefunded.Amount) 81 82 // next block 83 ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1) 84 liquidity.BeginBlocker(ctx, simapp.LiquidityKeeper) 85 86 // validate pool records 87 newGenesis := simapp.LiquidityKeeper.ExportGenesis(ctx) 88 genesisState = types.NewGenesisState(paramsDefault, newGenesis.PoolRecords) 89 require.NoError(t, types.ValidateGenesis(*genesisState)) 90 91 pool.TypeId = 5 92 simapp.LiquidityKeeper.SetPool(ctx, pool) 93 newGenesisBrokenPool := simapp.LiquidityKeeper.ExportGenesis(ctx) 94 require.NoError(t, types.ValidateGenesis(*newGenesisBrokenPool)) 95 require.Equal(t, 1, len(newGenesisBrokenPool.PoolRecords)) 96 97 err := simapp.LiquidityKeeper.ValidatePoolRecord(ctx, newGenesisBrokenPool.PoolRecords[0]) 98 require.ErrorIs(t, err, types.ErrPoolTypeNotExists) 99 100 // not initialized genState of other module (auth, bank, ... ) only liquidity module 101 reserveCoins := simapp.LiquidityKeeper.GetReserveCoins(ctx, pool) 102 require.Equal(t, 2, len(reserveCoins)) 103 simapp2 := app.Setup(false) 104 ctx2 := simapp2.BaseApp.NewContext(false, tmproto.Header{}) 105 require.Panics(t, func() { 106 simapp2.LiquidityKeeper.InitGenesis(ctx2, *newGenesis) 107 }) 108 require.Panics(t, func() { 109 app.SaveAccount(simapp2, ctx, pool.GetReserveAccount(), reserveCoins) 110 simapp2.LiquidityKeeper.InitGenesis(ctx2, *newGenesis) 111 }) 112 require.Panics(t, func() { 113 app.SaveAccount(simapp2, ctx, addrs[0], sdk.Coins{poolCoinBalanceCreator}) 114 simapp2.LiquidityKeeper.InitGenesis(ctx2, *newGenesis) 115 }) 116 require.Panics(t, func() { 117 app.SaveAccount(simapp2, ctx2, addrs[1], sdk.Coins{poolCoinBalance}) 118 simapp2.LiquidityKeeper.InitGenesis(ctx2, *newGenesis) 119 }) 120 121 simapp3 := app.Setup(false) 122 ctx3 := simapp3.BaseApp.NewContext(false, tmproto.Header{}).WithBlockHeight(ctx.BlockHeight()) 123 require.Panics(t, func() { 124 simapp3.LiquidityKeeper.InitGenesis(ctx3, *newGenesis) 125 }) 126 require.Panics(t, func() { 127 app.SaveAccount(simapp3, ctx, pool.GetReserveAccount(), reserveCoins) 128 simapp3.LiquidityKeeper.InitGenesis(ctx3, *newGenesis) 129 }) 130 require.Panics(t, func() { 131 app.SaveAccount(simapp3, ctx, addrs[0], sdk.Coins{poolCoinBalanceCreator}) 132 simapp3.LiquidityKeeper.InitGenesis(ctx3, *newGenesis) 133 }) 134 require.Panics(t, func() { 135 app.SaveAccount(simapp3, ctx3, addrs[1], sdk.Coins{poolCoinBalance}) 136 simapp3.LiquidityKeeper.InitGenesis(ctx3, *newGenesis) 137 }) 138 }