fix: remove initial global HTTP client usage (#20128)

This PR makes the initial steps at removing usage of the global Go HTTP
client, which was seen to have impacts on test flakiness in
https://github.com/coder/internal/issues/1020. The first commit removes
uses from tests, with the exception of one test that is tightly coupled
to the default client. The second commit makes easy/low-risk removals
from application code. This should have some impact to reduce test flakiness.
This commit is contained in:
Zach
2025-10-02 11:43:13 -06:00
committed by GitHub
parent 0d2ccacacd
commit 4d1003eace
18 changed files with 59 additions and 33 deletions
+1 -1
View File
@@ -55,7 +55,7 @@ func TestAccessURL(t *testing.T) {
defer cancel()
report.Run(ctx, &healthcheck.AccessURLReportOptions{
Client: nil, // defaults to http.DefaultClient
Client: &http.Client{},
AccessURL: nil,
})
+2 -1
View File
@@ -511,7 +511,8 @@ func tsDERPMap(ctx context.Context, t testing.TB) *tailcfg.DERPMap {
req, err := http.NewRequestWithContext(ctx, "GET", ipn.DefaultControlURL+"/derpmap/default", nil)
require.NoError(t, err)
res, err := http.DefaultClient.Do(req)
client := &http.Client{}
res, err := client.Do(req)
require.NoError(t, err)
defer res.Body.Close()
require.Equal(t, http.StatusOK, res.StatusCode)
+10 -8
View File
@@ -141,7 +141,8 @@ func TestMCPHTTP_E2E_UnauthenticatedAccess(t *testing.T) {
require.NoError(t, err, "Should be able to create HTTP request")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
client := &http.Client{}
resp, err := client.Do(req)
require.NoError(t, err, "Should be able to make HTTP request")
defer resp.Body.Close()
@@ -613,7 +614,7 @@ func TestMCPHTTP_E2E_OAuth2_EndToEnd(t *testing.T) {
require.NoError(t, err)
tokenReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
tokenResp, err := http.DefaultClient.Do(tokenReq)
tokenResp, err := client.Do(tokenReq)
require.NoError(t, err)
defer tokenResp.Body.Close()
@@ -711,7 +712,7 @@ func TestMCPHTTP_E2E_OAuth2_EndToEnd(t *testing.T) {
require.NoError(t, err)
refreshReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
refreshResp, err := http.DefaultClient.Do(refreshReq)
refreshResp, err := client.Do(refreshReq)
require.NoError(t, err)
defer refreshResp.Body.Close()
@@ -846,7 +847,7 @@ func TestMCPHTTP_E2E_OAuth2_EndToEnd(t *testing.T) {
regReq.Header.Set("Content-Type", "application/json")
// Dynamic client registration should not require authentication (public endpoint)
regResp, err := http.DefaultClient.Do(regReq)
regResp, err := client.Do(regReq)
require.NoError(t, err)
defer regResp.Body.Close()
@@ -936,7 +937,7 @@ func TestMCPHTTP_E2E_OAuth2_EndToEnd(t *testing.T) {
require.NoError(t, err)
tokenReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
tokenResp, err := http.DefaultClient.Do(tokenReq)
tokenResp, err := client.Do(tokenReq)
require.NoError(t, err)
defer tokenResp.Body.Close()
@@ -1037,7 +1038,7 @@ func TestMCPHTTP_E2E_OAuth2_EndToEnd(t *testing.T) {
require.NoError(t, err)
refreshReq.Header.Set("Content-Type", "application/x-www-form-urlencoded")
refreshResp, err := http.DefaultClient.Do(refreshReq)
refreshResp, err := client.Do(refreshReq)
require.NoError(t, err)
defer refreshResp.Body.Close()
@@ -1151,7 +1152,8 @@ func TestMCPHTTP_E2E_OAuth2_EndToEnd(t *testing.T) {
require.NoError(t, err)
regReq1.Header.Set("Content-Type", "application/json")
regResp1, err := http.DefaultClient.Do(regReq1)
client := &http.Client{}
regResp1, err := client.Do(regReq1)
require.NoError(t, err)
defer regResp1.Body.Close()
@@ -1181,7 +1183,7 @@ func TestMCPHTTP_E2E_OAuth2_EndToEnd(t *testing.T) {
require.NoError(t, err)
regReq2.Header.Set("Content-Type", "application/json")
regResp2, err := http.DefaultClient.Do(regReq2)
regResp2, err := client.Do(regReq2)
require.NoError(t, err)
defer regResp2.Body.Close()
+4 -2
View File
@@ -29,7 +29,8 @@ func TestOAuth2AuthorizationServerMetadata(t *testing.T) {
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil)
require.NoError(t, err)
resp, err := http.DefaultClient.Do(req)
httpClient := &http.Client{}
resp, err := httpClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()
@@ -65,7 +66,8 @@ func TestOAuth2ProtectedResourceMetadata(t *testing.T) {
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint, nil)
require.NoError(t, err)
resp, err := http.DefaultClient.Do(req)
httpClient := &http.Client{}
resp, err := httpClient.Do(req)
require.NoError(t, err)
defer resp.Body.Close()
+2 -1
View File
@@ -94,7 +94,8 @@ func TestInstrument(t *testing.T) {
must[*url.URL](t)(idp.IssuerURL().Parse("/.well-known/openid-configuration")).String(), nil)
require.NoError(t, err)
resp, err := http.DefaultClient.Do(req)
client := &http.Client{}
resp, err := client.Do(req)
require.NoError(t, err)
_ = resp.Body.Close()
+3 -1
View File
@@ -87,6 +87,7 @@ func New(options Options) (Reporter, error) {
deploymentURL: deploymentURL,
snapshotURL: snapshotURL,
startedAt: dbtime.Now(),
client: &http.Client{},
}
go reporter.runSnapshotter()
return reporter, nil
@@ -119,6 +120,7 @@ type remoteReporter struct {
snapshotURL *url.URL
startedAt time.Time
shutdownAt *time.Time
client *http.Client
}
func (r *remoteReporter) Enabled() bool {
@@ -142,7 +144,7 @@ func (r *remoteReporter) reportSync(snapshot *Snapshot) {
return
}
req.Header.Set(VersionHeader, buildinfo.Version())
resp, err := http.DefaultClient.Do(req)
resp, err := r.client.Do(req)
if err != nil {
// If the request fails it's not necessarily an error.
// In an airgapped environment, it's fine if this fails!