* Add params error types * Update param module keeper to take a codespace * Update imports * Implement SetRaw and SetRawWithSubkey * Implement ParamChange and update aliases * Add types codec * Implement ParameterChangeProposal * Implement TestParameterChangeProposal * Fix linting errors * Update tags * Implement content * Updata params aliases * Finish params handler and proposal types * Move deposit and vote logic to types package * Move proposal type to types package * Move errors to types package * Update proposal * Move gov messages to types package * Minor updates to naming * Move keys to types package * Move codec to types package * Move proposal types to types package * Update aliases * Add governance alias types * Implement governance router * Update gov aliases * Update gov keeper * Update private functions needed for the keeper * Update godocs * Update the gov message handler * Update Gaia app * Make updates to auth * Update the message codec in the keeper * Update gov end blocker * Update types tests * Minor tweaks * Add legacy genesis logic * Update gov aliases * Move gov keys to types package * Revertt to using gov/types in params * Implement params handler test * Update governance tests * Fix endblocker tests * Fix governance querier tests * Add seal support to gov router * Update simulationCreateMsgSubmitProposal * Disable software upgrade proposals * Move params keys to types package * Implement param module proposal client logic * Update gov client logic * Update gaia app client hooks * Fix linting errors * Fix ValidateBasic * Remove legacy files * Update paramchange to use strings * Update paramchange cli cmd * Update ValidateBasic and errors * Use PostCommands when adding child cmds * Fix codec logic * Update params client and handler * Update IsValidProposalType * Update SubmitProposal to test exec * Implement TestGaiaCLISubmitParamChangeProposal * Implement TestSubmitParamChangeProposal * Update swagger.yaml * Update gaiacli.md * Update gov spec docs * Fix linting errors * Fix unit tests * Add pending log entries * Update docs * Update docs * Update client/lcd/swagger-ui/swagger.yaml Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update docs/cosmos-hub/gaiacli.md Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update cmd/gaia/cli_test/test_helpers.go Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update client/lcd/test_helpers.go Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update docs/cosmos-hub/gaiacli.md Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update docs/cosmos-hub/gaiacli.md Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update docs/cosmos-hub/gaiacli.md Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update x/gov/types/proposal.go Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update docs/cosmos-hub/gaiacli.md Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update docs/cosmos-hub/gaiacli.md Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Address PR comments * Update docs/cosmos-hub/gaiacli.md Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update gov docs to include quorum notes * Add logs to handleParameterChangeProposal * Update docs/spec/governance/02_state.md Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Support and use new StatusFailed when proposal passes but fails exec * Add docs/notes warning on param validity * Update docs * Update docs/spec/governance/02_state.md Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Update docs/spec/governance/02_state.md Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Minor doc update * Update x/gov/client/cli/tx.go Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Fix usage of fromAddr * Rige code style suggestion * Update x/params/types/proposal.go Co-Authored-By: alexanderbez <alexanderbez@users.noreply.github.com> * Fix CI lint errors * Update NewModuleClient godoc * Add godoc to rtr.Seal() call * Rename files * Rename NewProposalHandler
100 lines
2.6 KiB
Go
100 lines
2.6 KiB
Go
package params_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
"github.com/tendermint/tendermint/libs/log"
|
|
|
|
dbm "github.com/tendermint/tendermint/libs/db"
|
|
|
|
"github.com/cosmos/cosmos-sdk/codec"
|
|
"github.com/cosmos/cosmos-sdk/store"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/cosmos/cosmos-sdk/x/params"
|
|
"github.com/cosmos/cosmos-sdk/x/params/subspace"
|
|
"github.com/cosmos/cosmos-sdk/x/params/types"
|
|
)
|
|
|
|
type testInput struct {
|
|
ctx sdk.Context
|
|
cdc *codec.Codec
|
|
keeper params.Keeper
|
|
}
|
|
|
|
var (
|
|
_ subspace.ParamSet = (*testParams)(nil)
|
|
|
|
keyMaxValidators = "MaxValidators"
|
|
testSubspace = "TestSubspace"
|
|
)
|
|
|
|
type testParams struct {
|
|
MaxValidators uint16 `json:"max_validators"` // maximum number of validators (max uint16 = 65535)
|
|
}
|
|
|
|
func (tp *testParams) ParamSetPairs() subspace.ParamSetPairs {
|
|
return subspace.ParamSetPairs{
|
|
{[]byte(keyMaxValidators), &tp.MaxValidators},
|
|
}
|
|
}
|
|
|
|
func testProposal(changes ...params.ParamChange) params.ParameterChangeProposal {
|
|
return params.NewParameterChangeProposal(
|
|
"Test",
|
|
"description",
|
|
changes,
|
|
)
|
|
}
|
|
|
|
func newTestInput(t *testing.T) testInput {
|
|
cdc := codec.New()
|
|
types.RegisterCodec(cdc)
|
|
|
|
db := dbm.NewMemDB()
|
|
cms := store.NewCommitMultiStore(db)
|
|
|
|
keyParams := sdk.NewKVStoreKey("params")
|
|
tKeyParams := sdk.NewTransientStoreKey("transient_params")
|
|
|
|
cms.MountStoreWithDB(keyParams, sdk.StoreTypeIAVL, db)
|
|
cms.MountStoreWithDB(tKeyParams, sdk.StoreTypeTransient, db)
|
|
|
|
err := cms.LoadLatestVersion()
|
|
require.Nil(t, err)
|
|
|
|
keeper := params.NewKeeper(cdc, keyParams, tKeyParams, params.DefaultCodespace)
|
|
ctx := sdk.NewContext(cms, abci.Header{}, false, log.NewNopLogger())
|
|
|
|
return testInput{ctx, cdc, keeper}
|
|
}
|
|
|
|
func TestProposalHandlerPassed(t *testing.T) {
|
|
input := newTestInput(t)
|
|
ss := input.keeper.Subspace(testSubspace).WithKeyTable(
|
|
params.NewKeyTable().RegisterParamSet(&testParams{}),
|
|
)
|
|
|
|
tp := testProposal(params.NewParamChange(testSubspace, keyMaxValidators, "", "1"))
|
|
hdlr := params.NewParamChangeProposalHandler(input.keeper)
|
|
require.NoError(t, hdlr(input.ctx, tp))
|
|
|
|
var param uint16
|
|
ss.Get(input.ctx, []byte(keyMaxValidators), ¶m)
|
|
require.Equal(t, param, uint16(1))
|
|
}
|
|
|
|
func TestProposalHandlerFailed(t *testing.T) {
|
|
input := newTestInput(t)
|
|
ss := input.keeper.Subspace(testSubspace).WithKeyTable(
|
|
params.NewKeyTable().RegisterParamSet(&testParams{}),
|
|
)
|
|
|
|
tp := testProposal(params.NewParamChange(testSubspace, keyMaxValidators, "", "invalidType"))
|
|
hdlr := params.NewParamChangeProposalHandler(input.keeper)
|
|
require.Error(t, hdlr(input.ctx, tp))
|
|
|
|
require.False(t, ss.Has(input.ctx, []byte(keyMaxValidators)))
|
|
}
|