github.com/tonistiigi/docker@v0.10.1-0.20240229224939-974013b0dc6a/distribution/errors_test.go (about)

     1  package distribution // import "github.com/docker/docker/distribution"
     2  
     3  import (
     4  	"errors"
     5  	"strings"
     6  	"syscall"
     7  	"testing"
     8  
     9  	"github.com/docker/distribution/registry/api/errcode"
    10  	"github.com/docker/distribution/registry/client"
    11  )
    12  
    13  var errUnexpected = errors.New("some totally unexpected error")
    14  
    15  var alwaysContinue = []error{
    16  	&client.UnexpectedHTTPResponseError{},
    17  	errcode.Errors{},
    18  	errUnexpected,
    19  	// nested
    20  	errcode.Errors{errUnexpected},
    21  }
    22  
    23  var continueFromMirrorEndpoint = []error{
    24  	imageConfigPullError{},
    25  	errcode.Error{},
    26  	// nested
    27  	errcode.Errors{errcode.Error{}},
    28  }
    29  
    30  var neverContinue = []error{
    31  	errors.New(strings.ToLower(syscall.ESRCH.Error())), // No such process
    32  }
    33  
    34  func TestContinueOnError_NonMirrorEndpoint(t *testing.T) {
    35  	for _, err := range alwaysContinue {
    36  		if !continueOnError(err, false) {
    37  			t.Errorf("Should continue from non-mirror endpoint: %T: '%s'", err, err.Error())
    38  		}
    39  	}
    40  
    41  	for _, err := range continueFromMirrorEndpoint {
    42  		if continueOnError(err, false) {
    43  			t.Errorf("Should only continue from mirror endpoint: %T: '%s'", err, err.Error())
    44  		}
    45  	}
    46  }
    47  
    48  func TestContinueOnError_MirrorEndpoint(t *testing.T) {
    49  	var errs []error
    50  	errs = append(errs, alwaysContinue...)
    51  	errs = append(errs, continueFromMirrorEndpoint...)
    52  	for _, err := range errs {
    53  		if !continueOnError(err, true) {
    54  			t.Errorf("Should continue from mirror endpoint: %T: '%s'", err, err.Error())
    55  		}
    56  	}
    57  }
    58  
    59  func TestContinueOnError_NeverContinue(t *testing.T) {
    60  	for _, isMirrorEndpoint := range []bool{true, false} {
    61  		for _, err := range neverContinue {
    62  			if continueOnError(err, isMirrorEndpoint) {
    63  				t.Errorf("Should never continue: %T: '%s'", err, err.Error())
    64  			}
    65  		}
    66  	}
    67  }