Skip to content

Commit

Permalink
chore: add generic catalog error for generic golang error
Browse files Browse the repository at this point in the history
  • Loading branch information
PeterSchafer committed Jan 28, 2025
1 parent 619bc08 commit a371db5
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 2 deletions.
34 changes: 34 additions & 0 deletions cliv2/cmd/cliv2/errorhandling.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package main

import (
"errors"
"os/exec"

"github.com/snyk/error-catalog-golang-public/cli"
"github.com/snyk/error-catalog-golang-public/snyk_errors"

cli_errors "github.com/snyk/cli/cliv2/internal/errors"
)

// decorate generic errors that do not contain Error-Catalog Errors
func decorateError(err error) error {
if err == nil {
return err
}

if _, isExitError := err.(*exec.ExitError); isExitError {
return err
}

if _, isErrorWithCode := err.(*cli_errors.ErrorWithExitCode); isErrorWithCode {
return err
}

var errorCatalogError snyk_errors.Error
if !errors.As(err, &errorCatalogError) {
genericError := cli.NewGeneralCLIFailureError(err.Error())
genericError.StatusCode = 0
err = errors.Join(err, genericError)
}
return err
}
47 changes: 47 additions & 0 deletions cliv2/cmd/cliv2/errorhandling_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package main

import (
"errors"
"os"
"os/exec"
"testing"

"github.com/stretchr/testify/assert"

"github.com/snyk/error-catalog-golang-public/cli"

cli_errors "github.com/snyk/cli/cliv2/internal/errors"
)

func Test_decorateError(t *testing.T) {
t.Run("is nil error", func(t *testing.T) {
assert.Nil(t, decorateError(nil))
})

t.Run("is ErrorWithExitCode", func(t *testing.T) {
err := &cli_errors.ErrorWithExitCode{
ExitCode: 2,
}
assert.Equal(t, err, decorateError(err))
})

t.Run("is ExitError", func(t *testing.T) {
err := &exec.ExitError{
ProcessState: &os.ProcessState{},
}
assert.Equal(t, err, decorateError(err))
})

t.Run("is already error catalog error", func(t *testing.T) {
err := cli.NewConnectionTimeoutError("")
assert.Equal(t, err, decorateError(err))
})

t.Run("is a generic error", func(t *testing.T) {
err := errors.New("generic error")
actualErrr := decorateError(err)
expectedError := cli.NewGeneralCLIFailureError("")
assert.ErrorIs(t, actualErrr, err)
assert.ErrorAs(t, actualErrr, &expectedError)
})
}
7 changes: 5 additions & 2 deletions cliv2/cmd/cliv2/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ import (
"github.com/snyk/cli-extension-dep-graph/pkg/depgraph"
"github.com/snyk/cli-extension-iac-rules/iacrules"
"github.com/snyk/cli-extension-sbom/pkg/sbom"
"github.com/snyk/cli/cliv2/internal/cliv2"
"github.com/snyk/cli/cliv2/internal/constants"
"github.com/snyk/container-cli/pkg/container"
"github.com/snyk/go-application-framework/pkg/analytics"
"github.com/snyk/go-application-framework/pkg/app"
Expand All @@ -32,6 +30,9 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/pflag"

"github.com/snyk/cli/cliv2/internal/cliv2"
"github.com/snyk/cli/cliv2/internal/constants"

localworkflows "github.com/snyk/go-application-framework/pkg/local_workflows"
"github.com/snyk/go-application-framework/pkg/local_workflows/content_type"
"github.com/snyk/go-application-framework/pkg/local_workflows/json_schemas"
Expand Down Expand Up @@ -592,6 +593,8 @@ func MainWithErrorCode() (int, []error) {
}

if err != nil {
err = decorateError(err)

errorList = append(errorList, err)
for _, tempError := range errorList {
cliAnalytics.AddError(tempError)
Expand Down

0 comments on commit a371db5

Please sign in to comment.