mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
Merge pull request #47883 from dmcgowan/errdefs-check-containerd
Update errdefs package to use containerd/errdefs
This commit is contained in:
@@ -4,5 +4,5 @@
|
||||
// Packages should not reference these interfaces directly, only implement them.
|
||||
// To check if a particular error implements one of these interfaces, there are helper
|
||||
// functions provided (e.g. `Is<SomeError>`) which can be used rather than asserting the interfaces directly.
|
||||
// If you must assert on these interfaces, be sure to check the causal chain (`err.Cause()`).
|
||||
// If you must assert on these interfaces, be sure to check the causal chain (`err.Unwrap()`).
|
||||
package errdefs // import "github.com/docker/docker/errdefs"
|
||||
|
||||
@@ -8,6 +8,10 @@ import (
|
||||
|
||||
var errTest = errors.New("this is a test")
|
||||
|
||||
type wrapped interface {
|
||||
Unwrap() error
|
||||
}
|
||||
|
||||
func TestNotFound(t *testing.T) {
|
||||
if IsNotFound(errTest) {
|
||||
t.Fatalf("did not expect not found error, got %T", errTest)
|
||||
@@ -16,7 +20,7 @@ func TestNotFound(t *testing.T) {
|
||||
if !IsNotFound(e) {
|
||||
t.Fatalf("expected not found error, got: %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -37,7 +41,7 @@ func TestConflict(t *testing.T) {
|
||||
if !IsConflict(e) {
|
||||
t.Fatalf("expected conflict error, got: %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -58,7 +62,7 @@ func TestForbidden(t *testing.T) {
|
||||
if !IsForbidden(e) {
|
||||
t.Fatalf("expected forbidden error, got: %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -79,7 +83,7 @@ func TestInvalidParameter(t *testing.T) {
|
||||
if !IsInvalidParameter(e) {
|
||||
t.Fatalf("expected invalid argument error, got %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -100,7 +104,7 @@ func TestNotImplemented(t *testing.T) {
|
||||
if !IsNotImplemented(e) {
|
||||
t.Fatalf("expected not implemented error, got %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -121,7 +125,7 @@ func TestNotModified(t *testing.T) {
|
||||
if !IsNotModified(e) {
|
||||
t.Fatalf("expected not modified error, got %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -142,7 +146,7 @@ func TestUnauthorized(t *testing.T) {
|
||||
if !IsUnauthorized(e) {
|
||||
t.Fatalf("expected unauthorized error, got %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -163,7 +167,7 @@ func TestUnknown(t *testing.T) {
|
||||
if !IsUnknown(e) {
|
||||
t.Fatalf("expected unknown error, got %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -184,7 +188,7 @@ func TestCancelled(t *testing.T) {
|
||||
if !IsCancelled(e) {
|
||||
t.Fatalf("expected cancelled error, got %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -205,7 +209,7 @@ func TestDeadline(t *testing.T) {
|
||||
if !IsDeadline(e) {
|
||||
t.Fatalf("expected deadline error, got %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -226,7 +230,7 @@ func TestDataLoss(t *testing.T) {
|
||||
if !IsDataLoss(e) {
|
||||
t.Fatalf("expected data loss error, got %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -247,7 +251,7 @@ func TestUnavailable(t *testing.T) {
|
||||
if !IsUnavailable(e) {
|
||||
t.Fatalf("expected unavaillable error, got %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
@@ -268,7 +272,7 @@ func TestSystem(t *testing.T) {
|
||||
if !IsSystem(e) {
|
||||
t.Fatalf("expected system error, got %T", e)
|
||||
}
|
||||
if cause := e.(causer).Cause(); cause != errTest {
|
||||
if cause := e.(wrapped).Unwrap(); cause != errTest {
|
||||
t.Fatalf("causual should be errTest, got: %v", cause)
|
||||
}
|
||||
if !errors.Is(e, errTest) {
|
||||
|
||||
127
errdefs/is.go
127
errdefs/is.go
@@ -3,119 +3,74 @@ package errdefs
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
cerrdefs "github.com/containerd/errdefs"
|
||||
)
|
||||
|
||||
type causer interface {
|
||||
Cause() error
|
||||
}
|
||||
|
||||
type wrapErr interface {
|
||||
Unwrap() error
|
||||
}
|
||||
|
||||
func getImplementer(err error) error {
|
||||
switch e := err.(type) {
|
||||
case
|
||||
ErrNotFound,
|
||||
ErrInvalidParameter,
|
||||
ErrConflict,
|
||||
ErrUnauthorized,
|
||||
ErrUnavailable,
|
||||
ErrForbidden,
|
||||
ErrSystem,
|
||||
ErrNotModified,
|
||||
ErrNotImplemented,
|
||||
ErrCancelled,
|
||||
ErrDeadline,
|
||||
ErrDataLoss,
|
||||
ErrUnknown:
|
||||
return err
|
||||
case causer:
|
||||
return getImplementer(e.Cause())
|
||||
case wrapErr:
|
||||
return getImplementer(e.Unwrap())
|
||||
default:
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// IsNotFound returns if the passed in error is an [ErrNotFound],
|
||||
func IsNotFound(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrNotFound)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsNotFound]
|
||||
var IsNotFound = cerrdefs.IsNotFound
|
||||
|
||||
// IsInvalidParameter returns if the passed in error is an [ErrInvalidParameter].
|
||||
func IsInvalidParameter(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrInvalidParameter)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsInvalidArgument]
|
||||
var IsInvalidParameter = cerrdefs.IsInvalidArgument
|
||||
|
||||
// IsConflict returns if the passed in error is an [ErrConflict].
|
||||
func IsConflict(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrConflict)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsConflict]
|
||||
var IsConflict = cerrdefs.IsConflict
|
||||
|
||||
// IsUnauthorized returns if the passed in error is an [ErrUnauthorized].
|
||||
func IsUnauthorized(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrUnauthorized)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsUnauthorized]
|
||||
var IsUnauthorized = cerrdefs.IsUnauthorized
|
||||
|
||||
// IsUnavailable returns if the passed in error is an [ErrUnavailable].
|
||||
func IsUnavailable(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrUnavailable)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsUnavailable]
|
||||
var IsUnavailable = cerrdefs.IsUnavailable
|
||||
|
||||
// IsForbidden returns if the passed in error is an [ErrForbidden].
|
||||
func IsForbidden(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrForbidden)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsPermissionDenied]
|
||||
var IsForbidden = cerrdefs.IsPermissionDenied
|
||||
|
||||
// IsSystem returns if the passed in error is an [ErrSystem].
|
||||
func IsSystem(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrSystem)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsInternal]
|
||||
var IsSystem = cerrdefs.IsInternal
|
||||
|
||||
// IsNotModified returns if the passed in error is an [ErrNotModified].
|
||||
func IsNotModified(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrNotModified)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsNotModified]
|
||||
var IsNotModified = cerrdefs.IsNotModified
|
||||
|
||||
// IsNotImplemented returns if the passed in error is an [ErrNotImplemented].
|
||||
func IsNotImplemented(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrNotImplemented)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsNotImplemented]
|
||||
var IsNotImplemented = cerrdefs.IsNotImplemented
|
||||
|
||||
// IsUnknown returns if the passed in error is an [ErrUnknown].
|
||||
func IsUnknown(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrUnknown)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsUnknown]
|
||||
var IsUnknown = cerrdefs.IsUnknown
|
||||
|
||||
// IsCancelled returns if the passed in error is an [ErrCancelled].
|
||||
func IsCancelled(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrCancelled)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsCanceled]
|
||||
var IsCancelled = cerrdefs.IsCanceled
|
||||
|
||||
// IsDeadline returns if the passed in error is an [ErrDeadline].
|
||||
func IsDeadline(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrDeadline)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsDeadlineExceeded]
|
||||
var IsDeadline = cerrdefs.IsDeadlineExceeded
|
||||
|
||||
// IsDataLoss returns if the passed in error is an [ErrDataLoss].
|
||||
func IsDataLoss(err error) bool {
|
||||
_, ok := getImplementer(err).(ErrDataLoss)
|
||||
return ok
|
||||
}
|
||||
//
|
||||
// Deprecated: use containerd [cerrdefs.IsDataLoss]
|
||||
var IsDataLoss = cerrdefs.IsDataLoss
|
||||
|
||||
// IsContext returns if the passed in error is due to context cancellation or deadline exceeded.
|
||||
func IsContext(err error) bool {
|
||||
|
||||
Reference in New Issue
Block a user