Skip to content

Commit

Permalink
test: improve test-async-hooks-http-parser-destroy
Browse files Browse the repository at this point in the history
Improve reporting in test-async-hooks-http-parser-destroy when failing.

Before, failures looked like this (edited slightly to conform to our
commit message 72-char line length restriction):

    The expression evaluated to a falsy value:
    assert.ok(destroyedIds.indexOf(createdAsyncId) >= 0)

Now, you get a slightly better idea of what's up. (Is it missing one ID?
More than one? All of them?):

    AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
    + actual - expected ... Lines skipped

      [
        156,
    ...
        757,
    -   761,
        765
      ]

PR-URL: #27319
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Joyee Cheung <[email protected]>
  • Loading branch information
Trott authored and targos committed May 5, 2019
1 parent b68ecf3 commit d648ecc
Showing 1 changed file with 25 additions and 19 deletions.
44 changes: 25 additions & 19 deletions test/parallel/test-async-hooks-http-parser-destroy.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
'use strict';
const common = require('../common');
const Countdown = require('../common/countdown');
require('../common');
const assert = require('assert');
const async_hooks = require('async_hooks');
const http = require('http');
Expand All @@ -15,13 +14,18 @@ const KEEP_ALIVE = 100;
const createdIds = [];
const destroyedIds = [];
async_hooks.createHook({
init: common.mustCallAtLeast((asyncId, type) => {
init: (asyncId, type) => {
if (type === 'HTTPINCOMINGMESSAGE' || type === 'HTTPCLIENTREQUEST') {
createdIds.push(asyncId);
}
}, N),
},
destroy: (asyncId) => {
destroyedIds.push(asyncId);
if (createdIds.includes(asyncId)) {
destroyedIds.push(asyncId);
}
if (destroyedIds.length === 2 * N) {
server.close();
}
}
}).enable();

Expand All @@ -34,29 +38,31 @@ const keepAliveAgent = new http.Agent({
keepAliveMsecs: KEEP_ALIVE,
});

const countdown = new Countdown(N, () => {
server.close(() => {
// Give the server sockets time to close (which will also free their
// associated parser objects) after the server has been closed.
setTimeout(() => {
assert.strictEqual(createdIds.length, 2 * N);
createdIds.forEach((createdAsyncId) => {
assert.ok(destroyedIds.indexOf(createdAsyncId) >= 0);
});
}, KEEP_ALIVE * 2);
});
});

server.listen(0, function() {
for (let i = 0; i < N; ++i) {
(function makeRequest() {
http.get({
port: server.address().port,
agent: keepAliveAgent
}, function(res) {
countdown.dec();
res.resume();
});
})();
}
});

function checkOnExit() {
assert.deepStrictEqual(destroyedIds.sort(), createdIds.sort());
// There should be two IDs for each request.
assert.strictEqual(createdIds.length, N * 2);
}

process.on('SIGTERM', () => {
// Catching SIGTERM and calling `process.exit(1)` so that the `exit` event
// is triggered and the assertions are checked. This can be useful for
// troubleshooting this test if it times out.
process.exit(1);
});

// Ordinary exit.
process.on('exit', checkOnExit);

0 comments on commit d648ecc

Please sign in to comment.