Skip to content

Commit c1bce2a

Browse files
review
1 parent 894dbac commit c1bce2a

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

changes/20250807151301.feature

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
:sparkles: `commonerrors` Add ErrFailed
1+
:sparkles: `commonerrors` Add ErrFailed to be used as a generic error where an error is an expected and valid state that should be distinguished from a system error

utils/commonerrors/errors.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ var (
4545
ErrEOF = errors.New("end of file")
4646
ErrMalicious = errors.New("suspected malicious intent")
4747
ErrOutOfRange = errors.New("out of range")
48-
ErrFailed = errors.New("failed")
48+
// ErrFailed should be used as a generic error where an error is an expected and valid state.
49+
// For example a failing command may cause subproccess.Execute to return an error if the command exits with 1 but
50+
// this wouldn't be a system error and you might want to distinguish between this and the subprocess wrapper erroring
51+
// when you pass the message up the stack.
52+
ErrFailed = errors.New("failed")
4953
// ErrWarning is a generic error that can be used when an error should be raised but it shouldn't necessary be
5054
// passed up the chain, for example in cases where an error should be logged but the program should continue. In
5155
// these situations it should be handled immediately and then ignored/set to nil.
@@ -305,7 +309,7 @@ func WrapError(targetError, originalError error, msg string) error {
305309
tErr = ErrUnknown
306310
}
307311
origErr := ConvertContextError(originalError)
308-
if Any(origErr, ErrTimeout, ErrCancelled) {
312+
if Any(origErr, ErrTimeout, ErrCancelled, ErrWarning, ErrFailed) {
309313
tErr = origErr
310314
}
311315
if originalError == nil {
@@ -315,7 +319,8 @@ func WrapError(targetError, originalError error, msg string) error {
315319
if cleansedMsg == "" {
316320
return New(tErr, originalError.Error())
317321
} else {
318-
return Errorf(tErr, "%v%v %v", cleansedMsg, string(TypeReasonErrorSeparator), originalError.Error())
322+
return Errorf(
323+
tErr, "%v%v %v", cleansedMsg, string(TypeReasonErrorSeparator), originalError)
319324
}
320325
}
321326
}

utils/commonerrors/errors_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ func TestAny(t *testing.T) {
2727
assert.False(t, Any(nil, ErrInvalid, ErrUnknown))
2828
assert.True(t, Any(fmt.Errorf("an error %w", ErrNotImplemented), ErrInvalid, ErrNotImplemented, ErrUnknown))
2929
assert.False(t, Any(fmt.Errorf("an error %w", ErrNotImplemented), ErrInvalid, ErrUnknown))
30+
assert.True(t, Any(WrapError(ErrUnexpected, WrapError(ErrNotFound, WrapError(ErrFailed, errors.New(faker.Sentence()), "failure!!!"), faker.Sentence()), faker.Sentence()), ErrFailed))
31+
assert.False(t, Any(WrapError(ErrUnexpected, WrapError(ErrNotFound, WrapError(ErrFailed, errors.New(faker.Sentence()), "failure!!!"), faker.Sentence()), faker.Sentence()), ErrUnexpected, ErrNotFound))
3032
}
3133

3234
func TestNone(t *testing.T) {
@@ -38,6 +40,7 @@ func TestNone(t *testing.T) {
3840
assert.False(t, None(nil, nil, ErrInvalid, ErrNotImplemented, ErrUnknown))
3941
assert.False(t, None(fmt.Errorf("an error %w", ErrNotImplemented), ErrInvalid, ErrNotImplemented, ErrUnknown))
4042
assert.True(t, None(fmt.Errorf("an error %w", ErrNotImplemented), ErrInvalid, ErrUnknown))
43+
assert.False(t, None(WrapError(ErrUnexpected, WrapError(ErrNotFound, WrapError(ErrFailed, errors.New(faker.Sentence()), "failure!!!"), faker.Sentence()), faker.Sentence()), ErrFailed, ErrUnauthorised))
4144
}
4245

4346
func TestCorrespondTo(t *testing.T) {

0 commit comments

Comments
 (0)