sys/error: handle errors.Is for common context use-cases (#1313)
Signed-off-by: Alan Braithwaite <alan@runreveal.com>
This commit is contained in:
@@ -73,5 +73,11 @@ func (e *ExitError) Is(err error) bool {
|
|||||||
if target, ok := err.(*ExitError); ok {
|
if target, ok := err.(*ExitError); ok {
|
||||||
return e.exitCode == target.exitCode
|
return e.exitCode == target.exitCode
|
||||||
}
|
}
|
||||||
|
if e.exitCode == ExitCodeContextCanceled && err == context.Canceled {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if e.exitCode == ExitCodeDeadlineExceeded && err == context.DeadlineExceeded {
|
||||||
|
return true
|
||||||
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package sys
|
package sys
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@@ -55,11 +56,13 @@ func TestExitError_Error(t *testing.T) {
|
|||||||
err := NewExitError(ExitCodeDeadlineExceeded)
|
err := NewExitError(ExitCodeDeadlineExceeded)
|
||||||
require.Equal(t, ExitCodeDeadlineExceeded, err.ExitCode())
|
require.Equal(t, ExitCodeDeadlineExceeded, err.ExitCode())
|
||||||
require.EqualError(t, err, "module closed with context deadline exceeded")
|
require.EqualError(t, err, "module closed with context deadline exceeded")
|
||||||
|
require.ErrorIs(t, err, context.DeadlineExceeded, "exit code context deadline exceeded should work")
|
||||||
})
|
})
|
||||||
t.Run("cancel", func(t *testing.T) {
|
t.Run("cancel", func(t *testing.T) {
|
||||||
err := NewExitError(ExitCodeContextCanceled)
|
err := NewExitError(ExitCodeContextCanceled)
|
||||||
require.Equal(t, ExitCodeContextCanceled, err.ExitCode())
|
require.Equal(t, ExitCodeContextCanceled, err.ExitCode())
|
||||||
require.EqualError(t, err, "module closed with context canceled")
|
require.EqualError(t, err, "module closed with context canceled")
|
||||||
|
require.ErrorIs(t, err, context.Canceled, "exit code context canceled should work")
|
||||||
})
|
})
|
||||||
t.Run("normal", func(t *testing.T) {
|
t.Run("normal", func(t *testing.T) {
|
||||||
err := NewExitError(123)
|
err := NewExitError(123)
|
||||||
|
|||||||
Reference in New Issue
Block a user