bench: Move tls-connect into benchmark/tls
Also, make it work properly with current node.
This commit is contained in:
parent
8c719f7c71
commit
bafc51c0f9
@ -1,86 +0,0 @@
|
|||||||
|
|
||||||
var assert = require('assert'),
|
|
||||||
fs = require('fs'),
|
|
||||||
path = require('path'),
|
|
||||||
tls = require('tls');
|
|
||||||
|
|
||||||
|
|
||||||
var target_connections = 10000,
|
|
||||||
concurrency = 10;
|
|
||||||
|
|
||||||
for (var i = 2; i < process.argv.length; i++) {
|
|
||||||
switch (process.argv[i]) {
|
|
||||||
case '-c':
|
|
||||||
concurrency = ~~process.argv[++i];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '-n':
|
|
||||||
target_connections = ~~process.argv[++i];
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new Error('Invalid flag: ' + process.argv[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var cert_dir = path.resolve(__dirname, '../test/fixtures'),
|
|
||||||
options = { key: fs.readFileSync(cert_dir + '/test_key.pem'),
|
|
||||||
cert: fs.readFileSync(cert_dir + '/test_cert.pem'),
|
|
||||||
ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ] };
|
|
||||||
|
|
||||||
var server = tls.createServer(options, onConnection);
|
|
||||||
server.listen(8000);
|
|
||||||
|
|
||||||
|
|
||||||
var initiated_connections = 0,
|
|
||||||
server_connections = 0,
|
|
||||||
client_connections = 0,
|
|
||||||
start = Date.now();
|
|
||||||
|
|
||||||
for (var i = 0; i < concurrency; i++)
|
|
||||||
makeConnection();
|
|
||||||
|
|
||||||
|
|
||||||
process.on('exit', onExit);
|
|
||||||
|
|
||||||
|
|
||||||
function makeConnection() {
|
|
||||||
if (initiated_connections >= target_connections)
|
|
||||||
return;
|
|
||||||
|
|
||||||
initiated_connections++;
|
|
||||||
|
|
||||||
var conn = tls.connect(8000, function() {
|
|
||||||
client_connections++;
|
|
||||||
|
|
||||||
if (client_connections % 100 === 0)
|
|
||||||
console.log(client_connections + ' of ' + target_connections +
|
|
||||||
' connections made');
|
|
||||||
|
|
||||||
conn.end();
|
|
||||||
makeConnection();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function onConnection(conn) {
|
|
||||||
server_connections++;
|
|
||||||
|
|
||||||
if (server_connections === target_connections)
|
|
||||||
server.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function onExit() {
|
|
||||||
var end = Date.now(),
|
|
||||||
s = (end - start) / 1000,
|
|
||||||
persec = Math.round(target_connections / s);
|
|
||||||
|
|
||||||
assert.equal(initiated_connections, target_connections);
|
|
||||||
assert.equal(client_connections, target_connections);
|
|
||||||
assert.equal(server_connections, target_connections);
|
|
||||||
|
|
||||||
console.log('%d connections in %d s', target_connections, s);
|
|
||||||
console.log('%d connections per second', persec);
|
|
||||||
}
|
|
63
benchmark/tls/tls-connect.js
Normal file
63
benchmark/tls/tls-connect.js
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
var assert = require('assert'),
|
||||||
|
fs = require('fs'),
|
||||||
|
path = require('path'),
|
||||||
|
tls = require('tls');
|
||||||
|
|
||||||
|
var common = require('../common.js');
|
||||||
|
var bench = common.createBenchmark(main, {
|
||||||
|
concurrency: [1, 10],
|
||||||
|
dur: [1, 3]
|
||||||
|
});
|
||||||
|
|
||||||
|
var clientConn = 0;
|
||||||
|
var serverConn = 0;
|
||||||
|
var server;
|
||||||
|
var dur;
|
||||||
|
var concurrency;
|
||||||
|
var running = true;
|
||||||
|
|
||||||
|
function main(conf) {
|
||||||
|
dur = +conf.dur;
|
||||||
|
concurrency = +conf.concurrency;
|
||||||
|
|
||||||
|
var cert_dir = path.resolve(__dirname, '../../test/fixtures'),
|
||||||
|
options = { key: fs.readFileSync(cert_dir + '/test_key.pem'),
|
||||||
|
cert: fs.readFileSync(cert_dir + '/test_cert.pem'),
|
||||||
|
ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ] };
|
||||||
|
|
||||||
|
server = tls.createServer(options, onConnection);
|
||||||
|
server.listen(common.PORT, onListening);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onListening() {
|
||||||
|
setTimeout(done, dur * 1000);
|
||||||
|
bench.start();
|
||||||
|
for (var i = 0; i < concurrency; i++)
|
||||||
|
makeConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onConnection(conn) {
|
||||||
|
serverConn++;
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeConnection() {
|
||||||
|
var conn = tls.connect({ port: common.PORT,
|
||||||
|
rejectUnauthorized: false }, function() {
|
||||||
|
clientConn++;
|
||||||
|
conn.on('error', function(er) {
|
||||||
|
console.error('client error', er);
|
||||||
|
throw er;
|
||||||
|
});
|
||||||
|
conn.end();
|
||||||
|
if (running) makeConnection();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function done() {
|
||||||
|
running = false;
|
||||||
|
// it's only an established connection if they both saw it.
|
||||||
|
// because we destroy the server somewhat abruptly, these
|
||||||
|
// don't always match. Generally, serverConn will be
|
||||||
|
// the smaller number, but take the min just to be sure.
|
||||||
|
bench.end(Math.min(serverConn, clientConn));
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user