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 (
1010 "net/http"
1111)
1212
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
1624}
1725
1826// 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 {
302302// Client creates a new ClientOptions instance.
303303func Client () * ClientOptions {
304304 opts := & ClientOptions {}
305- opts = opts .SetHTTPClient (httputil .DefaultHTTPClient )
305+ opts = opts .SetHTTPClient (httputil .NewHTTPClient () )
306306
307307 return opts
308308}
Original file line number Diff line number Diff line change @@ -525,6 +525,22 @@ func TestClientOptions(t *testing.T) {
525525 })
526526}
527527
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+
528544func createCertPool (t * testing.T , paths ... string ) * x509.CertPool {
529545 t .Helper ()
530546
You can’t perform that action at this time.
0 commit comments