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:
SaReN 2020-08-18 03:02:16 +05:30 committed by GitHub
parent d2de7a0441
commit 24bc89183e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 166 additions and 47 deletions

View File

@ -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)
} }

View File

@ -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))
}
})
}
}

View File

@ -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,
}) })

View File

@ -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)

View File

@ -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
} }

View File

@ -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)

View File

@ -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
}