registry/endpoint_test.go
3eba7194
 package registry
 
f46923be
 import (
 	"net/http"
 	"net/http/httptest"
 	"net/url"
 	"testing"
 )
3eba7194
 
 func TestEndpointParse(t *testing.T) {
 	testData := []struct {
 		str      string
 		expected string
 	}{
4fcb9ac4
 		{IndexServer, IndexServer},
41e20cec
 		{"http://0.0.0.0:5000/v1/", "http://0.0.0.0:5000/v1/"},
f2d481a2
 		{"http://0.0.0.0:5000", "http://0.0.0.0:5000/v1/"},
 		{"0.0.0.0:5000", "https://0.0.0.0:5000/v1/"},
 		{"http://0.0.0.0:5000/nonversion/", "http://0.0.0.0:5000/nonversion/v1/"},
 		{"http://0.0.0.0:5000/v0/", "http://0.0.0.0:5000/v0/v1/"},
3eba7194
 	}
 	for _, td := range testData {
f2d481a2
 		e, err := newV1EndpointFromStr(td.str, nil, "", nil)
3eba7194
 		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())
 		}
 	}
 }
f46923be
 
f2d481a2
 func TestEndpointParseInvalid(t *testing.T) {
 	testData := []string{
 		"http://0.0.0.0:5000/v2/",
 	}
 	for _, td := range testData {
 		e, err := newV1EndpointFromStr(td, nil, "", nil)
 		if err == nil {
 			t.Errorf("expected error parsing %q: parsed as %q", td, e)
 		}
 	}
 }
 
f46923be
 // Ensure that a registry endpoint that responds with a 401 only is determined
f2d481a2
 // to be a valid v1 registry endpoint
 func TestValidateEndpoint(t *testing.T) {
f46923be
 	requireBasicAuthHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 		w.Header().Add("WWW-Authenticate", `Basic realm="localhost"`)
 		w.WriteHeader(http.StatusUnauthorized)
 	})
 
 	// 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)
 	}
 
f2d481a2
 	testEndpoint := V1Endpoint{
 		URL:    testServerURL,
 		client: HTTPClient(NewTransport(nil)),
f46923be
 	}
 
 	if err = validateEndpoint(&testEndpoint); err != nil {
 		t.Fatal(err)
 	}
 
f2d481a2
 	if testEndpoint.URL.Scheme != "http" {
 		t.Fatalf("expecting to validate endpoint as http, got url %s", testEndpoint.String())
f46923be
 	}
 }