summaryrefslogtreecommitdiff
path: root/tests/node_compat
diff options
context:
space:
mode:
authorNathan Whitaker <17734409+nathanwhit@users.noreply.github.com>2024-07-05 11:32:51 -0700
committerGitHub <noreply@github.com>2024-07-05 18:32:51 +0000
commitd4d3a3c54f5e26dec0cc79e273dc488f8a47f2b3 (patch)
treee6ff88b550211257ea7a7997e221d10fdf22e242 /tests/node_compat
parent28d2ff7bdc023a3b7aff47503aa03a8dd65fe87f (diff)
fix(node): Implement `fs.lchown` (and `process.getegid`) (#24418)
Closes https://github.com/denoland/deno/issues/21260. Part of https://github.com/denoland/deno/issues/18218. Implements `node:fs.lchown`, and enables the node_compat test for it. The test uses `process.getegid`, which we didn't have implemented, so I went ahead and implemented that as well to get the test working.
Diffstat (limited to 'tests/node_compat')
-rw-r--r--tests/node_compat/config.jsonc1
-rw-r--r--tests/node_compat/runner/TODO.md1
-rw-r--r--tests/node_compat/test/parallel/test-fs-lchown.js71
3 files changed, 72 insertions, 1 deletions
diff --git a/tests/node_compat/config.jsonc b/tests/node_compat/config.jsonc
index f0b667df4..0c8d38077 100644
--- a/tests/node_compat/config.jsonc
+++ b/tests/node_compat/config.jsonc
@@ -327,6 +327,7 @@
"test-fs-chown-type-check.js",
"test-fs-copyfile.js",
"test-fs-empty-readStream.js",
+ "test-fs-lchown.js",
"test-fs-mkdir.js",
"test-fs-open-flags.js",
"test-fs-open-mode-mask.js",
diff --git a/tests/node_compat/runner/TODO.md b/tests/node_compat/runner/TODO.md
index ec2a2337e..cab34f864 100644
--- a/tests/node_compat/runner/TODO.md
+++ b/tests/node_compat/runner/TODO.md
@@ -794,7 +794,6 @@ NOTE: This file should not be manually edited. Please edit `tests/node_compat/co
- [parallel/test-fs-fmap.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-fs-fmap.js)
- [parallel/test-fs-fsync.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-fs-fsync.js)
- [parallel/test-fs-lchmod.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-fs-lchmod.js)
-- [parallel/test-fs-lchown.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-fs-lchown.js)
- [parallel/test-fs-link.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-fs-link.js)
- [parallel/test-fs-long-path.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-fs-long-path.js)
- [parallel/test-fs-make-callback.js](https://github.com/nodejs/node/tree/v18.12.1/test/parallel/test-fs-make-callback.js)
diff --git a/tests/node_compat/test/parallel/test-fs-lchown.js b/tests/node_compat/test/parallel/test-fs-lchown.js
new file mode 100644
index 000000000..ce3333745
--- /dev/null
+++ b/tests/node_compat/test/parallel/test-fs-lchown.js
@@ -0,0 +1,71 @@
+// deno-fmt-ignore-file
+// deno-lint-ignore-file
+
+// Copyright Joyent and Node contributors. All rights reserved. MIT license.
+// Taken from Node 18.12.1
+// This file is automatically generated by `tests/node_compat/runner/setup.ts`. Do not modify this file manually.
+
+'use strict';
+
+const common = require('../common');
+const tmpdir = require('../common/tmpdir');
+const assert = require('assert');
+const fs = require('fs');
+const path = require('path');
+const { promises } = fs;
+
+// Validate the path argument.
+[false, 1, {}, [], null, undefined].forEach((i) => {
+ const err = { name: 'TypeError', code: 'ERR_INVALID_ARG_TYPE' };
+
+ assert.throws(() => fs.lchown(i, 1, 1, common.mustNotCall()), err);
+ assert.throws(() => fs.lchownSync(i, 1, 1), err);
+ promises.lchown(false, 1, 1)
+ .then(common.mustNotCall())
+ .catch(common.expectsError(err));
+});
+
+// Validate the uid and gid arguments.
+[false, 'test', {}, [], null, undefined].forEach((i) => {
+ const err = { name: 'TypeError', code: 'ERR_INVALID_ARG_TYPE' };
+
+ assert.throws(
+ () => fs.lchown('not_a_file_that_exists', i, 1, common.mustNotCall()),
+ err
+ );
+ assert.throws(
+ () => fs.lchown('not_a_file_that_exists', 1, i, common.mustNotCall()),
+ err
+ );
+ assert.throws(() => fs.lchownSync('not_a_file_that_exists', i, 1), err);
+ assert.throws(() => fs.lchownSync('not_a_file_that_exists', 1, i), err);
+
+ promises.lchown('not_a_file_that_exists', i, 1)
+ .then(common.mustNotCall())
+ .catch(common.expectsError(err));
+
+ promises.lchown('not_a_file_that_exists', 1, i)
+ .then(common.mustNotCall())
+ .catch(common.expectsError(err));
+});
+
+// Validate the callback argument.
+[false, 1, 'test', {}, [], null, undefined].forEach((i) => {
+ assert.throws(() => fs.lchown('not_a_file_that_exists', 1, 1, i), {
+ name: 'TypeError',
+ code: 'ERR_INVALID_ARG_TYPE'
+ });
+});
+
+if (!common.isWindows) {
+ const testFile = tmpdir.resolve(path.basename(__filename));
+ const uid = process.geteuid();
+ const gid = process.getegid();
+
+ tmpdir.refresh();
+ fs.copyFileSync(__filename, testFile);
+ fs.lchownSync(testFile, uid, gid);
+ fs.lchown(testFile, uid, gid, common.mustSucceed(async (err) => {
+ await promises.lchown(testFile, uid, gid);
+ }));
+}