summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2024-05-01 13:17:05 -0600
committerGitHub <noreply@github.com>2024-05-01 13:17:05 -0600
commit505130d813eeb6381bf12ad92a3e9d688ed518a3 (patch)
treeab0856cb20e035fcbe49440d90aad5474d82f65d
parente0069c87c024589e1e00d0f3e2286ef21efd029e (diff)
chore(cli): add permission test (#23633)
-rw-r--r--tests/specs/permission/special/__test__.jsonc5
-rw-r--r--tests/specs/permission/special/main.js55
2 files changed, 60 insertions, 0 deletions
diff --git a/tests/specs/permission/special/__test__.jsonc b/tests/specs/permission/special/__test__.jsonc
new file mode 100644
index 000000000..704bb77e3
--- /dev/null
+++ b/tests/specs/permission/special/__test__.jsonc
@@ -0,0 +1,5 @@
+{
+ "args": "run --allow-read main.js",
+ "output": "[WILDCARD]",
+ "exitCode": 123
+}
diff --git a/tests/specs/permission/special/main.js b/tests/specs/permission/special/main.js
new file mode 100644
index 000000000..99f0e74f4
--- /dev/null
+++ b/tests/specs/permission/special/main.js
@@ -0,0 +1,55 @@
+// Opening certain files requires --allow-all permission. This file is executed with
+// --allow-read only.
+
+const testCases = [
+ // Allowed, safe
+ [["darwin", "linux"], null, "/dev/null"],
+ // Denied, requires `--allow-all`
+ [["darwin", "linux"], /PermissionDenied/, "/etc/hosts"],
+ [["darwin", "linux"], /PermissionDenied/, "/dev/ptmx"],
+ [["linux"], /PermissionDenied/, "/proc/self/environ"],
+ [["linux"], /PermissionDenied/, "/proc/self/mem"],
+ [["windows"], /PermissionDenied/, "\\\\.\\PhysicalDrive0"],
+];
+
+const os = Deno.build.os;
+let failed = false;
+let ran = false;
+
+for (const [oses, error, file] of testCases) {
+ if (oses.indexOf(os) === -1) {
+ console.log(`Skipping test for ${file} on ${os}`);
+ continue;
+ }
+ ran = true;
+ try {
+ console.log(`Opening ${file}...`);
+ Deno.readTextFileSync(file);
+ if (error === null) {
+ console.log("Succeeded, as expected.");
+ } else {
+ console.log(`*** Shouldn't have succeeded: ${file}`);
+ failed = true;
+ }
+ } catch (e) {
+ if (error === null) {
+ console.log(`*** Shouldn't have failed: ${file}: ${e}`);
+ failed = true;
+ } else {
+ if (String(e).match(error)) {
+ console.log(`Got an error (expected) for ${file}: ${e}`);
+ } else {
+ console.log(`*** Got an unexpected error for ${file}: ${e}`);
+ }
+ }
+ }
+}
+
+if (!ran) {
+ console.log(`Uh-oh: didn't run any tests for ${Deno.build.os}.`);
+ failed = true;
+}
+if (failed) {
+ console.log("One or more tests failed");
+}
+Deno.exit(failed ? 321 : 123);