Skip to content

Commit 6c97757

Browse files
Merge pull request #2117 from mongodb/merge-release/2.2-into-master-1751465797833
Merge release/2.2 into master
2 parents 87fe3bb + eac85d7 commit 6c97757

File tree

4 files changed

+69
-4
lines changed

4 files changed

+69
-4
lines changed

internal/httputil/httputil.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff 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

internal/httputil/httputil_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
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+
}

mongo/options/clientoptions.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ type ClientOptions struct {
311311
// Client creates a new ClientOptions instance.
312312
func Client() *ClientOptions {
313313
opts := &ClientOptions{}
314-
opts = opts.SetHTTPClient(httputil.DefaultHTTPClient)
314+
opts = opts.SetHTTPClient(httputil.NewHTTPClient())
315315

316316
return opts
317317
}

mongo/options/clientoptions_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,22 @@ func TestClientOptions(t *testing.T) {
527527
})
528528
}
529529

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+
530546
func createCertPool(t *testing.T, paths ...string) *x509.CertPool {
531547
t.Helper()
532548

0 commit comments

Comments
 (0)