summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);