`fs.mkdtemp` and `fs.mkdtempSync` now accept `Buffer` and `Uint8Array`
path. The implementation has been moved to Rust, including directory
suffix generation and directory creation.
This was done so we can show it later on `node-test-viewer`.
Other notable changes:
- Move ignored test list from `run_all_test_unmodified.ts` to
`config.toml`
- Add `parallel/test-os-checked-function.js` to the ignore list
- Adjust the `README.md`
This commits adds a way to ignore Node compat tests in
`tests/node_compat/config.toml` like so:
```toml
[tests]
"abort/test-addon-register-signal-handler.js" = { windows = false }
"abort/test-addon-uv-handle-leak.js" = { linux = false }
"es-module/test-cjs-prototype-pollution.js" = { darwin = false }
"es-module/test-esm-assert-strict.mjs" = { windows = false, linux = false }
```
Closes#30405
Changes in this PR:
- Fixes `os.setPriority()` on Windows.
- Validates the function parameters correctly and constructs
`NodeSystemError` on op call error.
- Allows [parallel/test-os-process-priority.js](https://github.com/nodejs/node/blob/v24.2.0/test/parallel/test-os-process-priority.js) to pass.
---------
Signed-off-by: Daniel Osvaldo R <daniel.rahmanto@gmail.com>
Previously, Deno throws error when creating `Buffer.allocUnsafe` or
`Buffer.allocUnsafeSlow` with size of `2**31` where that's not the case
with Node.js.
The changes allow these tests to pass:
-
[test-buffer-large-size-buffer-alloc-unsafe-slow.js](https://github.com/nodejs/node/blob/v24.2.0/test/pummel/test-buffer-large-size-buffer-alloc-unsafe-slow.js)
-
[test-buffer-large-size-buffer-alloc-unsafe.js](https://github.com/nodejs/node/blob/v24.2.0/test/pummel/test-buffer-large-size-buffer-alloc-unsafe.js)
-
[test-string-decoder-large-buffer.js](https://github.com/nodejs/node/blob/v24.2.0/test/pummel/test-string-decoder-large-buffer.js)
<!--
Before submitting a PR, please read
https://docs.deno.com/runtime/manual/references/contributing
1. Give the PR a descriptive title.
Examples of good title:
- fix(std/http): Fix race condition in server
- docs(console): Update docstrings
- feat(doc): Handle nested reexports
Examples of bad title:
- fix#7123
- update docs
- fix bugs
2. Ensure there is a related issue and it is referenced in the PR text.
3. Ensure there are tests that cover the changes.
4. Ensure `cargo test` passes.
5. Ensure `./tools/format.js` passes without changing files.
6. Ensure `./tools/lint.js` passes.
7. Open as a draft PR if your work is still in progress. The CI won't
run
all steps, but you can add '[ci]' to a commit message to force it to.
8. If you would like to run the benchmarks on the CI, add the 'ci-bench'
label.
-->
Fixes#30299
I decided to build the `OpenOptions` on the Rust side, because it's
cheaper to pass integers to the op function and we can enable the fast
op call. Also the tests that I added to the `config.toml` were already
passing before this PR.
Notable changes:
- Introduces a separate op between `Deno.open` and `node:fs.open`.
- Removes redundant `existenceCheckRequired` and `Deno.lstatSync` calls,
as the op layer already handles that when `options.create_new` is true
and uses synchronous I/O when `O_SYNC` is passed.
- Allows passing custom flags to the op (e.g. `O_SYNC`).
- Addresses `prefer-primordials` lint rule.
- Allows
[parallel/test-fs-open.js](https://github.com/nodejs/node/blob/v23.9.0/test/parallel/test-fs-open.js)
test to pass. There are also several tests that have passed before that
I added to the config.toml.
Improves compatibility with Node.js by validating the input parameters,
accepting Buffer type paths, and converting thrown errors correctly.
This PR also addresses `prefer-primordials` lint rule. These changes
allow parallel/test-fs-unlink-type-check.js test to pass.
Towards https://github.com/denoland/deno/issues/29972,
https://github.com/denoland/deno/issues/24236.
This commit updates test harness for Node.js compat tests to
allow marking certain tests as flaky.
This is done by adding `flaky = true` to dict entries in
the `tests/node_compat/config.toml` file.
Currently `fs.exists` and `fs.existsSync` throws error when invalid path
is given to the input.
The expected behavior is to:
- Call the callback with false on `fs.exists`.
- Return false on `fs.existsSync`.
Towards #29972, #24236
This PR re-enables node compat test run with the below cases excluded:
- flaky tests
- `parallel/test-dgram-connect-send-empty-packet.js`
- `parallel/test-fs-read-stream-concurrent-reads.js`
- `parallel/test-http-agent-maxtotalsockets.js`
- internet dependent tests
- `internet/test-dgram-connect.js`
- `internet/test-dns-lookup.js`
- `internet/test-dns-promises-resolve.js`
- `internet/test-dns-regress-6244.js`
- `internet/test-dns-setserver-in-callback-of-resolve4.js`
- `internet/test-http-dns-fail.js`
- `internet/test-http-https-default-ports.js`
- `internet/test-https-autoselectfamily-slow-timeout.js`
- `internet/test-inspector-help-page.js`
- `internet/test-net-autoselectfamily-events-timeout.js`
- `internet/test-net-connect-unref.js`
- `internet/test-tls-autoselectfamily-servername.js`
The list (`tests/node_compat/config.toml`) might include a few more
flaky tests. Let's keep excluding such test as they are found.
Closes https://github.com/denoland/deno/issues/29897.
Closes https://github.com/denoland/deno/issues/14066.
Closes https://github.com/denoland/deno/issues/19955.
With this PR we'll attempt to resolve bare specifiers passed to `run` or
`serve` with the workspace resolver. This means you can run specifiers
that are defined in your import map/package.json.
If the specifier looks like a path (starts with `.`, or is an absolute
path) then we won't try to resolve it via the import map.
This does have the potential to break someone, in the case that you have
something like
```
{
"imports": { "foo.ts": "./bar.ts" }
}
```
and you have a file named `foo.ts`, previously `deno run foo.ts` would
run `./foo.ts`, now we would run `./bar.ts`. I can't see a way around
that without doing an extra stat to see if the file exists, or deferring
this to module load time (which seems complex). I don't think many
people would hit that, and if someone does there's a simple fix – just
add `./` to the front.
From my benchmarking, this change has no effect on startup time
This PR reorganizes the node compat test CI check.
Now we don't copy (or modify) tests from the vendored dir
(`tests/node_compat/runner/suite`), instead run them directly.
There seem currently 1.4K test cases which pass without modification in
all OSes. The list of such test files are now stored in
`tests/node_compat/config.toml`, and `tests/node_compat/test.ts` run
them as `Deno.test` cases.
(Note: `config.toml` is created by this script:
https://github.com/denoland/node_test_viewer/blob/main/get_consistently_passing_test_names_as_toml.ts.
It checks the daily node compat test runs for the last 10 days, and
retrieves consistently passing test cases.)
closes#29857