'use strict'; const common = require('../common'); const assert = require('assert'); const { executionAsyncResource, createHook } = require('async_hooks'); const { createServer, get } = require('http'); const sym = Symbol('cls'); // Tests continuation local storage with the executionAsyncResource API assert.ok(executionAsyncResource()); createHook({ init(asyncId, type, triggerAsyncId, resource) { const cr = executionAsyncResource(); resource[sym] = cr[sym]; } }).enable(); const server = createServer(function(req, res) { executionAsyncResource()[sym] = { state: req.url }; setTimeout(function() { const { state } = executionAsyncResource()[sym]; res.setHeader('content-type', 'application/json'); res.end(JSON.stringify({ state })); }, 10); }); function test(n) { get(`http://localhost:${server.address().port}/${n}`, common.mustCall(function(res) { res.setEncoding('utf8'); let body = ''; res.on('data', function(chunk) { body += chunk; }); res.on('end', common.mustCall(function() { assert.deepStrictEqual(JSON.parse(body), { state: `/${n}` }); })); })); } server.listen(0, common.mustCall(function() { server.unref(); for (let i = 0; i < 10; i++) { test(i); } }));