httputils_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package httputils
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "net/http"
  6. "net/http/httptest"
  7. "strings"
  8. "testing"
  9. )
  10. func TestDownload(t *testing.T) {
  11. expected := "Hello, docker !"
  12. ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  13. fmt.Fprintf(w, expected)
  14. }))
  15. defer ts.Close()
  16. response, err := Download(ts.URL)
  17. if err != nil {
  18. t.Fatal(err)
  19. }
  20. actual, err := ioutil.ReadAll(response.Body)
  21. response.Body.Close()
  22. if err != nil || string(actual) != expected {
  23. t.Fatalf("Expected the response %q, got err:%q, actual:%q", expected, err, string(actual))
  24. }
  25. }
  26. func TestDownload400Errors(t *testing.T) {
  27. expectedError := "Got HTTP status code >= 400: 403 Forbidden"
  28. ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  29. // 403
  30. http.Error(w, "something failed (forbidden)", http.StatusForbidden)
  31. }))
  32. defer ts.Close()
  33. // Expected status code = 403
  34. if _, err := Download(ts.URL); err == nil || err.Error() != expectedError {
  35. t.Fatalf("Expected the error %q, got %q", expectedError, err)
  36. }
  37. }
  38. func TestDownloadOtherErrors(t *testing.T) {
  39. if _, err := Download("I'm not an url.."); err == nil || !strings.Contains(err.Error(), "unsupported protocol scheme") {
  40. t.Fatalf("Expected an error with 'unsupported protocol scheme', got %q", err)
  41. }
  42. }
  43. func TestNewHTTPRequestError(t *testing.T) {
  44. errorMessage := "Some error message"
  45. ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  46. // 403
  47. http.Error(w, errorMessage, http.StatusForbidden)
  48. }))
  49. defer ts.Close()
  50. httpResponse, err := http.Get(ts.URL)
  51. if err != nil {
  52. t.Fatal(err)
  53. }
  54. if err := NewHTTPRequestError(errorMessage, httpResponse); err.Error() != errorMessage {
  55. t.Fatalf("Expected err to be %q, got %q", errorMessage, err)
  56. }
  57. }
  58. func TestParseServerHeader(t *testing.T) {
  59. inputs := map[string][]string{
  60. "bad header": {"error"},
  61. "(bad header)": {"error"},
  62. "(without/spaces)": {"error"},
  63. "(header/with spaces)": {"error"},
  64. "foo/bar (baz)": {"foo", "bar", "baz"},
  65. "foo/bar": {"error"},
  66. "foo": {"error"},
  67. "foo/bar (baz space)": {"foo", "bar", "baz space"},
  68. " f f / b b ( b s ) ": {"f f", "b b", "b s"},
  69. "foo/bar (baz) ignore": {"foo", "bar", "baz"},
  70. "foo/bar ()": {"error"},
  71. "foo/bar()": {"error"},
  72. "foo/bar(baz)": {"foo", "bar", "baz"},
  73. "foo/bar/zzz(baz)": {"foo/bar", "zzz", "baz"},
  74. "foo/bar(baz/abc)": {"foo", "bar", "baz/abc"},
  75. "foo/bar(baz (abc))": {"foo", "bar", "baz (abc)"},
  76. }
  77. for header, values := range inputs {
  78. serverHeader, err := ParseServerHeader(header)
  79. if err != nil {
  80. if err != errInvalidHeader {
  81. t.Fatalf("Failed to parse %q, and got some unexpected error: %q", header, err)
  82. }
  83. if values[0] == "error" {
  84. continue
  85. }
  86. t.Fatalf("Header %q failed to parse when it shouldn't have", header)
  87. }
  88. if values[0] == "error" {
  89. t.Fatalf("Header %q parsed ok when it should have failed(%q).", header, serverHeader)
  90. }
  91. if serverHeader.App != values[0] {
  92. t.Fatalf("Expected serverHeader.App for %q to equal %q, got %q", header, values[0], serverHeader.App)
  93. }
  94. if serverHeader.Ver != values[1] {
  95. t.Fatalf("Expected serverHeader.Ver for %q to equal %q, got %q", header, values[1], serverHeader.Ver)
  96. }
  97. if serverHeader.OS != values[2] {
  98. t.Fatalf("Expected serverHeader.OS for %q to equal %q, got %q", header, values[2], serverHeader.OS)
  99. }
  100. }
  101. }