Enable linting for the test directory. A number of changes was made so all tests conform the current rules used by lib and src directories. The only exception for tests is that unreachable (dead) code is allowed. test-fs-non-number-arguments-throw had to be excluded from the changes because of a weird issue on Windows CI. PR-URL: https://github.com/nodejs/io.js/pull/1721 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
132 lines
2.9 KiB
JavaScript
132 lines
2.9 KiB
JavaScript
'use strict';
|
|
var common = require('../common');
|
|
var assert = require('assert');
|
|
|
|
if (!common.hasCrypto) {
|
|
console.log('1..0 # Skipped: missing crypto');
|
|
process.exit();
|
|
}
|
|
var tls = require('tls');
|
|
|
|
var join = require('path').join;
|
|
var net = require('net');
|
|
var fs = require('fs');
|
|
var spawn = require('child_process').spawn;
|
|
|
|
var connections = 0;
|
|
var key = fs.readFileSync(join(common.fixturesDir, 'agent.key')).toString();
|
|
var cert = fs.readFileSync(join(common.fixturesDir, 'agent.crt')).toString();
|
|
|
|
function log(a) {
|
|
console.error('***server*** ' + a);
|
|
}
|
|
|
|
var server = net.createServer(function(socket) {
|
|
connections++;
|
|
log('connection fd=' + socket.fd);
|
|
var sslcontext = tls.createSecureContext({key: key, cert: cert});
|
|
sslcontext.context.setCiphers('RC4-SHA:AES128-SHA:AES256-SHA');
|
|
|
|
var pair = tls.createSecurePair(sslcontext, true);
|
|
|
|
assert.ok(pair.encrypted.writable);
|
|
assert.ok(pair.cleartext.writable);
|
|
|
|
pair.encrypted.pipe(socket);
|
|
socket.pipe(pair.encrypted);
|
|
|
|
log('i set it secure');
|
|
|
|
pair.on('secure', function() {
|
|
log('connected+secure!');
|
|
pair.cleartext.write('hello\r\n');
|
|
log(pair.cleartext.getPeerCertificate());
|
|
log(pair.cleartext.getCipher());
|
|
});
|
|
|
|
pair.cleartext.on('data', function(data) {
|
|
log('read bytes ' + data.length);
|
|
pair.cleartext.write(data);
|
|
});
|
|
|
|
socket.on('end', function() {
|
|
log('socket end');
|
|
});
|
|
|
|
pair.cleartext.on('error', function(err) {
|
|
log('got error: ');
|
|
log(err);
|
|
log(err.stack);
|
|
socket.destroy();
|
|
});
|
|
|
|
pair.encrypted.on('error', function(err) {
|
|
log('encrypted error: ');
|
|
log(err);
|
|
log(err.stack);
|
|
socket.destroy();
|
|
});
|
|
|
|
socket.on('error', function(err) {
|
|
log('socket error: ');
|
|
log(err);
|
|
log(err.stack);
|
|
socket.destroy();
|
|
});
|
|
|
|
socket.on('close', function(err) {
|
|
log('socket closed');
|
|
});
|
|
|
|
pair.on('error', function(err) {
|
|
log('secure error: ');
|
|
log(err);
|
|
log(err.stack);
|
|
socket.destroy();
|
|
});
|
|
});
|
|
|
|
var gotHello = false;
|
|
var sentWorld = false;
|
|
var gotWorld = false;
|
|
var opensslExitCode = -1;
|
|
|
|
server.listen(common.PORT, function() {
|
|
// To test use: openssl s_client -connect localhost:8000
|
|
var client = spawn(common.opensslCli, ['s_client', '-connect', '127.0.0.1:' +
|
|
common.PORT]);
|
|
|
|
|
|
var out = '';
|
|
|
|
client.stdout.setEncoding('utf8');
|
|
client.stdout.on('data', function(d) {
|
|
out += d;
|
|
|
|
if (!gotHello && /hello/.test(out)) {
|
|
gotHello = true;
|
|
client.stdin.write('world\r\n');
|
|
sentWorld = true;
|
|
}
|
|
|
|
if (!gotWorld && /world/.test(out)) {
|
|
gotWorld = true;
|
|
client.stdin.end();
|
|
}
|
|
});
|
|
|
|
client.stdout.pipe(process.stdout, { end: false });
|
|
|
|
client.on('exit', function(code) {
|
|
opensslExitCode = code;
|
|
server.close();
|
|
});
|
|
});
|
|
|
|
process.on('exit', function() {
|
|
assert.equal(1, connections);
|
|
assert.ok(gotHello);
|
|
assert.ok(sentWorld);
|
|
assert.ok(gotWorld);
|
|
assert.equal(0, opensslExitCode);
|
|
});
|