From b6cb74d775eabec30425ba14b559c3433cbda654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=BCseyin=20A=C3=A7acak?= <110401522+huseyinacacak-janea@users.noreply.github.com> Date: Wed, 17 Apr 2024 16:01:15 +0300 Subject: [PATCH] test: split wasi poll test for windows PR-URL: https://github.com/nodejs/node/pull/52538 Fixes: https://github.com/nodejs/node/issues/51822 Reviewed-By: Luigi Pinca Reviewed-By: Michael Dawson --- test/wasi/c/poll.c | 3 +++ test/wasi/c/poll_win.c | 26 ++++++++++++++++++++++++++ test/wasi/test-wasi-poll.js | 2 +- test/wasi/wasi.status | 4 ---- test/wasi/wasm/poll_win.wasm | Bin 0 -> 31734 bytes 5 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 test/wasi/c/poll_win.c create mode 100644 test/wasi/wasm/poll_win.wasm diff --git a/test/wasi/c/poll.c b/test/wasi/c/poll.c index bd2ff62613ea23..ba12f442654b4c 100644 --- a/test/wasi/c/poll.c +++ b/test/wasi/c/poll.c @@ -31,6 +31,9 @@ int main(void) { assert(ret == 0); assert(now - before >= 2); + // V8 has a bug that allows unsupported parts of this test to run, + // causing the test to fail. poll_win.c is a workaround. + // https://github.com/nodejs/node/issues/51822 // The rest of the test is unsupported on Windows. if (is_win) return 0; diff --git a/test/wasi/c/poll_win.c b/test/wasi/c/poll_win.c new file mode 100644 index 00000000000000..9a22082f0eeb9e --- /dev/null +++ b/test/wasi/c/poll_win.c @@ -0,0 +1,26 @@ +#include +#include +#include +#include + +int main(void) { + struct pollfd fds[4]; + time_t before, now; + int ret; + + // Test sleep() behavior. + time(&before); + sleep(1); + time(&now); + assert(now - before >= 1); + + // Test poll() timeout behavior. + fds[0] = (struct pollfd){.fd = -1, .events = 0, .revents = 0}; + time(&before); + ret = poll(fds, 1, 2000); + time(&now); + assert(ret == 0); + assert(now - before >= 2); + + return 0; +} diff --git a/test/wasi/test-wasi-poll.js b/test/wasi/test-wasi-poll.js index 7448f626dca9b2..212aa1bf192e6b 100644 --- a/test/wasi/test-wasi-poll.js +++ b/test/wasi/test-wasi-poll.js @@ -2,4 +2,4 @@ require('../common'); const { testWasiPreview1 } = require('../common/wasi'); -testWasiPreview1(['poll']); +testWasiPreview1([process.platform === 'win32' ? 'poll_win' : 'poll']); diff --git a/test/wasi/wasi.status b/test/wasi/wasi.status index 500040c0c2a037..2870fc67f1c776 100644 --- a/test/wasi/wasi.status +++ b/test/wasi/wasi.status @@ -6,7 +6,3 @@ prefix wasi [true] # This section applies to all platforms -# Windows on ARM -[$system==win32 && $arch==arm64] -# https://github.com/nodejs/node/issues/51822 -test-wasi-poll: PASS, FLAKY diff --git a/test/wasi/wasm/poll_win.wasm b/test/wasi/wasm/poll_win.wasm new file mode 100644 index 0000000000000000000000000000000000000000..f1f06db75469c3593eafc8ebb8daf2325d2532da GIT binary patch literal 31734 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 W`UmcvE*%}6u568Sx*Na|@Barw2xR#H literal 0 HcmV?d00001