diff options
-rw-r--r-- | tests/specs/permission/special/__test__.jsonc | 5 | ||||
-rw-r--r-- | tests/specs/permission/special/main.js | 55 |
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); |