-
antstalepresh authored
* pool creation fee * resolve existing tests * Add test for balance change check and TODO for upgrade * add code to configure pool creation fee param * allow empty pool creation fee
package cli_test
import (
"fmt"
"testing"
"github.com/gogo/protobuf/proto"
"github.com/stretchr/testify/suite"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/crypto/hd"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
"github.com/cosmos/cosmos-sdk/testutil"
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
"github.com/cosmos/cosmos-sdk/testutil/network"
sdk "github.com/cosmos/cosmos-sdk/types"
banktestutil "github.com/cosmos/cosmos-sdk/x/bank/client/testutil"
"github.com/osmosis-labs/osmosis/app"
"github.com/osmosis-labs/osmosis/x/gamm/client/cli"
gammtestutil "github.com/osmosis-labs/osmosis/x/gamm/client/testutil"
"github.com/osmosis-labs/osmosis/x/gamm/types"
gammtypes "github.com/osmosis-labs/osmosis/x/gamm/types"
tmcli "github.com/tendermint/tendermint/libs/cli"
)
type IntegrationTestSuite struct {
suite.Suite
cfg network.Config
network *network.Network
}
func (s *IntegrationTestSuite) SetupSuite() {
s.T().Log("setting up integration test suite")
s.cfg = app.DefaultConfig()
encCfg := app.MakeEncodingConfig()
// modification to pay fee with test bond denom "stake"
genesisState := app.ModuleBasics.DefaultGenesis(encCfg.Marshaler)
gammGen := gammtypes.DefaultGenesis()
gammGen.Params.PoolCreationFee = sdk.Coins{sdk.NewInt64Coin(s.cfg.BondDenom, 1000000)}
gammGenJson := encCfg.Marshaler.MustMarshalJSON(gammGen)
genesisState[gammtypes.ModuleName] = gammGenJson
s.cfg.GenesisState = genesisState
s.network = network.New(s.T(), s.cfg)
_, err := s.network.WaitForHeight(1)
s.Require().NoError(err)
val := s.network.Validators[0]
// create a new pool
_, err = gammtestutil.MsgCreatePool(s.T(), val.ClientCtx, val.Address, "5stake,5node0token", "100stake,100node0token", "0.01", "0.01", "")
s.Require().NoError(err)
_, err = s.network.WaitForHeight(1)
s.Require().NoError(err)
}
func (s *IntegrationTestSuite) TearDownSuite() {
s.T().Log("tearing down integration test suite")
s.network.Cleanup()
}
func (s *IntegrationTestSuite) TestNewCreatePoolCmd() {
val := s.network.Validators[0]
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
info, _, err := val.ClientCtx.Keyring.NewMnemonic("NewCreatePoolAddr", keyring.English, sdk.FullFundraiserPath, hd.Secp256k1)
s.Require().NoError(err)
newAddr := sdk.AccAddress(info.GetPubKey().Address())
_, err = banktestutil.MsgSendExec(
val.ClientCtx,
val.Address,
newAddr,
sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 200000000), sdk.NewInt64Coin("node0token", 20000)), fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
)
s.Require().NoError(err)
testCases := []struct {
name string
json string
expectErr bool
respType proto.Message
expectedCode uint32
}{
{
"one token pair pool",
fmt.Sprintf(`
{
"%s": "1node0token",
"%s": "100node0token",
"%s": "0.001",
"%s": "0.001"
}
`, cli.PoolFileWeights, cli.PoolFileInitialDeposit, cli.PoolFileSwapFee, cli.PoolFileExitFee),
false, &sdk.TxResponse{}, 4,
},
{
"two tokens pair pool",
fmt.Sprintf(`
{
"%s": "1node0token,3stake",
"%s": "100node0token,100stake",
"%s": "0.001",
"%s": "0.001"
}
`, cli.PoolFileWeights, cli.PoolFileInitialDeposit, cli.PoolFileSwapFee, cli.PoolFileExitFee),
false, &sdk.TxResponse{}, 0,
},
{
"change order of json fields",
fmt.Sprintf(`
{
"%s": "100node0token,100stake",
"%s": "0.001",
"%s": "1node0token,3stake",
"%s": "0.001"
}
`, cli.PoolFileInitialDeposit, cli.PoolFileSwapFee, cli.PoolFileWeights, cli.PoolFileExitFee),
false, &sdk.TxResponse{}, 0,
},
{ // --record-tokens=100.0stake2 --record-tokens=100.0stake --record-tokens-weight=5 --record-tokens-weight=5 --swap-fee=0.01 --exit-fee=0.01 --from=validator --keyring-backend=test --chain-id=testing --yes
"three tokens pair pool - insufficient balance check",
fmt.Sprintf(`
{
"%s": "1node0token,1stake,2btc",
"%s": "100node0token,100stake,100btc",
"%s": "0.001",
"%s": "0.001"
}
`, cli.PoolFileWeights, cli.PoolFileInitialDeposit, cli.PoolFileSwapFee, cli.PoolFileExitFee),
false, &sdk.TxResponse{}, 5,
},