mirror of
https://github.com/golang/go
synced 2024-11-26 17:36:56 -07:00
runtime/internal/wasitest: skip racy TCP echo test
The wasip1 TCP echo test introduced in CL 493358 has a race condition with port selection. The test runner probes for a free port and then asks the WASM runtime to listen on the port, which may be taken by another process in the interim. Due to limitations with WASI preview 1, the guest is unable to query the port it's listening on. The test cannot ask the WASM runtime to listen on port 0 (choose a free port) since there's currently no way for the test to query the selected port and connect to it. Given the race condition is unavoidable, this test is now disabled by default and requires opt-in via an environment variable. This commit also eliminates the hard-coded connection timeout. Fixes #61820. Change-Id: I375145c1a1d03ad45c44f528da3347397e6dcb01 Reviewed-on: https://go-review.googlesource.com/c/go/+/519895 Run-TryBot: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com> Reviewed-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com>
This commit is contained in:
parent
e8a767b609
commit
795e779610
@ -20,13 +20,18 @@ func TestTCPEcho(t *testing.T) {
|
||||
t.Skip()
|
||||
}
|
||||
|
||||
// We're unable to pass port 0 here (let the OS choose a spare port).
|
||||
// Although wasmtime accepts port 0, and testdata/main.go successfully
|
||||
// listens, there's no way for this test case to query the chosen port
|
||||
// We're unable to use port 0 here (let the OS choose a spare port).
|
||||
// Although the WASM runtime accepts port 0, and the WASM module listens
|
||||
// successfully, there's no way for this test to query the selected port
|
||||
// so that it can connect to the WASM module. The WASM module itself
|
||||
// cannot access any information about the socket due to limitations
|
||||
// with WASI preview 1 networking, and wasmtime does not log the address
|
||||
// when you preopen a socket. Instead, we probe for a free port here.
|
||||
// with WASI preview 1 networking, and the WASM runtimes do not log the
|
||||
// port when you pre-open a socket. So, we probe for a free port here.
|
||||
// Given there's an unavoidable race condition, the test is disabled by
|
||||
// default.
|
||||
if os.Getenv("GOWASIENABLERACYTEST") != "1" {
|
||||
t.Skip("skipping WASI test with unavoidable race condition")
|
||||
}
|
||||
var host string
|
||||
port := rand.Intn(10000) + 40000
|
||||
for attempts := 0; attempts < 10; attempts++ {
|
||||
@ -64,7 +69,7 @@ func TestTCPEcho(t *testing.T) {
|
||||
|
||||
var conn net.Conn
|
||||
var err error
|
||||
for attempts := 0; attempts < 5; attempts++ {
|
||||
for {
|
||||
conn, err = net.Dial("tcp", host)
|
||||
if err == nil {
|
||||
break
|
||||
|
Loading…
Reference in New Issue
Block a user