github.com/mika/distribution@v2.2.2-0.20160108133430-a75790e3d8e0+incompatible/registry/storage/paths_test.go (about)

     1  package storage
     2  
     3  import (
     4  	"testing"
     5  )
     6  
     7  func TestPathMapper(t *testing.T) {
     8  	for _, testcase := range []struct {
     9  		spec     pathSpec
    10  		expected string
    11  		err      error
    12  	}{
    13  		{
    14  			spec: manifestRevisionPathSpec{
    15  				name:     "foo/bar",
    16  				revision: "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
    17  			},
    18  			expected: "/docker/registry/v2/repositories/foo/bar/_manifests/revisions/sha256/abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
    19  		},
    20  		{
    21  			spec: manifestRevisionLinkPathSpec{
    22  				name:     "foo/bar",
    23  				revision: "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
    24  			},
    25  			expected: "/docker/registry/v2/repositories/foo/bar/_manifests/revisions/sha256/abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789/link",
    26  		},
    27  		{
    28  			spec: manifestSignatureLinkPathSpec{
    29  				name:      "foo/bar",
    30  				revision:  "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
    31  				signature: "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
    32  			},
    33  			expected: "/docker/registry/v2/repositories/foo/bar/_manifests/revisions/sha256/abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789/signatures/sha256/abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789/link",
    34  		},
    35  		{
    36  			spec: manifestSignaturesPathSpec{
    37  				name:     "foo/bar",
    38  				revision: "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
    39  			},
    40  			expected: "/docker/registry/v2/repositories/foo/bar/_manifests/revisions/sha256/abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789/signatures",
    41  		},
    42  		{
    43  			spec: manifestTagsPathSpec{
    44  				name: "foo/bar",
    45  			},
    46  			expected: "/docker/registry/v2/repositories/foo/bar/_manifests/tags",
    47  		},
    48  		{
    49  			spec: manifestTagPathSpec{
    50  				name: "foo/bar",
    51  				tag:  "thetag",
    52  			},
    53  			expected: "/docker/registry/v2/repositories/foo/bar/_manifests/tags/thetag",
    54  		},
    55  		{
    56  			spec: manifestTagCurrentPathSpec{
    57  				name: "foo/bar",
    58  				tag:  "thetag",
    59  			},
    60  			expected: "/docker/registry/v2/repositories/foo/bar/_manifests/tags/thetag/current/link",
    61  		},
    62  		{
    63  			spec: manifestTagIndexPathSpec{
    64  				name: "foo/bar",
    65  				tag:  "thetag",
    66  			},
    67  			expected: "/docker/registry/v2/repositories/foo/bar/_manifests/tags/thetag/index",
    68  		},
    69  		{
    70  			spec: manifestTagIndexEntryPathSpec{
    71  				name:     "foo/bar",
    72  				tag:      "thetag",
    73  				revision: "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
    74  			},
    75  			expected: "/docker/registry/v2/repositories/foo/bar/_manifests/tags/thetag/index/sha256/abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
    76  		},
    77  		{
    78  			spec: manifestTagIndexEntryLinkPathSpec{
    79  				name:     "foo/bar",
    80  				tag:      "thetag",
    81  				revision: "sha256:abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
    82  			},
    83  			expected: "/docker/registry/v2/repositories/foo/bar/_manifests/tags/thetag/index/sha256/abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789/link",
    84  		},
    85  
    86  		{
    87  			spec: uploadDataPathSpec{
    88  				name: "foo/bar",
    89  				id:   "asdf-asdf-asdf-adsf",
    90  			},
    91  			expected: "/docker/registry/v2/repositories/foo/bar/_uploads/asdf-asdf-asdf-adsf/data",
    92  		},
    93  		{
    94  			spec: uploadStartedAtPathSpec{
    95  				name: "foo/bar",
    96  				id:   "asdf-asdf-asdf-adsf",
    97  			},
    98  			expected: "/docker/registry/v2/repositories/foo/bar/_uploads/asdf-asdf-asdf-adsf/startedat",
    99  		},
   100  	} {
   101  		p, err := pathFor(testcase.spec)
   102  		if err != nil {
   103  			t.Fatalf("unexpected generating path (%T): %v", testcase.spec, err)
   104  		}
   105  
   106  		if p != testcase.expected {
   107  			t.Fatalf("unexpected path generated (%T): %q != %q", testcase.spec, p, testcase.expected)
   108  		}
   109  	}
   110  
   111  	// Add a few test cases to ensure we cover some errors
   112  
   113  	// Specify a path that requires a revision and get a digest validation error.
   114  	badpath, err := pathFor(manifestSignaturesPathSpec{
   115  		name: "foo/bar",
   116  	})
   117  
   118  	if err == nil {
   119  		t.Fatalf("expected an error when mapping an invalid revision: %s", badpath)
   120  	}
   121  
   122  }