0
0
mirror of https://github.com/nodejs/node.git synced 2024-12-01 16:10:02 +01:00
nodejs/test/parallel/test-tls-handshake-exception.js
Alex Aubuchon 6326ced2de test: move test_[key|ca|cert] to fixtures/keys/
Lots of changes, but mostly just search/replace of
fixtures.readSync(...) to fixtures.readKey([new key]...)

Benchmarks modified to use fixtures.readKey(...):
benchmark/tls/throughput.js
benchmark/tls/tls-connect.js
benchmark/tls/secure-pair.js

Also be sure to review the change to L16 of
test/parallel/test-crypto-sign-verify.js

PR-URL: https://github.com/nodejs/node/pull/27962
Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
2019-06-10 09:56:55 -07:00

58 lines
1.7 KiB
JavaScript

'use strict';
// Verify that exceptions from a callback don't result in
// failed CHECKs when trying to print the exception message.
// This test is convoluted because it needs to trigger a callback
// into JS land at just the right time when an exception is pending,
// and does so by exploiting a weakness in the streams infrastructure.
// I won't shed any tears if this test ever becomes invalidated.
const common = require('../common');
if (!common.hasCrypto)
common.skip('missing crypto');
if (process.argv[2] === 'child') {
const fixtures = require('../common/fixtures');
const https = require('https');
const net = require('net');
const tls = require('tls');
const { Duplex } = require('stream');
const { mustCall } = common;
const cert = fixtures.readKey('rsa_cert.crt');
const key = fixtures.readKey('rsa_private.pem');
net.createServer(mustCall(onplaintext)).listen(0, mustCall(onlisten));
function onlisten() {
const { port } = this.address();
https.get({ port, rejectUnauthorized: false });
}
function onplaintext(c) {
const d = new class extends Duplex {
_read(n) {
const data = c.read(n);
if (data) d.push(data);
}
_write(...xs) {
c.write(...xs);
}
}();
c.on('data', d.push.bind(d));
const options = { key, cert };
const fail = () => { throw new Error('eyecatcher'); };
tls.createServer(options, mustCall(fail)).emit('connection', d);
}
} else {
const assert = require('assert');
const { spawnSync } = require('child_process');
const result = spawnSync(process.execPath, [__filename, 'child']);
const stderr = result.stderr.toString();
const ok = stderr.includes('Error: eyecatcher');
assert(ok, stderr);
}