File tree Expand file tree Collapse file tree 4 files changed +69
-4
lines changed Expand file tree Collapse file tree 4 files changed +69
-4
lines changed Original file line number Diff line number Diff line change @@ -10,9 +10,17 @@ import (
10
10
"net/http"
11
11
)
12
12
13
- // DefaultHTTPClient is the default HTTP client used across the driver.
14
- var DefaultHTTPClient = & http.Client {
15
- Transport : http .DefaultTransport .(* http.Transport ).Clone (),
13
+ var DefaultHTTPClient = & http.Client {}
14
+
15
+ // NewHTTPClient will return the globally-defined DefaultHTTPClient, updating
16
+ // the transport if it differs from the http package DefaultTransport.
17
+ func NewHTTPClient () * http.Client {
18
+ client := DefaultHTTPClient
19
+ if _ , ok := http .DefaultTransport .(* http.Transport ); ! ok {
20
+ client .Transport = http .DefaultTransport
21
+ }
22
+
23
+ return client
16
24
}
17
25
18
26
// CloseIdleHTTPConnections closes any connections which were previously
Original file line number Diff line number Diff line change
1
+ // Copyright (C) MongoDB, Inc. 2022-present.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License"); you may
4
+ // not use this file except in compliance with the License. You may obtain
5
+ // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+
7
+ package httputil
8
+
9
+ import (
10
+ "net/http"
11
+ "testing"
12
+
13
+ "go.mongodb.org/mongo-driver/v2/internal/assert"
14
+ )
15
+
16
+ type nonDefaultTransport struct {}
17
+
18
+ func (* nonDefaultTransport ) RoundTrip (* http.Request ) (* http.Response , error ) { return nil , nil }
19
+
20
+ func TestDefaultHTTPClientTransport (t * testing.T ) {
21
+ t .Run ("default" , func (t * testing.T ) {
22
+ client := NewHTTPClient ()
23
+
24
+ val := assert .ObjectsAreEqual (http .DefaultClient , client )
25
+
26
+ assert .True (t , val )
27
+ assert .Equal (t , DefaultHTTPClient , client )
28
+ })
29
+
30
+ t .Run ("non-default global transport" , func (t * testing.T ) {
31
+ http .DefaultTransport = & nonDefaultTransport {}
32
+
33
+ client := NewHTTPClient ()
34
+
35
+ val := assert .ObjectsAreEqual (& nonDefaultTransport {}, client .Transport )
36
+
37
+ assert .True (t , val )
38
+ assert .Equal (t , DefaultHTTPClient , client )
39
+ assert .NotEqual (t , http .DefaultClient , client ) // Sanity Check
40
+ })
41
+ }
Original file line number Diff line number Diff line change @@ -302,7 +302,7 @@ type ClientOptions struct {
302
302
// Client creates a new ClientOptions instance.
303
303
func Client () * ClientOptions {
304
304
opts := & ClientOptions {}
305
- opts = opts .SetHTTPClient (httputil .DefaultHTTPClient )
305
+ opts = opts .SetHTTPClient (httputil .NewHTTPClient () )
306
306
307
307
return opts
308
308
}
Original file line number Diff line number Diff line change @@ -525,6 +525,22 @@ func TestClientOptions(t *testing.T) {
525
525
})
526
526
}
527
527
528
+ type nonDefaultTransport struct {}
529
+
530
+ func (* nonDefaultTransport ) RoundTrip (* http.Request ) (* http.Response , error ) { return nil , nil }
531
+
532
+ func TestClientHTTPTransport (t * testing.T ) {
533
+ t .Run ("Default client" , func (t * testing.T ) {
534
+ got := Client ().HTTPClient
535
+ assert .Equal (t , http .DefaultClient , got )
536
+ })
537
+ t .Run ("Non-default global transport" , func (t * testing.T ) {
538
+ http .DefaultTransport = & nonDefaultTransport {}
539
+ got := Client ().HTTPClient .Transport
540
+ assert .Equal (t , & nonDefaultTransport {}, got )
541
+ })
542
+ }
543
+
528
544
func createCertPool (t * testing.T , paths ... string ) * x509.CertPool {
529
545
t .Helper ()
530
546
You can’t perform that action at this time.
0 commit comments