transport_test.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Copyright 2015 The Go Authors.
  2. // See https://go.googlesource.com/go/+/master/CONTRIBUTORS
  3. // Licensed under the same terms as Go itself:
  4. // https://go.googlesource.com/go/+/master/LICENSE
  5. package http2
  6. import (
  7. "flag"
  8. "io"
  9. "io/ioutil"
  10. "net/http"
  11. "os"
  12. "reflect"
  13. "testing"
  14. )
  15. var (
  16. extNet = flag.Bool("extnet", false, "do external network tests")
  17. transportHost = flag.String("transporthost", "http2.golang.org", "hostname to use for TestTransport")
  18. insecure = flag.Bool("insecure", false, "insecure TLS dials")
  19. )
  20. func TestTransportExternal(t *testing.T) {
  21. if !*extNet {
  22. t.Skip("skipping external network test")
  23. }
  24. req, _ := http.NewRequest("GET", "https://"+*transportHost+"/", nil)
  25. rt := &Transport{
  26. InsecureTLSDial: *insecure,
  27. }
  28. res, err := rt.RoundTrip(req)
  29. if err != nil {
  30. t.Fatalf("%v", err)
  31. }
  32. res.Write(os.Stdout)
  33. }
  34. func TestTransport(t *testing.T) {
  35. const body = "sup"
  36. st := newServerTester(t, func(w http.ResponseWriter, r *http.Request) {
  37. io.WriteString(w, body)
  38. })
  39. defer st.Close()
  40. tr := &Transport{
  41. InsecureTLSDial: true,
  42. }
  43. req, err := http.NewRequest("GET", st.ts.URL, nil)
  44. if err != nil {
  45. t.Fatal(err)
  46. }
  47. res, err := tr.RoundTrip(req)
  48. if err != nil {
  49. t.Fatal(err)
  50. }
  51. defer res.Body.Close()
  52. t.Logf("Got res: %+v", res)
  53. if g, w := res.StatusCode, 200; g != w {
  54. t.Errorf("StatusCode = %v; want %v", g, w)
  55. }
  56. if g, w := res.Status, "200 OK"; g != w {
  57. t.Errorf("Status = %q; want %q", g, w)
  58. }
  59. wantHeader := http.Header{
  60. "Content-Length": []string{"3"},
  61. "Content-Type": []string{"text/plain; charset=utf-8"},
  62. }
  63. if !reflect.DeepEqual(res.Header, wantHeader) {
  64. t.Errorf("res Header = %v; want %v", res.Header, wantHeader)
  65. }
  66. if res.Request != req {
  67. t.Errorf("Response.Request = %p; want %p", res.Request, req)
  68. }
  69. if res.TLS == nil {
  70. t.Errorf("Response.TLS = nil; want non-nil", res.TLS)
  71. }
  72. slurp, err := ioutil.ReadAll(res.Body)
  73. if err != nil {
  74. t.Error("Body read: %v", err)
  75. } else if string(slurp) != body {
  76. t.Errorf("Body = %q; want %q", slurp, body)
  77. }
  78. }