147 lines
3.8 KiB
Go
147 lines
3.8 KiB
Go
package testutil
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/stretchr/testify/suite"
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
tmcli "github.com/tendermint/tendermint/libs/cli"
|
|
dbm "github.com/tendermint/tm-db"
|
|
|
|
"cosmossdk.io/depinject"
|
|
"github.com/cosmos/cosmos-sdk/baseapp"
|
|
pruningtypes "github.com/cosmos/cosmos-sdk/pruning/types"
|
|
"github.com/cosmos/cosmos-sdk/runtime"
|
|
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
|
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
|
|
"github.com/cosmos/cosmos-sdk/testutil/network"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
|
|
"github.com/cosmos/cosmos-sdk/x/params/client/cli"
|
|
"github.com/cosmos/cosmos-sdk/x/params/keeper"
|
|
"github.com/cosmos/cosmos-sdk/x/params/testutil"
|
|
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
|
)
|
|
|
|
// mySubspace is a x/params subspace created for the purpose of this
|
|
// test suite.
|
|
const (
|
|
mySubspace = "foo"
|
|
)
|
|
|
|
// myParams defines some params in the `mySubspace` subspace.
|
|
type myParams struct{}
|
|
|
|
func (p *myParams) ParamSetPairs() paramtypes.ParamSetPairs {
|
|
return paramtypes.ParamSetPairs{
|
|
paramtypes.NewParamSetPair([]byte("bar"), 1234, func(value interface{}) error { return nil }),
|
|
}
|
|
}
|
|
|
|
type IntegrationTestSuite struct {
|
|
suite.Suite
|
|
|
|
cfg network.Config
|
|
network *network.Network
|
|
}
|
|
|
|
func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite {
|
|
return &IntegrationTestSuite{cfg: cfg}
|
|
}
|
|
|
|
func (s *IntegrationTestSuite) SetupSuite() {
|
|
s.T().Log("setting up integration test suite")
|
|
|
|
// Create a new AppConstructor for this test suite, where we manually
|
|
// add a subspace and `myParams` to the x/params store.
|
|
s.cfg.AppConstructor = func(val moduletestutil.Validator) servertypes.Application {
|
|
var (
|
|
appBuilder *runtime.AppBuilder
|
|
paramsKeeper keeper.Keeper
|
|
)
|
|
if err := depinject.Inject(testutil.AppConfig, &appBuilder, ¶msKeeper); err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// Add this test's `myParams` to the x/params store.
|
|
paramSet := myParams{}
|
|
subspace := paramsKeeper.Subspace(mySubspace).WithKeyTable(paramtypes.NewKeyTable().RegisterParamSet(¶mSet))
|
|
|
|
app := appBuilder.Build(
|
|
val.GetCtx().Logger,
|
|
dbm.NewMemDB(),
|
|
nil,
|
|
baseapp.SetPruning(pruningtypes.NewPruningOptionsFromString(val.GetAppConfig().Pruning)),
|
|
baseapp.SetMinGasPrices(val.GetAppConfig().MinGasPrices),
|
|
)
|
|
|
|
s.Require().NoError(app.Load(false))
|
|
|
|
// Make sure not to forget to persist `myParams` into the actual store,
|
|
// this is done in InitChain.
|
|
app.SetInitChainer(func(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain {
|
|
subspace.SetParamSet(ctx, ¶mSet)
|
|
|
|
return app.InitChainer(ctx, req)
|
|
})
|
|
|
|
s.Require().NoError(app.LoadLatestVersion())
|
|
|
|
return app
|
|
}
|
|
|
|
var err error
|
|
s.network, err = network.New(s.T(), s.T().TempDir(), s.cfg)
|
|
s.Require().NoError(err)
|
|
|
|
s.Require().NoError(s.network.WaitForNextBlock())
|
|
}
|
|
|
|
func (s *IntegrationTestSuite) TearDownSuite() {
|
|
s.T().Log("tearing down integration test suite")
|
|
s.network.Cleanup()
|
|
}
|
|
|
|
func (s *IntegrationTestSuite) TestNewQuerySubspaceParamsCmd() {
|
|
val := s.network.Validators[0]
|
|
|
|
testCases := []struct {
|
|
name string
|
|
args []string
|
|
expectedOutput string
|
|
}{
|
|
{
|
|
"json output",
|
|
[]string{
|
|
"foo", "bar",
|
|
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
|
|
},
|
|
`{"subspace":"foo","key":"bar","value":"\"1234\""}`,
|
|
},
|
|
{
|
|
"text output",
|
|
[]string{
|
|
"foo", "bar",
|
|
fmt.Sprintf("--%s=text", tmcli.OutputFlag),
|
|
},
|
|
`key: bar
|
|
subspace: foo
|
|
value: '"1234"'`,
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
tc := tc
|
|
|
|
s.Run(tc.name, func() {
|
|
cmd := cli.NewQuerySubspaceParamsCmd()
|
|
clientCtx := val.ClientCtx
|
|
|
|
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
|
|
s.Require().NoError(err)
|
|
s.Require().Equal(tc.expectedOutput, strings.TrimSpace(out.String()))
|
|
})
|
|
}
|
|
}
|