Avoids returning ExitError on exit code zero, and optimizes for no allocations (#1284)

Fixes #1283

Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
Crypt Keeper
2023-03-24 16:42:30 +01:00
committed by GitHub
parent 86f3b190eb
commit 451c792ee8
22 changed files with 162 additions and 108 deletions

View File

@@ -8,8 +8,7 @@ import (
)
type notExitError struct {
moduleName string
exitCode uint32
exitCode uint32
}
func (e *notExitError) Error() string {
@@ -17,7 +16,7 @@ func (e *notExitError) Error() string {
}
func TestIs(t *testing.T) {
err := NewExitError("some module", 2)
err := NewExitError(2)
tests := []struct {
name string
target error
@@ -28,26 +27,15 @@ func TestIs(t *testing.T) {
target: err,
matches: true,
},
{
name: "same content",
target: NewExitError("some module", 2),
matches: true,
},
{
name: "different module name",
target: NewExitError("not some module", 2),
matches: false,
},
{
name: "different exit code",
target: NewExitError("some module", 0),
target: NewExitError(1),
matches: false,
},
{
name: "different type",
target: &notExitError{
moduleName: "some module",
exitCode: 2,
exitCode: 2,
},
matches: false,
},
@@ -64,18 +52,18 @@ func TestIs(t *testing.T) {
func TestExitError_Error(t *testing.T) {
t.Run("timeout", func(t *testing.T) {
err := NewExitError("foo", ExitCodeDeadlineExceeded)
err := NewExitError(ExitCodeDeadlineExceeded)
require.Equal(t, ExitCodeDeadlineExceeded, err.ExitCode())
require.EqualError(t, err, "module \"foo\" closed with context deadline exceeded")
require.EqualError(t, err, "module closed with context deadline exceeded")
})
t.Run("cancel", func(t *testing.T) {
err := NewExitError("foo", ExitCodeContextCanceled)
err := NewExitError(ExitCodeContextCanceled)
require.Equal(t, ExitCodeContextCanceled, err.ExitCode())
require.EqualError(t, err, "module \"foo\" closed with context canceled")
require.EqualError(t, err, "module closed with context canceled")
})
t.Run("normal", func(t *testing.T) {
err := NewExitError("foo", 123)
err := NewExitError(123)
require.Equal(t, uint32(123), err.ExitCode())
require.EqualError(t, err, "module \"foo\" closed with exit_code(123)")
require.EqualError(t, err, "module closed with exit_code(123)")
})
}