forked from TrueCloudLab/distribution
2fcad2a10f
This package, ported from next-generation docker regsitry, includes route and error definitions. These facilitate compliant V2 client implementation. The portions of the HTTP API that are included in this package are considered to be locked down and should only be changed through a careful change proposal. Descriptor definitions package layout may change without affecting API behavior until the exported Go API is ready to be locked down. When the new registry stabilizes and becomes the master branch, this package can be vendored from the registry. Signed-off-by: Stephen J Day <stephen.day@docker.com>
100 lines
2.8 KiB
Go
100 lines
2.8 KiB
Go
package v2
|
|
|
|
import (
|
|
"net/url"
|
|
"testing"
|
|
)
|
|
|
|
type urlBuilderTestCase struct {
|
|
description string
|
|
expected string
|
|
build func() (string, error)
|
|
}
|
|
|
|
// TestURLBuilder tests the various url building functions, ensuring they are
|
|
// returning the expected values.
|
|
func TestURLBuilder(t *testing.T) {
|
|
|
|
root := "http://localhost:5000/"
|
|
urlBuilder, err := NewURLBuilderFromString(root)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error creating urlbuilder: %v", err)
|
|
}
|
|
|
|
for _, testcase := range []struct {
|
|
description string
|
|
expected string
|
|
build func() (string, error)
|
|
}{
|
|
{
|
|
description: "test base url",
|
|
expected: "http://localhost:5000/v2/",
|
|
build: urlBuilder.BuildBaseURL,
|
|
},
|
|
{
|
|
description: "test tags url",
|
|
expected: "http://localhost:5000/v2/foo/bar/tags/list",
|
|
build: func() (string, error) {
|
|
return urlBuilder.BuildTagsURL("foo/bar")
|
|
},
|
|
},
|
|
{
|
|
description: "test manifest url",
|
|
expected: "http://localhost:5000/v2/foo/bar/manifests/tag",
|
|
build: func() (string, error) {
|
|
return urlBuilder.BuildManifestURL("foo/bar", "tag")
|
|
},
|
|
},
|
|
{
|
|
description: "build blob url",
|
|
expected: "http://localhost:5000/v2/foo/bar/blobs/tarsum.v1+sha256:abcdef0123456789",
|
|
build: func() (string, error) {
|
|
return urlBuilder.BuildBlobURL("foo/bar", "tarsum.v1+sha256:abcdef0123456789")
|
|
},
|
|
},
|
|
{
|
|
description: "build blob upload url",
|
|
expected: "http://localhost:5000/v2/foo/bar/blobs/uploads/",
|
|
build: func() (string, error) {
|
|
return urlBuilder.BuildBlobUploadURL("foo/bar")
|
|
},
|
|
},
|
|
{
|
|
description: "build blob upload url with digest and size",
|
|
expected: "http://localhost:5000/v2/foo/bar/blobs/uploads/?digest=tarsum.v1%2Bsha256%3Aabcdef0123456789&size=10000",
|
|
build: func() (string, error) {
|
|
return urlBuilder.BuildBlobUploadURL("foo/bar", url.Values{
|
|
"size": []string{"10000"},
|
|
"digest": []string{"tarsum.v1+sha256:abcdef0123456789"},
|
|
})
|
|
},
|
|
},
|
|
{
|
|
description: "build blob upload chunk url",
|
|
expected: "http://localhost:5000/v2/foo/bar/blobs/uploads/uuid-part",
|
|
build: func() (string, error) {
|
|
return urlBuilder.BuildBlobUploadChunkURL("foo/bar", "uuid-part")
|
|
},
|
|
},
|
|
{
|
|
description: "build blob upload chunk url with digest and size",
|
|
expected: "http://localhost:5000/v2/foo/bar/blobs/uploads/uuid-part?digest=tarsum.v1%2Bsha256%3Aabcdef0123456789&size=10000",
|
|
build: func() (string, error) {
|
|
return urlBuilder.BuildBlobUploadChunkURL("foo/bar", "uuid-part", url.Values{
|
|
"size": []string{"10000"},
|
|
"digest": []string{"tarsum.v1+sha256:abcdef0123456789"},
|
|
})
|
|
},
|
|
},
|
|
} {
|
|
u, err := testcase.build()
|
|
if err != nil {
|
|
t.Fatalf("%s: error building url: %v", testcase.description, err)
|
|
}
|
|
|
|
if u != testcase.expected {
|
|
t.Fatalf("%s: %q != %q", testcase.description, u, testcase.expected)
|
|
}
|
|
}
|
|
|
|
}
|