Fix add-genesis-account in simd (#7069)
* Update genaccounts to use encoding/json * Fix add genesis accounts * Add test for genaccounts * Code cleanup
This commit is contained in:
parent
d2de7a0441
commit
24bc89183e
|
@ -2,6 +2,7 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
@ -140,7 +141,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa
|
||||||
}
|
}
|
||||||
authGenState.Accounts = genAccs
|
authGenState.Accounts = genAccs
|
||||||
|
|
||||||
authGenStateBz, err := cdc.MarshalJSON(authGenState)
|
authGenStateBz, err := cdc.MarshalJSON(&authGenState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to marshal auth genesis state: %w", err)
|
return fmt.Errorf("failed to marshal auth genesis state: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -158,7 +159,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa
|
||||||
|
|
||||||
appState[banktypes.ModuleName] = bankGenStateBz
|
appState[banktypes.ModuleName] = bankGenStateBz
|
||||||
|
|
||||||
appStateJSON, err := cdc.MarshalJSON(appState)
|
appStateJSON, err := json.Marshal(appState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to marshal application genesis state: %w", err)
|
return fmt.Errorf("failed to marshal application genesis state: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
package cmd_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
|
"github.com/cosmos/cosmos-sdk/simapp"
|
||||||
|
simcmd "github.com/cosmos/cosmos-sdk/simapp/simd/cmd"
|
||||||
|
"github.com/cosmos/cosmos-sdk/testutil"
|
||||||
|
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||||
|
"github.com/cosmos/cosmos-sdk/types/module"
|
||||||
|
"github.com/cosmos/cosmos-sdk/x/genutil"
|
||||||
|
genutiltest "github.com/cosmos/cosmos-sdk/x/genutil/client/testutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
var testMbm = module.NewBasicManager(genutil.AppModuleBasic{})
|
||||||
|
|
||||||
|
func TestAddGenesisAccountCmd(t *testing.T) {
|
||||||
|
_, _, addr1 := testdata.KeyTestPubAddr()
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
addr string
|
||||||
|
denom string
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "invalid address",
|
||||||
|
addr: "",
|
||||||
|
denom: "1000atom",
|
||||||
|
expectErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "valid address",
|
||||||
|
addr: addr1.String(),
|
||||||
|
denom: "1000atom",
|
||||||
|
expectErr: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "multiple denoms",
|
||||||
|
addr: addr1.String(),
|
||||||
|
denom: "1000atom, 2000stake",
|
||||||
|
expectErr: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range tests {
|
||||||
|
tc := tc
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
home, cleanup := testutil.NewTestCaseDir(t)
|
||||||
|
defer cleanup()
|
||||||
|
|
||||||
|
logger := log.NewNopLogger()
|
||||||
|
cfg, err := genutiltest.CreateDefaultTendermintConfig(home)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
appCodec, _ := simapp.MakeCodecs()
|
||||||
|
err = genutiltest.ExecInitCmd(testMbm, home, appCodec)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
serverCtx := server.NewContext(viper.New(), cfg, logger)
|
||||||
|
clientCtx := client.Context{}.WithJSONMarshaler(appCodec).WithHomeDir(home)
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx)
|
||||||
|
ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx)
|
||||||
|
|
||||||
|
cmd := simcmd.AddGenesisAccountCmd(home)
|
||||||
|
cmd.SetArgs([]string{
|
||||||
|
tc.addr,
|
||||||
|
tc.denom,
|
||||||
|
fmt.Sprintf("--%s=home", flags.FlagHome)})
|
||||||
|
|
||||||
|
if tc.expectErr {
|
||||||
|
require.Error(t, cmd.ExecuteContext(ctx))
|
||||||
|
} else {
|
||||||
|
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package cli
|
package cli_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
@ -17,6 +17,7 @@ import (
|
||||||
"github.com/cosmos/cosmos-sdk/testutil/network"
|
"github.com/cosmos/cosmos-sdk/testutil/network"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
|
"github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
||||||
"github.com/cosmos/cosmos-sdk/x/staking/types"
|
"github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@ func (s *IntegrationTestSuite) TestGenTxCmd() {
|
||||||
dir, clean := testutil.NewTestCaseDir(s.T())
|
dir, clean := testutil.NewTestCaseDir(s.T())
|
||||||
defer clean()
|
defer clean()
|
||||||
|
|
||||||
cmd := GenTxCmd(
|
cmd := cli.GenTxCmd(
|
||||||
simapp.ModuleBasics,
|
simapp.ModuleBasics,
|
||||||
val.ClientCtx.TxConfig, banktypes.GenesisBalancesIterator{}, val.ClientCtx.HomeDir)
|
val.ClientCtx.TxConfig, banktypes.GenesisBalancesIterator{}, val.ClientCtx.HomeDir)
|
||||||
|
|
||||||
|
@ -63,7 +64,7 @@ func (s *IntegrationTestSuite) TestGenTxCmd() {
|
||||||
|
|
||||||
genTxFile := filepath.Join(dir, "myTx")
|
genTxFile := filepath.Join(dir, "myTx")
|
||||||
cmd.SetArgs([]string{
|
cmd.SetArgs([]string{
|
||||||
fmt.Sprintf("--%s=%s", flagChainID, s.network.Config.ChainID),
|
fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
|
||||||
fmt.Sprintf("--%s=%s", flags.FlagOutputDocument, genTxFile),
|
fmt.Sprintf("--%s=%s", flags.FlagOutputDocument, genTxFile),
|
||||||
val.Moniker,
|
val.Moniker,
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package cli
|
package cli_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -12,7 +12,6 @@ import (
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
abci_server "github.com/tendermint/tendermint/abci/server"
|
abci_server "github.com/tendermint/tendermint/abci/server"
|
||||||
tmcfg "github.com/tendermint/tendermint/config"
|
|
||||||
"github.com/tendermint/tendermint/libs/cli"
|
"github.com/tendermint/tendermint/libs/cli"
|
||||||
"github.com/tendermint/tendermint/libs/log"
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
|
|
||||||
|
@ -25,22 +24,12 @@ import (
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/types/module"
|
"github.com/cosmos/cosmos-sdk/types/module"
|
||||||
"github.com/cosmos/cosmos-sdk/x/genutil"
|
"github.com/cosmos/cosmos-sdk/x/genutil"
|
||||||
|
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
||||||
|
genutiltest "github.com/cosmos/cosmos-sdk/x/genutil/client/testutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
var testMbm = module.NewBasicManager(genutil.AppModuleBasic{})
|
var testMbm = module.NewBasicManager(genutil.AppModuleBasic{})
|
||||||
|
|
||||||
func createDefaultTendermintConfig(rootDir string) (*tmcfg.Config, error) {
|
|
||||||
conf := tmcfg.DefaultConfig()
|
|
||||||
conf.SetRoot(rootDir)
|
|
||||||
tmcfg.EnsureRoot(rootDir)
|
|
||||||
|
|
||||||
if err := conf.ValidateBasic(); err != nil {
|
|
||||||
return nil, fmt.Errorf("error in config file: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return conf, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestInitCmd(t *testing.T) {
|
func TestInitCmd(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
@ -68,7 +57,7 @@ func TestInitCmd(t *testing.T) {
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
logger := log.NewNopLogger()
|
logger := log.NewNopLogger()
|
||||||
cfg, err := createDefaultTendermintConfig(home)
|
cfg, err := genutiltest.CreateDefaultTendermintConfig(home)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
serverCtx := server.NewContext(viper.New(), cfg, logger)
|
serverCtx := server.NewContext(viper.New(), cfg, logger)
|
||||||
|
@ -78,7 +67,7 @@ func TestInitCmd(t *testing.T) {
|
||||||
ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx)
|
ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx)
|
||||||
ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx)
|
ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx)
|
||||||
|
|
||||||
cmd := InitCmd(testMbm, home)
|
cmd := genutilcli.InitCmd(testMbm, home)
|
||||||
cmd.SetArgs(
|
cmd.SetArgs(
|
||||||
tt.flags(home),
|
tt.flags(home),
|
||||||
)
|
)
|
||||||
|
@ -106,7 +95,7 @@ func TestEmptyState(t *testing.T) {
|
||||||
t.Cleanup(cleanup)
|
t.Cleanup(cleanup)
|
||||||
|
|
||||||
logger := log.NewNopLogger()
|
logger := log.NewNopLogger()
|
||||||
cfg, err := createDefaultTendermintConfig(home)
|
cfg, err := genutiltest.CreateDefaultTendermintConfig(home)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
serverCtx := server.NewContext(viper.New(), cfg, logger)
|
serverCtx := server.NewContext(viper.New(), cfg, logger)
|
||||||
|
@ -116,7 +105,7 @@ func TestEmptyState(t *testing.T) {
|
||||||
ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx)
|
ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx)
|
||||||
ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx)
|
ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx)
|
||||||
|
|
||||||
cmd := InitCmd(testMbm, home)
|
cmd := genutilcli.InitCmd(testMbm, home)
|
||||||
cmd.SetArgs([]string{"appnode-test", fmt.Sprintf("--%s=%s", cli.HomeFlag, home)})
|
cmd.SetArgs([]string{"appnode-test", fmt.Sprintf("--%s=%s", cli.HomeFlag, home)})
|
||||||
|
|
||||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
require.NoError(t, cmd.ExecuteContext(ctx))
|
||||||
|
@ -153,21 +142,9 @@ func TestStartStandAlone(t *testing.T) {
|
||||||
t.Cleanup(setupClientHome(t))
|
t.Cleanup(setupClientHome(t))
|
||||||
|
|
||||||
logger := log.NewNopLogger()
|
logger := log.NewNopLogger()
|
||||||
cfg, err := createDefaultTendermintConfig(home)
|
err := genutiltest.ExecInitCmd(testMbm, home, makeCodec())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
serverCtx := server.NewContext(viper.New(), cfg, logger)
|
|
||||||
clientCtx := client.Context{}.WithJSONMarshaler(makeCodec()).WithHomeDir(home)
|
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx)
|
|
||||||
ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx)
|
|
||||||
|
|
||||||
cmd := InitCmd(testMbm, home)
|
|
||||||
cmd.SetArgs([]string{"appnode-test"})
|
|
||||||
|
|
||||||
require.NoError(t, cmd.ExecuteContext(ctx))
|
|
||||||
|
|
||||||
app, err := mock.NewApp(home, logger)
|
app, err := mock.NewApp(home, logger)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
@ -191,7 +168,7 @@ func TestStartStandAlone(t *testing.T) {
|
||||||
|
|
||||||
func TestInitNodeValidatorFiles(t *testing.T) {
|
func TestInitNodeValidatorFiles(t *testing.T) {
|
||||||
home, cleanup := testutil.NewTestCaseDir(t)
|
home, cleanup := testutil.NewTestCaseDir(t)
|
||||||
cfg, err := createDefaultTendermintConfig(home)
|
cfg, err := genutiltest.CreateDefaultTendermintConfig(home)
|
||||||
t.Cleanup(cleanup)
|
t.Cleanup(cleanup)
|
||||||
nodeID, valPubKey, err := genutil.InitializeNodeValidatorFiles(cfg)
|
nodeID, valPubKey, err := genutil.InitializeNodeValidatorFiles(cfg)
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
|
|
@ -11,6 +11,7 @@ import (
|
||||||
tmtypes "github.com/tendermint/tendermint/types"
|
tmtypes "github.com/tendermint/tendermint/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
"github.com/cosmos/cosmos-sdk/version"
|
"github.com/cosmos/cosmos-sdk/version"
|
||||||
v036 "github.com/cosmos/cosmos-sdk/x/genutil/legacy/v0_36"
|
v036 "github.com/cosmos/cosmos-sdk/x/genutil/legacy/v0_36"
|
||||||
|
@ -20,10 +21,7 @@ import (
|
||||||
"github.com/cosmos/cosmos-sdk/x/genutil/types"
|
"github.com/cosmos/cosmos-sdk/x/genutil/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const flagGenesisTime = "genesis-time"
|
||||||
flagGenesisTime = "genesis-time"
|
|
||||||
flagChainID = "chain-id"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Allow applications to extend and modify the migration process.
|
// Allow applications to extend and modify the migration process.
|
||||||
//
|
//
|
||||||
|
@ -111,7 +109,7 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2
|
||||||
genDoc.GenesisTime = t
|
genDoc.GenesisTime = t
|
||||||
}
|
}
|
||||||
|
|
||||||
chainID, _ := cmd.Flags().GetString(flagChainID)
|
chainID, _ := cmd.Flags().GetString(flags.FlagChainID)
|
||||||
if chainID != "" {
|
if chainID != "" {
|
||||||
genDoc.ChainID = chainID
|
genDoc.ChainID = chainID
|
||||||
}
|
}
|
||||||
|
@ -132,7 +130,7 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.Flags().String(flagGenesisTime, "", "override genesis_time with this flag")
|
cmd.Flags().String(flagGenesisTime, "", "override genesis_time with this flag")
|
||||||
cmd.Flags().String(flagChainID, "", "override chain_id with this flag")
|
cmd.Flags().String(flags.FlagChainID, "", "override chain_id with this flag")
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package cli
|
package cli_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
@ -10,11 +10,12 @@ import (
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/testutil"
|
"github.com/cosmos/cosmos-sdk/testutil"
|
||||||
|
"github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGetMigrationCallback(t *testing.T) {
|
func TestGetMigrationCallback(t *testing.T) {
|
||||||
for _, version := range GetMigrationVersions() {
|
for _, version := range cli.GetMigrationVersions() {
|
||||||
require.NotNil(t, GetMigrationCallback(version))
|
require.NotNil(t, cli.GetMigrationCallback(version))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +28,7 @@ func TestMigrateGenesis(t *testing.T) {
|
||||||
genesisPath := path.Join(home, "genesis.json")
|
genesisPath := path.Join(home, "genesis.json")
|
||||||
target := "v0.36"
|
target := "v0.36"
|
||||||
|
|
||||||
cmd := MigrateGenesisCmd()
|
cmd := cli.MigrateGenesisCmd()
|
||||||
_ = testutil.ApplyMockIODiscardOutErr(cmd)
|
_ = testutil.ApplyMockIODiscardOutErr(cmd)
|
||||||
|
|
||||||
clientCtx := client.Context{}.WithJSONMarshaler(cdc)
|
clientCtx := client.Context{}.WithJSONMarshaler(cdc)
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
package testutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
tmcfg "github.com/tendermint/tendermint/config"
|
||||||
|
"github.com/tendermint/tendermint/libs/cli"
|
||||||
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
"github.com/cosmos/cosmos-sdk/server"
|
||||||
|
"github.com/cosmos/cosmos-sdk/testutil"
|
||||||
|
"github.com/cosmos/cosmos-sdk/types/module"
|
||||||
|
genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExecInitCmd(testMbm module.BasicManager, home string, cdc codec.JSONMarshaler) error {
|
||||||
|
logger := log.NewNopLogger()
|
||||||
|
cfg, err := CreateDefaultTendermintConfig(home)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := genutilcli.InitCmd(testMbm, home)
|
||||||
|
serverCtx := server.NewContext(viper.New(), cfg, logger)
|
||||||
|
clientCtx := client.Context{}.WithJSONMarshaler(cdc).WithHomeDir(home)
|
||||||
|
|
||||||
|
_, out := testutil.ApplyMockIO(cmd)
|
||||||
|
clientCtx = clientCtx.WithOutput(out)
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
ctx = context.WithValue(ctx, client.ClientContextKey, &clientCtx)
|
||||||
|
ctx = context.WithValue(ctx, server.ServerContextKey, serverCtx)
|
||||||
|
|
||||||
|
cmd.SetArgs([]string{"appnode-test", fmt.Sprintf("--%s=%s", cli.HomeFlag, home)})
|
||||||
|
|
||||||
|
return cmd.ExecuteContext(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateDefaultTendermintConfig(rootDir string) (*tmcfg.Config, error) {
|
||||||
|
conf := tmcfg.DefaultConfig()
|
||||||
|
conf.SetRoot(rootDir)
|
||||||
|
tmcfg.EnsureRoot(rootDir)
|
||||||
|
|
||||||
|
if err := conf.ValidateBasic(); err != nil {
|
||||||
|
return nil, fmt.Errorf("error in config file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return conf, nil
|
||||||
|
}
|
Loading…
Reference in New Issue