diff --git a/cmd/debricked/main.go b/cmd/debricked/main.go index 4786694f..6366aa92 100644 --- a/cmd/debricked/main.go +++ b/cmd/debricked/main.go @@ -1,14 +1,12 @@ package main import ( - "fmt" "github.com/debricked/cli/pkg/cmd/root" "os" ) func main() { if err := root.NewRootCmd().Execute(); err != nil { - fmt.Println(err) os.Exit(1) } } diff --git a/pkg/cmd/scan/scan.go b/pkg/cmd/scan/scan.go index 139ec70a..882218b8 100644 --- a/pkg/cmd/scan/scan.go +++ b/pkg/cmd/scan/scan.go @@ -82,7 +82,7 @@ $ debricked scan . `+exampleFlags) } func RunE(s *scan.IScanner) func(_ *cobra.Command, args []string) error { - return func(_ *cobra.Command, args []string) error { + return func(cmd *cobra.Command, args []string) error { path := "" if len(args) > 0 { path = args[0] @@ -103,7 +103,11 @@ func RunE(s *scan.IScanner) func(_ *cobra.Command, args []string) error { scanCmdError = errors.New("scanner was nil") } - if scanCmdError != nil { + if scanCmdError == scan.FailPipelineErr { + cmd.SilenceUsage = true + cmd.SilenceErrors = true + return scanCmdError + } else if scanCmdError != nil { return errors.New(fmt.Sprintf("%s %s\n", color.RedString("тип"), scanCmdError.Error())) } diff --git a/pkg/cmd/scan/scan_test.go b/pkg/cmd/scan/scan_test.go index 7b656399..0505ac5c 100644 --- a/pkg/cmd/scan/scan_test.go +++ b/pkg/cmd/scan/scan_test.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/debricked/cli/pkg/client" "github.com/debricked/cli/pkg/scan" + "github.com/spf13/cobra" "github.com/spf13/viper" "strings" "testing" @@ -65,6 +66,25 @@ func TestRunENoPath(t *testing.T) { } } +func TestRunEFailPipelineErr(t *testing.T) { + var s scan.IScanner + mock := &scannerMock{} + mock.setErr(scan.FailPipelineErr) + s = mock + runE := RunE(&s) + cmd := &cobra.Command{} + err := runE(cmd, nil) + if err != scan.FailPipelineErr { + t.Error("failed to assert that scan. FailPipelineErr occurred. Error:", err) + } + if !cmd.SilenceUsage { + t.Error("failed to assert that usage was silenced") + } + if !cmd.SilenceErrors { + t.Error("failed to assert that errors were silenced") + } +} + func TestRunEError(t *testing.T) { runE := RunE(nil) err := runE(nil, []string{"."}) @@ -76,8 +96,14 @@ func TestRunEError(t *testing.T) { } } -type scannerMock struct{} +type scannerMock struct { + err error +} + +func (s *scannerMock) Scan(_ scan.IOptions) error { + return s.err +} -func (*scannerMock) Scan(_ scan.IOptions) error { - return nil +func (s *scannerMock) setErr(err error) { + s.err = err } diff --git a/pkg/scan/scanner.go b/pkg/scan/scanner.go index 2e766c97..8789dc69 100644 --- a/pkg/scan/scanner.go +++ b/pkg/scan/scanner.go @@ -15,7 +15,8 @@ import ( ) var ( - BadOptsErr = errors.New("failed to type case IOptions") + BadOptsErr = errors.New("failed to type case IOptions") + FailPipelineErr = errors.New("") ) type IScanner interface { @@ -108,7 +109,7 @@ func (dScanner *DebrickedScanner) Scan(o IOptions) error { } fmt.Printf("For full details, visit: %s\n\n", color.BlueString(result.DetailsUrl)) if failPipeline { - return errors.New("") + return FailPipelineErr } return nil