58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
|
|
const fixtures = require('../common/fixtures');
|
|
const tls = require('tls');
|
|
const net = require('net');
|
|
|
|
// This test ensures that when tls sockets are created with `allowHalfOpen`,
|
|
// they won't hang.
|
|
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],
|
|
};
|
|
|
|
const server = tls.createServer(options, common.mustCall((conn) => {
|
|
conn.write('hello', common.mustCall());
|
|
conn.on('data', common.mustCall());
|
|
conn.on('end', common.mustCall());
|
|
conn.on('data', common.mustCall());
|
|
conn.on('close', common.mustCall());
|
|
conn.end();
|
|
})).listen(0, common.mustCall(() => {
|
|
const netSocket = new net.Socket({
|
|
allowHalfOpen: true,
|
|
});
|
|
|
|
const socket = tls.connect({
|
|
socket: netSocket,
|
|
rejectUnauthorized: false,
|
|
});
|
|
|
|
const { port, address } = server.address();
|
|
|
|
// Doing `net.Socket.connect()` after `tls.connect()` will make tls module
|
|
// wrap the socket in StreamWrap.
|
|
netSocket.connect({
|
|
port,
|
|
address,
|
|
});
|
|
|
|
socket.on('secureConnect', common.mustCall());
|
|
socket.on('end', common.mustCall());
|
|
socket.on('data', common.mustCall());
|
|
socket.on('close', common.mustCall(() => {
|
|
server.close();
|
|
}));
|
|
|
|
socket.write('hello');
|
|
socket.end();
|
|
}));
|