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}, ErrNoSupport{Err: errUnexpected}, } var continueFromMirrorEndpoint = []error{ ImageConfigPullError{}, errcode.Error{}, // nested errcode.Errors{errcode.Error{}}, ErrNoSupport{Err: 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()) } } } }