github.com/dougm/docker@v1.5.0/registry/v2/urls_test.go (about)

     1  package v2
     2  
     3  import (
     4  	"net/url"
     5  	"testing"
     6  )
     7  
     8  type urlBuilderTestCase struct {
     9  	description  string
    10  	expectedPath string
    11  	build        func() (string, error)
    12  }
    13  
    14  // TestURLBuilder tests the various url building functions, ensuring they are
    15  // returning the expected values.
    16  func TestURLBuilder(t *testing.T) {
    17  	var (
    18  		urlBuilder *URLBuilder
    19  		err        error
    20  	)
    21  
    22  	testCases := []urlBuilderTestCase{
    23  		{
    24  			description:  "test base url",
    25  			expectedPath: "/v2/",
    26  			build: func() (string, error) {
    27  				return urlBuilder.BuildBaseURL()
    28  			},
    29  		},
    30  		{
    31  			description:  "test tags url",
    32  			expectedPath: "/v2/foo/bar/tags/list",
    33  			build: func() (string, error) {
    34  				return urlBuilder.BuildTagsURL("foo/bar")
    35  			},
    36  		},
    37  		{
    38  			description:  "test manifest url",
    39  			expectedPath: "/v2/foo/bar/manifests/tag",
    40  			build: func() (string, error) {
    41  				return urlBuilder.BuildManifestURL("foo/bar", "tag")
    42  			},
    43  		},
    44  		{
    45  			description:  "build blob url",
    46  			expectedPath: "/v2/foo/bar/blobs/tarsum.v1+sha256:abcdef0123456789",
    47  			build: func() (string, error) {
    48  				return urlBuilder.BuildBlobURL("foo/bar", "tarsum.v1+sha256:abcdef0123456789")
    49  			},
    50  		},
    51  		{
    52  			description:  "build blob upload url",
    53  			expectedPath: "/v2/foo/bar/blobs/uploads/",
    54  			build: func() (string, error) {
    55  				return urlBuilder.BuildBlobUploadURL("foo/bar")
    56  			},
    57  		},
    58  		{
    59  			description:  "build blob upload url with digest and size",
    60  			expectedPath: "/v2/foo/bar/blobs/uploads/?digest=tarsum.v1%2Bsha256%3Aabcdef0123456789&size=10000",
    61  			build: func() (string, error) {
    62  				return urlBuilder.BuildBlobUploadURL("foo/bar", url.Values{
    63  					"size":   []string{"10000"},
    64  					"digest": []string{"tarsum.v1+sha256:abcdef0123456789"},
    65  				})
    66  			},
    67  		},
    68  		{
    69  			description:  "build blob upload chunk url",
    70  			expectedPath: "/v2/foo/bar/blobs/uploads/uuid-part",
    71  			build: func() (string, error) {
    72  				return urlBuilder.BuildBlobUploadChunkURL("foo/bar", "uuid-part")
    73  			},
    74  		},
    75  		{
    76  			description:  "build blob upload chunk url with digest and size",
    77  			expectedPath: "/v2/foo/bar/blobs/uploads/uuid-part?digest=tarsum.v1%2Bsha256%3Aabcdef0123456789&size=10000",
    78  			build: func() (string, error) {
    79  				return urlBuilder.BuildBlobUploadChunkURL("foo/bar", "uuid-part", url.Values{
    80  					"size":   []string{"10000"},
    81  					"digest": []string{"tarsum.v1+sha256:abcdef0123456789"},
    82  				})
    83  			},
    84  		},
    85  	}
    86  
    87  	roots := []string{
    88  		"http://example.com",
    89  		"https://example.com",
    90  		"http://localhost:5000",
    91  		"https://localhost:5443",
    92  	}
    93  
    94  	for _, root := range roots {
    95  		urlBuilder, err = NewURLBuilderFromString(root)
    96  		if err != nil {
    97  			t.Fatalf("unexpected error creating urlbuilder: %v", err)
    98  		}
    99  
   100  		for _, testCase := range testCases {
   101  			url, err := testCase.build()
   102  			if err != nil {
   103  				t.Fatalf("%s: error building url: %v", testCase.description, err)
   104  			}
   105  
   106  			expectedURL := root + testCase.expectedPath
   107  
   108  			if url != expectedURL {
   109  				t.Fatalf("%s: %q != %q", testCase.description, url, expectedURL)
   110  			}
   111  		}
   112  	}
   113  }