summaryrefslogtreecommitdiff
path: root/test/async-hooks/test-emit-before-on-destroyed.js
diff options
context:
space:
mode:
authorMatteo Collina <hello@matteocollina.com>2019-03-08 16:42:21 +0100
committerMatteo Collina <hello@matteocollina.com>2019-03-18 11:36:48 +0100
commit9d064439e5716df250363ed6f88198c86eb63521 (patch)
treed9f9da150a71bdbe9038abc1dfe87fc57b0332d0 /test/async-hooks/test-emit-before-on-destroyed.js
parentabafd38c8d4e1a280f97ea452688cda54424d185 (diff)
downloadandroid-node-v8-9d064439e5716df250363ed6f88198c86eb63521.tar.gz
android-node-v8-9d064439e5716df250363ed6f88198c86eb63521.tar.bz2
android-node-v8-9d064439e5716df250363ed6f88198c86eb63521.zip
async_hooks: remove deprecated emitBefore and emitAfter
AsyncResource.emitBefore and AsyncResource.emitAfter have been deprecated in https://github.com/nodejs/node/pull/18632. This PR removes it all. This commit also updates some embedder tests to use internal APIs. The conditions are still possible for Node.js core developers but not for end users. PR-URL: https://github.com/nodejs/node/pull/26530 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com> Reviewed-By: Benedikt Meurer <benedikt.meurer@gmail.com> Reviewed-By: Yang Guo <yangguo@chromium.org> Reviewed-By: Andreas Madsen <amwebdk@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'test/async-hooks/test-emit-before-on-destroyed.js')
-rw-r--r--test/async-hooks/test-emit-before-on-destroyed.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/test/async-hooks/test-emit-before-on-destroyed.js b/test/async-hooks/test-emit-before-on-destroyed.js
new file mode 100644
index 0000000000..36a50a050f
--- /dev/null
+++ b/test/async-hooks/test-emit-before-on-destroyed.js
@@ -0,0 +1,64 @@
+// Flags: --expose-internals
+'use strict';
+
+const common = require('../common');
+const assert = require('assert');
+const internal_async_hooks = require('internal/async_hooks');
+const { spawn } = require('child_process');
+const corruptedMsg = /async hook stack has become corrupted/;
+const heartbeatMsg = /heartbeat: still alive/;
+
+const {
+ newAsyncId, getDefaultTriggerAsyncId,
+ emitInit, emitBefore, emitAfter, emitDestroy
+} = internal_async_hooks;
+
+const initHooks = require('./init-hooks');
+
+if (process.argv[2] === 'child') {
+ const hooks = initHooks();
+ hooks.enable();
+
+ // Once 'destroy' has been emitted, we can no longer emit 'before'
+
+ // Emitting 'before', 'after' and then 'destroy'
+ {
+ const asyncId = newAsyncId();
+ const triggerId = getDefaultTriggerAsyncId();
+ emitInit(asyncId, 'event1', triggerId, {});
+ emitBefore(asyncId, triggerId);
+ emitAfter(asyncId);
+ emitDestroy(asyncId);
+ }
+
+ // Emitting 'before' after 'destroy'
+ {
+ const asyncId = newAsyncId();
+ const triggerId = getDefaultTriggerAsyncId();
+ emitInit(asyncId, 'event2', triggerId, {});
+ emitDestroy(asyncId);
+
+ console.log('heartbeat: still alive');
+ emitBefore(asyncId, triggerId);
+ }
+} else {
+ const args = ['--expose-internals']
+ .concat(process.argv.slice(1))
+ .concat('child');
+ let errData = Buffer.from('');
+ let outData = Buffer.from('');
+
+ const child = spawn(process.execPath, args);
+ child.stderr.on('data', (d) => { errData = Buffer.concat([ errData, d ]); });
+ child.stdout.on('data', (d) => { outData = Buffer.concat([ outData, d ]); });
+
+ child.on('close', common.mustCall((code) => {
+ assert.strictEqual(code, 1);
+ assert.ok(heartbeatMsg.test(outData.toString()),
+ 'did not crash until we reached offending line of code ' +
+ `(found ${outData})`);
+ assert.ok(corruptedMsg.test(errData.toString()),
+ 'printed error contains corrupted message ' +
+ `(found ${errData})`);
+ }));
+}