123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package registry
- import (
- "net/http"
- "net/http/httptest"
- "net/url"
- "testing"
- )
- func TestEndpointParse(t *testing.T) {
- testData := []struct {
- str string
- expected string
- }{
- {IndexServer, IndexServer},
- {"http://0.0.0.0:5000/v1/", "http://0.0.0.0:5000/v1/"},
- {"http://0.0.0.0:5000/v2/", "http://0.0.0.0:5000/v2/"},
- {"http://0.0.0.0:5000", "http://0.0.0.0:5000/v0/"},
- {"0.0.0.0:5000", "https://0.0.0.0:5000/v0/"},
- }
- for _, td := range testData {
- e, err := newEndpoint(td.str, nil, nil)
- if err != nil {
- t.Errorf("%q: %s", td.str, err)
- }
- if e == nil {
- t.Logf("something's fishy, endpoint for %q is nil", td.str)
- continue
- }
- if e.String() != td.expected {
- t.Errorf("expected %q, got %q", td.expected, e.String())
- }
- }
- }
- // Ensure that a registry endpoint that responds with a 401 only is determined
- // to be a v1 registry unless it includes a valid v2 API header.
- func TestValidateEndpointAmbiguousAPIVersion(t *testing.T) {
- requireBasicAuthHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- w.Header().Add("WWW-Authenticate", `Basic realm="localhost"`)
- w.WriteHeader(http.StatusUnauthorized)
- })
- requireBasicAuthHandlerV2 := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- // This mock server supports v2.0, v2.1, v42.0, and v100.0
- w.Header().Add("Docker-Distribution-API-Version", "registry/100.0 registry/42.0")
- w.Header().Add("Docker-Distribution-API-Version", "registry/2.0 registry/2.1")
- requireBasicAuthHandler.ServeHTTP(w, r)
- })
- // Make a test server which should validate as a v1 server.
- testServer := httptest.NewServer(requireBasicAuthHandler)
- defer testServer.Close()
- testServerURL, err := url.Parse(testServer.URL)
- if err != nil {
- t.Fatal(err)
- }
- testEndpoint := Endpoint{
- URL: testServerURL,
- Version: APIVersionUnknown,
- client: HTTPClient(NewTransport(nil)),
- }
- if err = validateEndpoint(&testEndpoint); err != nil {
- t.Fatal(err)
- }
- if testEndpoint.Version != APIVersion1 {
- t.Fatalf("expected endpoint to validate to %d, got %d", APIVersion1, testEndpoint.Version)
- }
- // Make a test server which should validate as a v2 server.
- testServer = httptest.NewServer(requireBasicAuthHandlerV2)
- defer testServer.Close()
- testServerURL, err = url.Parse(testServer.URL)
- if err != nil {
- t.Fatal(err)
- }
- testEndpoint.URL = testServerURL
- testEndpoint.Version = APIVersionUnknown
- if err = validateEndpoint(&testEndpoint); err != nil {
- t.Fatal(err)
- }
- if testEndpoint.Version != APIVersion2 {
- t.Fatalf("expected endpoint to validate to %d, got %d", APIVersion2, testEndpoint.Version)
- }
- }
|