summaryrefslogtreecommitdiff
path: root/tests/unit_node/_fs/_fs_open_test.ts
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2024-02-10 13:22:13 -0700
committerGitHub <noreply@github.com>2024-02-10 20:22:13 +0000
commitf5e46c9bf2f50d66a953fa133161fc829cecff06 (patch)
tree8faf2f5831c1c7b11d842cd9908d141082c869a5 /tests/unit_node/_fs/_fs_open_test.ts
parentd2477f780630a812bfd65e3987b70c0d309385bb (diff)
chore: move cli/tests/ -> tests/ (#22369)
This looks like a massive PR, but it's only a move from cli/tests -> tests, and updates of relative paths for files. This is the first step towards aggregate all of the integration test files under tests/, which will lead to a set of integration tests that can run without the CLI binary being built. While we could leave these tests under `cli`, it would require us to keep a more complex directory structure for the various test runners. In addition, we have a lot of complexity to ignore various test files in the `cli` project itself (cargo publish exclusion rules, autotests = false, etc). And finally, the `tests/` folder will eventually house the `test_ffi`, `test_napi` and other testing code, reducing the size of the root repo directory. For easier review, the extremely large and noisy "move" is in the first commit (with no changes -- just a move), while the remainder of the changes to actual files is in the second commit.
Diffstat (limited to 'tests/unit_node/_fs/_fs_open_test.ts')
-rw-r--r--tests/unit_node/_fs/_fs_open_test.ts400
1 files changed, 400 insertions, 0 deletions
diff --git a/tests/unit_node/_fs/_fs_open_test.ts b/tests/unit_node/_fs/_fs_open_test.ts
new file mode 100644
index 000000000..8cb9b0ec2
--- /dev/null
+++ b/tests/unit_node/_fs/_fs_open_test.ts
@@ -0,0 +1,400 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+import {
+ O_APPEND,
+ O_CREAT,
+ O_EXCL,
+ O_RDONLY,
+ O_RDWR,
+ O_SYNC,
+ O_TRUNC,
+ O_WRONLY,
+} from "node:constants";
+import { assertEquals, assertThrows, fail } from "@test_util/std/assert/mod.ts";
+import { assertCallbackErrorUncaught } from "../_test_utils.ts";
+import { open, openSync } from "node:fs";
+import { join, parse } from "node:path";
+import { closeSync, existsSync } from "node:fs";
+
+const tempDir = parse(Deno.makeTempFileSync()).dir;
+
+Deno.test({
+ name: "ASYNC: open file",
+ async fn() {
+ const file = Deno.makeTempFileSync();
+ let fd1: number;
+ await new Promise<number>((resolve, reject) => {
+ open(file, (err, fd) => {
+ if (err) reject(err);
+ resolve(fd);
+ });
+ })
+ .then((fd) => {
+ fd1 = fd;
+ }, () => fail())
+ .finally(() => closeSync(fd1));
+ },
+});
+
+Deno.test({
+ name: "SYNC: open file",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ const fd = openSync(file, "r");
+ closeSync(fd);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'a'",
+ fn() {
+ const file = join(tempDir, "some_random_file");
+ const fd = openSync(file, "a");
+ assertEquals(typeof fd, "number");
+ assertEquals(existsSync(file), true);
+ closeSync(fd);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'ax'",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ assertThrows(
+ () => {
+ openSync(file, "ax");
+ },
+ Error,
+ `EEXIST: file already exists, open '${file}'`,
+ );
+ Deno.removeSync(file);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'a+'",
+ fn() {
+ const file = join(tempDir, "some_random_file2");
+ const fd = openSync(file, "a+");
+ assertEquals(typeof fd, "number");
+ assertEquals(existsSync(file), true);
+ closeSync(fd);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'ax+'",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ assertThrows(
+ () => {
+ openSync(file, "ax+");
+ },
+ Error,
+ `EEXIST: file already exists, open '${file}'`,
+ );
+ Deno.removeSync(file);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'as'",
+ fn() {
+ const file = join(tempDir, "some_random_file10");
+ const fd = openSync(file, "as");
+ assertEquals(existsSync(file), true);
+ assertEquals(typeof fd, "number");
+ closeSync(fd);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'as+'",
+ fn() {
+ const file = join(tempDir, "some_random_file10");
+ const fd = openSync(file, "as+");
+ assertEquals(existsSync(file), true);
+ assertEquals(typeof fd, "number");
+ closeSync(fd);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'r'",
+ fn() {
+ const file = join(tempDir, "some_random_file3");
+ assertThrows(() => {
+ openSync(file, "r");
+ }, Error);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'r+'",
+ fn() {
+ const file = join(tempDir, "some_random_file4");
+ assertThrows(() => {
+ openSync(file, "r+");
+ }, Error);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'w'",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ Deno.writeTextFileSync(file, "hi there");
+ const fd = openSync(file, "w");
+ assertEquals(typeof fd, "number");
+ assertEquals(Deno.readTextFileSync(file), "");
+ closeSync(fd);
+
+ const file2 = join(tempDir, "some_random_file5");
+ const fd2 = openSync(file2, "w");
+ assertEquals(typeof fd2, "number");
+ assertEquals(existsSync(file2), true);
+ closeSync(fd2);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'wx'",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ Deno.writeTextFileSync(file, "hi there");
+ const fd = openSync(file, "w");
+ assertEquals(typeof fd, "number");
+ assertEquals(Deno.readTextFileSync(file), "");
+ closeSync(fd);
+
+ const file2 = Deno.makeTempFileSync();
+ assertThrows(
+ () => {
+ openSync(file2, "wx");
+ },
+ Error,
+ `EEXIST: file already exists, open '${file2}'`,
+ );
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'w+'",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ Deno.writeTextFileSync(file, "hi there");
+ const fd = openSync(file, "w+");
+ assertEquals(typeof fd, "number");
+ assertEquals(Deno.readTextFileSync(file), "");
+ closeSync(fd);
+
+ const file2 = join(tempDir, "some_random_file6");
+ const fd2 = openSync(file2, "w+");
+ assertEquals(typeof fd2, "number");
+ assertEquals(existsSync(file2), true);
+ closeSync(fd2);
+ },
+});
+
+Deno.test({
+ name: "open with string flag 'wx+'",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ assertThrows(
+ () => {
+ openSync(file, "wx+");
+ },
+ Error,
+ `EEXIST: file already exists, open '${file}'`,
+ );
+ Deno.removeSync(file);
+ },
+});
+
+Deno.test({
+ name: "open with numeric flag `O_APPEND | O_CREAT | O_WRONLY` ('a')",
+ fn() {
+ const file = join(tempDir, "some_random_file");
+ const fd = openSync(file, O_APPEND | O_CREAT | O_WRONLY);
+ assertEquals(typeof fd, "number");
+ assertEquals(existsSync(file), true);
+ closeSync(fd);
+ },
+});
+
+Deno.test({
+ name:
+ "open with numeric flag `O_APPEND | O_CREAT | O_WRONLY | O_EXCL` ('ax')",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ assertThrows(
+ () => {
+ openSync(file, O_APPEND | O_CREAT | O_WRONLY | O_EXCL);
+ },
+ Error,
+ `EEXIST: file already exists, open '${file}'`,
+ );
+ Deno.removeSync(file);
+ },
+});
+
+Deno.test({
+ name: "open with numeric flag `O_APPEND | O_CREAT | O_RDWR` ('a+')",
+ fn() {
+ const file = join(tempDir, "some_random_file2");
+ const fd = openSync(file, O_APPEND | O_CREAT | O_RDWR);
+ assertEquals(typeof fd, "number");
+ assertEquals(existsSync(file), true);
+ closeSync(fd);
+ },
+});
+
+Deno.test({
+ name: "open with numeric flag `O_APPEND | O_CREAT | O_RDWR | O_EXCL` ('ax+')",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ assertThrows(
+ () => {
+ openSync(file, O_APPEND | O_CREAT | O_RDWR | O_EXCL);
+ },
+ Error,
+ `EEXIST: file already exists, open '${file}'`,
+ );
+ Deno.removeSync(file);
+ },
+});
+
+Deno.test({
+ name:
+ "open with numeric flag `O_APPEND | O_CREAT | O_WRONLY | O_SYNC` ('as')",
+ fn() {
+ const file = join(tempDir, "some_random_file10");
+ const fd = openSync(file, O_APPEND | O_CREAT | O_WRONLY | O_SYNC);
+ assertEquals(existsSync(file), true);
+ assertEquals(typeof fd, "number");
+ closeSync(fd);
+ },
+});
+
+Deno.test({
+ name: "open with numeric flag `O_APPEND | O_CREAT | O_RDWR | O_SYNC` ('as+')",
+ fn() {
+ const file = join(tempDir, "some_random_file10");
+ const fd = openSync(file, O_APPEND | O_CREAT | O_RDWR | O_SYNC);
+ assertEquals(existsSync(file), true);
+ assertEquals(typeof fd, "number");
+ closeSync(fd);
+ },
+});
+
+Deno.test({
+ name: "open with numeric flag `O_RDONLY` ('r')",
+ fn() {
+ const file = join(tempDir, "some_random_file3");
+ assertThrows(() => {
+ openSync(file, O_RDONLY);
+ }, Error);
+ },
+});
+
+Deno.test({
+ name: "open with numeric flag `O_RDWR` ('r+')",
+ fn() {
+ const file = join(tempDir, "some_random_file4");
+ assertThrows(() => {
+ openSync(file, O_RDWR);
+ }, Error);
+ },
+});
+
+Deno.test({
+ name: "open with numeric flag `O_TRUNC | O_CREAT | O_WRONLY` ('w')",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ Deno.writeTextFileSync(file, "hi there");
+ const fd = openSync(file, O_TRUNC | O_CREAT | O_WRONLY);
+ assertEquals(typeof fd, "number");
+ assertEquals(Deno.readTextFileSync(file), "");
+ closeSync(fd);
+
+ const file2 = join(tempDir, "some_random_file5");
+ const fd2 = openSync(file2, O_TRUNC | O_CREAT | O_WRONLY);
+ assertEquals(typeof fd2, "number");
+ assertEquals(existsSync(file2), true);
+ closeSync(fd2);
+ },
+});
+
+Deno.test({
+ name: "open with numeric flag `O_TRUNC | O_CREAT | O_WRONLY | O_EXCL` ('wx')",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ Deno.writeTextFileSync(file, "hi there");
+ const fd = openSync(file, "w");
+ assertEquals(typeof fd, "number");
+ assertEquals(Deno.readTextFileSync(file), "");
+ closeSync(fd);
+
+ const file2 = Deno.makeTempFileSync();
+ assertThrows(
+ () => {
+ openSync(file2, O_TRUNC | O_CREAT | O_WRONLY | O_EXCL);
+ },
+ Error,
+ `EEXIST: file already exists, open '${file2}'`,
+ );
+ },
+});
+
+Deno.test({
+ name: "open with numeric flag `O_TRUNC | O_CREAT | O_RDWR` ('w+')",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ Deno.writeTextFileSync(file, "hi there");
+ const fd = openSync(file, O_TRUNC | O_CREAT | O_RDWR);
+ assertEquals(typeof fd, "number");
+ assertEquals(Deno.readTextFileSync(file), "");
+ closeSync(fd);
+
+ const file2 = join(tempDir, "some_random_file6");
+ const fd2 = openSync(file2, O_TRUNC | O_CREAT | O_RDWR);
+ assertEquals(typeof fd2, "number");
+ assertEquals(existsSync(file2), true);
+ closeSync(fd2);
+ },
+});
+
+Deno.test({
+ name: "open with numeric flag `O_TRUNC | O_CREAT | O_RDWR | O_EXCL` ('wx+')",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ assertThrows(
+ () => {
+ openSync(file, O_TRUNC | O_CREAT | O_RDWR | O_EXCL);
+ },
+ Error,
+ `EEXIST: file already exists, open '${file}'`,
+ );
+ Deno.removeSync(file);
+ },
+});
+
+Deno.test("[std/node/fs] open callback isn't called twice if error is thrown", async () => {
+ const tempFile = await Deno.makeTempFile();
+ const importUrl = new URL("node:fs", import.meta.url);
+ await assertCallbackErrorUncaught({
+ prelude: `import { open } from ${JSON.stringify(importUrl)}`,
+ invocation: `open(${JSON.stringify(tempFile)}, `,
+ async cleanup() {
+ await Deno.remove(tempFile);
+ },
+ });
+
+ Deno.test({
+ name: "SYNC: open file with flag set to 0 (readonly)",
+ fn() {
+ const file = Deno.makeTempFileSync();
+ const fd = openSync(file, 0);
+ closeSync(fd);
+ },
+ });
+});