diff --git a/simapp/simd/cmd/cmd_test.go b/simapp/simd/cmd/cmd_test.go new file mode 100644 index 0000000000..ed4d8bad68 --- /dev/null +++ b/simapp/simd/cmd/cmd_test.go @@ -0,0 +1,23 @@ +package cmd_test + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/simapp/simd/cmd" + "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" +) + +func TestInitCmd(t *testing.T) { + rootCmd, _ := cmd.NewRootCmd() + rootCmd.SetArgs([]string{ + "init", // Test the init cmd + "simapp-test", // Moniker + fmt.Sprintf("--%s=%s", cli.FlagOverwrite, "true"), // Overwrite genesis.json, in case it already exists + }) + + err := cmd.Execute(rootCmd) + require.NoError(t, err) +} diff --git a/simapp/simd/cmd/root.go b/simapp/simd/cmd/root.go index 170537cd37..1cdee260de 100644 --- a/simapp/simd/cmd/root.go +++ b/simapp/simd/cmd/root.go @@ -7,6 +7,7 @@ import ( "os" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/simapp/params" "github.com/spf13/cast" "github.com/spf13/cobra" @@ -34,8 +35,21 @@ import ( genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" ) -var ( - rootCmd = &cobra.Command{ +// NewRootCmd creates a new root command for simd. It is called once in the +// main function. +func NewRootCmd() (*cobra.Command, params.EncodingConfig) { + encodingConfig := simapp.MakeEncodingConfig() + initClientCtx := client.Context{}. + WithJSONMarshaler(encodingConfig.Marshaler). + WithInterfaceRegistry(encodingConfig.InterfaceRegistry). + WithTxConfig(encodingConfig.TxConfig). + WithLegacyAmino(encodingConfig.Amino). + WithInput(os.Stdin). + WithAccountRetriever(types.AccountRetriever{}). + WithBroadcastMode(flags.BroadcastBlock). + WithHomeDir(simapp.DefaultNodeHome) + + rootCmd := &cobra.Command{ Use: "simd", Short: "simulation app", PersistentPreRunE: func(cmd *cobra.Command, _ []string) error { @@ -47,20 +61,13 @@ var ( }, } - encodingConfig = simapp.MakeEncodingConfig() - initClientCtx = client.Context{}. - WithJSONMarshaler(encodingConfig.Marshaler). - WithInterfaceRegistry(encodingConfig.InterfaceRegistry). - WithTxConfig(encodingConfig.TxConfig). - WithLegacyAmino(encodingConfig.Amino). - WithInput(os.Stdin). - WithAccountRetriever(types.AccountRetriever{}). - WithBroadcastMode(flags.BroadcastBlock). - WithHomeDir(simapp.DefaultNodeHome) -) + initRootCmd(rootCmd, encodingConfig) + + return rootCmd, encodingConfig +} // Execute executes the root command. -func Execute() error { +func Execute(rootCmd *cobra.Command) error { // Create and set a client.Context on the command's Context. During the pre-run // of the root command, a default initialized client.Context is provided to // seed child command execution with values such as AccountRetriver, Keyring, @@ -75,7 +82,7 @@ func Execute() error { return executor.ExecuteContext(ctx) } -func init() { +func initRootCmd(rootCmd *cobra.Command, encodingConfig params.EncodingConfig) { authclient.Codec = encodingConfig.Marshaler rootCmd.AddCommand( @@ -173,7 +180,7 @@ func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer, appOpts serverty logger, db, traceStore, true, skipUpgradeHeights, cast.ToString(appOpts.Get(flags.FlagHome)), cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)), - encodingConfig, + simapp.MakeEncodingConfig(), // Ideally, we would reuse the one created by NewRootCmd. baseapp.SetPruning(pruningOpts), baseapp.SetMinGasPrices(cast.ToString(appOpts.Get(server.FlagMinGasPrices))), baseapp.SetHaltHeight(cast.ToUint64(appOpts.Get(server.FlagHaltHeight))), @@ -187,7 +194,7 @@ func exportAppStateAndTMValidators( logger log.Logger, db dbm.DB, traceStore io.Writer, height int64, forZeroHeight bool, jailWhiteList []string, ) (json.RawMessage, []tmtypes.GenesisValidator, *abci.ConsensusParams, error) { - encCfg := simapp.MakeEncodingConfig() + encCfg := simapp.MakeEncodingConfig() // Ideally, we would reuse the one created by NewRootCmd. encCfg.Marshaler = codec.NewProtoCodec(encCfg.InterfaceRegistry) var simApp *simapp.SimApp if height != -1 { diff --git a/simapp/simd/main.go b/simapp/simd/main.go index 3cc818a49f..126e14975e 100644 --- a/simapp/simd/main.go +++ b/simapp/simd/main.go @@ -7,7 +7,8 @@ import ( ) func main() { - if err := cmd.Execute(); err != nil { + rootCmd, _ := cmd.NewRootCmd() + if err := cmd.Execute(rootCmd); err != nil { os.Exit(1) } } diff --git a/x/genutil/client/cli/collect.go b/x/genutil/client/cli/collect.go index 1fefbe382a..cc86258368 100644 --- a/x/genutil/client/cli/collect.go +++ b/x/genutil/client/cli/collect.go @@ -59,7 +59,7 @@ func CollectGenTxsCmd(genBalIterator types.GenesisBalancesIterator, defaultNodeH toPrint.AppMessage = appMessage - return displayInfo(cdc, toPrint) + return displayInfo(toPrint) }, } diff --git a/x/genutil/client/cli/init.go b/x/genutil/client/cli/init.go index 2269a3eb63..60eb18deed 100644 --- a/x/genutil/client/cli/init.go +++ b/x/genutil/client/cli/init.go @@ -16,7 +16,6 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/server" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" @@ -24,7 +23,8 @@ import ( ) const ( - flagOverwrite = "overwrite" + // FlagOverwrite defines a flag to overwrite an existing genesis JSON file. + FlagOverwrite = "overwrite" ) type printInfo struct { @@ -45,8 +45,8 @@ func newPrintInfo(moniker, chainID, nodeID, genTxsDir string, appMessage json.Ra } } -func displayInfo(cdc codec.JSONMarshaler, info printInfo) error { - out, err := codec.MarshalJSONIndent(cdc, info) +func displayInfo(info printInfo) error { + out, err := json.MarshalIndent(info, "", " ") if err != nil { return err } @@ -86,12 +86,12 @@ func InitCmd(mbm module.BasicManager, defaultNodeHome string) *cobra.Command { config.Moniker = args[0] genFile := config.GenesisFile() - overwrite, _ := cmd.Flags().GetBool(flagOverwrite) + overwrite, _ := cmd.Flags().GetBool(FlagOverwrite) if !overwrite && tmos.FileExists(genFile) { return fmt.Errorf("genesis.json file already exists: %v", genFile) } - appState, err := codec.MarshalJSONIndent(cdc, mbm.DefaultGenesis(cdc)) + appState, err := json.MarshalIndent(mbm.DefaultGenesis(cdc), "", " ") if err != nil { return errors.Wrap(err, "Failed to marshall default genesis state") } @@ -118,12 +118,12 @@ func InitCmd(mbm module.BasicManager, defaultNodeHome string) *cobra.Command { toPrint := newPrintInfo(config.Moniker, chainID, nodeID, "", appState) cfg.WriteConfigFile(filepath.Join(config.RootDir, "config", "config.toml"), config) - return displayInfo(cdc, toPrint) + return displayInfo(toPrint) }, } cmd.Flags().String(cli.HomeFlag, defaultNodeHome, "node's home directory") - cmd.Flags().BoolP(flagOverwrite, "o", false, "overwrite the genesis.json file") + cmd.Flags().BoolP(FlagOverwrite, "o", false, "overwrite the genesis.json file") cmd.Flags().String(flags.FlagChainID, "", "genesis file chain-id, if left blank will be randomly created") return cmd diff --git a/x/genutil/client/cli/migrate.go b/x/genutil/client/cli/migrate.go index c0453e8344..9c133e8528 100644 --- a/x/genutil/client/cli/migrate.go +++ b/x/genutil/client/cli/migrate.go @@ -1,6 +1,7 @@ package cli import ( + "encoding/json" "fmt" "sort" "time" @@ -10,7 +11,6 @@ import ( tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" v036 "github.com/cosmos/cosmos-sdk/x/genutil/legacy/v0_36" @@ -116,7 +116,7 @@ $ %s migrate v0.36 /path/to/genesis.json --chain-id=cosmoshub-3 --genesis-time=2 genDoc.ChainID = chainID } - bz, err := codec.MarshalJSONIndent(cdc, genDoc) + bz, err := json.MarshalIndent(genDoc, "", " ") if err != nil { return errors.Wrap(err, "failed to marshal genesis doc") }