Files
node/test/parallel/test-https-agent-additional-options.js
T
Filip Skokan b0d56c7328 test,benchmark: use OpenSSL feature helpers
Add isBoringSSL to the test crypto helpers and use it in tests and
benchmarks. Replace hasOpenSSL3 call sites with hasOpenSSL(3).

Assisted-by: Codex
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/65762
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
2026-09-05 13:31:22 +00:00

95 lines
2.6 KiB
JavaScript

'use strict';
const common = require('../common');
if (!common.hasCrypto)
common.skip('missing crypto');
const assert = require('assert');
const crypto = require('crypto');
const https = require('https');
const { hasFIPS, isBoringSSL } = require('../common/crypto');
const fixtures = require('../common/fixtures');
const fips3 = hasFIPS(3);
const options = {
key: fixtures.readKey('agent1-key.pem'),
cert: fixtures.readKey('agent1-cert.pem'),
ca: fixtures.readKey('ca1-cert.pem'),
minVersion: fips3 ? 'TLSv1.2' : 'TLSv1.1',
};
if (!isBoringSSL) {
options.ciphers = fips3 ?
'ECDHE-RSA-AES256-GCM-SHA384' : 'ALL@SECLEVEL=0';
}
const server = https.Server(options, (req, res) => {
res.writeHead(200);
res.end('hello world\n');
});
function getBaseOptions(port) {
const baseOptions = {
path: '/',
port: port,
ca: options.ca,
rejectUnauthorized: true,
servername: 'agent1',
};
if (!isBoringSSL) {
baseOptions.ciphers = fips3 ?
'ECDHE-RSA-AES256-GCM-SHA384' : 'ALL@SECLEVEL=0';
}
return baseOptions;
}
const updatedValues = new Map([
['dhparam', fixtures.readKey('dh2048.pem')],
['ecdhCurve', 'secp384r1'],
['honorCipherOrder', true],
['minVersion', fips3 ? 'TLSv1.2' : 'TLSv1.1'],
['maxVersion', 'TLSv1.3'],
['secureOptions', crypto.constants.SSL_OP_CIPHER_SERVER_PREFERENCE],
['secureProtocol', fips3 ?
'TLSv1_2_method' : 'TLSv1_1_method'],
['sessionIdContext', 'sessionIdContext'],
]);
let value;
function variations(iter, port, cb) {
return common.mustCall((res) => {
res.resume();
https.globalAgent.once('free', common.mustCall(() => {
// Verify that the most recent connection is in the freeSockets pool.
const keys = Object.keys(https.globalAgent.freeSockets);
if (value) {
assert.ok(
keys.some((val) => val.startsWith(value.toString() + ':') ||
val.endsWith(':' + value.toString()) ||
val.includes(':' + value.toString() + ':')),
`missing value: ${value.toString()} in ${keys}`
);
}
const next = iter.next();
if (next.done) {
https.globalAgent.destroy();
server.close();
} else {
// Save `value` for check the next time.
const [key, val] = next.value;
value = val;
https.get({ ...getBaseOptions(port), [key]: val },
variations(iter, port, cb));
}
}));
});
}
server.listen(0, common.mustCall(() => {
const port = server.address().port;
https.globalAgent.keepAlive = true;
https.get(getBaseOptions(port), variations(updatedValues.entries(), port));
}));