diff --git a/errors.go b/errors.go new file mode 100644 index 0000000..4e94fab --- /dev/null +++ b/errors.go @@ -0,0 +1,11 @@ +package gozero + +import "errors" + +var ( + // ErrNoValidEngine is returned when no valid engine is found + ErrNoValidEngine = errors.New("no valid engine found") + + // ErrNoEngines is returned when no engines are provided + ErrNoEngines = errors.New("no engines provided") +) diff --git a/gozero.go b/gozero.go index 23c4a35..52b2ef6 100644 --- a/gozero.go +++ b/gozero.go @@ -2,7 +2,6 @@ package gozero import ( "context" - "errors" "os/exec" "github.com/projectdiscovery/gozero/cmdexec" @@ -17,7 +16,7 @@ type Gozero struct { // New creates a new gozero executor func New(options *Options) (*Gozero, error) { if len(options.Engines) == 0 { - return nil, errors.New("no engines provided") + return nil, ErrNoEngines } // attempt to locate the interpreter by executing it for _, engine := range options.Engines { @@ -32,7 +31,7 @@ func New(options *Options) (*Gozero, error) { } } if options.engine == "" { - return nil, errors.New("no valid engine found") + return nil, ErrNoValidEngine } return &Gozero{Options: options}, nil } diff --git a/gozero_test.go b/gozero_test.go index 1b179c0..da24442 100644 --- a/gozero_test.go +++ b/gozero_test.go @@ -32,3 +32,27 @@ func TestEval(t *testing.T) { err = input.Cleanup() require.Nil(t, err) } + +func TestErr(t *testing.T) { + opts := &Options{} + if osutils.IsWindows() { + opts.Engines = []string{"nonexistent.exe"} + } else { + opts.Engines = []string{"nonexistent"} + } + gozero, err := New(opts) + require.NotNil(t, err) + require.Nil(t, gozero) + require.ErrorIs(t, err, ErrNoValidEngine) + + opts.Engines = []string{} + gozero, err = New(opts) + require.NotNil(t, err) + require.Nil(t, gozero) + require.ErrorIs(t, err, ErrNoEngines) + + opts.Engines = []string{"python3"} + gozero, err = New(opts) + require.Nil(t, err) + require.NotNil(t, gozero) +}