You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

98 lines
2.5 KiB

'use strict';
const common = require('../common');
const assert = require('assert');
const initHooks = require('./init-hooks');
const fs = require('fs');
const { checkInvocations } = require('./hook-checks');
if (!common.hasCrypto) {
common.skip('missing crypto');
return;
}
const tls = require('tls');
const hooks = initHooks();
hooks.enable();
//
// Creating server and listening on port
//
const server = tls
.createServer({
cert: fs.readFileSync(common.fixturesDir + '/test_cert.pem'),
key: fs.readFileSync(common.fixturesDir + '/test_key.pem')
})
.on('listening', common.mustCall(onlistening))
.on('secureConnection', common.mustCall(onsecureConnection))
.listen(common.PORT);
assert.strictEqual(hooks.activitiesOfTypes('WRITEWRAP').length, 0,
'no WRITEWRAP when server created');
function onlistening() {
assert.strictEqual(hooks.activitiesOfTypes('WRITEWRAP').length, 0,
'no WRITEWRAP when server is listening');
//
// Creating client and connecting it to server
//
tls
.connect(common.PORT, { rejectUnauthorized: false })
.on('secureConnect', common.mustCall(onsecureConnect));
assert.strictEqual(hooks.activitiesOfTypes('WRITEWRAP').length, 0,
'no WRITEWRAP when client created');
}
function checkDestroyedWriteWraps(n, stage) {
const as = hooks.activitiesOfTypes('WRITEWRAP');
assert.strictEqual(as.length, n, n + ' WRITEWRAPs when ' + stage);
function checkValidWriteWrap(w) {
assert.strictEqual(w.type, 'WRITEWRAP', 'write wrap');
assert.strictEqual(typeof w.uid, 'number', 'uid is a number');
assert.strictEqual(typeof w.triggerId, 'number', 'triggerId is a number');
checkInvocations(w, { init: 1, destroy: 1 }, 'when ' + stage);
}
as.forEach(checkValidWriteWrap);
}
function onsecureConnection() {
//
// Server received client connection
//
checkDestroyedWriteWraps(3, 'server got secure connection');
}
function onsecureConnect() {
//
// Client connected to server
//
checkDestroyedWriteWraps(4, 'client connected');
//
// Destroying client socket
//
this.destroy();
checkDestroyedWriteWraps(4, 'client destroyed');
//
// Closing server
//
server.close(common.mustCall(onserverClosed));
checkDestroyedWriteWraps(4, 'server closing');
}
function onserverClosed() {
checkDestroyedWriteWraps(4, 'server closed');
}
process.on('exit', onexit);
function onexit() {
hooks.disable();
hooks.sanityCheck('WRITEWRAP');
checkDestroyedWriteWraps(4, 'process exits');
}