summaryrefslogtreecommitdiff
path: root/test/parallel/test-async-wrap-destroyid.js
diff options
context:
space:
mode:
authorTrevor Norris <trev.norris@gmail.com>2017-03-09 16:13:34 -0700
committerAnna Henningsen <anna@addaleax.net>2017-05-10 22:22:26 +0200
commit7e3a3c962f09233c53cee7ebe381341d7c8b7162 (patch)
tree02963f7724ed9099a3566f13b16619fddffe0793 /test/parallel/test-async-wrap-destroyid.js
parentc0bde73f1bbfedd4e77ddf87cf0bcec7bac9a61e (diff)
downloadandroid-node-v8-7e3a3c962f09233c53cee7ebe381341d7c8b7162.tar.gz
android-node-v8-7e3a3c962f09233c53cee7ebe381341d7c8b7162.tar.bz2
android-node-v8-7e3a3c962f09233c53cee7ebe381341d7c8b7162.zip
async_hooks: initial async_hooks implementation
Fill this commit messsage with more details about the change once all changes are rebased. * Add lib/async_hooks.js * Add JS methods to AsyncWrap for handling the async id stack * Introduce AsyncReset() so that JS functions can reset the id and again trigger the init hooks, allow AsyncWrap::Reset() to be called from JS via asyncReset(). * Add env variable to test additional things in test/common.js PR-URL: https://github.com/nodejs/node/pull/12892 Ref: https://github.com/nodejs/node/pull/11883 Ref: https://github.com/nodejs/node/pull/8531 Reviewed-By: Andreas Madsen <amwebdk@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Diffstat (limited to 'test/parallel/test-async-wrap-destroyid.js')
-rw-r--r--test/parallel/test-async-wrap-destroyid.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/test/parallel/test-async-wrap-destroyid.js b/test/parallel/test-async-wrap-destroyid.js
new file mode 100644
index 0000000000..75f8ed9e66
--- /dev/null
+++ b/test/parallel/test-async-wrap-destroyid.js
@@ -0,0 +1,37 @@
+'use strict';
+
+const common = require('../common');
+const async_wrap = process.binding('async_wrap');
+const assert = require('assert');
+const async_hooks = require('async_hooks');
+const RUNS = 5;
+let test_id = null;
+let run_cntr = 0;
+let hooks = null;
+
+process.on('beforeExit', common.mustCall(() => {
+ process.removeAllListeners('uncaughtException');
+ hooks.disable();
+ assert.strictEqual(test_id, null);
+ assert.strictEqual(run_cntr, RUNS);
+}));
+
+
+hooks = async_hooks.createHook({
+ destroy(id) {
+ if (id === test_id) {
+ run_cntr++;
+ test_id = null;
+ }
+ },
+}).enable();
+
+
+(function runner(n) {
+ assert.strictEqual(test_id, null);
+ if (n <= 0) return;
+
+ test_id = (Math.random() * 1e9) >>> 0;
+ async_wrap.addIdToDestroyList(test_id);
+ setImmediate(common.mustCall(runner), n - 1);
+})(RUNS);