var common = require('../common.js'); var bench = common.createBenchmark(main, { dur: [5], type: ['buf', 'asc', 'utf'], size: [2, 1024, 1024 * 1024] }); var dur, type, encoding, size; var server; var path = require('path'); var fs = require('fs'); var cert_dir = path.resolve(__dirname, '../../test/fixtures'); var options; var tls = require('tls'); function main(conf) { dur = +conf.dur; type = conf.type; size = +conf.size; var chunk; switch (type) { case 'buf': chunk = new Buffer(size); chunk.fill('b'); break; case 'asc': chunk = new Array(size + 1).join('a'); encoding = 'ascii'; break; case 'utf': chunk = new Array(size/2 + 1).join('ΓΌ'); encoding = 'utf8'; break; default: throw new Error('invalid type'); } 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); setTimeout(done, dur * 1000); server.listen(common.PORT, function() { var opt = { port: common.PORT, rejectUnauthorized: false }; var conn = tls.connect(opt, function() { bench.start(); conn.on('drain', write); write(); }); function write() { var i = 0; while (false !== conn.write(chunk, encoding)); } }); var received = 0; function onConnection(conn) { conn.on('data', function(chunk) { received += chunk.length; }); } function done() { var mbits = (received * 8) / (1024 * 1024); bench.end(mbits); conn.destroy(); server.close(); } }