]> Cypherpunks.ru repositories - gostls13.git/commitdiff
net/http: disable fetch on NodeJS
authorJohan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Sat, 28 Jan 2023 06:50:54 +0000 (22:50 -0800)
committerJohan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
Mon, 30 Jan 2023 18:50:54 +0000 (18:50 +0000)
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 <evan@phx.io>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/net/http/roundtrip_js.go

index 01c0600ba55500aea05b3f38a57c05ee0e124fec..21d8df96868f48ce825268c874e603a9bbbe4547 100644 (file)
@@ -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)
        }