From 560388cd877a6f8a8e91460db3bd105d2c7cdc0b Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 8 May 2023 05:59:06 +0700 Subject: [PATCH 01/11] fix forced type assertions --- .golangci.yml | 2 +- app/upgrades/v15/upgrade_test.go | 4 +-- tests/e2e/e2e_test.go | 47 ++++++++++++++++++++------ tests/ibc-hooks/ibc_middleware_test.go | 24 ++++++++++--- x/concentrated-liquidity/lp_test.go | 22 +++++++----- x/concentrated-liquidity/pool_test.go | 10 ++++-- x/gamm/keeper/swap_test.go | 29 ++++++++++++---- x/ibc-rate-limit/types/params_test.go | 11 +++--- x/incentives/keeper/suite_test.go | 2 +- x/mint/keeper/keeper_test.go | 4 ++- x/poolmanager/client/cli/cli_test.go | 8 ++++- x/protorev/keeper/protorev_test.go | 4 +-- x/protorev/types/gov_test.go | 4 ++- x/twap/api_test.go | 16 ++++----- 14 files changed, 133 insertions(+), 54 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index ba9195a2e10..e3ee82d3db0 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,5 +1,5 @@ run: - tests: false + tests: true timeout: 5m linters: diff --git a/app/upgrades/v15/upgrade_test.go b/app/upgrades/v15/upgrade_test.go index bd0370796c9..8387a8b5de6 100644 --- a/app/upgrades/v15/upgrade_test.go +++ b/app/upgrades/v15/upgrade_test.go @@ -178,7 +178,7 @@ func (suite *UpgradeTestSuite) TestRegisterOsmoIonMetadata() { bankKeeper := suite.App.BankKeeper // meta data should not be found pre-registration of meta data - uosmoMetadata, found := suite.App.BankKeeper.GetDenomMetaData(ctx, "uosmo") + _, found := suite.App.BankKeeper.GetDenomMetaData(ctx, "uosmo") suite.Require().False(found) uionMetadata, found := suite.App.BankKeeper.GetDenomMetaData(ctx, "uion") @@ -187,7 +187,7 @@ func (suite *UpgradeTestSuite) TestRegisterOsmoIonMetadata() { // system under test. v15.RegisterOsmoIonMetadata(ctx, *bankKeeper) - uosmoMetadata, found = suite.App.BankKeeper.GetDenomMetaData(ctx, "uosmo") + uosmoMetadata, found := suite.App.BankKeeper.GetDenomMetaData(ctx, "uosmo") suite.Require().True(found) uionMetadata, found = suite.App.BankKeeper.GetDenomMetaData(ctx, "uion") diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index d746e39d6ed..d19630a3d9d 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -192,11 +192,11 @@ func (s *IntegrationTestSuite) TestConcentratedLiquidity() { s.Require().NoError(err) var ( - denom0 string = "uion" - denom1 string = "uosmo" - tickSpacing uint64 = 100 - swapFee = "0.001" // 0.1% - swapFeeDec sdk.Dec = sdk.MustNewDecFromStr("0.001") + denom0 = "uion" + denom1 = "uosmo" + tickSpacing uint64 = 100 + swapFee = "0.001" // 0.1% + swapFeeDec = sdk.MustNewDecFromStr("0.001") ) // Get the permisionless pool creation parameter. @@ -1056,12 +1056,34 @@ func (s *IntegrationTestSuite) TestIBCWasmHooks() { var response map[string]interface{} s.Require().Eventually(func() bool { response, err = nodeA.QueryWasmSmartObject(contractAddr, fmt.Sprintf(`{"get_total_funds": {"addr": "%s"}}`, senderBech32)) - totalFunds := response["total_funds"].([]interface{})[0] - amount := totalFunds.(map[string]interface{})["amount"].(string) - denom := totalFunds.(map[string]interface{})["denom"].(string) + if err != nil { + return false + } + + totalFundsIface, ok := response["total_funds"].([]interface{}) + if !ok || len(totalFundsIface) == 0 { + return false + } + + totalFunds, ok := totalFundsIface[0].(map[string]interface{}) + if !ok { + return false + } + + amount, ok := totalFunds["amount"].(string) + if !ok { + return false + } + + denom, ok := totalFunds["denom"].(string) + if !ok { + return false + } + // check if denom contains "uosmo" - return err == nil && amount == strconv.FormatInt(transferAmount, 10) && strings.Contains(denom, "ibc") + return amount == strconv.FormatInt(transferAmount, 10) && strings.Contains(denom, "ibc") }, + 15*time.Second, 10*time.Millisecond, ) @@ -1108,8 +1130,11 @@ func (s *IntegrationTestSuite) TestPacketForwarding() { if err != nil { return false } - count := response["count"].(float64) - return err == nil && count == 0 + countValue, ok := response["count"].(float64) + if !ok { + return false + } + return err == nil && countValue == 0 }, 15*time.Second, 10*time.Millisecond, diff --git a/tests/ibc-hooks/ibc_middleware_test.go b/tests/ibc-hooks/ibc_middleware_test.go index 69affe29b97..2842f9b343d 100644 --- a/tests/ibc-hooks/ibc_middleware_test.go +++ b/tests/ibc-hooks/ibc_middleware_test.go @@ -1049,11 +1049,25 @@ func (suite *HooksTestSuite) TestCrosschainSwaps() { var responseJson map[string]interface{} err = json.Unmarshal(res, &responseJson) suite.Require().NoError(err) - suite.Require().Len(responseJson["sent_amount"].(string), 3) // Not using exact amount in case calculations change - suite.Require().Equal(responseJson["denom"].(string), "token1") - suite.Require().Equal(responseJson["channel_id"].(string), "channel-0") - suite.Require().Equal(responseJson["receiver"].(string), suite.chainB.SenderAccount.GetAddress().String()) - suite.Require().Equal(responseJson["packet_sequence"].(float64), 1.0) + sentAmount, ok := responseJson["sent_amount"].(string) + suite.Require().True(ok) + suite.Require().Len(sentAmount, 3) // Not using exact amount in case calculations change + + denom, ok := responseJson["denom"].(string) + suite.Require().True(ok) + suite.Require().Equal(denom, "token1") + + channelID, ok := responseJson["channel_id"].(string) + suite.Require().True(ok) + suite.Require().Equal(channelID, "channel-0") + + receiver, ok := responseJson["receiver"].(string) + suite.Require().True(ok) + suite.Require().Equal(receiver, suite.chainB.SenderAccount.GetAddress().String()) + + packetSequence, ok := responseJson["packet_sequence"].(float64) + suite.Require().True(ok) + suite.Require().Equal(packetSequence, 1.0) balanceSender2 := osmosisApp.BankKeeper.GetBalance(suite.chainA.GetContext(), owner, "token0") suite.Require().Equal(int64(1000), balanceSender.Amount.Sub(balanceSender2.Amount).Int64()) diff --git a/x/concentrated-liquidity/lp_test.go b/x/concentrated-liquidity/lp_test.go index 442e06dae95..4a73de79bd1 100644 --- a/x/concentrated-liquidity/lp_test.go +++ b/x/concentrated-liquidity/lp_test.go @@ -1137,7 +1137,10 @@ func (s *KeeperTestSuite) TestSendCoinsBetweenPoolAndUser() { // store pool interface poolI, err := s.App.ConcentratedLiquidityKeeper.GetPoolById(s.Ctx, 1) s.Require().NoError(err) - concentratedPool := poolI.(types.ConcentratedPoolExtension) + concentratedPool, ok := poolI.(types.ConcentratedPoolExtension) + if !ok { + s.FailNow("poolI is not a ConcentratedPoolExtension") + } // fund pool address and user address s.FundAcc(poolI.GetAddress(), sdk.NewCoins(sdk.NewCoin("eth", sdk.NewInt(10000000000000)), sdk.NewCoin("usdc", sdk.NewInt(1000000000000)))) @@ -1363,7 +1366,10 @@ func (s *KeeperTestSuite) TestUpdatePosition() { // validate if pool liquidity has been updated properly poolI, err := s.App.ConcentratedLiquidityKeeper.GetPoolById(s.Ctx, tc.poolId) s.Require().NoError(err) - concentratedPool := poolI.(types.ConcentratedPoolExtension) + concentratedPool, ok := poolI.(types.ConcentratedPoolExtension) + if !ok { + s.FailNow("poolI is not a ConcentratedPoolExtension") + } s.Require().Equal(tc.expectedPoolLiquidity, concentratedPool.GetLiquidity()) } }) @@ -1371,13 +1377,11 @@ func (s *KeeperTestSuite) TestUpdatePosition() { } func (s *KeeperTestSuite) TestInitializeInitialPositionForPool() { - var ( - sqrt = func(x int64) sdk.Dec { - sqrt, err := sdk.NewDec(x).ApproxSqrt() - s.Require().NoError(err) - return sqrt - } - ) + sqrt := func(x int64) sdk.Dec { + sqrt, err := sdk.NewDec(x).ApproxSqrt() + s.Require().NoError(err) + return sqrt + } type sendTest struct { amount0Desired sdk.Int diff --git a/x/concentrated-liquidity/pool_test.go b/x/concentrated-liquidity/pool_test.go index 22a1ad4030d..fb5f6962419 100644 --- a/x/concentrated-liquidity/pool_test.go +++ b/x/concentrated-liquidity/pool_test.go @@ -15,7 +15,10 @@ import ( func (s *KeeperTestSuite) TestInitializePool() { // Create a valid PoolI from a valid ConcentratedPoolExtension validConcentratedPool := s.PrepareConcentratedPool() - validPoolI := validConcentratedPool.(poolmanagertypes.PoolI) + validPoolI, ok := validConcentratedPool.(poolmanagertypes.PoolI) + if !ok { + s.FailNow("validConcentratedPool is not a PoolI") + } // Create a concentrated liquidity pool with unauthorized tick spacing invalidTickSpacing := uint64(25) @@ -209,7 +212,10 @@ func (s *KeeperTestSuite) TestPoolIToConcentratedPool() { // Create default CL pool concentratedPool := s.PrepareConcentratedPool() - poolI := concentratedPool.(poolmanagertypes.PoolI) + poolI, ok := concentratedPool.(poolmanagertypes.PoolI) + if !ok { + s.Fail("failed to cast pool to PoolI") + } // Ensure no error occurs when converting to ConcentratedPool _, err := cl.ConvertPoolInterfaceToConcentrated(poolI) diff --git a/x/gamm/keeper/swap_test.go b/x/gamm/keeper/swap_test.go index 888afceddac..6ea46d3f46f 100644 --- a/x/gamm/keeper/swap_test.go +++ b/x/gamm/keeper/swap_test.go @@ -210,20 +210,26 @@ func (suite *KeeperTestSuite) TestCalcOutAmtGivenIn() { suite.SetupTest() keeper := suite.App.GAMMKeeper ctx := suite.Ctx - var pool poolmanagertypes.PoolI if test.param.poolType == "balancer" { poolId := suite.PrepareBalancerPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - pool = poolExt.(poolmanagertypes.PoolI) + poolI, ok := poolExt.(poolmanagertypes.PoolI) + if !ok { + suite.FailNow("failed to cast pool to poolI") + } + pool = poolI } else if test.param.poolType == "stableswap" { poolId := suite.PrepareBasicStableswapPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - pool = poolExt.(poolmanagertypes.PoolI) + poolI, ok := poolExt.(poolmanagertypes.PoolI) + if !ok { + suite.FailNow("failed to cast pool to poolI") + } + pool = poolI } - swapFee := pool.GetSwapFee(suite.Ctx) _, err := keeper.CalcOutAmtGivenIn(ctx, pool, test.param.tokenIn, test.param.tokenOutDenom, swapFee) @@ -283,12 +289,23 @@ func (suite *KeeperTestSuite) TestCalcInAmtGivenOut() { poolId := suite.PrepareBalancerPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - pool = poolExt.(poolmanagertypes.PoolI) + poolI, ok := poolExt.(poolmanagertypes.PoolI) + if !ok { + suite.FailNow("failed to cast pool to poolI") + } + + pool = poolI + } else if test.param.poolType == "stableswap" { poolId := suite.PrepareBasicStableswapPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - pool = poolExt.(poolmanagertypes.PoolI) + poolI, ok := poolExt.(poolmanagertypes.PoolI) + if !ok { + suite.FailNow("failed to cast pool to poolI") + } + + pool = poolI } swapFee := pool.GetSwapFee(suite.Ctx) diff --git a/x/ibc-rate-limit/types/params_test.go b/x/ibc-rate-limit/types/params_test.go index 657c6422bd7..f37e4d88674 100644 --- a/x/ibc-rate-limit/types/params_test.go +++ b/x/ibc-rate-limit/types/params_test.go @@ -59,18 +59,21 @@ func TestValidateParams(t *testing.T) { for name, tc := range testCases { t.Run(name, func(t *testing.T) { + addr, ok := tc.addr.(string) + require.True(t, ok, "unexpected type of address") + params := Params{ - ContractAddress: tc.addr.(string), + ContractAddress: addr, } + err := params.Validate() // Assertions. if !tc.expected { require.Error(t, err) - return + } else { + require.NoError(t, err) } - - require.NoError(t, err) }) } } diff --git a/x/incentives/keeper/suite_test.go b/x/incentives/keeper/suite_test.go index 621acde6797..8c993f99bf4 100644 --- a/x/incentives/keeper/suite_test.go +++ b/x/incentives/keeper/suite_test.go @@ -1,8 +1,8 @@ package keeper_test import ( + "crypto/rand" "fmt" - "math/rand" "time" "github.com/osmosis-labs/osmosis/v15/x/incentives/types" diff --git a/x/mint/keeper/keeper_test.go b/x/mint/keeper/keeper_test.go index f87f762c414..3b8a48606f0 100644 --- a/x/mint/keeper/keeper_test.go +++ b/x/mint/keeper/keeper_test.go @@ -236,7 +236,9 @@ func (suite *KeeperTestSuite) TestDistributeMintedCoin() { suite.Require().NoError(err) // validate that AfterDistributeMintedCoin hook was called once. - suite.Require().Equal(1, mintKeeper.GetMintHooksUnsafe().(*mintHooksMock).hookCallCount) + hooks, ok := mintKeeper.GetMintHooksUnsafe().(*mintHooksMock) + suite.Require().True(ok, "unexpected type of mint hooks") + suite.Require().Equal(1, hooks.hookCallCount) // validate distributions to fee collector. feeCollectorBalanceAmount := bankKeeper.GetBalance(ctx, accountKeeper.GetModuleAddress(authtypes.FeeCollectorName), sdk.DefaultBondDenom).Amount.ToDec() diff --git a/x/poolmanager/client/cli/cli_test.go b/x/poolmanager/client/cli/cli_test.go index c4e93a3f0d2..522722f07a3 100644 --- a/x/poolmanager/client/cli/cli_test.go +++ b/x/poolmanager/client/cli/cli_test.go @@ -530,7 +530,13 @@ func (s *IntegrationTestSuite) TestNewCreatePoolCmd() { err = clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType) s.Require().NoError(err, out.String()) - txResp := tc.respType.(*sdk.TxResponse) + var txResp *sdk.TxResponse + switch resp := tc.respType.(type) { + case *sdk.TxResponse: + txResp = resp + default: + s.T().Fatalf("unexpected response type: %T", tc.respType) + } s.Require().Equal(tc.expectedCode, txResp.Code, out.String()) } }) diff --git a/x/protorev/keeper/protorev_test.go b/x/protorev/keeper/protorev_test.go index 37826692cc4..2328b4e4b6f 100644 --- a/x/protorev/keeper/protorev_test.go +++ b/x/protorev/keeper/protorev_test.go @@ -102,9 +102,9 @@ func (suite *KeeperTestSuite) TestGetPoolForDenomPair() { // Should be able to delete all pools for a base denom suite.App.ProtoRevKeeper.DeleteAllPoolsForBaseDenom(suite.Ctx, "Atom") - pool, err = suite.App.ProtoRevKeeper.GetPoolForDenomPair(suite.Ctx, "Atom", types.OsmosisDenomination) + _, err = suite.App.ProtoRevKeeper.GetPoolForDenomPair(suite.Ctx, "Atom", types.OsmosisDenomination) suite.Require().Error(err) - pool, err = suite.App.ProtoRevKeeper.GetPoolForDenomPair(suite.Ctx, "Atom", "weth") + _, err = suite.App.ProtoRevKeeper.GetPoolForDenomPair(suite.Ctx, "Atom", "weth") suite.Require().Error(err) // Other denoms should still exist diff --git a/x/protorev/types/gov_test.go b/x/protorev/types/gov_test.go index d518f2cf2fa..22727b3380b 100644 --- a/x/protorev/types/gov_test.go +++ b/x/protorev/types/gov_test.go @@ -39,7 +39,9 @@ func (suite *GovTestSuite) TestEnableProposal() { for _, tc := range testCases { proposal := types.NewSetProtoRevEnabledProposal("title", "description", tc.enabled) - suite.Require().Equal(tc.enabled, proposal.(*types.SetProtoRevEnabledProposal).Enabled) + setProtoRevEnabledProposal, ok := proposal.(*types.SetProtoRevEnabledProposal) + suite.Require().True(ok, "proposal is not a SetProtoRevEnabledProposal") + suite.Require().Equal(tc.enabled, setProtoRevEnabledProposal.Enabled) } } diff --git a/x/twap/api_test.go b/x/twap/api_test.go index e93bade2b3e..c82d0d46f6b 100644 --- a/x/twap/api_test.go +++ b/x/twap/api_test.go @@ -81,7 +81,7 @@ var ( sdk.ZeroDec(), // TODO: choose correct ) - spotPriceError = errors.New("twap: error in pool spot price occurred between start and end time, twap result may be faulty") + errSpotPrice = errors.New("twap: error in pool spot price occurred between start and end time, twap result may be faulty") ) func (s *TestSuite) TestGetBeginBlockAccumulatorRecord() { @@ -311,7 +311,7 @@ func (s *TestSuite) TestGetArithmeticTwap() { ctxTime: tPlusOneMin, input: makeSimpleTwapInput(baseTime, tPlusOneMin, baseQuoteBA), expTwap: sdk.NewDec(10), - expectError: spotPriceError, + expectError: errSpotPrice, expectSpErr: baseTime, }, "spot price error in record at record time (start time > record time)": { @@ -319,7 +319,7 @@ func (s *TestSuite) TestGetArithmeticTwap() { ctxTime: tPlusOneMin, input: makeSimpleTwapInput(tPlusOne, tPlusOneMin, baseQuoteBA), expTwap: sdk.NewDec(10), - expectError: spotPriceError, + expectError: errSpotPrice, expectSpErr: baseTime, }, "spot price error in record after record time": { @@ -327,7 +327,7 @@ func (s *TestSuite) TestGetArithmeticTwap() { ctxTime: tPlusOneMin, input: makeSimpleTwapInput(baseTime, tPlusOneMin, baseQuoteBA), expTwap: sdk.NewDec(10), - expectError: spotPriceError, + expectError: errSpotPrice, expectSpErr: baseTime, }, // should error, since start time may have been used to interpolate this value @@ -336,7 +336,7 @@ func (s *TestSuite) TestGetArithmeticTwap() { ctxTime: tPlusOneMin, input: makeSimpleTwapInput(baseTime, tPlusOne, baseQuoteBA), expTwap: sdk.NewDec(10), - expectError: spotPriceError, + expectError: errSpotPrice, expectSpErr: baseTime, }, "spot price error exactly at end time": { @@ -344,7 +344,7 @@ func (s *TestSuite) TestGetArithmeticTwap() { ctxTime: tPlusOneMin, input: makeSimpleTwapInput(baseTime, tPlusOne, baseQuoteBA), expTwap: sdk.NewDec(10), - expectError: spotPriceError, + expectError: errSpotPrice, expectSpErr: baseTime, }, // should not happen, but if it did would error @@ -353,7 +353,7 @@ func (s *TestSuite) TestGetArithmeticTwap() { ctxTime: tPlusOneMin, input: makeSimpleTwapInput(baseTime, tPlusOne, baseQuoteBA), expTwap: sdk.NewDec(10), - expectError: spotPriceError, + expectError: errSpotPrice, expectSpErr: baseTime, }, } @@ -754,7 +754,7 @@ func (s *TestSuite) TestGetArithmeticTwapToNow() { ctxTime: tPlusOneMin, input: makeSimpleTwapInput(tPlusOne, tPlusOneMin, baseQuoteBA), expTwap: sdk.NewDec(10), - expectedError: spotPriceError, + expectedError: errSpotPrice, }, } for name, test := range tests { From b70f80a38a320868580f45aca6d325718612445a Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 8 May 2023 06:00:07 +0700 Subject: [PATCH 02/11] revert change to linter config --- .golangci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index e3ee82d3db0..ba9195a2e10 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,5 +1,5 @@ run: - tests: true + tests: false timeout: 5m linters: From b2d1fab6af77dde5f9f24d9081871e6a44eeb81f Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 8 May 2023 10:51:44 +0000 Subject: [PATCH 03/11] Update tests/e2e/e2e_test.go Co-authored-by: Ruslan Akhtariev <46343690+pysel@users.noreply.github.com> --- tests/e2e/e2e_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index d19630a3d9d..d397dd20978 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -1134,7 +1134,7 @@ func (s *IntegrationTestSuite) TestPacketForwarding() { if !ok { return false } - return err == nil && countValue == 0 + return countValue == 0 }, 15*time.Second, 10*time.Millisecond, From 85c7ecb67964d95ab7e861a1267323d9c4ece696 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 8 May 2023 10:51:52 +0000 Subject: [PATCH 04/11] Update x/concentrated-liquidity/pool_test.go Co-authored-by: Ruslan Akhtariev <46343690+pysel@users.noreply.github.com> --- x/concentrated-liquidity/pool_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/concentrated-liquidity/pool_test.go b/x/concentrated-liquidity/pool_test.go index fb5f6962419..ed23d48e504 100644 --- a/x/concentrated-liquidity/pool_test.go +++ b/x/concentrated-liquidity/pool_test.go @@ -214,7 +214,7 @@ func (s *KeeperTestSuite) TestPoolIToConcentratedPool() { concentratedPool := s.PrepareConcentratedPool() poolI, ok := concentratedPool.(poolmanagertypes.PoolI) if !ok { - s.Fail("failed to cast pool to PoolI") + s.FailNow("failed to cast pool to PoolI") } // Ensure no error occurs when converting to ConcentratedPool From 8e573d71aca00262451fbcb2eb8121e57a7f5f08 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 8 May 2023 10:59:19 +0000 Subject: [PATCH 05/11] skip pool = poolI --- x/gamm/keeper/swap_test.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/x/gamm/keeper/swap_test.go b/x/gamm/keeper/swap_test.go index 6ea46d3f46f..9e4f70ff948 100644 --- a/x/gamm/keeper/swap_test.go +++ b/x/gamm/keeper/swap_test.go @@ -215,20 +215,20 @@ func (suite *KeeperTestSuite) TestCalcOutAmtGivenIn() { poolId := suite.PrepareBalancerPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - poolI, ok := poolExt.(poolmanagertypes.PoolI) + pool, ok := poolExt.(poolmanagertypes.PoolI) if !ok { suite.FailNow("failed to cast pool to poolI") } - pool = poolI + } else if test.param.poolType == "stableswap" { poolId := suite.PrepareBasicStableswapPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - poolI, ok := poolExt.(poolmanagertypes.PoolI) + pool, ok := poolExt.(poolmanagertypes.PoolI) if !ok { suite.FailNow("failed to cast pool to poolI") } - pool = poolI + } swapFee := pool.GetSwapFee(suite.Ctx) @@ -289,23 +289,21 @@ func (suite *KeeperTestSuite) TestCalcInAmtGivenOut() { poolId := suite.PrepareBalancerPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - poolI, ok := poolExt.(poolmanagertypes.PoolI) + pool, ok := poolExt.(poolmanagertypes.PoolI) if !ok { suite.FailNow("failed to cast pool to poolI") } - pool = poolI } else if test.param.poolType == "stableswap" { poolId := suite.PrepareBasicStableswapPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - poolI, ok := poolExt.(poolmanagertypes.PoolI) + pool, ok := poolExt.(poolmanagertypes.PoolI) if !ok { suite.FailNow("failed to cast pool to poolI") } - pool = poolI } swapFee := pool.GetSwapFee(suite.Ctx) From eb9cc688cc1fe8ca497e981b70bd9d58266090a5 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 8 May 2023 11:15:06 +0000 Subject: [PATCH 06/11] update swap_test.go to test that cl type assertions fail --- x/gamm/keeper/swap_test.go | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/x/gamm/keeper/swap_test.go b/x/gamm/keeper/swap_test.go index 9e4f70ff948..37af8446994 100644 --- a/x/gamm/keeper/swap_test.go +++ b/x/gamm/keeper/swap_test.go @@ -193,6 +193,24 @@ func (suite *KeeperTestSuite) TestCalcOutAmtGivenIn() { }, expectPass: true, }, + { + name: "balancer fail", + param: param{ + poolType: "balancer", + tokenIn: sdk.NewCoin("foo", sdk.NewInt(0)), + tokenOutDenom: "bar", + }, + expectPass: false, + }, + { + name: "cl", + param: param{ + poolType: "cl", + tokenIn: sdk.NewCoin("foo", sdk.NewInt(100000)), + tokenOutDenom: "bar", + }, + expectPass: false, + }, { name: "stableswap", param: param{ @@ -215,7 +233,7 @@ func (suite *KeeperTestSuite) TestCalcOutAmtGivenIn() { poolId := suite.PrepareBalancerPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - pool, ok := poolExt.(poolmanagertypes.PoolI) + _, ok := poolExt.(poolmanagertypes.PoolI) if !ok { suite.FailNow("failed to cast pool to poolI") } @@ -224,11 +242,10 @@ func (suite *KeeperTestSuite) TestCalcOutAmtGivenIn() { poolId := suite.PrepareBasicStableswapPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - pool, ok := poolExt.(poolmanagertypes.PoolI) + _, ok := poolExt.(poolmanagertypes.PoolI) if !ok { suite.FailNow("failed to cast pool to poolI") } - } swapFee := pool.GetSwapFee(suite.Ctx) @@ -289,21 +306,23 @@ func (suite *KeeperTestSuite) TestCalcInAmtGivenOut() { poolId := suite.PrepareBalancerPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - pool, ok := poolExt.(poolmanagertypes.PoolI) + poolI, ok := poolExt.(poolmanagertypes.PoolI) if !ok { suite.FailNow("failed to cast pool to poolI") } + pool = poolI } else if test.param.poolType == "stableswap" { poolId := suite.PrepareBasicStableswapPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - pool, ok := poolExt.(poolmanagertypes.PoolI) + poolI, ok := poolExt.(poolmanagertypes.PoolI) if !ok { suite.FailNow("failed to cast pool to poolI") } + pool = poolI } swapFee := pool.GetSwapFee(suite.Ctx) From 56c615287e4cec7f77edefd786060fa92449ca69 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 8 May 2023 11:26:09 +0000 Subject: [PATCH 07/11] trial --- x/gamm/keeper/swap_test.go | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/x/gamm/keeper/swap_test.go b/x/gamm/keeper/swap_test.go index 37af8446994..1dab3b040ed 100644 --- a/x/gamm/keeper/swap_test.go +++ b/x/gamm/keeper/swap_test.go @@ -260,8 +260,6 @@ func (suite *KeeperTestSuite) TestCalcOutAmtGivenIn() { } } -// TestCalcInAmtGivenOut only tests that balancer and stableswap pools are type casted correctly while concentratedliquidity pools fail -// TODO: add failing CL pool tests. func (suite *KeeperTestSuite) TestCalcInAmtGivenOut() { type param struct { poolType string @@ -296,38 +294,39 @@ func (suite *KeeperTestSuite) TestCalcInAmtGivenOut() { for _, test := range tests { suite.Run(test.name, func() { - // Init suite for each test. suite.SetupTest() keeper := suite.App.GAMMKeeper ctx := suite.Ctx var pool poolmanagertypes.PoolI - if test.param.poolType == "balancer" { + var err error + + switch test.param.poolType { + case "balancer": poolId := suite.PrepareBalancerPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - poolI, ok := poolExt.(poolmanagertypes.PoolI) - if !ok { - suite.FailNow("failed to cast pool to poolI") - } - - pool = poolI - - } else if test.param.poolType == "stableswap" { + pool, _ = poolExt.(poolmanagertypes.PoolI) + case "stableswap": poolId := suite.PrepareBasicStableswapPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - poolI, ok := poolExt.(poolmanagertypes.PoolI) - if !ok { - suite.FailNow("failed to cast pool to poolI") - } + pool, _ = poolExt.(poolmanagertypes.PoolI) + case "concentrated-liquidity": + poolExt := suite.PrepareConcentratedPool() + suite.NoError(err) + pool, _ = poolExt.(poolmanagertypes.PoolI) + default: + suite.FailNow("unsupported pool type") + } - pool = poolI + if pool == nil { + suite.FailNow("failed to cast pool to poolI") } swapFee := pool.GetSwapFee(suite.Ctx) - _, err := keeper.CalcInAmtGivenOut(ctx, pool, test.param.tokenOut, test.param.tokenInDenom, swapFee) + _, err = keeper.CalcInAmtGivenOut(ctx, pool, test.param.tokenOut, test.param.tokenInDenom, swapFee) if test.expectPass { suite.Require().NoError(err) From daa610e0cecdbef4ee0f002c809cc3322eaedab5 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Mon, 8 May 2023 11:48:20 +0000 Subject: [PATCH 08/11] we needed pool because it's used to CalcInGivenOut --- x/gamm/keeper/swap_test.go | 35 ++++------------------------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/x/gamm/keeper/swap_test.go b/x/gamm/keeper/swap_test.go index 1dab3b040ed..e30cf564430 100644 --- a/x/gamm/keeper/swap_test.go +++ b/x/gamm/keeper/swap_test.go @@ -193,24 +193,6 @@ func (suite *KeeperTestSuite) TestCalcOutAmtGivenIn() { }, expectPass: true, }, - { - name: "balancer fail", - param: param{ - poolType: "balancer", - tokenIn: sdk.NewCoin("foo", sdk.NewInt(0)), - tokenOutDenom: "bar", - }, - expectPass: false, - }, - { - name: "cl", - param: param{ - poolType: "cl", - tokenIn: sdk.NewCoin("foo", sdk.NewInt(100000)), - tokenOutDenom: "bar", - }, - expectPass: false, - }, { name: "stableswap", param: param{ @@ -228,25 +210,20 @@ func (suite *KeeperTestSuite) TestCalcOutAmtGivenIn() { suite.SetupTest() keeper := suite.App.GAMMKeeper ctx := suite.Ctx + var pool poolmanagertypes.PoolI if test.param.poolType == "balancer" { poolId := suite.PrepareBalancerPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - _, ok := poolExt.(poolmanagertypes.PoolI) - if !ok { - suite.FailNow("failed to cast pool to poolI") - } - + pool = poolExt.(poolmanagertypes.PoolI) } else if test.param.poolType == "stableswap" { poolId := suite.PrepareBasicStableswapPool() poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) - _, ok := poolExt.(poolmanagertypes.PoolI) - if !ok { - suite.FailNow("failed to cast pool to poolI") - } + pool = poolExt.(poolmanagertypes.PoolI) } + swapFee := pool.GetSwapFee(suite.Ctx) _, err := keeper.CalcOutAmtGivenIn(ctx, pool, test.param.tokenIn, test.param.tokenOutDenom, swapFee) @@ -312,10 +289,6 @@ func (suite *KeeperTestSuite) TestCalcInAmtGivenOut() { poolExt, err := suite.App.GAMMKeeper.GetPool(suite.Ctx, poolId) suite.NoError(err) pool, _ = poolExt.(poolmanagertypes.PoolI) - case "concentrated-liquidity": - poolExt := suite.PrepareConcentratedPool() - suite.NoError(err) - pool, _ = poolExt.(poolmanagertypes.PoolI) default: suite.FailNow("unsupported pool type") } From 9d2ee5aca9bdf0870836530527d7c9895a323274 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Tue, 9 May 2023 16:05:46 +0700 Subject: [PATCH 09/11] Update x/concentrated-liquidity/pool_test.go Co-authored-by: Roman --- x/concentrated-liquidity/pool_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/x/concentrated-liquidity/pool_test.go b/x/concentrated-liquidity/pool_test.go index ed23d48e504..def3e08b21c 100644 --- a/x/concentrated-liquidity/pool_test.go +++ b/x/concentrated-liquidity/pool_test.go @@ -16,9 +16,7 @@ func (s *KeeperTestSuite) TestInitializePool() { // Create a valid PoolI from a valid ConcentratedPoolExtension validConcentratedPool := s.PrepareConcentratedPool() validPoolI, ok := validConcentratedPool.(poolmanagertypes.PoolI) - if !ok { - s.FailNow("validConcentratedPool is not a PoolI") - } + s.Require().True(ok) // Create a concentrated liquidity pool with unauthorized tick spacing invalidTickSpacing := uint64(25) From bc461ab0f09362c1456aa0867be8a7acb55d02c8 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Tue, 9 May 2023 16:05:54 +0700 Subject: [PATCH 10/11] Update x/concentrated-liquidity/pool_test.go Co-authored-by: Roman --- x/concentrated-liquidity/pool_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/x/concentrated-liquidity/pool_test.go b/x/concentrated-liquidity/pool_test.go index def3e08b21c..9b70082d721 100644 --- a/x/concentrated-liquidity/pool_test.go +++ b/x/concentrated-liquidity/pool_test.go @@ -211,9 +211,7 @@ func (s *KeeperTestSuite) TestPoolIToConcentratedPool() { // Create default CL pool concentratedPool := s.PrepareConcentratedPool() poolI, ok := concentratedPool.(poolmanagertypes.PoolI) - if !ok { - s.FailNow("failed to cast pool to PoolI") - } + s.Require().True(ok) // Ensure no error occurs when converting to ConcentratedPool _, err := cl.ConvertPoolInterfaceToConcentrated(poolI) From cb22e58c7cf9a84cd81d68a65b219a0a33923955 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Tue, 9 May 2023 16:06:01 +0700 Subject: [PATCH 11/11] Update x/gamm/keeper/swap_test.go Co-authored-by: Roman --- x/gamm/keeper/swap_test.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/x/gamm/keeper/swap_test.go b/x/gamm/keeper/swap_test.go index e30cf564430..d0c77b669cc 100644 --- a/x/gamm/keeper/swap_test.go +++ b/x/gamm/keeper/swap_test.go @@ -293,9 +293,7 @@ func (suite *KeeperTestSuite) TestCalcInAmtGivenOut() { suite.FailNow("unsupported pool type") } - if pool == nil { - suite.FailNow("failed to cast pool to poolI") - } + suite.Require().NotNil(pool) swapFee := pool.GetSwapFee(suite.Ctx)