...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package transport
16
17 import (
18 "bytes"
19 "io/ioutil"
20 "net/http"
21 "net/http/httptest"
22 "testing"
23 "time"
24 )
25
26
27
28 func TestNewTimeoutTransport(t *testing.T) {
29 tr, err := NewTimeoutTransport(TLSInfo{}, time.Hour, time.Hour, time.Hour)
30 if err != nil {
31 t.Fatalf("unexpected NewTimeoutTransport error: %v", err)
32 }
33
34 remoteAddr := func(w http.ResponseWriter, r *http.Request) {
35 w.Write([]byte(r.RemoteAddr))
36 }
37 srv := httptest.NewServer(http.HandlerFunc(remoteAddr))
38
39 defer srv.Close()
40 conn, err := tr.Dial("tcp", srv.Listener.Addr().String())
41 if err != nil {
42 t.Fatalf("unexpected dial error: %v", err)
43 }
44 defer conn.Close()
45
46 tconn, ok := conn.(*timeoutConn)
47 if !ok {
48 t.Fatalf("failed to dial out *timeoutConn")
49 }
50 if tconn.readTimeout != time.Hour {
51 t.Errorf("read timeout = %s, want %s", tconn.readTimeout, time.Hour)
52 }
53 if tconn.writeTimeout != time.Hour {
54 t.Errorf("write timeout = %s, want %s", tconn.writeTimeout, time.Hour)
55 }
56
57
58 req, err := http.NewRequest("GET", srv.URL, nil)
59 if err != nil {
60 t.Fatalf("unexpected err %v", err)
61 }
62 resp, err := tr.RoundTrip(req)
63 if err != nil {
64 t.Fatalf("unexpected err %v", err)
65 }
66 addr0, err := ioutil.ReadAll(resp.Body)
67 resp.Body.Close()
68 if err != nil {
69 t.Fatalf("unexpected err %v", err)
70 }
71
72 resp, err = tr.RoundTrip(req)
73 if err != nil {
74 t.Fatalf("unexpected err %v", err)
75 }
76 addr1, err := ioutil.ReadAll(resp.Body)
77 resp.Body.Close()
78 if err != nil {
79 t.Fatalf("unexpected err %v", err)
80 }
81
82 if bytes.Equal(addr0, addr1) {
83 t.Errorf("addr0 = %s addr1= %s, want not equal", string(addr0), string(addr1))
84 }
85 }
86
View as plain text