From 7848ee23db37a829099db1dfb2f52287341eaa40 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Wed, 21 Feb 2018 18:56:04 +0100 Subject: [PATCH] Addressed pr comments --- examples/basecoin/cmd/basecoind/main.go | 28 +++++++++++++----------- mock/app.go | 2 +- mock/helpers.go | 2 +- server/start.go | 29 ++++++++++++++++++------- server/start_test.go | 12 ++-------- 5 files changed, 40 insertions(+), 33 deletions(-) diff --git a/examples/basecoin/cmd/basecoind/main.go b/examples/basecoin/cmd/basecoind/main.go index 786c0f3f1..fdb2b5e9d 100644 --- a/examples/basecoin/cmd/basecoind/main.go +++ b/examples/basecoin/cmd/basecoind/main.go @@ -7,6 +7,7 @@ import ( "github.com/spf13/cobra" + abci "github.com/tendermint/abci/types" "github.com/tendermint/tmlibs/cli" dbm "github.com/tendermint/tmlibs/db" "github.com/tendermint/tmlibs/log" @@ -16,9 +17,9 @@ import ( "github.com/cosmos/cosmos-sdk/version" ) -// gaiadCmd is the entry point for this binary +// basecoindCmd is the entry point for this binary var ( - gaiadCmd = &cobra.Command{ + basecoindCmd = &cobra.Command{ Use: "gaiad", Short: "Gaia Daemon (server)", } @@ -48,27 +49,28 @@ func defaultOptions(args []string) (json.RawMessage, error) { return json.RawMessage(opts), nil } -func main() { - // TODO: this should somehow be updated on cli flags? - // But we need to create the app first... hmmm..... - rootDir := os.ExpandEnv("$HOME/.basecoind") - - logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)).With("module", "main") +func generateApp(rootDir string, logger log.Logger) abci.Application { db, err := dbm.NewGoLevelDB("basecoin", rootDir) if err != nil { fmt.Println(err) os.Exit(1) } bapp := app.NewBasecoinApp(logger, db) + return bapp +} - gaiadCmd.AddCommand( - server.InitCmd(defaultOptions, bapp.Logger), - server.StartCmd(bapp, bapp.Logger), - server.UnsafeResetAllCmd(bapp.Logger), +func main() { + logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)).With("module", "main") + + basecoindCmd.AddCommand( + server.InitCmd(defaultOptions, logger), + server.StartCmd(generateApp, logger), + server.UnsafeResetAllCmd(logger), version.VersionCmd, ) // prepare and add flags - executor := cli.PrepareBaseCmd(gaiadCmd, "BC", rootDir) + rootDir := os.ExpandEnv("$HOME/.basecoind") + executor := cli.PrepareBaseCmd(basecoindCmd, "BC", rootDir) executor.Execute() } diff --git a/mock/app.go b/mock/app.go index 554879f04..0168e4c04 100644 --- a/mock/app.go +++ b/mock/app.go @@ -16,7 +16,7 @@ import ( // It should work similar to a real app. // Make sure rootDir is empty before running the test, // in order to guarantee consistent results -func NewApp(logger log.Logger, rootDir string) (abci.Application, error) { +func NewApp(rootDir string, logger log.Logger) (abci.Application, error) { db, err := dbm.NewGoLevelDB("mock", rootDir) if err != nil { return nil, err diff --git a/mock/helpers.go b/mock/helpers.go index 4e30eaa30..601fee897 100644 --- a/mock/helpers.go +++ b/mock/helpers.go @@ -22,6 +22,6 @@ func SetupApp() (abci.Application, func(), error) { os.RemoveAll(rootDir) } - app, err := NewApp(logger, rootDir) + app, err := NewApp(rootDir, logger) return app, cleanup, err } diff --git a/server/start.go b/server/start.go index 909f04dc2..1424c8153 100644 --- a/server/start.go +++ b/server/start.go @@ -21,9 +21,13 @@ const ( flagAddress = "address" ) +// appGenerator lets us lazily initialize app, using home dir +// and other flags (?) to start +type appGenerator func(string, log.Logger) (abci.Application, error) + // StartCmd runs the service passed in, either // stand-alone, or in-process with tendermint -func StartCmd(app abci.Application, logger log.Logger) *cobra.Command { +func StartCmd(app appGenerator, logger log.Logger) *cobra.Command { start := startCmd{ app: app, logger: logger, @@ -44,10 +48,7 @@ func StartCmd(app abci.Application, logger log.Logger) *cobra.Command { } type startCmd struct { - // do this in main: - // rootDir := viper.GetString(cli.HomeFlag) - // node.Logger = .... - app abci.Application + app appGenerator logger log.Logger } @@ -61,9 +62,15 @@ func (s startCmd) run(cmd *cobra.Command, args []string) error { } func (s startCmd) startStandAlone() error { - // Start the ABCI listener + // Generate the app in the proper dir addr := viper.GetString(flagAddress) - svr, err := server.NewServer(addr, "socket", s.app) + home := viper.GetString("home") + app, err := s.app(home, s.logger) + if err != nil { + return err + } + + svr, err := server.NewServer(addr, "socket", app) if err != nil { return errors.Errorf("Error creating listener: %v\n", err) } @@ -84,10 +91,16 @@ func (s startCmd) startInProcess() error { return err } + home := cfg.RootDir + app, err := s.app(home, s.logger) + if err != nil { + return err + } + // Create & start tendermint node n, err := node.NewNode(cfg, types.LoadOrGenPrivValidatorFS(cfg.PrivValidatorFile()), - proxy.NewLocalClientCreator(s.app), + proxy.NewLocalClientCreator(app), node.DefaultGenesisDocProviderFunc(cfg), node.DefaultDBProvider, s.logger.With("module", "node")) diff --git a/server/start_test.go b/server/start_test.go index de66b8203..5b7ab3e76 100644 --- a/server/start_test.go +++ b/server/start_test.go @@ -22,14 +22,10 @@ func TestStartStandAlone(t *testing.T) { err := initCmd.RunE(nil, nil) require.NoError(t, err) - rootDir := viper.GetString("home") - app, err := mock.NewApp(logger, rootDir) - require.NoError(t, err) - // set up app and start up viper.Set(flagWithTendermint, false) viper.Set(flagAddress, "localhost:11122") - startCmd := StartCmd(app, logger) + startCmd := StartCmd(mock.NewApp, logger) timeout := time.Duration(3) * time.Second err = runOrTimeout(startCmd, timeout) @@ -46,13 +42,9 @@ func TestStartWithTendermint(t *testing.T) { err := initCmd.RunE(nil, nil) require.NoError(t, err) - rootDir := viper.GetString("home") - app, err := mock.NewApp(logger, rootDir) - require.NoError(t, err) - // set up app and start up viper.Set(flagWithTendermint, true) - startCmd := StartCmd(app, logger) + startCmd := StartCmd(mock.NewApp, logger) timeout := time.Duration(3) * time.Second err = runOrTimeout(startCmd, timeout)