diff --git a/tools/cassandra/handler.go b/tools/cassandra/handler.go index ce20d04349e..11c56760fb8 100644 --- a/tools/cassandra/handler.go +++ b/tools/cassandra/handler.go @@ -25,6 +25,7 @@ package cassandra import ( + "fmt" "strings" "github.com/urfave/cli" @@ -96,7 +97,8 @@ func createKeyspace(cli *cli.Context, logger log.Logger) error { } keyspace := cli.String(schema.CLIOptKeyspace) if keyspace == "" { - logger.Error("Unable to read config.", tag.Error(schema.NewConfigError("missing "+flag(schema.CLIOptKeyspace)+" argument "))) + err := fmt.Errorf("missing %s argument", flag(schema.CLIOptKeyspace)) + logger.Error("Unable to read config.", tag.Error(schema.NewConfigError(err.Error()))) return err } err = doCreateKeyspace(config, keyspace, logger) @@ -115,7 +117,8 @@ func dropKeyspace(cli *cli.Context, logger log.Logger) error { } keyspace := cli.String(schema.CLIOptKeyspace) if keyspace == "" { - logger.Error("Unable to read config.", tag.Error(schema.NewConfigError("missing "+flag(schema.CLIOptKeyspace)+" argument "))) + err := fmt.Errorf("missing %s argument", flag(schema.CLIOptKeyspace)) + logger.Error("Unable to read config.", tag.Error(schema.NewConfigError(err.Error()))) return err } err = doDropKeyspace(config, keyspace, logger) @@ -161,12 +164,8 @@ func doDropKeyspace(cfg *CQLClientConfig, name string, logger log.Logger) error if err != nil { return err } - err = client.dropKeyspace(name) - if err != nil { - return err - } - client.Close() - return nil + defer client.Close() + return client.dropKeyspace(name) } func newCQLClientConfig(cli *cli.Context) (*CQLClientConfig, error) { diff --git a/tools/cassandra/handler_test.go b/tools/cassandra/handler_test.go index 837ca5b0baf..aec0e5e7361 100644 --- a/tools/cassandra/handler_test.go +++ b/tools/cassandra/handler_test.go @@ -71,3 +71,29 @@ func (s *HandlerTestSuite) TestParsingOfOptionsMap() { s.Assert().Equal(0, len(parsedMap2)) } + +func (s *HandlerTestSuite) TestDropKeyspaceError() { + // fake exit function to avoid exiting the application + back := osExit + defer func() { osExit = back }() + osExit = func(i int) { + s.Equal(1, i) + } + args := []string{"./tool", "drop-keyspace", "-f", "--keyspace", ""} + app := buildCLIOptions() + err := app.Run(args) + s.Nil(err) +} + +func (s *HandlerTestSuite) TestCreateKeyspaceError() { + // fake exit function to avoid exiting the application + back := osExit + defer func() { osExit = back }() + osExit = func(i int) { + s.Equal(1, i) + } + args := []string{"./tool", "create-keyspace", "--keyspace", ""} + app := buildCLIOptions() + err := app.Run(args) + s.Nil(err) +} diff --git a/tools/cassandra/main.go b/tools/cassandra/main.go index 3e3d9279301..07e5eb002bf 100644 --- a/tools/cassandra/main.go +++ b/tools/cassandra/main.go @@ -41,12 +41,14 @@ func RunTool(args []string) error { return app.Run(args) } +var osExit = os.Exit + // root handler for all cli commands func cliHandler(c *cli.Context, handler func(c *cli.Context, logger log.Logger) error, logger log.Logger) { quiet := c.GlobalBool(schema.CLIOptQuiet) err := handler(c, logger) if err != nil && !quiet { - os.Exit(1) + osExit(1) } }