Description
Some Go packages use a local HTTP server in examples. To make these work, the js/wasm port includes:
Line 5 in bae7d77
It works okay with Node.js 14, but fails with Node.js 18. Without it working, tests/examples in packages like compress/gzip and various others fail. This is the tracking issue this problem.
Tested at tip (79cdecc) with local patches to work around #56860 and #57516. Those issues will need to resolved first; I'm just reporting this finding earlier since I came across it while looking briefly into what's needed to make all.bash pass with Node 18.
It can be reproduced with GOOS=js GOARCH=wasm ./all.bash
, or GOOS=js GOARCH=wasm go test -run='Example_compressingReader' compress/gzip
, or with this more standalone program:
package main
import (
"flag"
"fmt"
"io"
"log"
"net/http"
"net/http/httptest"
"os"
)
func main() {
flag.Parse()
err := run()
if err != nil {
log.Fatalln(err)
}
}
func run() error {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
fmt.Fprintln(w, "ok from httptest")
}))
defer ts.Close()
fmt.Println("started a test HTTP server at:", ts.URL)
resp, err := http.Get(ts.URL)
if err != nil {
return err
}
defer resp.Body.Close()
fmt.Println(resp.Status)
_, err = io.Copy(os.Stdout, resp.Body)
return err
// Output with Node.js 14:
// 200 OK
// ok from httptest
// Output with Node.js 18:
// started a test HTTP server at: http://127.0.0.1:1
// (node:52134) ExperimentalWarning: The Fetch API is an experimental feature. This feature could change at any time
// (Use `node --trace-warnings ...` to show where the warning was created)
// 2023/01/04 16:40:18 Get "http://127.0.0.1:1": net/http: fetch() failed: fetch failed
// exit status 1
}
CC @golang/js, @golang/wasm, @johanbrandhorst.