diff options
Diffstat (limited to 'tests/specs/permission/special/main.js')
| -rw-r--r-- | tests/specs/permission/special/main.js | 55 |
1 files changed, 55 insertions, 0 deletions
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); |
