• antstalepresh's avatar
    Pool creation fee (#386) · b0c323c8
    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
    b0c323c8
cli_test.go 34.60 KiB
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, },