| package distribution // import "github.com/docker/docker/distribution" |
| |
| import ( |
| "errors" |
| "strings" |
| "syscall" |
| "testing" |
| |
| "github.com/docker/distribution/registry/api/errcode" |
| "github.com/docker/distribution/registry/client" |
| ) |
| |
| var errUnexpected = errors.New("some totally unexpected error") |
| |
| var alwaysContinue = []error{ |
| &client.UnexpectedHTTPResponseError{}, |
| errcode.Errors{}, |
| errUnexpected, |
| // nested |
| errcode.Errors{errUnexpected}, |
| } |
| |
| var continueFromMirrorEndpoint = []error{ |
| imageConfigPullError{}, |
| errcode.Error{}, |
| // nested |
| errcode.Errors{errcode.Error{}}, |
| } |
| |
| var neverContinue = []error{ |
| errors.New(strings.ToLower(syscall.ESRCH.Error())), // No such process |
| } |
| |
| func TestContinueOnError_NonMirrorEndpoint(t *testing.T) { |
| for _, err := range alwaysContinue { |
| if !continueOnError(err, false) { |
| t.Errorf("Should continue from non-mirror endpoint: %T: '%s'", err, err.Error()) |
| } |
| } |
| |
| for _, err := range continueFromMirrorEndpoint { |
| if continueOnError(err, false) { |
| t.Errorf("Should only continue from mirror endpoint: %T: '%s'", err, err.Error()) |
| } |
| } |
| } |
| |
| func TestContinueOnError_MirrorEndpoint(t *testing.T) { |
| var errs []error |
| errs = append(errs, alwaysContinue...) |
| errs = append(errs, continueFromMirrorEndpoint...) |
| for _, err := range errs { |
| if !continueOnError(err, true) { |
| t.Errorf("Should continue from mirror endpoint: %T: '%s'", err, err.Error()) |
| } |
| } |
| } |
| |
| func TestContinueOnError_NeverContinue(t *testing.T) { |
| for _, isMirrorEndpoint := range []bool{true, false} { |
| for _, err := range neverContinue { |
| if continueOnError(err, isMirrorEndpoint) { |
| t.Errorf("Should never continue: %T: '%s'", err, err.Error()) |
| } |
| } |
| } |
| } |