test: fix test-https-agent-additional-options

test-https-agent-additional-options can occasionally fail if a socket
closes before the checks near the end of the test. Modify the test to
check the freeSockets pool after each request.

PR-URL: https://github.com/nodejs/node/pull/27830
Fixes: https://github.com/nodejs/node/issues/24449
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
Rich Trott 2019-05-21 16:36:36 -07:00
parent 0fa5c9f256
commit 0d2830041a

View File

@ -39,42 +39,36 @@ const updatedValues = new Map([
['sessionIdContext', 'sessionIdContext'], ['sessionIdContext', 'sessionIdContext'],
]); ]);
let value;
function variations(iter, port, cb) { function variations(iter, port, cb) {
const { done, value } = iter.next();
if (done) {
return common.mustCall((res) => { return common.mustCall((res) => {
res.resume(); res.resume();
https.globalAgent.once('free', common.mustCall(() => { https.globalAgent.once('free', common.mustCall(() => {
// Verify that different keep-alived connections are created // Verify that the most recent connection is in the freeSockets pool.
// for the base call and each variation
const keys = Object.keys(https.globalAgent.freeSockets); const keys = Object.keys(https.globalAgent.freeSockets);
assert.strictEqual(keys.length, 1 + updatedValues.size); if (value) {
let i = 1;
for (const [, value] of updatedValues) {
assert.ok( assert.ok(
keys[i].startsWith(value.toString() + ':') || keys.some((val) => val.startsWith(value.toString() + ':') ||
keys[i].endsWith(':' + value.toString()) || val.endsWith(':' + value.toString()) ||
keys[i].includes(':' + value.toString() + ':') val.includes(':' + value.toString() + ':')),
`missing value: ${value.toString()} in ${keys}`
); );
i++;
} }
const next = iter.next();
if (next.done) {
https.globalAgent.destroy(); https.globalAgent.destroy();
server.close(); server.close();
}));
});
} else { } else {
const [key, val] = value; // Save `value` for check the next time.
return common.mustCall((res) => { value = next.value.val;
res.resume(); const [key, val] = next.value;
https.globalAgent.once('free', common.mustCall(() => { https.get(Object.assign({}, getBaseOptions(port), { [key]: val }),
https.get( variations(iter, port, cb));
Object.assign({}, getBaseOptions(port), { [key]: val }), }
variations(iter, port, cb)
);
})); }));
}); });
} }
}
server.listen(0, common.mustCall(() => { server.listen(0, common.mustCall(() => {
const port = server.address().port; const port = server.address().port;