test: sync Node.js test suite with v24.14.1 (d89bb1b482)#29359
Conversation
|
Updated 11:09 AM PT - Jun 18th, 2026
❌ @robobun, your commit 7dadb66 has 4 failures in
🧪 To try this PR locally: bunx bun-pr 29359That installs a local version of the PR into your bun-29359 --bun |
WalkthroughThis pull request updates Node.js test infrastructure across hundreds of parallel test files. Changes include refactoring assertion imports to use namespace imports, enforcing callback invocations with test control wrappers, converting side-effect requires to const bindings, and adding new test files for crypto, HTTP, clustering, and garbage collection scenarios. Changes
Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 2✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@test/js/node/test/parallel/test-event-emitter-method-names.js`:
- Around line 31-33: The loop over Object.getOwnPropertyNames(E) uses `return`
inside the for-of to skip unwanted properties but `return` exits the entire
module; change those `return` statements to `continue` so the loop only skips
the current property. Update the checks in the for loop that reference E and the
names 'constructor', 'on', 'off' and the typeof E[name] !== 'function' to use
`continue` instead of `return` so subsequent assertions run.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: 1186bcc7-b7b5-40e9-ba1f-d37c2250b184
📒 Files selected for processing (300)
test/js/node/test/parallel/test-assert-async.jstest/js/node/test/parallel/test-async-hooks-recursive-stack-runInAsyncScope.jstest/js/node/test/parallel/test-async-hooks-stack-overflow-nested-async.jstest/js/node/test/parallel/test-async-local-storage-contexts.jstest/js/node/test/parallel/test-async-local-storage-snapshot.jstest/js/node/test/parallel/test-blocklist-clone.jstest/js/node/test/parallel/test-btoa-atob.jstest/js/node/test/parallel/test-buffer-bytelength.jstest/js/node/test/parallel/test-buffer-failed-alloc-typed-arrays.jstest/js/node/test/parallel/test-buffer-inspect.jstest/js/node/test/parallel/test-buffer-no-negative-allocation.jstest/js/node/test/parallel/test-buffer-over-max-length.jstest/js/node/test/parallel/test-buffer-resizable.jstest/js/node/test/parallel/test-buffer-tostring-rangeerror.jstest/js/node/test/parallel/test-buffer-tostring.jstest/js/node/test/parallel/test-buffer-zero-fill-cli.jstest/js/node/test/parallel/test-child-process-advanced-serialization-splitted-length-field.jstest/js/node/test/parallel/test-child-process-can-write-to-stdout.jstest/js/node/test/parallel/test-child-process-cwd.jstest/js/node/test/parallel/test-child-process-disconnect.jstest/js/node/test/parallel/test-child-process-flush-stdio.jstest/js/node/test/parallel/test-child-process-fork-abort-signal.jstest/js/node/test/parallel/test-child-process-fork-advanced-header-serialization.jstest/js/node/test/parallel/test-child-process-fork-closed-channel-segfault.jstest/js/node/test/parallel/test-child-process-fork-ref.jstest/js/node/test/parallel/test-child-process-fork-timeout-kill-signal.jstest/js/node/test/parallel/test-child-process-fork.jstest/js/node/test/parallel/test-child-process-kill.jstest/js/node/test/parallel/test-child-process-reject-null-bytes.jstest/js/node/test/parallel/test-child-process-server-close.jstest/js/node/test/parallel/test-child-process-spawn-timeout-kill-signal.jstest/js/node/test/parallel/test-child-process-spawn-windows-batch-file.jstest/js/node/test/parallel/test-child-process-spawnsync-args.jstest/js/node/test/parallel/test-child-process-spawnsync-timeout.jstest/js/node/test/parallel/test-child-process-stdio-inherit.jstest/js/node/test/parallel/test-child-process-uid-gid.jstest/js/node/test/parallel/test-cluster-concurrent-disconnect.jstest/js/node/test/parallel/test-cluster-disconnect-exitedAfterDisconnect-race.jstest/js/node/test/parallel/test-cluster-eaddrinuse.jstest/js/node/test/parallel/test-cluster-fork-windowsHide.jstest/js/node/test/parallel/test-cluster-message.jstest/js/node/test/parallel/test-cluster-rr-handle-keep-loop-alive.jstest/js/node/test/parallel/test-cluster-send-deadlock.jstest/js/node/test/parallel/test-cluster-shared-handle-bind-privileged-port.jstest/js/node/test/parallel/test-cluster-worker-events.jstest/js/node/test/parallel/test-cluster-worker-isdead.jstest/js/node/test/parallel/test-cluster-worker-kill-signal.jstest/js/node/test/parallel/test-cluster-worker-no-exit.jstest/js/node/test/parallel/test-cluster-worker-wait-server-close.jstest/js/node/test/parallel/test-console-tty-colors.jstest/js/node/test/parallel/test-crypto-certificate.jstest/js/node/test/parallel/test-crypto-dh-generate-keys.jstest/js/node/test/parallel/test-crypto-ecb.jstest/js/node/test/parallel/test-crypto-hkdf.jstest/js/node/test/parallel/test-crypto-oneshot-hash.jstest/js/node/test/parallel/test-crypto-op-during-process-exit.jstest/js/node/test/parallel/test-crypto-padding.jstest/js/node/test/parallel/test-crypto-pqc-keygen-ml-dsa.jstest/js/node/test/parallel/test-crypto-pqc-keygen-ml-kem.jstest/js/node/test/parallel/test-crypto-pqc-keygen-slh-dsa.jstest/js/node/test/parallel/test-crypto-randomfillsync-regression.jstest/js/node/test/parallel/test-crypto-rsa-pss-default-salt-length.jstest/js/node/test/parallel/test-crypto-stream.jstest/js/node/test/parallel/test-crypto-subtle-zero-length.jstest/js/node/test/parallel/test-debug-process.jstest/js/node/test/parallel/test-debugger-backtrace.jstest/js/node/test/parallel/test-debugger-exec.jstest/js/node/test/parallel/test-debugger-low-level.jstest/js/node/test/parallel/test-debugger-repeat-last.jstest/js/node/test/parallel/test-debugger-restart-message.jstest/js/node/test/parallel/test-dgram-bind-error-repeat.jstest/js/node/test/parallel/test-dgram-bytes-length.jstest/js/node/test/parallel/test-dgram-connect-send-default-host.jstest/js/node/test/parallel/test-dgram-connect-send-empty-packet.jstest/js/node/test/parallel/test-dgram-connect-send-multi-string-array.jstest/js/node/test/parallel/test-dgram-send-address-types.jstest/js/node/test/parallel/test-dgram-send-empty-buffer.jstest/js/node/test/parallel/test-dgram-send-empty-packet.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-callback-error.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-callback.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-promise-error.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-promise-unhandled.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-promise.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-sync-error.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-sync.jstest/js/node/test/parallel/test-dns-lookupService-promises.jstest/js/node/test/parallel/test-domain-nested-throw.jstest/js/node/test/parallel/test-domexception-cause.jstest/js/node/test/parallel/test-event-emitter-add-listeners.jstest/js/node/test/parallel/test-event-emitter-method-names.jstest/js/node/test/parallel/test-event-emitter-remove-all-listeners.jstest/js/node/test/parallel/test-events-uncaught-exception-stack.jstest/js/node/test/parallel/test-eventtarget-custom-inspect-does-not-throw.jstest/js/node/test/parallel/test-file-write-stream.jstest/js/node/test/parallel/test-file-write-stream2.jstest/js/node/test/parallel/test-fs-access.jstest/js/node/test/parallel/test-fs-fmap.jstest/js/node/test/parallel/test-fs-lchmod.jstest/js/node/test/parallel/test-fs-open.jstest/js/node/test/parallel/test-fs-promises-readfile-empty.jstest/js/node/test/parallel/test-fs-promises-statfs-validate-path.jstest/js/node/test/parallel/test-fs-promises-writefile.jstest/js/node/test/parallel/test-fs-read-stream-encoding.jstest/js/node/test/parallel/test-fs-read-stream-err.jstest/js/node/test/parallel/test-fs-read-stream-inherit.jstest/js/node/test/parallel/test-fs-read-stream-pos.jstest/js/node/test/parallel/test-fs-read-stream-throw-type-error.jstest/js/node/test/parallel/test-fs-read-stream.jstest/js/node/test/parallel/test-fs-read-zero-length.jstest/js/node/test/parallel/test-fs-readdir-recursive.jstest/js/node/test/parallel/test-fs-readfile-fd.jstest/js/node/test/parallel/test-fs-realpath.jstest/js/node/test/parallel/test-fs-statfs.jstest/js/node/test/parallel/test-fs-symlink-dir-junction.jstest/js/node/test/parallel/test-fs-watch-recursive-delete.jstest/js/node/test/parallel/test-fs-watch-recursive-watch-file.jstest/js/node/test/parallel/test-fs-watch-stop-async.jstest/js/node/test/parallel/test-fs-watchfile.jstest/js/node/test/parallel/test-fs-write-optional-params.jstest/js/node/test/parallel/test-fs-write-stream-change-open.jstest/js/node/test/parallel/test-fs-write-stream-err.jstest/js/node/test/parallel/test-fs-write-stream-throw-type-error.jstest/js/node/test/parallel/test-fs-write-stream.jstest/js/node/test/parallel/test-gc-http-client-connaborted.jstest/js/node/test/parallel/test-gc-tls-external-memory.jstest/js/node/test/parallel/test-global-encoder.jstest/js/node/test/parallel/test-http-abort-stream-end.jstest/js/node/test/parallel/test-http-agent-keep-alive-timeout-buffer.jstest/js/node/test/parallel/test-http-agent-maxtotalsockets.jstest/js/node/test/parallel/test-http-agent-remove.jstest/js/node/test/parallel/test-http-allow-content-length-304.jstest/js/node/test/parallel/test-http-buffer-sanity.jstest/js/node/test/parallel/test-http-chunk-problem.jstest/js/node/test/parallel/test-http-client-close-with-default-agent.jstest/js/node/test/parallel/test-http-client-finished.jstest/js/node/test/parallel/test-http-client-keep-alive-hint.jstest/js/node/test/parallel/test-http-client-keep-alive-release-before-finish.jstest/js/node/test/parallel/test-http-client-leaky-with-double-response.jstest/js/node/test/parallel/test-http-client-pipe-end.jstest/js/node/test/parallel/test-http-client-request-options.jstest/js/node/test/parallel/test-http-client-response-timeout.jstest/js/node/test/parallel/test-http-client-timeout-event.jstest/js/node/test/parallel/test-http-client-timeout-option.jstest/js/node/test/parallel/test-http-client-timeout.jstest/js/node/test/parallel/test-http-client-with-create-connection.jstest/js/node/test/parallel/test-http-content-length-mismatch.jstest/js/node/test/parallel/test-http-date-header.jstest/js/node/test/parallel/test-http-decoded-auth.jstest/js/node/test/parallel/test-http-double-content-length.jstest/js/node/test/parallel/test-http-end-throw-socket-handling.jstest/js/node/test/parallel/test-http-expect-handling.jstest/js/node/test/parallel/test-http-extra-response.jstest/js/node/test/parallel/test-http-flush-headers.jstest/js/node/test/parallel/test-http-flush-response-headers.jstest/js/node/test/parallel/test-http-full-response.jstest/js/node/test/parallel/test-http-head-throw-on-response-body-write.jstest/js/node/test/parallel/test-http-header-obstext.jstest/js/node/test/parallel/test-http-header-read.jstest/js/node/test/parallel/test-http-highwatermark.jstest/js/node/test/parallel/test-http-host-headers.jstest/js/node/test/parallel/test-http-invalidheaderfield.jstest/js/node/test/parallel/test-http-keep-alive-pipeline-max-requests.jstest/js/node/test/parallel/test-http-keep-alive-timeout-buffer.jstest/js/node/test/parallel/test-http-many-ended-pipelines.jstest/js/node/test/parallel/test-http-outgoing-finished.jstest/js/node/test/parallel/test-http-parser-free.jstest/js/node/test/parallel/test-http-parser.jstest/js/node/test/parallel/test-http-pause.jstest/js/node/test/parallel/test-http-proxy.jstest/js/node/test/parallel/test-http-readable-data-event.jstest/js/node/test/parallel/test-http-request-end-twice.jstest/js/node/test/parallel/test-http-request-end.jstest/js/node/test/parallel/test-http-request-method-delete-payload.jstest/js/node/test/parallel/test-http-response-add-header-after-sent.jstest/js/node/test/parallel/test-http-response-readable.jstest/js/node/test/parallel/test-http-response-remove-header-after-sent.jstest/js/node/test/parallel/test-http-response-setheaders.jstest/js/node/test/parallel/test-http-response-status-message.jstest/js/node/test/parallel/test-http-response-statuscode.jstest/js/node/test/parallel/test-http-response-writehead-returns-this.jstest/js/node/test/parallel/test-http-server-close-idle-wait-response.jstest/js/node/test/parallel/test-http-server-keep-alive-defaults.jstest/js/node/test/parallel/test-http-server-keep-alive-max-requests-null.jstest/js/node/test/parallel/test-http-server-method.query.jstest/js/node/test/parallel/test-http-server-multiheaders.jstest/js/node/test/parallel/test-http-server-non-utf8-header.jstest/js/node/test/parallel/test-http-server-options-incoming-message.jstest/js/node/test/parallel/test-http-server-options-server-response.jstest/js/node/test/parallel/test-http-server-stale-close.jstest/js/node/test/parallel/test-http-set-cookies.jstest/js/node/test/parallel/test-http-set-header-chain.jstest/js/node/test/parallel/test-http-status-code.jstest/js/node/test/parallel/test-http-status-message.jstest/js/node/test/parallel/test-http-timeout-overflow.jstest/js/node/test/parallel/test-http-unix-socket.jstest/js/node/test/parallel/test-http-url.parse-basic.jstest/js/node/test/parallel/test-http-url.parse-https.request.jstest/js/node/test/parallel/test-http-write-callbacks.jstest/js/node/test/parallel/test-http-zero-length-write.jstest/js/node/test/parallel/test-http2-cancel-while-client-reading.jstest/js/node/test/parallel/test-http2-client-proxy-over-http2.jstest/js/node/test/parallel/test-http2-client-request-options-errors.jstest/js/node/test/parallel/test-http2-client-setNextStreamID-errors.jstest/js/node/test/parallel/test-http2-client-stream-destroy-before-connect.jstest/js/node/test/parallel/test-http2-client-upload-reject.jstest/js/node/test/parallel/test-http2-close-while-writing.jstest/js/node/test/parallel/test-http2-compat-serverrequest-settimeout.jstest/js/node/test/parallel/test-http2-compat-serverresponse-close.jstest/js/node/test/parallel/test-http2-compat-serverresponse-end.jstest/js/node/test/parallel/test-http2-compat-serverresponse-settimeout.jstest/js/node/test/parallel/test-http2-compat-short-stream-client-server.jstest/js/node/test/parallel/test-http2-compat-write-early-hints-invalid-argument-type.jstest/js/node/test/parallel/test-http2-compat-write-early-hints-invalid-argument-value.jstest/js/node/test/parallel/test-http2-connect-tls-with-delay.jstest/js/node/test/parallel/test-http2-connect.jstest/js/node/test/parallel/test-http2-create-client-session.jstest/js/node/test/parallel/test-http2-destroy-after-write.jstest/js/node/test/parallel/test-http2-generic-streams-sendfile.jstest/js/node/test/parallel/test-http2-goaway-opaquedata.jstest/js/node/test/parallel/test-http2-head-request.jstest/js/node/test/parallel/test-http2-invalidheaderfield.jstest/js/node/test/parallel/test-http2-large-write-close.jstest/js/node/test/parallel/test-http2-large-writes-session-memory-leak.jstest/js/node/test/parallel/test-http2-malformed-altsvc.jstest/js/node/test/parallel/test-http2-many-writes-and-destroy.jstest/js/node/test/parallel/test-http2-misbehaving-flow-control-paused.jstest/js/node/test/parallel/test-http2-misbehaving-flow-control.jstest/js/node/test/parallel/test-http2-misused-pseudoheaders.jstest/js/node/test/parallel/test-http2-no-more-streams.jstest/js/node/test/parallel/test-http2-options-server-request.jstest/js/node/test/parallel/test-http2-origin.jstest/js/node/test/parallel/test-http2-pipe.jstest/js/node/test/parallel/test-http2-removed-header-stays-removed.jstest/js/node/test/parallel/test-http2-res-corked.jstest/js/node/test/parallel/test-http2-respond-file-204.jstest/js/node/test/parallel/test-http2-respond-file-304.jstest/js/node/test/parallel/test-http2-respond-file-404.jstest/js/node/test/parallel/test-http2-respond-file-compat.jstest/js/node/test/parallel/test-http2-respond-file-error-dir.jstest/js/node/test/parallel/test-http2-respond-file-error-pipe-offset.jstest/js/node/test/parallel/test-http2-respond-file-fd-invalid.jstest/js/node/test/parallel/test-http2-respond-file-fd-range.jstest/js/node/test/parallel/test-http2-respond-file-fd.jstest/js/node/test/parallel/test-http2-respond-file-range.jstest/js/node/test/parallel/test-http2-respond-file-with-pipe.jstest/js/node/test/parallel/test-http2-respond-with-file-connection-abort.jstest/js/node/test/parallel/test-http2-sent-headers.jstest/js/node/test/parallel/test-http2-serve-file.jstest/js/node/test/parallel/test-http2-server-set-header.jstest/js/node/test/parallel/test-http2-short-stream-client-server.jstest/js/node/test/parallel/test-http2-too-large-headers.jstest/js/node/test/parallel/test-http2-trailers.jstest/js/node/test/parallel/test-http2-write-finishes-after-stream-destroy.jstest/js/node/test/parallel/test-http2-zero-length-header.jstest/js/node/test/parallel/test-https-agent-session-eviction.jstest/js/node/test/parallel/test-https-agent.jstest/js/node/test/parallel/test-https-byteswritten.jstest/js/node/test/parallel/test-https-unix-socket-self-signed.jstest/js/node/test/parallel/test-inspector-connect-to-main-thread.jstest/js/node/test/parallel/test-kill-segfault-freebsd.jstest/js/node/test/parallel/test-listen-fd-detached-inherit.jstest/js/node/test/parallel/test-listen-fd-detached.jstest/js/node/test/parallel/test-listen-fd-ebadf.jstest/js/node/test/parallel/test-macos-app-sandbox.jstest/js/node/test/parallel/test-microtask-queue-integration.jstest/js/node/test/parallel/test-microtask-queue-run-immediate.jstest/js/node/test/parallel/test-microtask-queue-run.jstest/js/node/test/parallel/test-module-create-require-multibyte.jstest/js/node/test/parallel/test-module-prototype-mutation.jstest/js/node/test/parallel/test-module-readonly.jstest/js/node/test/parallel/test-module-run-main-monkey-patch.jstest/js/node/test/parallel/test-module-stat.jstest/js/node/test/parallel/test-net-allow-half-open.jstest/js/node/test/parallel/test-net-autoselectfamily-default.jstest/js/node/test/parallel/test-net-autoselectfamily-ipv4first.jstest/js/node/test/parallel/test-net-autoselectfamily.jstest/js/node/test/parallel/test-net-blocklist.jstest/js/node/test/parallel/test-net-bytes-stats.jstest/js/node/test/parallel/test-net-child-process-connect-reset.jstest/js/node/test/parallel/test-net-connect-abort-controller.jstest/js/node/test/parallel/test-net-connect-keepalive.jstest/js/node/test/parallel/test-net-connect-memleak.jstest/js/node/test/parallel/test-net-connect-nodelay.jstest/js/node/test/parallel/test-net-connect-options-invalid.jstest/js/node/test/parallel/test-net-connect-options-ipv6.jstest/js/node/test/parallel/test-net-connect-options-path.jstest/js/node/test/parallel/test-net-connect-options-port.jstest/js/node/test/parallel/test-net-end-destroyed.jstest/js/node/test/parallel/test-net-keepalive.jstest/js/node/test/parallel/test-net-large-string.jstest/js/node/test/parallel/test-net-listen-exclusive-random-ports.jstest/js/node/test/parallel/test-net-listen-invalid-port.jstest/js/node/test/parallel/test-net-localerror.jstest/js/node/test/parallel/test-net-pause-resume-connecting.jstest/js/node/test/parallel/test-net-persistent-keepalive.jstest/js/node/test/parallel/test-net-reconnect.jstest/js/node/test/parallel/test-net-remote-address-port.jstest/js/node/test/parallel/test-net-remote-address.jstest/js/node/test/parallel/test-net-server-close.jstest/js/node/test/parallel/test-net-server-listen-remove-callback.js
💤 Files with no reviewable changes (13)
- test/js/node/test/parallel/test-child-process-spawnsync-timeout.js
- test/js/node/test/parallel/test-console-tty-colors.js
- test/js/node/test/parallel/test-dns-lookupService-promises.js
- test/js/node/test/parallel/test-http-unix-socket.js
- test/js/node/test/parallel/test-http2-large-writes-session-memory-leak.js
- test/js/node/test/parallel/test-net-connect-options-invalid.js
- test/js/node/test/parallel/test-https-unix-socket-self-signed.js
- test/js/node/test/parallel/test-fs-promises-writefile.js
- test/js/node/test/parallel/test-http-client-response-timeout.js
- test/js/node/test/parallel/test-http-client-pipe-end.js
- test/js/node/test/parallel/test-http-client-with-create-connection.js
- test/js/node/test/parallel/test-net-blocklist.js
- test/js/node/test/parallel/test-module-readonly.js
There was a problem hiding this comment.
LGTM — all flagged issues have been addressed across commits 32703b7 and c7a14bc.
Extended reasoning...
Overview
This PR syncs 300 test files under test/js/node/test/ with Node.js v24.14.1 (commit d89bb1b482): 386 existing tests updated, 51 new tests added, 34 kept at Bun's version, and 16 new tests dropped (currently fail in Bun). No production code is touched.
Security Risks
None. This PR modifies only test files; no auth, crypto, or permission logic is changed.
Level of Scrutiny
Moderate — while 300 files is large, these are mechanical test syncs following a well-established pattern. The key risk is mismatches between upstream Node.js error message formats and Bun's own implementations. The inline bug comments flagged five such mismatches; all were addressed by the author.
Other Factors
The author responded to every inline comment: the Windows junction trailing-backslash workaround was restored (32703b7), the test-fs-lchmod.js and vs && mismatch and test-tls-no-sslv3.js null-vs-false opensslCli Alpine failure were both reverted to Bun's version (c7a14bc). The remaining findings (upstream return vs continue loop bug, mustNotCall patterns) were confirmed correct by local test runs. The PR is in a clean state.
There was a problem hiding this comment.
LGTM — all concerns addressed; Bun-specific regressions reverted, remaining differences confirmed to pass in CI.
Extended reasoning...
Overview
This is a large (300-file) sync of the Node.js test suite with v24.14.1. Changes are mechanical: wrapping callbacks with common.mustCall/common.mustSucceed, converting destructured imports to full module references, and adding 51 new test files. No production code is modified.
Security Risks
None. All changes are confined to the test directory (test/js/node/test/).
Level of Scrutiny
Moderate scrutiny was warranted given the volume, but the mechanical nature of the changes and test-only scope kept the risk low. The main concern was Bun-specific divergences being silently discarded.
Resolution Summary
All six issues raised during review were resolved:
- return vs continue in
test-event-emitter-method-names.js: upstream Node.js v24.14.1 bug, intentionally kept verbatim per sync policy - Junction symlink trailing slash (
test-fs-symlink-dir-junction.js): reverted to Bun version in commit 32703b7 - lchmod error message format (
test-fs-lchmod.js): reverted to Bun version in commit c7a14bc (along withtest-tls-no-sslv3.js) - mustNotCall() in child-process-cwd: confirmed passing locally and in CI, upstream verbatim
- mustNotCall() in http-highwatermark: malformed requests never reach the handler, confirmed passing
- mustNotCall() for DELETE body (
test-http-request-method-delete-payload.js): confirmed passing across 5 CI builds — Bun's server emitsendwithoutdatain this scenario
There was a problem hiding this comment.
LGTM — all flagged issues resolved.
Extended reasoning...
Overview
This PR syncs 300 test files in test/js/node/test/parallel/ with Node.js v24.14.1 (commit d89bb1b482). The changes are mechanical: wrapping callbacks with common.mustCall variants, converting forEach to for...of, updating assertion import styles, and adding 50 new upstream test files.
Security risks
No security-sensitive code is touched. All changes are confined to the test suite.
Level of scrutiny
This is a test-only sync PR. The mechanical nature of the changes (callback wrapping, import style normalization) is low-risk. The 36 Bun-specific workaround files were correctly preserved (verified via the revert commits 32703b7 and c7a14bc).
Prior review resolution
All 8 issues raised in prior review rounds have been addressed: two were genuine bugs fixed by reverting to main (test-fs-symlink-dir-junction.js, test-fs-lchmod.js), and the remaining six were confirmed as verbatim upstream code per the sync policy. The sole CI failure (test/js/bun/net/socket.test.ts on Windows 2019 x64) is in an unrelated Bun-native file and is not caused by this PR.
|
Rebased onto main
Previous build #63343 (279/286) surfaced 3 real failures in new Rebase resolution (see PR body for detail):
|
There was a problem hiding this comment.
The two Bun-specific regressions I flagged have been addressed; remaining issues are verbatim upstream patterns confirmed passing in CI. LGTM.
Extended reasoning...
Overview
PR #29359 syncs 300 test files in test/js/node/test/parallel/ with Node.js v24.14.1 (commit d89bb1b482). Changes are purely in the test suite: wrapping callbacks with common.mustCall/mustCallAtLeast/mustSucceed helpers, converting destructured imports to full module references, replacing .forEach with for...of loops, and adding 50 new test files. No production code is modified.
Security risks
None. This is a test-only change with no security-sensitive code paths.
Level of scrutiny
Moderate — the PR is large (300 files) but mechanical and follows a well-established sync pattern. The key risk is Bun-specific workarounds being accidentally overwritten. That risk materialized in two files and was caught and fixed. The remaining flagged items (return-vs-continue in for-of, double mustCall wrapping, tautological assertion, mustNotCall patterns) are all byte-identical to upstream Node.js v24.14.1 and confirmed passing across all CI platforms.
Other factors
- Two genuine regressions were caught in earlier review rounds and reverted (
test-fs-symlink-dir-junction.jsin 32703b7,test-fs-lchmod.jsin c7a14bc). - Five prior CI builds (45861, 45875, 45881, 45885, 46115) all passed without failures from the remaining flagged patterns.
- The latest commit is currently building as #46279.
There was a problem hiding this comment.
LGTM — all flagged issues resolved.
Extended reasoning...
Overview
This PR syncs 300 test files under test/js/node/test/ with Node.js v24.14.1 (d89bb1b482), plus a one-line threshold fix in test/js/bun/net/socket.test.ts. It is entirely test-only: 384 existing tests updated to match upstream, 50 new tests added, 36 kept at Bun's version, and 17 dropped as flaky/failing.
Security risks
None. All changes are in the test suite with no production code, auth, crypto, or permission logic touched.
Level of scrutiny
Appropriate for a mechanical upstream sync. The main risks are (a) Bun-specific workarounds accidentally overwritten and (b) new upstream tests that assume Node.js semantics Bun doesn't match. Both categories were already caught and handled in prior review rounds.
Other factors
Two real bugs caught in earlier review passes were fixed (symlink junction trailing-slash workaround and lchmod error-message format, both reverted in c7a14bc). All other flagged items were confirmed as pre-existing upstream Node.js bugs, byte-identical to the upstream source, and intentionally kept verbatim per the sync policy. All inline comments are resolved. Three full CI runs show zero failures in test/js/node/test/. The socket.test.ts Windows threshold bump (≤3 → ≤4) addresses an ambient JSC conservative-scan false-positive on mimalloc layouts.
There was a problem hiding this comment.
LGTM — all review comments addressed, CI clean across 4 runs.
Extended reasoning...
Overview
This PR syncs 300 test files in test/js/node/test/parallel/ (and one Bun-owned file) with Node.js v24.14.1 commit d89bb1b482. Changes are: 384 existing tests updated verbatim from upstream, 50 new tests added, 36 tests pinned at Bun's version, 17 tests dropped as currently failing/flaky. The only non-Node-test change is a Windows memory-leak threshold bump in test/js/bun/net/socket.test.ts (3→4 for TCPSocket/TLSSocket).
Security risks
None. All changes are in test files. The new PQC crypto tests (test-crypto-pqc-keygen-*.js) guard themselves with an OpenSSL 3.5+ version check and simply skip on Bun; they exercise no new Bun code paths. No production code, auth, crypto implementation, or permission logic is touched.
Level of scrutiny
Low-to-medium. Routine upstream sync following an established, well-documented policy (verbatim copy except Bun-specific overrides). The pattern is identical to prior Node.js sync PRs. Test-only changes have a limited blast radius.
Other factors
All six inline issues I flagged were acknowledged and resolved appropriately: two files (test-fs-symlink-dir-junction.js, test-fs-lchmod.js) were reverted to Bun's versions where upstream diverges; four others (test-event-emitter-method-names.js, test-http-parser.js, test-promises-unhandled-rejections.js, test-http-highwatermark.js) were confirmed byte-identical to upstream and kept per sync policy. The Windows CI flap was correctly root-caused to the mimalloc bump in a separate PR and fixed with the threshold increment. CI reports zero failures across all 434 changed Node.js test files in 4 full runs.
There was a problem hiding this comment.
LGTM — all prior inline comments resolved, CI green on Node.js tests across 6 runs.
Extended reasoning...
Overview
This PR syncs 300 test files in test/js/node/test/{parallel,sequential}/ with Node.js v24.14.1 (commit d89bb1b482). The only non-test change is a GC threshold bump in test/js/bun/net/socket.test.ts (3→4 for TCPSocket/TLSSocket on Windows, root-caused to the mimalloc allocator layout change in #29420).
Security Risks
None — this is a pure test sync with no changes to runtime code, auth, crypto, or permissions.
Level of Scrutiny
Low. The established sync policy is verbatim upstream except where Bun-specific workarounds are required. All edge cases that arose were either reverted to Bun's version (two files: and ) or confirmed as intentional upstream artifacts ( double-mustCall, tautological assertion, return-vs-continue).
Other Factors
All five inline comment threads from previous review rounds were resolved by robobun with upstream diff verification. CI shows 0 failures in across 6 complete runs (#46183, #46192, #46216, #46279, #46289, #46294). The remaining red on CI is a GitHub codeload infrastructure outage (failed tarball downloads for c-ares/highway/brotli), unrelated to this PR and self-cleared in newer builds.
There was a problem hiding this comment.
LGTM — two real issues (lchmod message format, symlink junction trailing backslash) were caught and fixed; all remaining flagged items are verbatim upstream bugs kept per sync policy, CI shows 0 failures across 6 full runs.
Extended reasoning...
Overview
PR #29359 syncs 300 test files with Node.js v24.14.1 (d89bb1b482): 384 files updated verbatim, 49 new tests added, 36 files kept at Bun's version with workarounds, 18 known-failing tests dropped. The only non-test change is a threshold bump in test/js/bun/net/socket.test.ts (TCPSocket/TLSSocket GC count 3→4 on Windows) to account for mimalloc conservative-GC false-positive retention introduced by PR #29420.
Security risks
None. All changes are in test files. No production code, auth, crypto primitives, or permission logic is modified.
Level of scrutiny
This is a large but mechanical sync PR following a well-established pattern (test-only, upstream verbatim except for explicit Bun workarounds). The socket.test.ts threshold bump is a narrow one-line fix with a clear root-cause explanation (mimalloc allocator layout change causing conservative GC false positives). The level of scrutiny required is moderate — the mechanical nature reduces risk, but the volume warrants careful spot-checking of non-verbatim files.
Other factors
- Two real bugs were caught during review and correctly fixed by reverting to main:
test-fs-lchmod.js(message format mismatch&&vsand) andtest-fs-symlink-dir-junction.js(libuv trailing backslash on Windows junctions). - Remaining flagged issues (
returnvscontinue, double mustCall, tautological assertion) are pre-existing upstream Node.js bugs — kept verbatim per sync policy, with upstream references confirmed. - CI validation: 0 failures in any
test/js/node/test/file across 6 full CI runs. The Windowssocket.test.tsfix is validated. The only remaining red is a GitHub codeload infra outage unrelated to code changes.
There was a problem hiding this comment.
LGTM — all Bun-specific regressions caught during review were fixed (fs-symlink-dir-junction trailing-backslash, fs-lchmod error-message format); remaining flagged items are verbatim upstream bugs intentionally kept per sync policy, and CI shows 0 failures across 8 runs in the affected test paths.
Extended reasoning...
Overview
This PR syncs 300+ Node.js test files with upstream v24.14.1 (commit d89bb1b482). It updates 384 existing tests, adds 49 new tests, keeps 36 at Bun's version (with explicit Bun-specific workarounds), and drops 18 new upstream tests that currently fail in Bun.
Security Risks
None. This PR only modifies test files under test/js/node/test/parallel/ and one test helper (test/js/bun/net/socket.test.ts). No production code, auth logic, crypto primitives, or permissions code is touched.
Review Findings and Resolutions
Multiple rounds of review caught several issues:
- Fixed:
test-fs-symlink-dir-junction.js— PR removed Bun'swithoutTrailingSlashworkaround; libuv still appends\\to junction readlink results on Windows (confirmed inSymlinker.zig). Reverted to main in commit 32703b7. - Fixed:
test-fs-lchmod.js— PR used&&for error message but Bun'svalidateUint32invalidators.ziggeneratesand. Reverted to main in commit c7a14bc. - Kept verbatim (confirmed passing):
test-event-emitter-method-names.js(returnvscontinueupstream bug),test-child-process-cwd.js(mustNotCallon exit),test-http-highwatermark.js(mustNotCall server handler),test-http-request-method-delete-payload.js(mustNotCall on data),test-http-parser.js(double mustCall wrapping),test-promises-unhandled-rejections.js(tautological assertion) — all confirmed byte-identical to upstream and passing in CI.
Level of Scrutiny
High — this is a large test suite sync with significant surface area. The iterative review process (8 CI runs, multiple inline comment rounds) was appropriate. The PR author explicitly maintained a "verbatim upstream" policy with documented rationale for any deviations, making the intent clear and the diffs auditable.
CI Status
Final build #46310: 0 failures in test/js/node/test/ across all platforms. Windows 16/16 passed. The only remaining CI red (complex-workspace.test.ts on ubuntu-25.04-x64-baseline) is unrelated to this PR and also fails on independent build #46307.
There was a problem hiding this comment.
LGTM — all flagged issues resolved (two fixes landed, remaining items confirmed as verbatim upstream).
Extended reasoning...
Overview
PR #29359 syncs Bun's Node.js compatibility test suite with Node.js v24.14.1 (d89bb1b482), touching 300 files: 384 tests updated verbatim, 49 new tests added, 36 kept at Bun's version, 18 dropped.
Security risks
None. All changes are in test files under test/js/node/test/parallel/ plus a minor Windows memory-leak threshold bump in test/js/bun/net/socket.test.ts. No production code is modified.
Resolution of prior findings
Eight inline comments were posted across multiple review passes:
- test-fs-symlink-dir-junction.js: Bun-specific
withoutTrailingSlashworkaround had been removed; flagged and reverted in commit32703b7. - test-fs-lchmod.js:
&&vsandin ERR_OUT_OF_RANGE message would have failed macOS CI; flagged and reverted in commitc7a14bc. - All other flagged items (double
mustCall, tautological assertion,returnvscontinueinfor...of,mustNotCallon exit/data/server handlers): confirmed by robobun as byte-identical to Node.js v24.14.1 upstream, passing in CI, and kept verbatim per the sync policy.
Level of scrutiny
Test-only PR following a well-established, documented sync policy (verbatim upstream unless a Bun-specific workaround is required). The pattern is mechanical and well-understood. CI across 10 runs shows 0 failures in any of the 434 modified files; only red is an aarch64 cold-cache build timeout that is an infra issue unrelated to this PR.
Other factors
All inline comments are marked resolved. The socket.test.ts Windows threshold bump (3→4) is a minor, justified adjustment for Windows mimalloc conservative-GC false positives, validated across 3 Windows CI shards.
|
@robobun why did we need to change |
|
@alii It was blocking this PR's CI: Bisection: build #46134 is PR #29420 (mimalloc bump) at It's conservative-GC false-positive retention: the new mimalloc layout left a pointer-shaped word on the native stack that JSC's conservative scan pinned as a However, the underlying cause has since been fixed on main (either #29451 Since this PR already merges main past both fixes, the bump is now belt-and-suspenders. Happy to revert it if you'd prefer to keep the PR scope strictly to |
|
@robobun Yes please revert, also rebase main. This PR should only do the test updates. |
fb97c97 to
e653795
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@test/js/node/test/parallel/test-http-agent-keep-alive-timeout-buffer.js`:
- Around line 24-25: Rename the constants SERVER_TIMEOUT and BUFFER to camelCase
(e.g., serverTimeout and buffer) throughout the test file, updating every
reference to those identifiers (including any assertions, timers, or function
calls that use SERVER_TIMEOUT or BUFFER) so the code compiles and follows the
repo JS naming rule; ensure const declarations for serverTimeout and buffer
preserve the same values (3 and 1500) and keep their scopes unchanged in the
test block.
In `@test/js/node/test/parallel/test-macos-app-sandbox.js`:
- Around line 57-61: The spawned child currently calls fs.readdirSync in the
inline -e script without requiring fs, causing a ReferenceError and a
false-positive test; update the child_process.spawnSync invocation (the call
using appExecutablePath) to require('fs') inside the -e script before calling
readdirSync (e.g. const fs = require('fs'); fs.readdirSync(process.argv[1]);) so
the script fails only when the sandbox actually blocks filesystem access rather
than due to an undefined variable.
- Around line 65-71: The test only asserts spawnResult.signal === null which can
miss spawn failures; update the spawnSync invocation result checks for the call
that uses child_process.spawnSync(appExecutablePath, ['-e', ''], { stdio:
'inherit' }) by also asserting spawnResult.error === undefined and
spawnResult.status === 0 (matching the pattern used earlier in the test), so
verify both no error and a zero exit status in addition to the existing signal
check.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: 8c5e45e2-7f61-4830-b20e-19666e1c4df7
📒 Files selected for processing (262)
test/js/node/test/parallel/test-assert-async.jstest/js/node/test/parallel/test-async-hooks-recursive-stack-runInAsyncScope.jstest/js/node/test/parallel/test-async-hooks-stack-overflow-nested-async.jstest/js/node/test/parallel/test-async-local-storage-contexts.jstest/js/node/test/parallel/test-async-local-storage-snapshot.jstest/js/node/test/parallel/test-blocklist-clone.jstest/js/node/test/parallel/test-btoa-atob.jstest/js/node/test/parallel/test-buffer-bytelength.jstest/js/node/test/parallel/test-buffer-failed-alloc-typed-arrays.jstest/js/node/test/parallel/test-buffer-inspect.jstest/js/node/test/parallel/test-buffer-no-negative-allocation.jstest/js/node/test/parallel/test-buffer-over-max-length.jstest/js/node/test/parallel/test-buffer-resizable.jstest/js/node/test/parallel/test-buffer-tostring-rangeerror.jstest/js/node/test/parallel/test-buffer-tostring.jstest/js/node/test/parallel/test-buffer-zero-fill-cli.jstest/js/node/test/parallel/test-child-process-can-write-to-stdout.jstest/js/node/test/parallel/test-child-process-cwd.jstest/js/node/test/parallel/test-child-process-disconnect.jstest/js/node/test/parallel/test-child-process-flush-stdio.jstest/js/node/test/parallel/test-child-process-fork-abort-signal.jstest/js/node/test/parallel/test-child-process-fork-advanced-header-serialization.jstest/js/node/test/parallel/test-child-process-fork-closed-channel-segfault.jstest/js/node/test/parallel/test-child-process-fork-ref.jstest/js/node/test/parallel/test-child-process-fork-timeout-kill-signal.jstest/js/node/test/parallel/test-child-process-fork.jstest/js/node/test/parallel/test-child-process-reject-null-bytes.jstest/js/node/test/parallel/test-child-process-spawn-timeout-kill-signal.jstest/js/node/test/parallel/test-child-process-spawnsync-args.jstest/js/node/test/parallel/test-child-process-spawnsync-timeout.jstest/js/node/test/parallel/test-child-process-stdio-inherit.jstest/js/node/test/parallel/test-cluster-concurrent-disconnect.jstest/js/node/test/parallel/test-cluster-disconnect-exitedAfterDisconnect-race.jstest/js/node/test/parallel/test-cluster-eaddrinuse.jstest/js/node/test/parallel/test-cluster-fork-windowsHide.jstest/js/node/test/parallel/test-cluster-message.jstest/js/node/test/parallel/test-cluster-rr-handle-keep-loop-alive.jstest/js/node/test/parallel/test-cluster-send-deadlock.jstest/js/node/test/parallel/test-cluster-worker-events.jstest/js/node/test/parallel/test-cluster-worker-isdead.jstest/js/node/test/parallel/test-cluster-worker-kill-signal.jstest/js/node/test/parallel/test-cluster-worker-no-exit.jstest/js/node/test/parallel/test-cluster-worker-wait-server-close.jstest/js/node/test/parallel/test-crypto-certificate.jstest/js/node/test/parallel/test-crypto-dh-generate-keys.jstest/js/node/test/parallel/test-crypto-ecb.jstest/js/node/test/parallel/test-crypto-hkdf.jstest/js/node/test/parallel/test-crypto-oneshot-hash.jstest/js/node/test/parallel/test-crypto-op-during-process-exit.jstest/js/node/test/parallel/test-crypto-padding.jstest/js/node/test/parallel/test-crypto-pqc-keygen-ml-dsa.jstest/js/node/test/parallel/test-crypto-pqc-keygen-ml-kem.jstest/js/node/test/parallel/test-crypto-pqc-keygen-slh-dsa.jstest/js/node/test/parallel/test-crypto-randomfillsync-regression.jstest/js/node/test/parallel/test-crypto-rsa-pss-default-salt-length.jstest/js/node/test/parallel/test-crypto-stream.jstest/js/node/test/parallel/test-crypto-subtle-zero-length.jstest/js/node/test/parallel/test-debug-process.jstest/js/node/test/parallel/test-debugger-backtrace.jstest/js/node/test/parallel/test-debugger-exec.jstest/js/node/test/parallel/test-debugger-low-level.jstest/js/node/test/parallel/test-debugger-repeat-last.jstest/js/node/test/parallel/test-debugger-restart-message.jstest/js/node/test/parallel/test-dgram-bind-error-repeat.jstest/js/node/test/parallel/test-dgram-bytes-length.jstest/js/node/test/parallel/test-dgram-connect-send-default-host.jstest/js/node/test/parallel/test-dgram-connect-send-empty-packet.jstest/js/node/test/parallel/test-dgram-connect-send-multi-string-array.jstest/js/node/test/parallel/test-dgram-send-address-types.jstest/js/node/test/parallel/test-dgram-send-empty-buffer.jstest/js/node/test/parallel/test-dgram-send-empty-packet.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-callback-error.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-callback.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-promise-error.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-promise-unhandled.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-promise.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-sync-error.jstest/js/node/test/parallel/test-diagnostics-channel-tracing-channel-sync.jstest/js/node/test/parallel/test-domain-nested-throw.jstest/js/node/test/parallel/test-domexception-cause.jstest/js/node/test/parallel/test-event-emitter-add-listeners.jstest/js/node/test/parallel/test-event-emitter-method-names.jstest/js/node/test/parallel/test-event-emitter-remove-all-listeners.jstest/js/node/test/parallel/test-eventtarget-custom-inspect-does-not-throw.jstest/js/node/test/parallel/test-file-write-stream.jstest/js/node/test/parallel/test-file-write-stream2.jstest/js/node/test/parallel/test-fs-fmap.jstest/js/node/test/parallel/test-fs-open.jstest/js/node/test/parallel/test-fs-promises-readfile-empty.jstest/js/node/test/parallel/test-fs-promises-statfs-validate-path.jstest/js/node/test/parallel/test-fs-promises-writefile.jstest/js/node/test/parallel/test-fs-read-stream-encoding.jstest/js/node/test/parallel/test-fs-read-stream-err.jstest/js/node/test/parallel/test-fs-read-stream-inherit.jstest/js/node/test/parallel/test-fs-read-stream-throw-type-error.jstest/js/node/test/parallel/test-fs-read-stream.jstest/js/node/test/parallel/test-fs-read-zero-length.jstest/js/node/test/parallel/test-fs-readfile-fd.jstest/js/node/test/parallel/test-fs-realpath.jstest/js/node/test/parallel/test-fs-statfs.jstest/js/node/test/parallel/test-fs-watch-recursive-delete.jstest/js/node/test/parallel/test-fs-watch-recursive-watch-file.jstest/js/node/test/parallel/test-fs-watch-stop-async.jstest/js/node/test/parallel/test-fs-watchfile.jstest/js/node/test/parallel/test-fs-write-optional-params.jstest/js/node/test/parallel/test-fs-write-stream-change-open.jstest/js/node/test/parallel/test-fs-write-stream-err.jstest/js/node/test/parallel/test-fs-write-stream-throw-type-error.jstest/js/node/test/parallel/test-fs-write-stream.jstest/js/node/test/parallel/test-gc-http-client-connaborted.jstest/js/node/test/parallel/test-gc-tls-external-memory.jstest/js/node/test/parallel/test-global-encoder.jstest/js/node/test/parallel/test-http-abort-stream-end.jstest/js/node/test/parallel/test-http-agent-keep-alive-timeout-buffer.jstest/js/node/test/parallel/test-http-agent-maxtotalsockets.jstest/js/node/test/parallel/test-http-agent-remove.jstest/js/node/test/parallel/test-http-allow-content-length-304.jstest/js/node/test/parallel/test-http-buffer-sanity.jstest/js/node/test/parallel/test-http-chunk-problem.jstest/js/node/test/parallel/test-http-client-close-with-default-agent.jstest/js/node/test/parallel/test-http-client-finished.jstest/js/node/test/parallel/test-http-client-keep-alive-hint.jstest/js/node/test/parallel/test-http-client-leaky-with-double-response.jstest/js/node/test/parallel/test-http-client-request-options.jstest/js/node/test/parallel/test-http-client-timeout-event.jstest/js/node/test/parallel/test-http-client-timeout-option.jstest/js/node/test/parallel/test-http-client-timeout.jstest/js/node/test/parallel/test-http-content-length-mismatch.jstest/js/node/test/parallel/test-http-date-header.jstest/js/node/test/parallel/test-http-decoded-auth.jstest/js/node/test/parallel/test-http-double-content-length.jstest/js/node/test/parallel/test-http-end-throw-socket-handling.jstest/js/node/test/parallel/test-http-expect-handling.jstest/js/node/test/parallel/test-http-extra-response.jstest/js/node/test/parallel/test-http-flush-headers.jstest/js/node/test/parallel/test-http-flush-response-headers.jstest/js/node/test/parallel/test-http-head-throw-on-response-body-write.jstest/js/node/test/parallel/test-http-header-obstext.jstest/js/node/test/parallel/test-http-header-read.jstest/js/node/test/parallel/test-http-highwatermark.jstest/js/node/test/parallel/test-http-host-headers.jstest/js/node/test/parallel/test-http-invalidheaderfield.jstest/js/node/test/parallel/test-http-keep-alive-pipeline-max-requests.jstest/js/node/test/parallel/test-http-keep-alive-timeout-buffer.jstest/js/node/test/parallel/test-http-many-ended-pipelines.jstest/js/node/test/parallel/test-http-outgoing-finished.jstest/js/node/test/parallel/test-http-parser.jstest/js/node/test/parallel/test-http-pause.jstest/js/node/test/parallel/test-http-proxy.jstest/js/node/test/parallel/test-http-readable-data-event.jstest/js/node/test/parallel/test-http-request-end-twice.jstest/js/node/test/parallel/test-http-request-end.jstest/js/node/test/parallel/test-http-request-method-delete-payload.jstest/js/node/test/parallel/test-http-response-add-header-after-sent.jstest/js/node/test/parallel/test-http-response-readable.jstest/js/node/test/parallel/test-http-response-remove-header-after-sent.jstest/js/node/test/parallel/test-http-response-setheaders.jstest/js/node/test/parallel/test-http-response-status-message.jstest/js/node/test/parallel/test-http-response-statuscode.jstest/js/node/test/parallel/test-http-response-writehead-returns-this.jstest/js/node/test/parallel/test-http-server-close-idle-wait-response.jstest/js/node/test/parallel/test-http-server-keep-alive-defaults.jstest/js/node/test/parallel/test-http-server-keep-alive-max-requests-null.jstest/js/node/test/parallel/test-http-server-method.query.jstest/js/node/test/parallel/test-http-server-multiheaders.jstest/js/node/test/parallel/test-http-server-non-utf8-header.jstest/js/node/test/parallel/test-http-server-options-incoming-message.jstest/js/node/test/parallel/test-http-server-options-server-response.jstest/js/node/test/parallel/test-http-server-stale-close.jstest/js/node/test/parallel/test-http-set-cookies.jstest/js/node/test/parallel/test-http-set-header-chain.jstest/js/node/test/parallel/test-http-status-code.jstest/js/node/test/parallel/test-http-status-message.jstest/js/node/test/parallel/test-http-timeout-overflow.jstest/js/node/test/parallel/test-http-url.parse-basic.jstest/js/node/test/parallel/test-http-write-callbacks.jstest/js/node/test/parallel/test-http-zero-length-write.jstest/js/node/test/parallel/test-http2-cancel-while-client-reading.jstest/js/node/test/parallel/test-http2-client-proxy-over-http2.jstest/js/node/test/parallel/test-http2-client-request-options-errors.jstest/js/node/test/parallel/test-http2-client-setNextStreamID-errors.jstest/js/node/test/parallel/test-http2-client-stream-destroy-before-connect.jstest/js/node/test/parallel/test-http2-client-upload-reject.jstest/js/node/test/parallel/test-http2-close-while-writing.jstest/js/node/test/parallel/test-http2-compat-serverrequest-settimeout.jstest/js/node/test/parallel/test-http2-compat-serverresponse-close.jstest/js/node/test/parallel/test-http2-compat-serverresponse-end.jstest/js/node/test/parallel/test-http2-compat-serverresponse-settimeout.jstest/js/node/test/parallel/test-http2-compat-write-early-hints-invalid-argument-type.jstest/js/node/test/parallel/test-http2-compat-write-early-hints-invalid-argument-value.jstest/js/node/test/parallel/test-http2-connect-tls-with-delay.jstest/js/node/test/parallel/test-http2-connect.jstest/js/node/test/parallel/test-http2-create-client-session.jstest/js/node/test/parallel/test-http2-destroy-after-write.jstest/js/node/test/parallel/test-http2-generic-streams-sendfile.jstest/js/node/test/parallel/test-http2-goaway-opaquedata.jstest/js/node/test/parallel/test-http2-head-request.jstest/js/node/test/parallel/test-http2-invalidheaderfield.jstest/js/node/test/parallel/test-http2-malformed-altsvc.jstest/js/node/test/parallel/test-http2-many-writes-and-destroy.jstest/js/node/test/parallel/test-http2-misbehaving-flow-control-paused.jstest/js/node/test/parallel/test-http2-misbehaving-flow-control.jstest/js/node/test/parallel/test-http2-misused-pseudoheaders.jstest/js/node/test/parallel/test-http2-no-more-streams.jstest/js/node/test/parallel/test-http2-options-server-request.jstest/js/node/test/parallel/test-http2-origin.jstest/js/node/test/parallel/test-http2-removed-header-stays-removed.jstest/js/node/test/parallel/test-http2-res-corked.jstest/js/node/test/parallel/test-http2-respond-file-204.jstest/js/node/test/parallel/test-http2-respond-file-304.jstest/js/node/test/parallel/test-http2-respond-file-404.jstest/js/node/test/parallel/test-http2-respond-file-compat.jstest/js/node/test/parallel/test-http2-respond-file-error-dir.jstest/js/node/test/parallel/test-http2-respond-file-error-pipe-offset.jstest/js/node/test/parallel/test-http2-respond-file-fd-invalid.jstest/js/node/test/parallel/test-http2-respond-file-fd-range.jstest/js/node/test/parallel/test-http2-respond-file-fd.jstest/js/node/test/parallel/test-http2-respond-file-range.jstest/js/node/test/parallel/test-http2-respond-file-with-pipe.jstest/js/node/test/parallel/test-http2-respond-with-file-connection-abort.jstest/js/node/test/parallel/test-http2-sent-headers.jstest/js/node/test/parallel/test-http2-serve-file.jstest/js/node/test/parallel/test-http2-server-set-header.jstest/js/node/test/parallel/test-http2-too-large-headers.jstest/js/node/test/parallel/test-http2-trailers.jstest/js/node/test/parallel/test-http2-write-finishes-after-stream-destroy.jstest/js/node/test/parallel/test-http2-zero-length-header.jstest/js/node/test/parallel/test-https-agent-session-eviction.jstest/js/node/test/parallel/test-https-agent.jstest/js/node/test/parallel/test-https-byteswritten.jstest/js/node/test/parallel/test-inspector-connect-to-main-thread.jstest/js/node/test/parallel/test-kill-segfault-freebsd.jstest/js/node/test/parallel/test-listen-fd-detached-inherit.jstest/js/node/test/parallel/test-listen-fd-detached.jstest/js/node/test/parallel/test-listen-fd-ebadf.jstest/js/node/test/parallel/test-macos-app-sandbox.jstest/js/node/test/parallel/test-microtask-queue-integration.jstest/js/node/test/parallel/test-microtask-queue-run-immediate.jstest/js/node/test/parallel/test-microtask-queue-run.jstest/js/node/test/parallel/test-module-create-require-multibyte.jstest/js/node/test/parallel/test-module-prototype-mutation.jstest/js/node/test/parallel/test-module-run-main-monkey-patch.jstest/js/node/test/parallel/test-module-stat.jstest/js/node/test/parallel/test-net-allow-half-open.jstest/js/node/test/parallel/test-net-autoselectfamily-default.jstest/js/node/test/parallel/test-net-autoselectfamily-ipv4first.jstest/js/node/test/parallel/test-net-autoselectfamily.jstest/js/node/test/parallel/test-net-blocklist.jstest/js/node/test/parallel/test-net-child-process-connect-reset.jstest/js/node/test/parallel/test-net-connect-abort-controller.jstest/js/node/test/parallel/test-net-connect-keepalive.jstest/js/node/test/parallel/test-net-connect-memleak.jstest/js/node/test/parallel/test-net-connect-nodelay.jstest/js/node/test/parallel/test-net-connect-options-invalid.jstest/js/node/test/parallel/test-net-connect-options-ipv6.jstest/js/node/test/parallel/test-net-connect-options-port.jstest/js/node/test/parallel/test-net-keepalive.jstest/js/node/test/parallel/test-net-listen-exclusive-random-ports.jstest/js/node/test/parallel/test-net-listen-invalid-port.jstest/js/node/test/parallel/test-net-localerror.jstest/js/node/test/parallel/test-net-persistent-keepalive.jstest/js/node/test/parallel/test-net-reconnect.js
💤 Files with no reviewable changes (4)
- test/js/node/test/parallel/test-child-process-spawnsync-timeout.js
- test/js/node/test/parallel/test-net-blocklist.js
- test/js/node/test/parallel/test-net-connect-options-invalid.js
- test/js/node/test/parallel/test-fs-promises-writefile.js
There was a problem hiding this comment.
LGTM — all Bun-specific regressions were reverted, remaining items are upstream Node.js bugs kept verbatim per sync policy, and CI is clean.
Extended reasoning...
Overview
This PR syncs 300 test files in test/js/node/test/parallel/ and test/js/node/test/sequential/ with Node.js v24.14.1 (commit d89bb1b482). All changed files are strictly within the Node.js compat test directory — no production source code, build scripts, or Bun-specific test files are modified.
Security Risks
None. All changes are read-only test files with no access to authentication, crypto primitives, or privileged APIs in Bun's own codebase.
Level of Scrutiny
Test-only sync PRs like this follow an established, well-understood pattern. The primary risk is Bun-specific regressions (upstream tests that rely on Node.js behavior Bun doesn't match). All such regressions identified during review were either reverted or confirmed to be non-issues through local verification and CI.
Other Factors
All eight issues I raised as inline comments were addressed: two files with genuine Bun regressions were reverted (symlink junction and lchmod error message); the remaining six are upstream bugs kept verbatim per the project sync policy (confirmed byte-identical to Node.js v24.14.1). The three mustNotCall edge cases (child-process-cwd, http-highwatermark, http-request-method-delete-payload) all pass 3/3 locally with no CI failure annotations across five builds. Build #46348 shows 224 passed, 0 failures. The out-of-scope socket.test.ts change was correctly reverted and the PR rebased. No outstanding unresolved reviewer comments remain.
641ea45 to
4a99f37
Compare
4a99f37 to
15d2b32
Compare
a43ceef to
d600376
Compare
d600376 to
bbb1e30
Compare
There was a problem hiding this comment.
No issues found on this pass — all prior threads are resolved and the scope is now strictly test/js/node/test/. Given the scale (~432 files) and the judgment calls on which tests to keep at Bun's version vs. drop as flaky, I'll leave the final sign-off to a human.
Extended reasoning...
Overview
This PR syncs ~432 test files under test/js/node/test/{parallel,sequential}/ with Node.js v24.14.1 (commit d89bb1b482). The vast majority of changes are mechanical: wrapping callbacks in common.mustCall()/common.mustCallAtLeast(), switching destructured assert imports to namespace form, replacing forEach with for...of, and adding ~48 new upstream test files. The PR description explicitly enumerates 36 tests kept at Bun's prior version (to preserve Bun-specific workarounds) and 19 new upstream tests dropped as flaky/incompatible. No runtime or production code is touched — the diff is confined entirely to the Node.js compatibility test fixtures directory.
Security risks
None. These are test files copied verbatim from upstream Node.js; they exercise Bun's Node-compat layer but do not ship in the binary, handle untrusted input, or touch auth/crypto/permissions logic in production paths.
Level of scrutiny
Moderate-to-high, but not for correctness of individual hunks (which are verbatim upstream and validated by CI — per the author's build summary, 660 test shards across 6 builds with zero failures in test/js/node/test/). The scrutiny is warranted for the curation decisions: which 36 files to hold back at Bun's version and which 19 new tests to drop. Those choices encode assumptions about current Bun behavior (e.g., libuv junction trailing-slash, error-message format differences, platform-specific timing) and affect what the compat suite will catch going forward. A maintainer familiar with the Node-compat roadmap should confirm that list.
Other factors
All 8 of my prior inline findings and all CodeRabbit findings have been resolved — either fixed (e.g., test-fs-symlink-dir-junction.js, test-fs-lchmod.js reverted to preserve Bun workarounds) or correctly explained as verbatim-upstream-by-design. A human maintainer has already engaged on scope (requesting the socket.test.ts revert and rebase, both done). The PR has been repeatedly rebased and the author has provided detailed CI triage distinguishing infra failures from real test failures. Given the size and the keep/drop curation, this is not a change I'd shadow-approve, but it appears ready for human sign-off.
Syncs tests in test/js/node/test/{parallel,sequential}/ with Node.js at
commit d89bb1b482 (v24.14.1).
- 384 existing tests updated to match upstream
- 49 new tests added
- 36 existing tests kept at Bun's version (Bun-specific workarounds)
- 18 new tests from the list dropped (currently fail/flake in Bun)
All referenced ../common/* helpers and fixture files already exist
in-tree.
bbb1e30 to
7dadb66
Compare
Syncs tests in
test/js/node/test/{parallel,sequential}/with Node.js at commitd89bb1b482(v24.14.1).Test list: https://gist.githubusercontent.com/alii/9b204e9fed78b8d855d282d206cb396a/raw/126374581510b12dc95bead93f237995c2f4dffa/gistfile1.txt
Summary
284 existing tests updated to match upstream
35 new tests added
38 existing tests kept at Bun's version because they carry Bun-specific workarounds (platform skips via
// TODO: BUN,FORCE_COLORcleanup,process.binding('uv')compat,typeof Bunguards, trailing-slash normalization, timing adjustments, error message format differences, etc.) that the upstream version breaks.list
22 new tests from the list were dropped because they currently fail or are flaky in Bun (incompatibilities / crashes / races — to be addressed separately):
list
All referenced
../common/*helpers and fixture files already exist in-tree.Rebase onto
eae803811b(440 commits)Main gained ~840 Node v26.3.0 tests via #31584 (http2), #31826 (stream), #31587 (http client), and #31155 (net/tls), plus the v26.3.0 version bump in #31991. Resolution:
origin/mainafter rebase.test-http2-misbehaving-flow-control{,-paused}.js): kept main's version — node:http2: rewritten inbound engine, batched write path, server push, +290 node v26.3.0 tests (79% passing) #31584's http2 rewrite emitsERR_HTTP2_ERROR/'Protocol error' on the session, not upstream'sERR_HTTP2_STREAM_ERROR/NGHTTP2_FLOW_CONTROL_ERROR. Added to the kept-at-Bun's-version list above.test-net-allow-half-open.jsdrop → no-op: net,tls: port Node.js net/tls compatibility tests and fix the gaps they surface — half-open/reset/write semantics, server TLSSocket wrap, session/keylog, SNICallback/ALPNCallback, pfx, OpenSSL error shapes, addCACert, local binding (+305 tests) #31155 fixed Bun's half-open semantics and re-added that test to main.test-gc-http-client*tests after #63343 showed them hanging at 7/8 collected on alpine — they require exactcountGC === count, which JSC's conservative GC can't guarantee (one client pinned by a native-stack pointer).test-gc-tls-external-memory.jsis kept since it usesgced >= 256tolerance.All 319 remaining files pass locally against
bun 1.4.0-canary.1+0c537fef8(which includes the above rewrites), run the same way CI invokes them.