Skip to content
Permalink
Browse files

test: rewrite ocsp test to run in parallel

Run tests in parallel and use common.mustCall() and mustNotCall()
instead of process.exit() to ensure test assertions are run.

PR-URL: #26460
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information...
sam-github authored and BethGriggs committed Mar 5, 2019
1 parent 74dac59 commit cc0bb02e86976e0b60fe6b66e963ab0ea586c9f8
Showing with 40 additions and 67 deletions.
  1. +40 −67 test/parallel/test-tls-ocsp-callback.js
@@ -36,21 +36,20 @@ const assert = require('assert');
const SSL_OP_NO_TICKET = require('crypto').constants.SSL_OP_NO_TICKET;

const pfx = fixtures.readKey('agent1.pfx');
const key = fixtures.readKey('agent1-key.pem');
const cert = fixtures.readKey('agent1-cert.pem');
const ca = fixtures.readKey('ca1-cert.pem');

function test(testOptions, cb) {

const key = fixtures.readKey('agent1-key.pem');
const cert = fixtures.readKey('agent1-cert.pem');
const ca = fixtures.readKey('ca1-cert.pem');
const options = {
key,
cert,
ca: [ca]
};
let requestCount = 0;
let clientSecure = 0;
let ocspCount = 0;
let ocspResponse;
const requestCount = testOptions.response ? 0 : 1;

if (!testOptions.ocsp)
assert.strictEqual(testOptions.response, undefined);

if (testOptions.pfx) {
delete options.key;
@@ -59,82 +58,56 @@ function test(testOptions, cb) {
options.passphrase = testOptions.passphrase;
}

const server = tls.createServer(options, function(cleartext) {
const server = tls.createServer(options, common.mustCall((cleartext) => {
cleartext.on('error', function(er) {
// We're ok with getting ECONNRESET in this test, but it's
// timing-dependent, and thus unreliable. Any other errors
// are just failures, though.
if (er.code !== 'ECONNRESET')
throw er;
});
++requestCount;
cleartext.end();
});
server.on('OCSPRequest', function(cert, issuer, callback) {
++ocspCount;
assert.ok(Buffer.isBuffer(cert));
assert.ok(Buffer.isBuffer(issuer));

// Just to check that async really works there
setTimeout(function() {
callback(null,
testOptions.response ? Buffer.from(testOptions.response) : null);
}, 100);
});
}, requestCount));

if (!testOptions.ocsp)
server.on('OCSPRequest', common.mustNotCall());
else
server.on('OCSPRequest', common.mustCall((cert, issuer, callback) => {
assert.ok(Buffer.isBuffer(cert));
assert.ok(Buffer.isBuffer(issuer));

// Callback a little later to ensure that async really works.
return setTimeout(callback, 100, null, testOptions.response ?
Buffer.from(testOptions.response) : null);
}));

server.listen(0, function() {
const client = tls.connect({
port: this.address().port,
requestOCSP: testOptions.ocsp !== false,
secureOptions: testOptions.ocsp === false ?
SSL_OP_NO_TICKET : 0,
requestOCSP: testOptions.ocsp,
secureOptions: testOptions.ocsp ? 0 : SSL_OP_NO_TICKET,
rejectUnauthorized: false
}, function() {
clientSecure++;
});
client.on('OCSPResponse', function(resp) {
ocspResponse = resp;
if (resp)
}, common.mustCall(() => { }, requestCount));

client.on('OCSPResponse', common.mustCall((resp) => {
if (testOptions.response) {
assert.strictEqual(resp.toString(), testOptions.response);
client.destroy();
});
client.on('close', function() {
server.close(cb);
});
});
} else {
assert.strictEqual(resp, null);
}
}, testOptions.ocsp === false ? 0 : 1));

process.on('exit', function() {
if (testOptions.ocsp === false) {
assert.strictEqual(requestCount, clientSecure);
assert.strictEqual(requestCount, 1);
return;
}

if (testOptions.response) {
assert.strictEqual(ocspResponse.toString(), testOptions.response);
} else {
assert.strictEqual(ocspResponse, null);
}
assert.strictEqual(requestCount, testOptions.response ? 0 : 1);
assert.strictEqual(clientSecure, requestCount);
assert.strictEqual(ocspCount, 1);
client.on('close', common.mustCall(() => {
server.close(cb);
}));
});
}

const tests = [
{ response: false },
{ response: 'hello world' },
{ ocsp: false }
];
test({ ocsp: true, response: false });
test({ ocsp: true, response: 'hello world' });
test({ ocsp: false });

if (!common.hasFipsCrypto) {
tests.push({ pfx: pfx, passphrase: 'sample', response: 'hello pfx' });
test({ ocsp: true, response: 'hello pfx', pfx: pfx, passphrase: 'sample' });
}

function runTests(i) {
if (i === tests.length) return;

test(tests[i], common.mustCall(function() {
runTests(i + 1);
}));
}

runTests(0);

0 comments on commit cc0bb02

Please sign in to comment.
You can’t perform that action at this time.