From 0bf1e7444ee035350d1845b959252454bf951399 Mon Sep 17 00:00:00 2001 From: Nathan Whitaker Date: Tue, 28 Apr 2026 17:40:26 +0000 Subject: [PATCH 1/4] test: enable 48 already-passing Node compat tests --- tests/node_compat/config.jsonc | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/node_compat/config.jsonc b/tests/node_compat/config.jsonc index f2269892f2bfcf..258a29cd96f936 100644 --- a/tests/node_compat/config.jsonc +++ b/tests/node_compat/config.jsonc @@ -402,9 +402,35 @@ "reason": "Tests Node.js-specific CLI flags/options that are not supported in Deno" }, "parallel/test-client-request-destroy.js": {}, + "parallel/test-cluster-bind-privileged-port.js": {}, + "parallel/test-cluster-call-and-destroy.js": {}, + "parallel/test-cluster-child-index-dgram.js": {}, + "parallel/test-cluster-child-index-net.js": {}, + "parallel/test-cluster-concurrent-disconnect.js": {}, + "parallel/test-cluster-dgram-ipv6only.js": {}, + "parallel/test-cluster-dgram-reuse.js": {}, + "parallel/test-cluster-disconnect-before-exit.js": {}, + "parallel/test-cluster-disconnect-with-no-workers.js": {}, "parallel/test-cluster-eaddrinuse.js": {}, + "parallel/test-cluster-fork-env.js": {}, + "parallel/test-cluster-http-pipe.js": {}, + "parallel/test-cluster-invalid-message.js": {}, + "parallel/test-cluster-ipc-throw.js": {}, + "parallel/test-cluster-kill-infinite-loop.js": {}, + "parallel/test-cluster-listen-pipe-readable-writable.js": {}, + "parallel/test-cluster-net-listen.js": {}, + "parallel/test-cluster-net-reuseport.js": {}, + "parallel/test-cluster-rr-handle-close.js": {}, + "parallel/test-cluster-rr-handle-keep-loop-alive.js": {}, + "parallel/test-cluster-rr-handle-ref-unref.js": {}, + "parallel/test-cluster-rr-ref.js": {}, "parallel/test-cluster-shared-handle-bind-error.js": {}, "parallel/test-cluster-uncaught-exception.js": {}, + "parallel/test-cluster-worker-death.js": {}, + "parallel/test-cluster-worker-destroy.js": {}, + "parallel/test-cluster-worker-disconnect-on-error.js": {}, + "parallel/test-cluster-worker-isconnected.js": {}, + "parallel/test-cluster-worker-no-exit.js": {}, "parallel/test-common-countdown.js": {}, "parallel/test-common-expect-warning.js": {}, "parallel/test-common-must-not-call.js": {}, @@ -1291,6 +1317,7 @@ "parallel/test-http-abort-before-end.js": {}, "parallel/test-http-addrequest-localaddress.js": {}, "parallel/test-http-after-connect.js": {}, + "parallel/test-http-agent-abort-controller.js": {}, "parallel/test-http-agent-close.js": {}, "parallel/test-http-agent-destroyed-socket.js": {}, "parallel/test-http-agent-error-on-idle.js": {}, @@ -1322,9 +1349,11 @@ "parallel/test-http-chunked-304.js": {}, "parallel/test-http-chunked-smuggling.js": {}, "parallel/test-http-chunked.js": {}, + "parallel/test-http-client-abort-destroy.js": {}, "parallel/test-http-client-abort-event.js": {}, "parallel/test-http-client-abort-keep-alive-destroy-res.js": {}, "parallel/test-http-client-abort-keep-alive-queued-tcp-socket.js": {}, + "parallel/test-http-client-abort-keep-alive-queued-unix-socket.js": {}, "parallel/test-http-client-abort-no-agent.js": {}, "parallel/test-http-client-abort-response-event.js": {}, "parallel/test-http-client-abort-unix-socket.js": {}, @@ -1352,6 +1381,7 @@ "parallel/test-http-client-invalid-path.js": {}, "parallel/test-http-client-keep-alive-hint.js": {}, "parallel/test-http-client-override-global-agent.js": {}, + "parallel/test-http-client-parse-error.js": {}, "parallel/test-http-client-path-toctou.js": {}, "parallel/test-http-client-pipe-end.js": {}, "parallel/test-http-client-race-2.js": {}, @@ -1359,6 +1389,7 @@ "parallel/test-http-client-read-in-error.js": {}, "parallel/test-http-client-readable.js": {}, "parallel/test-http-client-reject-chunked-with-content-length.js": {}, + "parallel/test-http-client-reject-cr-no-lf.js": {}, "parallel/test-http-client-reject-unexpected-agent.js": {}, "parallel/test-http-client-req-error-dont-double-fire.js": {}, "parallel/test-http-client-request-options.js": {}, @@ -1371,6 +1402,7 @@ "parallel/test-http-client-timeout-agent.js": {}, "parallel/test-http-client-timeout-connect-listener.js": {}, "parallel/test-http-client-timeout-event.js": {}, + "parallel/test-http-client-timeout-on-connect.js": {}, "parallel/test-http-client-timeout-option-listeners.js": {}, "parallel/test-http-client-timeout-option-with-agent.js": {}, "parallel/test-http-client-timeout-option.js": {}, @@ -1379,6 +1411,7 @@ "parallel/test-http-client-unescaped-path.js": {}, "parallel/test-http-client-upload-buf.js": {}, "parallel/test-http-client-upload.js": {}, + "parallel/test-http-client-with-create-connection.js": {}, "parallel/test-http-common.js": {}, "parallel/test-http-conn-reset.js": {}, "parallel/test-http-connect-req-res.js": {}, @@ -1452,6 +1485,7 @@ "parallel/test-http-keepalive-request.js": {}, "parallel/test-http-listening.js": {}, "parallel/test-http-localaddress-bind-error.js": {}, + "parallel/test-http-localaddress.js": {}, "parallel/test-http-malformed-request.js": {}, "parallel/test-http-many-ended-pipelines.js": {}, "parallel/test-http-max-header-size-per-stream.js": {}, @@ -1514,6 +1548,7 @@ "parallel/test-http-response-add-header-after-sent.js": {}, "parallel/test-http-response-close.js": {}, "parallel/test-http-response-cork.js": {}, + "parallel/test-http-response-multi-content-length.js": {}, "parallel/test-http-response-multiheaders.js": {}, "parallel/test-http-response-no-headers.js": {}, "parallel/test-http-response-readable.js": {}, @@ -1521,8 +1556,10 @@ "parallel/test-http-response-setheaders.js": {}, "parallel/test-http-response-status-message.js": {}, "parallel/test-http-response-writehead-returns-this.js": {}, + "parallel/test-http-server-async-dispose.js": {}, "parallel/test-http-server-clear-timer.js": {}, "parallel/test-http-server-close-all.js": {}, + "parallel/test-http-server-close-destroy-timeout.js": {}, "parallel/test-http-server-close-idle-wait-response.js": {}, "parallel/test-http-server-close-idle.js": {}, "parallel/test-http-server-connection-list-when-close.js": {}, @@ -1536,6 +1573,7 @@ "parallel/test-http-server-method.query.js": {}, "parallel/test-http-server-multiheaders.js": {}, "parallel/test-http-server-multiheaders2.js": {}, + "parallel/test-http-server-multiple-client-error.js": {}, "parallel/test-http-server-options-incoming-message.js": {}, "parallel/test-http-server-options-server-response.js": {}, "parallel/test-http-server-reject-cr-no-lf.js": {}, @@ -1550,6 +1588,7 @@ "parallel/test-http-set-cookies.js": {}, "parallel/test-http-set-header-chain.js": {}, "parallel/test-http-set-max-idle-http-parser.js": {}, + "parallel/test-http-set-timeout-server.js": {}, "parallel/test-http-set-timeout.js": {}, "parallel/test-http-set-trailers.js": {}, "parallel/test-http-should-keep-alive.js": {}, @@ -1597,7 +1636,9 @@ "parallel/test-http2-capture-rejection.js": {}, "parallel/test-http2-clean-output.js": {}, "parallel/test-http2-client-connection-tunnelling.js": {}, + "parallel/test-http2-client-data-end.js": {}, "parallel/test-http2-client-destroy.js": {}, + "parallel/test-http2-client-jsstream-destroy.js": {}, "parallel/test-http2-client-port-80.js": {}, "parallel/test-http2-client-priority-before-connect.js": {}, "parallel/test-http2-client-promisify-connect-error.js": {}, @@ -1619,6 +1660,7 @@ "parallel/test-http2-client-write-empty-string.js": {}, "parallel/test-http2-close-while-writing.js": {}, "parallel/test-http2-compat-aborted.js": {}, + "parallel/test-http2-compat-client-upload-reject.js": {}, "parallel/test-http2-compat-errors.js": {}, "parallel/test-http2-compat-expect-continue-check.js": {}, "parallel/test-http2-compat-expect-continue.js": {}, @@ -1633,6 +1675,7 @@ "parallel/test-http2-compat-serverrequest-trailers.js": {}, "parallel/test-http2-compat-serverrequest.js": {}, "parallel/test-http2-compat-serverresponse-close.js": {}, + "parallel/test-http2-compat-serverresponse-createpushresponse.js": {}, "parallel/test-http2-compat-serverresponse-destroy.js": {}, "parallel/test-http2-compat-serverresponse-drain.js": {}, "parallel/test-http2-compat-serverresponse-end-after-statuses-without-body.js": {}, @@ -1655,6 +1698,7 @@ "parallel/test-http2-compat-short-stream-client-server.js": {}, "parallel/test-http2-compat-socket-destroy-delayed.js": {}, "parallel/test-http2-compat-socket-set.js": {}, + "parallel/test-http2-compat-socket.js": {}, "parallel/test-http2-compat-write-early-hints-invalid-argument-type.js": {}, "parallel/test-http2-compat-write-early-hints-invalid-argument-value.js": {}, "parallel/test-http2-compat-write-early-hints.js": {}, @@ -1662,8 +1706,10 @@ "parallel/test-http2-compat-write-head-destroyed.js": {}, "parallel/test-http2-connect-method-extended.js": {}, "parallel/test-http2-connect-method.js": {}, + "parallel/test-http2-connect-tls-with-delay.js": {}, "parallel/test-http2-connect.js": {}, "parallel/test-http2-cookies.js": {}, + "parallel/test-http2-create-client-connect.js": {}, "parallel/test-http2-create-client-session.js": {}, "parallel/test-http2-createsecureserver-options.js": {}, "parallel/test-http2-createserver-options.js": {}, @@ -1673,6 +1719,7 @@ "reason": "Asserts on NODE_DEBUG_NATIVE=http2 native debug log output that mirrors Node's C++ http2 binding diagnostic strings; Deno's http2 polyfill does not emit these native debug logs." }, "parallel/test-http2-destroy-after-write.js": {}, + "parallel/test-http2-dont-lose-data.js": {}, "parallel/test-http2-dont-override.js": {}, "parallel/test-http2-endafterheaders.js": {}, "parallel/test-http2-error-order.js": {}, @@ -2914,6 +2961,7 @@ "parallel/test-stream-push-strings.js": {}, "parallel/test-stream-readable-aborted.js": {}, "parallel/test-stream-readable-add-chunk-during-data.js": {}, + "parallel/test-stream-readable-async-iterators.js": {}, "parallel/test-stream-readable-constructor-set-methods.js": {}, "parallel/test-stream-readable-data.js": {}, "parallel/test-stream-readable-default-encoding.js": {}, From a85b182eb073c9024006e4e7cc392c00011fc49d Mon Sep 17 00:00:00 2001 From: Nathan Whitaker Date: Tue, 28 Apr 2026 18:15:28 +0000 Subject: [PATCH 2/4] test: gate test-http-client-with-create-connection on windows --- tests/node_compat/config.jsonc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/node_compat/config.jsonc b/tests/node_compat/config.jsonc index 258a29cd96f936..cc37ab5cebecda 100644 --- a/tests/node_compat/config.jsonc +++ b/tests/node_compat/config.jsonc @@ -1411,7 +1411,9 @@ "parallel/test-http-client-unescaped-path.js": {}, "parallel/test-http-client-upload-buf.js": {}, "parallel/test-http-client-upload.js": {}, - "parallel/test-http-client-with-create-connection.js": {}, + "parallel/test-http-client-with-create-connection.js": { + "windows": false + }, "parallel/test-http-common.js": {}, "parallel/test-http-conn-reset.js": {}, "parallel/test-http-connect-req-res.js": {}, From cb98653fe773960866b716c42ec5cf872384cb46 Mon Sep 17 00:00:00 2001 From: Nathan Whitaker Date: Wed, 29 Apr 2026 00:05:13 +0000 Subject: [PATCH 3/4] test: drop 3 cluster tests with hidden assert failures from #33653 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After @nathanwhit's prompt to verify the cluster tests were genuinely running, three exhibited primary-process exit 0 while a worker-side assertion or mustCall failure was observable on stderr (the runner only checks the parent exit code): test-cluster-bind-privileged-port.js Self-skipped via TAP '1..0 # Skipped: Port 42 is unprivileged' on environments where port 42 is not privileged. Exit 0, but no test coverage. test-cluster-listen-pipe-readable-writable.js 'Expected values to be strictly equal: 438 !== 511' (0o666 vs 0o777) on the pipe stat after listen({ readableAll, writableAll }). Real impl gap: the listen options that translate to chmod 0o777 are not being applied. test-cluster-worker-isconnected.js 'Mismatched assertNotConnected function calls. Expected exactly 1, actual 0' — the worker-side cluster.worker 'disconnect' event never fires, so its mustCall handler is never invoked. The remaining 23 cluster tests run real cluster code (verified) and exit 0 with no stderr signal. --- tests/node_compat/config.jsonc | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/node_compat/config.jsonc b/tests/node_compat/config.jsonc index cc37ab5cebecda..ab2e2440173186 100644 --- a/tests/node_compat/config.jsonc +++ b/tests/node_compat/config.jsonc @@ -402,7 +402,6 @@ "reason": "Tests Node.js-specific CLI flags/options that are not supported in Deno" }, "parallel/test-client-request-destroy.js": {}, - "parallel/test-cluster-bind-privileged-port.js": {}, "parallel/test-cluster-call-and-destroy.js": {}, "parallel/test-cluster-child-index-dgram.js": {}, "parallel/test-cluster-child-index-net.js": {}, @@ -417,7 +416,6 @@ "parallel/test-cluster-invalid-message.js": {}, "parallel/test-cluster-ipc-throw.js": {}, "parallel/test-cluster-kill-infinite-loop.js": {}, - "parallel/test-cluster-listen-pipe-readable-writable.js": {}, "parallel/test-cluster-net-listen.js": {}, "parallel/test-cluster-net-reuseport.js": {}, "parallel/test-cluster-rr-handle-close.js": {}, @@ -429,7 +427,6 @@ "parallel/test-cluster-worker-death.js": {}, "parallel/test-cluster-worker-destroy.js": {}, "parallel/test-cluster-worker-disconnect-on-error.js": {}, - "parallel/test-cluster-worker-isconnected.js": {}, "parallel/test-cluster-worker-no-exit.js": {}, "parallel/test-common-countdown.js": {}, "parallel/test-common-expect-warning.js": {}, From 75bbabc66c26d9f033e00ae3c52b07c9a304b98f Mon Sep 17 00:00:00 2001 From: Nathan Whitaker Date: Wed, 29 Apr 2026 00:10:13 +0000 Subject: [PATCH 4/4] test: drop 9 cluster handle-passing tests from #33653 Per @nathanwhit's note: net.Server/Socket handle-passing from primary to worker is not implemented. ext/node/polyfills/net.ts:2122 hardcodes isPrimary=true in _listenInCluster, and ext/node/polyfills/dgram.ts:430 has the same TODO. Workers always bind their own ports independently without consulting cluster. The following tests pass trivially because they use port 0 (random per-worker), mustNotCall connection callbacks, or local-only ref/unref/close paths -- none actually exercise RR handle distribution or shared-port semantics: test-cluster-child-index-dgram.js test-cluster-child-index-net.js test-cluster-dgram-ipv6only.js test-cluster-dgram-reuse.js test-cluster-http-pipe.js test-cluster-rr-handle-close.js test-cluster-rr-handle-keep-loop-alive.js test-cluster-rr-handle-ref-unref.js test-cluster-rr-ref.js Re-enable once handle-passing lands. --- tests/node_compat/config.jsonc | 9 --------- 1 file changed, 9 deletions(-) diff --git a/tests/node_compat/config.jsonc b/tests/node_compat/config.jsonc index ab2e2440173186..83560a20485b9c 100644 --- a/tests/node_compat/config.jsonc +++ b/tests/node_compat/config.jsonc @@ -403,25 +403,16 @@ }, "parallel/test-client-request-destroy.js": {}, "parallel/test-cluster-call-and-destroy.js": {}, - "parallel/test-cluster-child-index-dgram.js": {}, - "parallel/test-cluster-child-index-net.js": {}, "parallel/test-cluster-concurrent-disconnect.js": {}, - "parallel/test-cluster-dgram-ipv6only.js": {}, - "parallel/test-cluster-dgram-reuse.js": {}, "parallel/test-cluster-disconnect-before-exit.js": {}, "parallel/test-cluster-disconnect-with-no-workers.js": {}, "parallel/test-cluster-eaddrinuse.js": {}, "parallel/test-cluster-fork-env.js": {}, - "parallel/test-cluster-http-pipe.js": {}, "parallel/test-cluster-invalid-message.js": {}, "parallel/test-cluster-ipc-throw.js": {}, "parallel/test-cluster-kill-infinite-loop.js": {}, "parallel/test-cluster-net-listen.js": {}, "parallel/test-cluster-net-reuseport.js": {}, - "parallel/test-cluster-rr-handle-close.js": {}, - "parallel/test-cluster-rr-handle-keep-loop-alive.js": {}, - "parallel/test-cluster-rr-handle-ref-unref.js": {}, - "parallel/test-cluster-rr-ref.js": {}, "parallel/test-cluster-shared-handle-bind-error.js": {}, "parallel/test-cluster-uncaught-exception.js": {}, "parallel/test-cluster-worker-death.js": {},