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 (
"bufio"
"encoding/json"
"errors"
"fmt"
@ -140,7 +141,7 @@ contain valid denominations. Accounts may optionally be supplied with vesting pa
}
authGenState.Accounts = genAccs
authGenStateBz, err := cdc.MarshalJSON(authGenState)
authGenStateBz, err := cdc.MarshalJSON(&authGenState)
if err != nil {
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
appStateJSON, err := cdc.MarshalJSON(appState)
appStateJSON, err := json.Marshal(appState)
if err != nil {
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 (
"context"
@ -17,6 +17,7 @@ import (
"github.com/cosmos/cosmos-sdk/testutil/network"
sdk "github.com/cosmos/cosmos-sdk/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"
)
@ -51,7 +52,7 @@ func (s *IntegrationTestSuite) TestGenTxCmd() {
dir, clean := testutil.NewTestCaseDir(s.T())
defer clean()
cmd := GenTxCmd(
cmd := cli.GenTxCmd(
simapp.ModuleBasics,
val.ClientCtx.TxConfig, banktypes.GenesisBalancesIterator{}, val.ClientCtx.HomeDir)
@ -63,7 +64,7 @@ func (s *IntegrationTestSuite) TestGenTxCmd() {
genTxFile := filepath.Join(dir, "myTx")
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),
val.Moniker,
})

View File

@ -1,4 +1,4 @@
package cli
package cli_test
import (
"bytes"
@ -12,7 +12,6 @@ import (
"github.com/spf13/viper"
"github.com/stretchr/testify/require"
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/log"
@ -25,22 +24,12 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
"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{})
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) {
tests := []struct {
name string
@ -68,7 +57,7 @@ func TestInitCmd(t *testing.T) {
defer cleanup()
logger := log.NewNopLogger()
cfg, err := createDefaultTendermintConfig(home)
cfg, err := genutiltest.CreateDefaultTendermintConfig(home)
require.NoError(t, err)
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, server.ServerContextKey, serverCtx)
cmd := InitCmd(testMbm, home)
cmd := genutilcli.InitCmd(testMbm, home)
cmd.SetArgs(
tt.flags(home),
)
@ -106,7 +95,7 @@ func TestEmptyState(t *testing.T) {
t.Cleanup(cleanup)
logger := log.NewNopLogger()
cfg, err := createDefaultTendermintConfig(home)
cfg, err := genutiltest.CreateDefaultTendermintConfig(home)
require.NoError(t, err)
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, server.ServerContextKey, serverCtx)
cmd := InitCmd(testMbm, home)
cmd := genutilcli.InitCmd(testMbm, home)
cmd.SetArgs([]string{"appnode-test", fmt.Sprintf("--%s=%s", cli.HomeFlag, home)})
require.NoError(t, cmd.ExecuteContext(ctx))
@ -153,21 +142,9 @@ func TestStartStandAlone(t *testing.T) {
t.Cleanup(setupClientHome(t))
logger := log.NewNopLogger()
cfg, err := createDefaultTendermintConfig(home)
err := genutiltest.ExecInitCmd(testMbm, home, makeCodec())
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)
require.NoError(t, err)
@ -191,7 +168,7 @@ func TestStartStandAlone(t *testing.T) {
func TestInitNodeValidatorFiles(t *testing.T) {
home, cleanup := testutil.NewTestCaseDir(t)
cfg, err := createDefaultTendermintConfig(home)
cfg, err := genutiltest.CreateDefaultTendermintConfig(home)
t.Cleanup(cleanup)
nodeID, valPubKey, err := genutil.InitializeNodeValidatorFiles(cfg)
require.Nil(t, err)

View File

@ -11,6 +11,7 @@ import (
tmtypes "github.com/tendermint/tendermint/types"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/version"
v036 "github.com/cosmos/cosmos-sdk/x/genutil/legacy/v0_36"
@ -20,10 +21,7 @@ import (
"github.com/cosmos/cosmos-sdk/x/genutil/types"
)
const (
flagGenesisTime = "genesis-time"
flagChainID = "chain-id"
)
const flagGenesisTime = "genesis-time"
// 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
}
chainID, _ := cmd.Flags().GetString(flagChainID)
chainID, _ := cmd.Flags().GetString(flags.FlagChainID)
if 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(flagChainID, "", "override chain_id with this flag")
cmd.Flags().String(flags.FlagChainID, "", "override chain_id with this flag")
return cmd
}

View File

@ -1,4 +1,4 @@
package cli
package cli_test
import (
"context"
@ -10,11 +10,12 @@ import (
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/testutil"
"github.com/cosmos/cosmos-sdk/x/genutil/client/cli"
)
func TestGetMigrationCallback(t *testing.T) {
for _, version := range GetMigrationVersions() {
require.NotNil(t, GetMigrationCallback(version))
for _, version := range cli.GetMigrationVersions() {
require.NotNil(t, cli.GetMigrationCallback(version))
}
}
@ -27,7 +28,7 @@ func TestMigrateGenesis(t *testing.T) {
genesisPath := path.Join(home, "genesis.json")
target := "v0.36"
cmd := MigrateGenesisCmd()
cmd := cli.MigrateGenesisCmd()
_ = testutil.ApplyMockIODiscardOutErr(cmd)
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
}