10 func TestEndpointParse(t *testing.T) {
11 testData := []struct {
15 {IndexServer, IndexServer},
16 {"http://0.0.0.0:5000/v1/", "http://0.0.0.0:5000/v1/"},
17 {"http://0.0.0.0:5000", "http://0.0.0.0:5000/v1/"},
18 {"0.0.0.0:5000", "https://0.0.0.0:5000/v1/"},
19 {"http://0.0.0.0:5000/nonversion/", "http://0.0.0.0:5000/nonversion/v1/"},
20 {"http://0.0.0.0:5000/v0/", "http://0.0.0.0:5000/v0/v1/"},
22 for _, td := range testData {
23 e, err := newV1EndpointFromStr(td.str, nil, "", nil)
25 t.Errorf("%q: %s", td.str, err)
28 t.Logf("something's fishy, endpoint for %q is nil", td.str)
31 if e.String() != td.expected {
32 t.Errorf("expected %q, got %q", td.expected, e.String())
37 func TestEndpointParseInvalid(t *testing.T) {
39 "http://0.0.0.0:5000/v2/",
41 for _, td := range testData {
42 e, err := newV1EndpointFromStr(td, nil, "", nil)
44 t.Errorf("expected error parsing %q: parsed as %q", td, e)
49 // Ensure that a registry endpoint that responds with a 401 only is determined
50 // to be a valid v1 registry endpoint
51 func TestValidateEndpoint(t *testing.T) {
52 requireBasicAuthHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
53 w.Header().Add("WWW-Authenticate", `Basic realm="localhost"`)
54 w.WriteHeader(http.StatusUnauthorized)
57 // Make a test server which should validate as a v1 server.
58 testServer := httptest.NewServer(requireBasicAuthHandler)
59 defer testServer.Close()
61 testServerURL, err := url.Parse(testServer.URL)
66 testEndpoint := V1Endpoint{
68 client: HTTPClient(NewTransport(nil)),
71 if err = validateEndpoint(&testEndpoint); err != nil {
75 if testEndpoint.URL.Scheme != "http" {
76 t.Fatalf("expecting to validate endpoint as http, got url %s", testEndpoint.String())