From a2b1b92e30e98f05808f86ec49899669b8511d0f Mon Sep 17 00:00:00 2001 From: Gerhard Stoebich <18708370+Flarna@users.noreply.github.com> Date: Sun, 7 Jun 2020 01:12:57 +0200 Subject: [PATCH] test: AsyncLocalStorage works with thenables MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a test to verify that AsyncLocalStorage works with thenables. PR-URL: https://github.com/nodejs/node/pull/34008 Refs: https://github.com/nodejs/node/pull/33778 Reviewed-By: Michaƫl Zasso Reviewed-By: Stephen Belanger Reviewed-By: James M Snell --- .../test-async-local-storage-thenable.js | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 test/async-hooks/test-async-local-storage-thenable.js diff --git a/test/async-hooks/test-async-local-storage-thenable.js b/test/async-hooks/test-async-local-storage-thenable.js new file mode 100644 index 00000000000000..1f947fa9345491 --- /dev/null +++ b/test/async-hooks/test-async-local-storage-thenable.js @@ -0,0 +1,53 @@ +'use strict'; + +const common = require('../common'); + +const assert = require('assert'); +const { AsyncLocalStorage } = require('async_hooks'); + +// This test verifies that async local storage works with thenables + +const store = new AsyncLocalStorage(); +const data = Symbol('verifier'); + +const then = common.mustCall((cb) => { + assert.strictEqual(store.getStore(), data); + setImmediate(cb); +}, 4); + +function thenable() { + return { + then + }; +} + +// Await a thenable +store.run(data, async () => { + assert.strictEqual(store.getStore(), data); + await thenable(); + assert.strictEqual(store.getStore(), data); +}); + +// Returning a thenable in an async function +store.run(data, async () => { + try { + assert.strictEqual(store.getStore(), data); + return thenable(); + } finally { + assert.strictEqual(store.getStore(), data); + } +}); + +// Resolving a thenable +store.run(data, () => { + assert.strictEqual(store.getStore(), data); + Promise.resolve(thenable()); + assert.strictEqual(store.getStore(), data); +}); + +// Returning a thenable in a then handler +store.run(data, () => { + assert.strictEqual(store.getStore(), data); + Promise.resolve().then(() => thenable()); + assert.strictEqual(store.getStore(), data); +});