summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2018-10-21 16:36:08 -0400
committerRich Trott <rtrott@gmail.com>2018-10-23 20:54:49 -0700
commitb794f581b1475bccfe0606ab0fda49500bd58b6c (patch)
tree5b38ea15bfda4095458087c3e1c8d83fbc1d1c35 /test
parent30219bfc572101f48d0bc4b01d04a5e22c1c4b74 (diff)
downloadandroid-node-v8-b794f581b1475bccfe0606ab0fda49500bd58b6c.tar.gz
android-node-v8-b794f581b1475bccfe0606ab0fda49500bd58b6c.tar.bz2
android-node-v8-b794f581b1475bccfe0606ab0fda49500bd58b6c.zip
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: https://github.com/nodejs/node/pull/23811 Fixes: https://github.com/nodejs/node/issues/23807 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Denys Otrishko <shishugi@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-tls-set-secure-context.js59
1 files changed, 36 insertions, 23 deletions
diff --git a/test/parallel/test-tls-set-secure-context.js b/test/parallel/test-tls-set-secure-context.js
index 51ab3af10b..f8857701c6 100644
--- a/test/parallel/test-tls-set-secure-context.js
+++ b/test/parallel/test-tls-set-secure-context.js
@@ -4,6 +4,10 @@ const common = require('../common');
if (!common.hasCrypto)
common.skip('missing crypto');
+// This test verifies the behavior of the tls setSecureContext() method.
+// It also verifies that existing connections are not disrupted when the
+// secure context is changed.
+
const assert = require('assert');
const https = require('https');
const fixtures = require('../common/fixtures');
@@ -19,54 +23,63 @@ const credentialOptions = [
ca: fixtures.readKey('ca2-cert.pem')
}
];
-let requestsCount = 0;
let firstResponse;
const server = https.createServer(credentialOptions[0], (req, res) => {
- requestsCount++;
+ const id = +req.headers.id;
- if (requestsCount === 1) {
+ if (id === 1) {
firstResponse = res;
firstResponse.write('multi-');
return;
- } else if (requestsCount === 3) {
+ } else if (id === 4) {
firstResponse.write('success-');
}
res.end('success');
});
-server.listen(0, common.mustCall(async () => {
+server.listen(0, common.mustCall(() => {
const { port } = server.address();
- const firstRequest = makeRequest(port);
+ const firstRequest = makeRequest(port, 1);
+
+ async function makeRemainingRequests() {
+ // Wait until the first request is guaranteed to have been handled.
+ if (!firstResponse) {
+ return setImmediate(makeRemainingRequests);
+ }
- assert.strictEqual(await makeRequest(port), 'success');
+ assert.strictEqual(await makeRequest(port, 2), 'success');
- server.setSecureContext(credentialOptions[1]);
- firstResponse.write('request-');
- await assert.rejects(async () => {
- await makeRequest(port);
- }, /^Error: self signed certificate$/);
+ server.setSecureContext(credentialOptions[1]);
+ firstResponse.write('request-');
+ await assert.rejects(async () => {
+ await makeRequest(port, 3);
+ }, /^Error: self signed certificate$/);
- server.setSecureContext(credentialOptions[0]);
- assert.strictEqual(await makeRequest(port), 'success');
+ server.setSecureContext(credentialOptions[0]);
+ assert.strictEqual(await makeRequest(port, 4), 'success');
- server.setSecureContext(credentialOptions[1]);
- firstResponse.end('fun!');
- await assert.rejects(async () => {
- await makeRequest(port);
- }, /^Error: self signed certificate$/);
+ server.setSecureContext(credentialOptions[1]);
+ firstResponse.end('fun!');
+ await assert.rejects(async () => {
+ await makeRequest(port, 5);
+ }, /^Error: self signed certificate$/);
+
+ assert.strictEqual(await firstRequest, 'multi-request-success-fun!');
+ server.close();
+ }
- assert.strictEqual(await firstRequest, 'multi-request-success-fun!');
- server.close();
+ makeRemainingRequests();
}));
-function makeRequest(port) {
+function makeRequest(port, id) {
return new Promise((resolve, reject) => {
const options = {
rejectUnauthorized: true,
ca: credentialOptions[0].ca,
- servername: 'agent1'
+ servername: 'agent1',
+ headers: { id }
};
https.get(`https://localhost:${port}`, options, (res) => {