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 @@ -311,7 +311,7 @@ type ClientOptions struct {
311
311
// Client creates a new ClientOptions instance.
312
312
func Client () * ClientOptions {
313
313
opts := & ClientOptions {}
314
- opts = opts .SetHTTPClient (httputil .DefaultHTTPClient )
314
+ opts = opts .SetHTTPClient (httputil .NewHTTPClient () )
315
315
316
316
return opts
317
317
}
Original file line number Diff line number Diff line change @@ -527,6 +527,22 @@ func TestClientOptions(t *testing.T) {
527
527
})
528
528
}
529
529
530
+ type nonDefaultTransport struct {}
531
+
532
+ func (* nonDefaultTransport ) RoundTrip (* http.Request ) (* http.Response , error ) { return nil , nil }
533
+
534
+ func TestClientHTTPTransport (t * testing.T ) {
535
+ t .Run ("Default client" , func (t * testing.T ) {
536
+ got := Client ().HTTPClient
537
+ assert .Equal (t , http .DefaultClient , got )
538
+ })
539
+ t .Run ("Non-default global transport" , func (t * testing.T ) {
540
+ http .DefaultTransport = & nonDefaultTransport {}
541
+ got := Client ().HTTPClient .Transport
542
+ assert .Equal (t , & nonDefaultTransport {}, got )
543
+ })
544
+ }
545
+
530
546
func createCertPool (t * testing.T , paths ... string ) * x509.CertPool {
531
547
t .Helper ()
532
548
You can’t perform that action at this time.
0 commit comments