summaryrefslogtreecommitdiff
path: root/benchmark/fs/readfile-permission-enabled.js
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/fs/readfile-permission-enabled.js')
-rw-r--r--benchmark/fs/readfile-permission-enabled.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/benchmark/fs/readfile-permission-enabled.js b/benchmark/fs/readfile-permission-enabled.js
new file mode 100644
index 0000000000..3053d5aa08
--- /dev/null
+++ b/benchmark/fs/readfile-permission-enabled.js
@@ -0,0 +1,72 @@
+// Call fs.readFile with permission system enabled
+// over and over again really fast.
+// Then see how many times it got called.
+'use strict';
+
+const path = require('path');
+const common = require('../common.js');
+const fs = require('fs');
+const assert = require('assert');
+
+const tmpdir = require('../../test/common/tmpdir');
+tmpdir.refresh();
+const filename = path.resolve(tmpdir.path,
+ `.removeme-benchmark-garbage-${process.pid}`);
+
+const bench = common.createBenchmark(main, {
+ duration: [5],
+ encoding: ['', 'utf-8'],
+ len: [1024, 16 * 1024 * 1024],
+ concurrent: [1, 10],
+}, {
+ flags: ['--experimental-permission', '--allow-fs-read=*', '--allow-fs-write=*'],
+});
+
+function main({ len, duration, concurrent, encoding }) {
+ try {
+ fs.unlinkSync(filename);
+ } catch {
+ // Continue regardless of error.
+ }
+ let data = Buffer.alloc(len, 'x');
+ fs.writeFileSync(filename, data);
+ data = null;
+
+ let reads = 0;
+ let benchEnded = false;
+ bench.start();
+ setTimeout(() => {
+ benchEnded = true;
+ bench.end(reads);
+ try {
+ fs.unlinkSync(filename);
+ } catch {
+ // Continue regardless of error.
+ }
+ process.exit(0);
+ }, duration * 1000);
+
+ function read() {
+ fs.readFile(filename, encoding, afterRead);
+ }
+
+ function afterRead(er, data) {
+ if (er) {
+ if (er.code === 'ENOENT') {
+ // Only OK if unlinked by the timer from main.
+ assert.ok(benchEnded);
+ return;
+ }
+ throw er;
+ }
+
+ if (data.length !== len)
+ throw new Error('wrong number of bytes returned');
+
+ reads++;
+ if (!benchEnded)
+ read();
+ }
+
+ while (concurrent--) read();
+}