Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 

92 righe
2.3 KiB

  1. package martiantest
  2. import (
  3. "errors"
  4. "net/http"
  5. "testing"
  6. "github.com/google/martian/proxyutil"
  7. )
  8. func TestTransport(t *testing.T) {
  9. req, err := http.NewRequest("GET", "http://example.com", nil)
  10. if err != nil {
  11. t.Fatalf("http.NewRequest(): got %v, want no error", err)
  12. }
  13. tr := NewTransport()
  14. res, err := tr.RoundTrip(req)
  15. if err != nil {
  16. t.Fatalf("tr.Roundtrip(): got %v, want no error", err)
  17. }
  18. res.Body.Close()
  19. if got, want := res.StatusCode, 200; got != want {
  20. t.Errorf("res.StatusCode: got %d, want %d", got, want)
  21. }
  22. // Respond with 301 response.
  23. tr.Respond(301)
  24. res, err = tr.RoundTrip(req)
  25. if err != nil {
  26. t.Fatalf("tr.Roundtrip(): got %v, want no error", err)
  27. }
  28. res.Body.Close()
  29. if got, want := res.StatusCode, 301; got != want {
  30. t.Errorf("res.StatusCode: got %d, want %d", got, want)
  31. }
  32. // Respond with error.
  33. trerr := errors.New("transport error")
  34. tr.RespondError(trerr)
  35. if _, err := tr.RoundTrip(req); err != trerr {
  36. t.Fatalf("tr.Roundtrip(): got %v, want %v", err, trerr)
  37. }
  38. // Copy headers from request to response.
  39. req.Header.Set("First-Header", "first")
  40. req.Header.Set("Second-Header", "second")
  41. tr.CopyHeaders("First-Header", "Second-Header")
  42. res, err = tr.RoundTrip(req)
  43. if err != nil {
  44. t.Fatalf("tr.Roundtrip(): got %v, want no error", err)
  45. }
  46. res.Body.Close()
  47. if got, want := res.StatusCode, 200; got != want {
  48. t.Errorf("res.StatusCode: got %d, want %d", got, want)
  49. }
  50. if got, want := res.Header.Get("First-Header"), "first"; got != want {
  51. t.Errorf("res.Header.Get(%q): got %q, want %q", "First-Header", got, want)
  52. }
  53. if got, want := res.Header.Get("Second-Header"), "second"; got != want {
  54. t.Errorf("res.Header.Get(%q): got %q, want %q", "Second-Header", got, want)
  55. }
  56. // Custom round trip function.
  57. tr.Func(func(req *http.Request) (*http.Response, error) {
  58. res := proxyutil.NewResponse(200, nil, req)
  59. res.Header.Set("Request-Method", req.Method)
  60. return res, nil
  61. })
  62. res, err = tr.RoundTrip(req)
  63. if err != nil {
  64. t.Fatalf("tr.Roundtrip(): got %v, want no error", err)
  65. }
  66. res.Body.Close()
  67. if got, want := res.StatusCode, 200; got != want {
  68. t.Errorf("res.StatusCode: got %d, want %d", got, want)
  69. }
  70. if got, want := res.Header.Get("Request-Method"), "GET"; got != want {
  71. t.Errorf("res.Header.Get(%q): got %q, want %q", "Request-Method", got, want)
  72. }
  73. }