summaryrefslogtreecommitdiff
path: root/test/parallel/test-heapdump-async-hooks-init-promise.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/parallel/test-heapdump-async-hooks-init-promise.js')
-rw-r--r--test/parallel/test-heapdump-async-hooks-init-promise.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/parallel/test-heapdump-async-hooks-init-promise.js b/test/parallel/test-heapdump-async-hooks-init-promise.js
new file mode 100644
index 0000000000..c59cb89baa
--- /dev/null
+++ b/test/parallel/test-heapdump-async-hooks-init-promise.js
@@ -0,0 +1,46 @@
+// Flags: --expose-gc
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const async_hooks = require('async_hooks');
+const v8 = require('v8');
+
+// Regression test for https://github.com/nodejs/node/issues/28786
+// Make sure that creating a heap snapshot inside an async_hooks hook
+// works for Promises.
+
+const createSnapshot = common.mustCall(() => {
+ v8.getHeapSnapshot().resume();
+}, 8); // 2 × init + 2 × resolve + 1 × (after + before) + 2 × destroy = 8 calls
+
+const promiseIds = [];
+
+async_hooks.createHook({
+ init(id, type) {
+ if (type === 'PROMISE') {
+ createSnapshot();
+ promiseIds.push(id);
+ }
+ },
+
+ before(id) {
+ if (promiseIds.includes(id)) createSnapshot();
+ },
+
+ after(id) {
+ if (promiseIds.includes(id)) createSnapshot();
+ },
+
+ promiseResolve(id) {
+ assert(promiseIds.includes(id));
+ createSnapshot();
+ },
+
+ destroy(id) {
+ if (promiseIds.includes(id)) createSnapshot();
+ }
+}).enable();
+
+
+Promise.resolve().then(() => {});
+setImmediate(global.gc);