Skip to content

Commit 83ddd3e

Browse files
cjihrigtargos
authored andcommitted
test: fix flaky test
This commit fixes test-tls-set-secure-context.js. The test was making one long lasting HTTP connection, followed by a number of shorter lived connections. However, it was possible that the connections were not received in the desired order. This commit ensures that the long lasting connection is established before making any other connections. PR-URL: #23811 Fixes: #23807 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Denys Otrishko <shishugi@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
1 parent 141aec9 commit 83ddd3e

File tree

1 file changed

+36
-23
lines changed

1 file changed

+36
-23
lines changed

test/parallel/test-tls-set-secure-context.js

+36-23
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ const common = require('../common');
44
if (!common.hasCrypto)
55
common.skip('missing crypto');
66

7+
// This test verifies the behavior of the tls setSecureContext() method.
8+
// It also verifies that existing connections are not disrupted when the
9+
// secure context is changed.
10+
711
const assert = require('assert');
812
const https = require('https');
913
const fixtures = require('../common/fixtures');
@@ -19,54 +23,63 @@ const credentialOptions = [
1923
ca: fixtures.readKey('ca2-cert.pem')
2024
}
2125
];
22-
let requestsCount = 0;
2326
let firstResponse;
2427

2528
const server = https.createServer(credentialOptions[0], (req, res) => {
26-
requestsCount++;
29+
const id = +req.headers.id;
2730

28-
if (requestsCount === 1) {
31+
if (id === 1) {
2932
firstResponse = res;
3033
firstResponse.write('multi-');
3134
return;
32-
} else if (requestsCount === 3) {
35+
} else if (id === 4) {
3336
firstResponse.write('success-');
3437
}
3538

3639
res.end('success');
3740
});
3841

39-
server.listen(0, common.mustCall(async () => {
42+
server.listen(0, common.mustCall(() => {
4043
const { port } = server.address();
41-
const firstRequest = makeRequest(port);
44+
const firstRequest = makeRequest(port, 1);
45+
46+
async function makeRemainingRequests() {
47+
// Wait until the first request is guaranteed to have been handled.
48+
if (!firstResponse) {
49+
return setImmediate(makeRemainingRequests);
50+
}
4251

43-
assert.strictEqual(await makeRequest(port), 'success');
52+
assert.strictEqual(await makeRequest(port, 2), 'success');
4453

45-
server.setSecureContext(credentialOptions[1]);
46-
firstResponse.write('request-');
47-
await assert.rejects(async () => {
48-
await makeRequest(port);
49-
}, /^Error: self signed certificate$/);
54+
server.setSecureContext(credentialOptions[1]);
55+
firstResponse.write('request-');
56+
await assert.rejects(async () => {
57+
await makeRequest(port, 3);
58+
}, /^Error: self signed certificate$/);
5059

51-
server.setSecureContext(credentialOptions[0]);
52-
assert.strictEqual(await makeRequest(port), 'success');
60+
server.setSecureContext(credentialOptions[0]);
61+
assert.strictEqual(await makeRequest(port, 4), 'success');
5362

54-
server.setSecureContext(credentialOptions[1]);
55-
firstResponse.end('fun!');
56-
await assert.rejects(async () => {
57-
await makeRequest(port);
58-
}, /^Error: self signed certificate$/);
63+
server.setSecureContext(credentialOptions[1]);
64+
firstResponse.end('fun!');
65+
await assert.rejects(async () => {
66+
await makeRequest(port, 5);
67+
}, /^Error: self signed certificate$/);
68+
69+
assert.strictEqual(await firstRequest, 'multi-request-success-fun!');
70+
server.close();
71+
}
5972

60-
assert.strictEqual(await firstRequest, 'multi-request-success-fun!');
61-
server.close();
73+
makeRemainingRequests();
6274
}));
6375

64-
function makeRequest(port) {
76+
function makeRequest(port, id) {
6577
return new Promise((resolve, reject) => {
6678
const options = {
6779
rejectUnauthorized: true,
6880
ca: credentialOptions[0].ca,
69-
servername: 'agent1'
81+
servername: 'agent1',
82+
headers: { id }
7083
};
7184

7285
https.get(`https://localhost:${port}`, options, (res) => {

0 commit comments

Comments
 (0)