From 482cf72a3d738d66431f3896b9b9dd6e68e6608d Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Thu, 30 Nov 2023 14:58:55 +0100 Subject: [PATCH 1/3] tests: add more tests for msg server for DnR --- x/perp/v2/keeper/msg_server.go | 8 +++ x/perp/v2/keeper/msg_server_test.go | 88 ++++++++++++++++++++++++++++- 2 files changed, 93 insertions(+), 3 deletions(-) diff --git a/x/perp/v2/keeper/msg_server.go b/x/perp/v2/keeper/msg_server.go index ae2e9d35c..133275bf8 100644 --- a/x/perp/v2/keeper/msg_server.go +++ b/x/perp/v2/keeper/msg_server.go @@ -159,6 +159,10 @@ func (m msgServer) ChangeCollateralDenom( } func (m msgServer) AllocateEpochRebates(ctx context.Context, msg *types.MsgAllocateEpochRebates) (*types.MsgAllocateEpochRebatesResponse, error) { + if msg == nil { + return nil, common.ErrNilMsg() + } + sender, err := sdk.AccAddressFromBech32(msg.Sender) if err != nil { return nil, err @@ -172,6 +176,10 @@ func (m msgServer) AllocateEpochRebates(ctx context.Context, msg *types.MsgAlloc } func (m msgServer) WithdrawEpochRebates(ctx context.Context, msg *types.MsgWithdrawEpochRebates) (*types.MsgWithdrawEpochRebatesResponse, error) { + if msg == nil { + return nil, common.ErrNilMsg() + } + sender, err := sdk.AccAddressFromBech32(msg.Sender) if err != nil { return nil, err diff --git a/x/perp/v2/keeper/msg_server_test.go b/x/perp/v2/keeper/msg_server_test.go index 96813846b..e76c0a3b7 100644 --- a/x/perp/v2/keeper/msg_server_test.go +++ b/x/perp/v2/keeper/msg_server_test.go @@ -7,6 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" + inflationtypes "github.com/NibiruChain/nibiru/x/inflation/types" + "github.com/NibiruChain/nibiru/x/common/asset" "github.com/NibiruChain/nibiru/x/common/denoms" "github.com/NibiruChain/nibiru/x/common/testutil" @@ -143,7 +145,7 @@ func TestMsgServerAddMargin(t *testing.T) { ), BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(98)), ), - TC("partial close"). + TC("msg server close"). Given( CreateCustomMarket(pair, WithEnabled(true)), FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100))), @@ -167,6 +169,30 @@ func TestMsgServerAddMargin(t *testing.T) { ), BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(98)), ), + TC("partial close"). + Given( + CreateCustomMarket(pair, WithEnabled(true)), + FundAccount(alice, sdk.NewCoins(sdk.NewInt64Coin(types.TestingCollateralDenomNUSD, 100))), + MarketOrder(alice, pair, types.Direction_LONG, sdk.OneInt(), sdk.OneDec(), sdk.ZeroDec()), + MoveToNextBlock(), + ). + When( + MsgServerPartialClosePosition(alice, pair, sdk.MustNewDecFromStr("0.5")), + ). + Then( + PositionShouldBeEqual(alice, pair, + Position_PositionShouldBeEqualTo(types.Position{ + TraderAddress: alice.String(), + Pair: pair, + Size_: sdk.MustNewDecFromStr("0.499999999999"), + Margin: sdk.NewDec(1), + OpenNotional: sdk.MustNewDecFromStr("0.499999999999250000"), + LatestCumulativePremiumFraction: sdk.ZeroDec(), + LastUpdatedBlockNumber: 2, + }), + ), + BalanceEqual(alice, types.TestingCollateralDenomNUSD, sdk.NewInt(99)), + ), } NewTestSuite(t).WithTestCases(tests...).Run() @@ -340,7 +366,6 @@ func TestFailMsgServer(t *testing.T) { }) require.ErrorContains(t, err, "spendable balance is smaller than 1luna") } - func TestMsgChangeCollateralDenom(t *testing.T) { app, ctx := testapp.NewNibiruTestAppAndContext() @@ -348,7 +373,10 @@ func TestMsgChangeCollateralDenom(t *testing.T) { msgServer := keeper.NewMsgServerImpl(app.PerpKeeperV2) - _, err := msgServer.ChangeCollateralDenom(ctx, &types.MsgChangeCollateralDenom{ + _, err := msgServer.ChangeCollateralDenom(ctx, nil) + require.ErrorContains(t, err, "nil msg") + + _, err = msgServer.ChangeCollateralDenom(ctx, &types.MsgChangeCollateralDenom{ Sender: sender, NewDenom: "luna", }) @@ -412,3 +440,57 @@ func TestMsgServerSettlePosition(t *testing.T) { NewTestSuite(t).WithTestCases(tests...).Run() } + +func TestAllocateEpochRebates(t *testing.T) { + app, ctx := testapp.NewNibiruTestAppAndContext() + + sender := testutil.AccAddress().String() + + msgServer := keeper.NewMsgServerImpl(app.PerpKeeperV2) + + _, err := msgServer.AllocateEpochRebates(ctx, nil) + require.ErrorContains(t, err, "nil msg") + + _, err = msgServer.AllocateEpochRebates(ctx, &types.MsgAllocateEpochRebates{}) + require.ErrorContains(t, err, "empty address string is not allowed") + + _, err = msgServer.AllocateEpochRebates(ctx, &types.MsgAllocateEpochRebates{ + Sender: sender, + Rebates: sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100))), + }) + require.ErrorContains(t, err, "insufficient funds") + + app.BankKeeper.MintCoins(ctx, inflationtypes.ModuleName, sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100)))) + app.BankKeeper.SendCoinsFromModuleToAccount(ctx, inflationtypes.ModuleName, sdk.MustAccAddressFromBech32(sender), sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100)))) + + _, err = msgServer.AllocateEpochRebates(ctx, &types.MsgAllocateEpochRebates{ + Sender: sender, + Rebates: sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100))), + }) + require.NoError(t, err) + + // Withdraw rebates + _, err = msgServer.WithdrawEpochRebates(ctx, nil) + require.ErrorContains(t, err, "nil msg") + + _, err = msgServer.WithdrawEpochRebates(ctx, &types.MsgWithdrawEpochRebates{}) + require.ErrorContains(t, err, "empty address string is not allowed") + + _, err = msgServer.WithdrawEpochRebates(ctx, &types.MsgWithdrawEpochRebates{ + Sender: sender, + Epochs: []uint64{1}, + }) + require.ErrorContains(t, err, "collections: not found") + + currentEpoch, err := app.PerpKeeperV2.DnREpoch.Get(ctx) + require.NoError(t, err) + + require.NoError(t, app.PerpKeeperV2.StartNewEpoch(ctx, currentEpoch+1)) + require.NoError(t, app.PerpKeeperV2.StartNewEpoch(ctx, currentEpoch+2)) + + _, err = msgServer.WithdrawEpochRebates(ctx, &types.MsgWithdrawEpochRebates{ + Sender: sender, + Epochs: []uint64{1}, + }) + require.NoError(t, err) +} From 0a2c1c80120adc90481d60bcab976087d970129d Mon Sep 17 00:00:00 2001 From: matthiasmatt Date: Thu, 30 Nov 2023 14:59:43 +0100 Subject: [PATCH 2/3] chore: changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7773004d..37a61f0a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -72,6 +72,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * [#1652](https://github.com/NibiruChain/nibiru/pull/1652) - test: refactors cli.network suites with 'Integration' to use common function * [#1659](https://github.com/NibiruChain/nibiru/pull/1659) - refactor(oracle): curate oracle default whitelist * [#1679](https://github.com/NibiruChain/nibiru/pull/1679) - test(perp): add more tests for perp module msg server +* [#1686](https://github.com/NibiruChain/nibiru/pull/1686) - test(perp): add more tests for perp module msg server for DnR ### Dependencies - Bump `github.com/prometheus/client_golang` from 1.16.0 to 1.17.0 ([#1605](https://github.com/NibiruChain/nibiru/pull/1605)) From 9d8503a6883a1d6f7f70f189f2f24a02f1d4424b Mon Sep 17 00:00:00 2001 From: Unique-Divine Date: Fri, 1 Dec 2023 01:50:55 -0600 Subject: [PATCH 3/3] refactor: fix linter errors --- x/perp/v2/integration/action/dnr.go | 3 +-- x/perp/v2/keeper/admin_test.go | 18 ++++++++++++------ x/perp/v2/keeper/msg_server.go | 1 - x/perp/v2/keeper/msg_server_test.go | 14 ++++++++++++-- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/x/perp/v2/integration/action/dnr.go b/x/perp/v2/integration/action/dnr.go index 110c4779e..9c5b69a54 100644 --- a/x/perp/v2/integration/action/dnr.go +++ b/x/perp/v2/integration/action/dnr.go @@ -236,8 +236,7 @@ func FundDnREpoch(amt sdk.Coins) action.Action { return fundDnREpoch{amt} } -type startNewDnRepochAction struct { -} +type startNewDnRepochAction struct{} func (s startNewDnRepochAction) Do(app *app.NibiruApp, ctx sdk.Context) (outCtx sdk.Context, err error, isMandatory bool) { currentEpoch, err := app.PerpKeeperV2.DnREpoch.Get(ctx) diff --git a/x/perp/v2/keeper/admin_test.go b/x/perp/v2/keeper/admin_test.go index 5e8d66e25..8b08ced29 100644 --- a/x/perp/v2/keeper/admin_test.go +++ b/x/perp/v2/keeper/admin_test.go @@ -296,28 +296,34 @@ func TestAdmin_ChangeCollateralDenom(t *testing.T) { }{ {name: "happy: normal denom", newDenom: "nusd", sender: adminSender, wantErr: ""}, - {name: "happy: token factory denom", + { + name: "happy: token factory denom", newDenom: tftypes.TFDenom{ Creator: testutil.AccAddress().String(), Subdenom: "nusd", - }.String(), sender: adminSender, wantErr: ""}, + }.String(), sender: adminSender, wantErr: "", + }, - {name: "happy: token factory denom", + { + name: "happy: token factory denom", newDenom: tftypes.TFDenom{ Creator: testutil.AccAddress().String(), Subdenom: "nusd", }.String(), sender: adminSender, wantErr: "", }, - {name: "happy: IBC denom", + { + name: "happy: IBC denom", newDenom: "ibc/46B44899322F3CD854D2D46DEEF881958467CDD4B3B10086DA49296BBED94BED", // JUNO on Osmosis sender: adminSender, wantErr: "", }, - {name: "sad: invalid denom", + { + name: "sad: invalid denom", newDenom: "", sender: adminSender, wantErr: types.ErrInvalidCollateral.Error(), }, - {name: "sad: sender not in sudoers", + { + name: "sad: sender not in sudoers", newDenom: "nusd", sender: nonAdminSender, wantErr: "insufficient permissions on smart contract", }, } { diff --git a/x/perp/v2/keeper/msg_server.go b/x/perp/v2/keeper/msg_server.go index 133275bf8..3274c3752 100644 --- a/x/perp/v2/keeper/msg_server.go +++ b/x/perp/v2/keeper/msg_server.go @@ -113,7 +113,6 @@ func (m msgServer) SettlePosition(ctx context.Context, msg *types.MsgSettlePosit // These fields should have already been validated by MsgSettlePosition.ValidateBasic() prior to being sent to the msgServer. traderAddr := sdk.MustAccAddressFromBech32(msg.Sender) resp, err := m.k.SettlePosition(sdk.UnwrapSDKContext(ctx), msg.Pair, msg.Version, traderAddr) - if err != nil { return nil, err } diff --git a/x/perp/v2/keeper/msg_server_test.go b/x/perp/v2/keeper/msg_server_test.go index e76c0a3b7..c13baad28 100644 --- a/x/perp/v2/keeper/msg_server_test.go +++ b/x/perp/v2/keeper/msg_server_test.go @@ -366,6 +366,7 @@ func TestFailMsgServer(t *testing.T) { }) require.ErrorContains(t, err, "spendable balance is smaller than 1luna") } + func TestMsgChangeCollateralDenom(t *testing.T) { app, ctx := testapp.NewNibiruTestAppAndContext() @@ -460,8 +461,17 @@ func TestAllocateEpochRebates(t *testing.T) { }) require.ErrorContains(t, err, "insufficient funds") - app.BankKeeper.MintCoins(ctx, inflationtypes.ModuleName, sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100)))) - app.BankKeeper.SendCoinsFromModuleToAccount(ctx, inflationtypes.ModuleName, sdk.MustAccAddressFromBech32(sender), sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100)))) + require.NoError(t, + app.BankKeeper.MintCoins(ctx, + inflationtypes.ModuleName, + sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100))), + ), + ) + require.NoError(t, + app.BankKeeper.SendCoinsFromModuleToAccount(ctx, + inflationtypes.ModuleName, sdk.MustAccAddressFromBech32(sender), + sdk.NewCoins(sdk.NewCoin("unibi", sdk.NewInt(100)))), + ) _, err = msgServer.AllocateEpochRebates(ctx, &types.MsgAllocateEpochRebates{ Sender: sender,