endpoint_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package registry
  2. import (
  3. "net/http"
  4. "net/http/httptest"
  5. "net/url"
  6. "testing"
  7. )
  8. func TestEndpointParse(t *testing.T) {
  9. testData := []struct {
  10. str string
  11. expected string
  12. }{
  13. {IndexServer, IndexServer},
  14. {"http://0.0.0.0:5000/v1/", "http://0.0.0.0:5000/v1/"},
  15. {"http://0.0.0.0:5000", "http://0.0.0.0:5000/v1/"},
  16. {"0.0.0.0:5000", "https://0.0.0.0:5000/v1/"},
  17. {"http://0.0.0.0:5000/nonversion/", "http://0.0.0.0:5000/nonversion/v1/"},
  18. {"http://0.0.0.0:5000/v0/", "http://0.0.0.0:5000/v0/v1/"},
  19. }
  20. for _, td := range testData {
  21. e, err := newV1EndpointFromStr(td.str, nil, "", nil)
  22. if err != nil {
  23. t.Errorf("%q: %s", td.str, err)
  24. }
  25. if e == nil {
  26. t.Logf("something's fishy, endpoint for %q is nil", td.str)
  27. continue
  28. }
  29. if e.String() != td.expected {
  30. t.Errorf("expected %q, got %q", td.expected, e.String())
  31. }
  32. }
  33. }
  34. func TestEndpointParseInvalid(t *testing.T) {
  35. testData := []string{
  36. "http://0.0.0.0:5000/v2/",
  37. }
  38. for _, td := range testData {
  39. e, err := newV1EndpointFromStr(td, nil, "", nil)
  40. if err == nil {
  41. t.Errorf("expected error parsing %q: parsed as %q", td, e)
  42. }
  43. }
  44. }
  45. // Ensure that a registry endpoint that responds with a 401 only is determined
  46. // to be a valid v1 registry endpoint
  47. func TestValidateEndpoint(t *testing.T) {
  48. requireBasicAuthHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  49. w.Header().Add("WWW-Authenticate", `Basic realm="localhost"`)
  50. w.WriteHeader(http.StatusUnauthorized)
  51. })
  52. // Make a test server which should validate as a v1 server.
  53. testServer := httptest.NewServer(requireBasicAuthHandler)
  54. defer testServer.Close()
  55. testServerURL, err := url.Parse(testServer.URL)
  56. if err != nil {
  57. t.Fatal(err)
  58. }
  59. testEndpoint := V1Endpoint{
  60. URL: testServerURL,
  61. client: HTTPClient(NewTransport(nil)),
  62. }
  63. if err = validateEndpoint(&testEndpoint); err != nil {
  64. t.Fatal(err)
  65. }
  66. if testEndpoint.URL.Scheme != "http" {
  67. t.Fatalf("expecting to validate endpoint as http, got url %s", testEndpoint.String())
  68. }
  69. }