test: fix http-agent-destroyed-socket cb not firing

A whole part of the test-http-agent-destroyed-socket test
was not running as the semantics of http events changed
slightly and were no longer triggering the expected event.
Instead listen to the same event on the socket to verify
that the code being tested is still working as expected.

PR-URL: https://github.com/nodejs/node/pull/20006
Fixes: https://github.com/nodejs/node/issues/8613
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
Anatoli Papirovski 2018-04-13 12:20:47 +02:00 committed by Luigi Pinca
parent 5eb9f3c91c
commit 15e136d9c5

View File

@ -44,24 +44,11 @@ const server = http.createServer(common.mustCall((req, res) => {
// assert request2 is queued in the agent // assert request2 is queued in the agent
const key = agent.getName(requestOptions); const key = agent.getName(requestOptions);
assert.strictEqual(agent.requests[key].length, 1); assert.strictEqual(agent.requests[key].length, 1);
request1.socket.on('close', common.mustCall());
response.resume(); response.resume();
response.on('end', common.mustCall(() => { response.on('end', common.mustCall(() => {
//
// THE IMPORTANT PART
//
// It is possible for the socket to get destroyed and other work
// to run before the 'close' event fires because it happens on
// nextTick. This example is contrived because it destroys the
// socket manually at just the right time, but at Voxer we have
// seen cases where the socket is destroyed by non-user code
// then handed out again by an agent *before* the 'close' event
// is triggered.
request1.socket.destroy(); request1.socket.destroy();
// TODO(jasnell): This close event does not appear to be triggered. response.socket.once('close', common.mustCall(() => {
// is it necessary?
response.once('close', () => {
// assert request2 was removed from the queue // assert request2 was removed from the queue
assert(!agent.requests[key]); assert(!agent.requests[key]);
process.nextTick(() => { process.nextTick(() => {
@ -70,7 +57,7 @@ const server = http.createServer(common.mustCall((req, res) => {
assert.notStrictEqual(request1.socket, request2.socket); assert.notStrictEqual(request1.socket, request2.socket);
assert(!request2.socket.destroyed, 'the socket is destroyed'); assert(!request2.socket.destroyed, 'the socket is destroyed');
}); });
}); }));
})); }));
})); }));