From 4c5d97990e4a39bd3e903f8e318b7234db3ba91f Mon Sep 17 00:00:00 2001 From: Johan Brandhorst-Satzkorn Date: Fri, 27 Jan 2023 22:50:54 -0800 Subject: [PATCH] net/http: disable fetch on NodeJS NodeJS 18 introduced support for the fetch API for making HTTP requests. This broke all wasm tests that were relying on NodeJS falling back to the fake network implementation in net_fake.go. Disable the fetch API on NodeJS to get tests passing. Fixes #57613 Change-Id: Icb2cce6d5289d812da798e07366f8ac26b5f82cb Reviewed-on: https://go-review.googlesource.com/c/go/+/463976 Reviewed-by: Evan Phoenix TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov Reviewed-by: Dmitri Shuralyov Run-TryBot: Dmitri Shuralyov Reviewed-by: Michael Knyszek --- src/net/http/roundtrip_js.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/net/http/roundtrip_js.go b/src/net/http/roundtrip_js.go index 01c0600ba5..21d8df9686 100644 --- a/src/net/http/roundtrip_js.go +++ b/src/net/http/roundtrip_js.go @@ -44,6 +44,12 @@ const jsFetchRedirect = "js.fetch:redirect" // the browser globals. var jsFetchMissing = js.Global().Get("fetch").IsUndefined() +// jsFetchDisabled will be true if the "process" global is present. +// We use this as an indicator that we're running in Node.js. We +// want to disable the Fetch API in Node.js because it breaks +// our wasm tests. See https://go.dev/issue/57613 for more information. +var jsFetchDisabled = !js.Global().Get("process").IsUndefined() + // RoundTrip implements the RoundTripper interface using the WHATWG Fetch API. func (t *Transport) RoundTrip(req *Request) (*Response, error) { // The Transport has a documented contract that states that if the DialContext or @@ -52,7 +58,7 @@ func (t *Transport) RoundTrip(req *Request) (*Response, error) { // though they are deprecated. Therefore, if any of these are set, we should obey // the contract and dial using the regular round-trip instead. Otherwise, we'll try // to fall back on the Fetch API, unless it's not available. - if t.Dial != nil || t.DialContext != nil || t.DialTLS != nil || t.DialTLSContext != nil || jsFetchMissing { + if t.Dial != nil || t.DialContext != nil || t.DialTLS != nil || t.DialTLSContext != nil || jsFetchMissing || jsFetchDisabled { return t.roundTrip(req) } -- 2.48.1