From a07a61065c676b8a8c979a96f058a54e8a0f19a4 Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Mon, 19 Sep 2022 22:45:16 +0700 Subject: [PATCH 1/3] add test for afterCreatePool --- x/twap/export_test.go | 4 +++ x/twap/logic_test.go | 84 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/x/twap/export_test.go b/x/twap/export_test.go index f4cf043f7ca..462808753ea 100644 --- a/x/twap/export_test.go +++ b/x/twap/export_test.go @@ -93,3 +93,7 @@ func (k *Keeper) GetAmmInterface() types.AmmInterface { func (k *Keeper) SetAmmInterface(ammInterface types.AmmInterface) { k.ammkeeper = ammInterface } + +func (k *Keeper) AfterCreatePool(ctx sdk.Context, poolId uint64) error { + return k.afterCreatePool(ctx, poolId) +} diff --git a/x/twap/logic_test.go b/x/twap/logic_test.go index d7fe7b52527..f1a6de85905 100644 --- a/x/twap/logic_test.go +++ b/x/twap/logic_test.go @@ -10,6 +10,7 @@ import ( "github.com/stretchr/testify/require" "github.com/osmosis-labs/osmosis/v12/app/apptesting/osmoassert" + "github.com/osmosis-labs/osmosis/v12/osmoutils" gammtypes "github.com/osmosis-labs/osmosis/v12/x/gamm/types" "github.com/osmosis-labs/osmosis/v12/x/twap" "github.com/osmosis-labs/osmosis/v12/x/twap/types" @@ -1098,3 +1099,86 @@ func (s *TestSuite) TestUpdateRecords() { }) } } + +func (s *TestSuite) TestAfterCreatePool() { + tests := map[string]struct { + poolId uint64 + poolCoins sdk.Coins + // if this field is set true, we swap in the same block with pool creation + runSwap bool + expectedErr bool + }{ + "Pool not existing": { + poolId: 2, + expectedErr: true, + }, + "Default Pool, no swap on pool creation block": { + poolId: 1, + poolCoins: defaultTwoAssetCoins, + runSwap: false, + }, + "Default Pool, swap on pool creation block": { + poolId: 1, + poolCoins: defaultTwoAssetCoins, + runSwap: true, + }, + "Multi assets pool, no swap on pool creation block": { + poolId: 1, + poolCoins: defaultThreeAssetCoins, + runSwap: false, + }, + "Multi assets pool, swap on pool creation block": { + poolId: 1, + poolCoins: defaultThreeAssetCoins, + runSwap: true, + }, + } + + for name, tc := range tests { + s.Run(name, func() { + s.SetupTest() + var poolId uint64 + + // set up pool with input coins + if tc.poolCoins != nil { + poolId = s.PrepareBalancerPoolWithCoins(tc.poolCoins...) + if tc.runSwap { + s.RunBasicSwap(poolId) + } + } + + err := s.twapkeeper.AfterCreatePool(s.Ctx, tc.poolId) + if tc.expectedErr { + s.Require().Error(err) + return + } + s.Require().Equal(tc.poolId, poolId) + s.Require().NoError(err) + + denoms := osmoutils.CoinsDenoms(tc.poolCoins) + denomPairs0, denomPairs1 := types.GetAllUniqueDenomPairs(denoms) + expectedRecords := []types.TwapRecord{} + for i := 0; i < len(denomPairs0); i++ { + expectedRecord, err := twap.NewTwapRecord(s.App.GAMMKeeper, s.Ctx, poolId, denomPairs0[i], denomPairs1[i]) + s.Require().NoError(err) + expectedRecords = append(expectedRecords, expectedRecord) + } + + // consistency check that the number of records is exactly equal to the number of denompairs + allRecords, err := s.twapkeeper.GetAllMostRecentRecordsForPool(s.Ctx, poolId) + s.Require().NoError(err) + s.Require().Equal(len(denomPairs0), len(allRecords)) + s.Require().Equal(len(expectedRecords), len(allRecords)) + + // check on the correctness of all individual twap records + for i := 0; i < len(denomPairs0); i++ { + actualRecord, err := s.twapkeeper.GetMostRecentRecordStoreRepresentation(s.Ctx, poolId, denomPairs0[i], denomPairs1[i]) + s.Require().NoError(err) + s.Require().Equal(expectedRecords[i], actualRecord) + actualRecord, err = s.twapkeeper.GetRecordAtOrBeforeTime(s.Ctx, poolId, s.Ctx.BlockTime(), denomPairs0[i], denomPairs1[i]) + s.Require().NoError(err) + s.Require().Equal(expectedRecords[i], actualRecord) + } + }) + } +} From 114b2995f8a5d914fdcaeb5f26346e0abd1d5930 Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Mon, 19 Sep 2022 22:46:08 +0700 Subject: [PATCH 2/3] format --- x/twap/logic_test.go | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/x/twap/logic_test.go b/x/twap/logic_test.go index f1a6de85905..9eb024964ce 100644 --- a/x/twap/logic_test.go +++ b/x/twap/logic_test.go @@ -1102,35 +1102,35 @@ func (s *TestSuite) TestUpdateRecords() { func (s *TestSuite) TestAfterCreatePool() { tests := map[string]struct { - poolId uint64 + poolId uint64 poolCoins sdk.Coins // if this field is set true, we swap in the same block with pool creation - runSwap bool + runSwap bool expectedErr bool }{ "Pool not existing": { - poolId: 2, + poolId: 2, expectedErr: true, }, "Default Pool, no swap on pool creation block": { - poolId: 1, + poolId: 1, poolCoins: defaultTwoAssetCoins, - runSwap: false, + runSwap: false, }, "Default Pool, swap on pool creation block": { - poolId: 1, + poolId: 1, poolCoins: defaultTwoAssetCoins, - runSwap: true, + runSwap: true, }, "Multi assets pool, no swap on pool creation block": { - poolId: 1, + poolId: 1, poolCoins: defaultThreeAssetCoins, - runSwap: false, + runSwap: false, }, "Multi assets pool, swap on pool creation block": { - poolId: 1, + poolId: 1, poolCoins: defaultThreeAssetCoins, - runSwap: true, + runSwap: true, }, } @@ -1146,7 +1146,7 @@ func (s *TestSuite) TestAfterCreatePool() { s.RunBasicSwap(poolId) } } - + err := s.twapkeeper.AfterCreatePool(s.Ctx, tc.poolId) if tc.expectedErr { s.Require().Error(err) @@ -1163,13 +1163,13 @@ func (s *TestSuite) TestAfterCreatePool() { s.Require().NoError(err) expectedRecords = append(expectedRecords, expectedRecord) } - + // consistency check that the number of records is exactly equal to the number of denompairs allRecords, err := s.twapkeeper.GetAllMostRecentRecordsForPool(s.Ctx, poolId) s.Require().NoError(err) s.Require().Equal(len(denomPairs0), len(allRecords)) s.Require().Equal(len(expectedRecords), len(allRecords)) - + // check on the correctness of all individual twap records for i := 0; i < len(denomPairs0); i++ { actualRecord, err := s.twapkeeper.GetMostRecentRecordStoreRepresentation(s.Ctx, poolId, denomPairs0[i], denomPairs1[i]) From cc52b1b26ac817040f8f4dc9dc7db425ab013b96 Mon Sep 17 00:00:00 2001 From: Hieu Vu <72878483+hieuvubk@users.noreply.github.com> Date: Wed, 21 Sep 2022 15:48:33 +0700 Subject: [PATCH 3/3] add test to check trackChangePool --- x/twap/logic_test.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/x/twap/logic_test.go b/x/twap/logic_test.go index 9eb024964ce..4d8459bbe14 100644 --- a/x/twap/logic_test.go +++ b/x/twap/logic_test.go @@ -1179,6 +1179,13 @@ func (s *TestSuite) TestAfterCreatePool() { s.Require().NoError(err) s.Require().Equal(expectedRecords[i], actualRecord) } + + // test that after creating a pool + // has triggered `trackChangedPool`, + // and that we have the state of price impacted pools. + changedPools := s.twapkeeper.GetChangedPools(s.Ctx) + s.Require().Equal(1, len(changedPools)) + s.Require().Equal(tc.poolId, changedPools[0]) }) } }