@@ -10,7 +10,6 @@ import (
10
10
"bytes"
11
11
"context"
12
12
"crypto/tls"
13
- "crypto/x509"
14
13
"encoding/base64"
15
14
"errors"
16
15
"fmt"
@@ -73,7 +72,7 @@ func TestClient(t *testing.T) {
73
72
ts := httptest .NewServer (robotsTxtHandler )
74
73
defer ts .Close ()
75
74
76
- c := & Client { Transport : & Transport { DisableKeepAlives : true }}
75
+ c := ts . Client ()
77
76
r , err := c .Get (ts .URL )
78
77
var b []byte
79
78
if err == nil {
@@ -220,10 +219,7 @@ func TestClientRedirects(t *testing.T) {
220
219
}))
221
220
defer ts .Close ()
222
221
223
- tr := & Transport {}
224
- defer tr .CloseIdleConnections ()
225
-
226
- c := & Client {Transport : tr }
222
+ c := ts .Client ()
227
223
_ , err := c .Get (ts .URL )
228
224
if e , g := "Get /?n=10: stopped after 10 redirects" , fmt .Sprintf ("%v" , err ); e != g {
229
225
t .Errorf ("with default client Get, expected error %q, got %q" , e , g )
@@ -252,13 +248,10 @@ func TestClientRedirects(t *testing.T) {
252
248
var checkErr error
253
249
var lastVia []* Request
254
250
var lastReq * Request
255
- c = & Client {
256
- Transport : tr ,
257
- CheckRedirect : func (req * Request , via []* Request ) error {
258
- lastReq = req
259
- lastVia = via
260
- return checkErr
261
- },
251
+ c .CheckRedirect = func (req * Request , via []* Request ) error {
252
+ lastReq = req
253
+ lastVia = via
254
+ return checkErr
262
255
}
263
256
res , err := c .Get (ts .URL )
264
257
if err != nil {
@@ -313,21 +306,16 @@ func TestClientRedirectContext(t *testing.T) {
313
306
}))
314
307
defer ts .Close ()
315
308
316
- tr := & Transport {}
317
- defer tr .CloseIdleConnections ()
318
-
319
309
ctx , cancel := context .WithCancel (context .Background ())
320
- c := & Client {
321
- Transport : tr ,
322
- CheckRedirect : func (req * Request , via []* Request ) error {
323
- cancel ()
324
- select {
325
- case <- req .Context ().Done ():
326
- return nil
327
- case <- time .After (5 * time .Second ):
328
- return errors .New ("redirected request's context never expired after root request canceled" )
329
- }
330
- },
310
+ c := ts .Client ()
311
+ c .CheckRedirect = func (req * Request , via []* Request ) error {
312
+ cancel ()
313
+ select {
314
+ case <- req .Context ().Done ():
315
+ return nil
316
+ case <- time .After (5 * time .Second ):
317
+ return errors .New ("redirected request's context never expired after root request canceled" )
318
+ }
331
319
}
332
320
req , _ := NewRequest ("GET" , ts .URL , nil )
333
321
req = req .WithContext (ctx )
@@ -461,11 +449,12 @@ func testRedirectsByMethod(t *testing.T, method string, table []redirectTest, wa
461
449
}))
462
450
defer ts .Close ()
463
451
452
+ c := ts .Client ()
464
453
for _ , tt := range table {
465
454
content := tt .redirectBody
466
455
req , _ := NewRequest (method , ts .URL + tt .suffix , strings .NewReader (content ))
467
456
req .GetBody = func () (io.ReadCloser , error ) { return ioutil .NopCloser (strings .NewReader (content )), nil }
468
- res , err := DefaultClient .Do (req )
457
+ res , err := c .Do (req )
469
458
470
459
if err != nil {
471
460
t .Fatal (err )
@@ -519,17 +508,12 @@ func TestClientRedirectUseResponse(t *testing.T) {
519
508
}))
520
509
defer ts .Close ()
521
510
522
- tr := & Transport {}
523
- defer tr .CloseIdleConnections ()
524
-
525
- c := & Client {
526
- Transport : tr ,
527
- CheckRedirect : func (req * Request , via []* Request ) error {
528
- if req .Response == nil {
529
- t .Error ("expected non-nil Request.Response" )
530
- }
531
- return ErrUseLastResponse
532
- },
511
+ c := ts .Client ()
512
+ c .CheckRedirect = func (req * Request , via []* Request ) error {
513
+ if req .Response == nil {
514
+ t .Error ("expected non-nil Request.Response" )
515
+ }
516
+ return ErrUseLastResponse
533
517
}
534
518
res , err := c .Get (ts .URL )
535
519
if err != nil {
@@ -558,7 +542,7 @@ func TestClientRedirect308NoLocation(t *testing.T) {
558
542
w .WriteHeader (308 )
559
543
}))
560
544
defer ts .Close ()
561
- c := & Client { Transport : & Transport { DisableKeepAlives : true }}
545
+ c := ts . Client ()
562
546
res , err := c .Get (ts .URL )
563
547
if err != nil {
564
548
t .Fatal (err )
@@ -586,7 +570,7 @@ func TestClientRedirect308NoGetBody(t *testing.T) {
586
570
if err != nil {
587
571
t .Fatal (err )
588
572
}
589
- c := & Client { Transport : & Transport { DisableKeepAlives : true }}
573
+ c := ts . Client ()
590
574
req .GetBody = nil // so it can't rewind.
591
575
res , err := c .Do (req )
592
576
if err != nil {
@@ -678,12 +662,8 @@ func TestRedirectCookiesJar(t *testing.T) {
678
662
var ts * httptest.Server
679
663
ts = httptest .NewServer (echoCookiesRedirectHandler )
680
664
defer ts .Close ()
681
- tr := & Transport {}
682
- defer tr .CloseIdleConnections ()
683
- c := & Client {
684
- Transport : tr ,
685
- Jar : new (TestJar ),
686
- }
665
+ c := ts .Client ()
666
+ c .Jar = new (TestJar )
687
667
u , _ := url .Parse (ts .URL )
688
668
c .Jar .SetCookies (u , []* Cookie {expectedCookies [0 ]})
689
669
resp , err := c .Get (ts .URL )
@@ -727,13 +707,10 @@ func TestJarCalls(t *testing.T) {
727
707
}))
728
708
defer ts .Close ()
729
709
jar := new (RecordingJar )
730
- c := & Client {
731
- Jar : jar ,
732
- Transport : & Transport {
733
- Dial : func (_ string , _ string ) (net.Conn , error ) {
734
- return net .Dial ("tcp" , ts .Listener .Addr ().String ())
735
- },
736
- },
710
+ c := ts .Client ()
711
+ c .Jar = jar
712
+ c .Transport .(* Transport ).Dial = func (_ string , _ string ) (net.Conn , error ) {
713
+ return net .Dial ("tcp" , ts .Listener .Addr ().String ())
737
714
}
738
715
_ , err := c .Get ("http://firsthost.fake/" )
739
716
if err != nil {
@@ -845,7 +822,8 @@ func TestClientWrites(t *testing.T) {
845
822
}
846
823
return c , err
847
824
}
848
- c := & Client {Transport : & Transport {Dial : dialer }}
825
+ c := ts .Client ()
826
+ c .Transport .(* Transport ).Dial = dialer
849
827
850
828
_ , err := c .Get (ts .URL )
851
829
if err != nil {
@@ -878,14 +856,11 @@ func TestClientInsecureTransport(t *testing.T) {
878
856
// TODO(bradfitz): add tests for skipping hostname checks too?
879
857
// would require a new cert for testing, and probably
880
858
// redundant with these tests.
859
+ c := ts .Client ()
881
860
for _ , insecure := range []bool {true , false } {
882
- tr := & Transport {
883
- TLSClientConfig : & tls.Config {
884
- InsecureSkipVerify : insecure ,
885
- },
861
+ c .Transport .(* Transport ).TLSClientConfig = & tls.Config {
862
+ InsecureSkipVerify : insecure ,
886
863
}
887
- defer tr .CloseIdleConnections ()
888
- c := & Client {Transport : tr }
889
864
res , err := c .Get (ts .URL )
890
865
if (err == nil ) != insecure {
891
866
t .Errorf ("insecure=%v: got unexpected err=%v" , insecure , err )
@@ -919,22 +894,6 @@ func TestClientErrorWithRequestURI(t *testing.T) {
919
894
}
920
895
}
921
896
922
- func newTLSTransport (t * testing.T , ts * httptest.Server ) * Transport {
923
- certs := x509 .NewCertPool ()
924
- for _ , c := range ts .TLS .Certificates {
925
- roots , err := x509 .ParseCertificates (c .Certificate [len (c .Certificate )- 1 ])
926
- if err != nil {
927
- t .Fatalf ("error parsing server's root cert: %v" , err )
928
- }
929
- for _ , root := range roots {
930
- certs .AddCert (root )
931
- }
932
- }
933
- return & Transport {
934
- TLSClientConfig : & tls.Config {RootCAs : certs },
935
- }
936
- }
937
-
938
897
func TestClientWithCorrectTLSServerName (t * testing.T ) {
939
898
defer afterTest (t )
940
899
@@ -946,9 +905,8 @@ func TestClientWithCorrectTLSServerName(t *testing.T) {
946
905
}))
947
906
defer ts .Close ()
948
907
949
- trans := newTLSTransport (t , ts )
950
- trans .TLSClientConfig .ServerName = serverName
951
- c := & Client {Transport : trans }
908
+ c := ts .Client ()
909
+ c .Transport .(* Transport ).TLSClientConfig .ServerName = serverName
952
910
if _ , err := c .Get (ts .URL ); err != nil {
953
911
t .Fatalf ("expected successful TLS connection, got error: %v" , err )
954
912
}
@@ -961,9 +919,8 @@ func TestClientWithIncorrectTLSServerName(t *testing.T) {
961
919
errc := make (chanWriter , 10 ) // but only expecting 1
962
920
ts .Config .ErrorLog = log .New (errc , "" , 0 )
963
921
964
- trans := newTLSTransport (t , ts )
965
- trans .TLSClientConfig .ServerName = "badserver"
966
- c := & Client {Transport : trans }
922
+ c := ts .Client ()
923
+ c .Transport .(* Transport ).TLSClientConfig .ServerName = "badserver"
967
924
_ , err := c .Get (ts .URL )
968
925
if err == nil {
969
926
t .Fatalf ("expected an error" )
@@ -997,13 +954,12 @@ func TestTransportUsesTLSConfigServerName(t *testing.T) {
997
954
}))
998
955
defer ts .Close ()
999
956
1000
- tr := newTLSTransport (t , ts )
957
+ c := ts .Client ()
958
+ tr := c .Transport .(* Transport )
1001
959
tr .TLSClientConfig .ServerName = "example.com" // one of httptest's Server cert names
1002
960
tr .Dial = func (netw , addr string ) (net.Conn , error ) {
1003
961
return net .Dial (netw , ts .Listener .Addr ().String ())
1004
962
}
1005
- defer tr .CloseIdleConnections ()
1006
- c := & Client {Transport : tr }
1007
963
res , err := c .Get ("https://some-other-host.tld/" )
1008
964
if err != nil {
1009
965
t .Fatal (err )
@@ -1018,13 +974,12 @@ func TestResponseSetsTLSConnectionState(t *testing.T) {
1018
974
}))
1019
975
defer ts .Close ()
1020
976
1021
- tr := newTLSTransport (t , ts )
977
+ c := ts .Client ()
978
+ tr := c .Transport .(* Transport )
1022
979
tr .TLSClientConfig .CipherSuites = []uint16 {tls .TLS_RSA_WITH_3DES_EDE_CBC_SHA }
1023
980
tr .Dial = func (netw , addr string ) (net.Conn , error ) {
1024
981
return net .Dial (netw , ts .Listener .Addr ().String ())
1025
982
}
1026
- defer tr .CloseIdleConnections ()
1027
- c := & Client {Transport : tr }
1028
983
res , err := c .Get ("https://example.com/" )
1029
984
if err != nil {
1030
985
t .Fatal (err )
@@ -1119,14 +1074,12 @@ func TestEmptyPasswordAuth(t *testing.T) {
1119
1074
}
1120
1075
}))
1121
1076
defer ts .Close ()
1122
- tr := & Transport {}
1123
- defer tr .CloseIdleConnections ()
1124
- c := & Client {Transport : tr }
1125
1077
req , err := NewRequest ("GET" , ts .URL , nil )
1126
1078
if err != nil {
1127
1079
t .Fatal (err )
1128
1080
}
1129
1081
req .URL .User = url .User (gopher )
1082
+ c := ts .Client ()
1130
1083
resp , err := c .Do (req )
1131
1084
if err != nil {
1132
1085
t .Fatal (err )
@@ -1503,21 +1456,17 @@ func TestClientCopyHeadersOnRedirect(t *testing.T) {
1503
1456
defer ts2 .Close ()
1504
1457
ts2URL = ts2 .URL
1505
1458
1506
- tr := & Transport {}
1507
- defer tr .CloseIdleConnections ()
1508
- c := & Client {
1509
- Transport : tr ,
1510
- CheckRedirect : func (r * Request , via []* Request ) error {
1511
- want := Header {
1512
- "User-Agent" : []string {ua },
1513
- "X-Foo" : []string {xfoo },
1514
- "Referer" : []string {ts2URL },
1515
- }
1516
- if ! reflect .DeepEqual (r .Header , want ) {
1517
- t .Errorf ("CheckRedirect Request.Header = %#v; want %#v" , r .Header , want )
1518
- }
1519
- return nil
1520
- },
1459
+ c := ts1 .Client ()
1460
+ c .CheckRedirect = func (r * Request , via []* Request ) error {
1461
+ want := Header {
1462
+ "User-Agent" : []string {ua },
1463
+ "X-Foo" : []string {xfoo },
1464
+ "Referer" : []string {ts2URL },
1465
+ }
1466
+ if ! reflect .DeepEqual (r .Header , want ) {
1467
+ t .Errorf ("CheckRedirect Request.Header = %#v; want %#v" , r .Header , want )
1468
+ }
1469
+ return nil
1521
1470
}
1522
1471
1523
1472
req , _ := NewRequest ("GET" , ts2 .URL , nil )
@@ -1606,13 +1555,9 @@ func TestClientAltersCookiesOnRedirect(t *testing.T) {
1606
1555
}))
1607
1556
defer ts .Close ()
1608
1557
1609
- tr := & Transport {}
1610
- defer tr .CloseIdleConnections ()
1611
1558
jar , _ := cookiejar .New (nil )
1612
- c := & Client {
1613
- Transport : tr ,
1614
- Jar : jar ,
1615
- }
1559
+ c := ts .Client ()
1560
+ c .Jar = jar
1616
1561
1617
1562
u , _ := url .Parse (ts .URL )
1618
1563
req , _ := NewRequest ("GET" , ts .URL , nil )
@@ -1730,9 +1675,7 @@ func TestClientRedirectTypes(t *testing.T) {
1730
1675
}))
1731
1676
defer ts .Close ()
1732
1677
1733
- tr := & Transport {}
1734
- defer tr .CloseIdleConnections ()
1735
-
1678
+ c := ts .Client ()
1736
1679
for i , tt := range tests {
1737
1680
handlerc <- func (w ResponseWriter , r * Request ) {
1738
1681
w .Header ().Set ("Location" , ts .URL )
@@ -1745,7 +1688,6 @@ func TestClientRedirectTypes(t *testing.T) {
1745
1688
continue
1746
1689
}
1747
1690
1748
- c := & Client {Transport : tr }
1749
1691
c .CheckRedirect = func (req * Request , via []* Request ) error {
1750
1692
if got , want := req .Method , tt .wantMethod ; got != want {
1751
1693
return fmt .Errorf ("#%d: got next method %q; want %q" , i , got , want )
@@ -1799,9 +1741,8 @@ func TestTransportBodyReadError(t *testing.T) {
1799
1741
w .Header ().Set ("X-Body-Read" , fmt .Sprintf ("%v, %v" , n , err ))
1800
1742
}))
1801
1743
defer ts .Close ()
1802
- tr := & Transport {}
1803
- defer tr .CloseIdleConnections ()
1804
- c := & Client {Transport : tr }
1744
+ c := ts .Client ()
1745
+ tr := c .Transport .(* Transport )
1805
1746
1806
1747
// Do one initial successful request to create an idle TCP connection
1807
1748
// for the subsequent request to reuse. (The Transport only retries
0 commit comments