bench: Move tls-connect into benchmark/tls
authorisaacs <i@izs.me>
Mon, 11 Feb 2013 22:38:00 +0000 (14:38 -0800)
committerisaacs <i@izs.me>
Tue, 19 Feb 2013 22:14:37 +0000 (14:14 -0800)
Also, make it work properly with current node.

benchmark/tls-connect.js [deleted file]
benchmark/tls/tls-connect.js [new file with mode: 0644]

diff --git a/benchmark/tls-connect.js b/benchmark/tls-connect.js
deleted file mode 100644 (file)
index 512adca..0000000
+++ /dev/null
@@ -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);
-}
diff --git a/benchmark/tls/tls-connect.js b/benchmark/tls/tls-connect.js
new file mode 100644 (file)
index 0000000..b3bd3e3
--- /dev/null
@@ -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));
+}