From 0a406869df990d030d2383abc7f1388aead57d0c Mon Sep 17 00:00:00 2001 From: isaacs Date: Mon, 11 Feb 2013 18:27:02 -0800 Subject: [PATCH] bench: Replace tls-fragmentation with tls/throughput --- benchmark/tls-fragmentation.js | 63 ----------------------------- benchmark/tls/throughput.js | 74 ++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 63 deletions(-) delete mode 100644 benchmark/tls-fragmentation.js create mode 100644 benchmark/tls/throughput.js diff --git a/benchmark/tls-fragmentation.js b/benchmark/tls-fragmentation.js deleted file mode 100644 index 5abe093cd2..0000000000 --- a/benchmark/tls-fragmentation.js +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -if (!process.versions.openssl) { - console.error('Skipping because node compiled without OpenSSL.'); - process.exit(0); -} - -var common = require('../common'); -var assert = require('assert'); -var tls = require('tls'); -var fs = require('fs'); -var path = require('path'); - -var options = { - key: fs.readFileSync(path.join(common.fixturesDir, 'test_key.pem')), - cert: fs.readFileSync(path.join(common.fixturesDir, 'test_cert.pem')) -}; - -var fragment = 'fr'; -var dataSize = 1024 * 1024; -var sent = 0; -var received = 0; - -var server = tls.createServer(options, function (stream) { - for (sent = 0; sent <= dataSize; sent += fragment.length) { - stream.write(fragment); - } - stream.end(); -}); - -server.listen(common.PORT, function () { - var client = tls.connect(common.PORT, function () { - client.on('data', function (data) { - received += data.length; - }); - client.on('end', function () { - server.close(); - }); - }); -}); - -process.on('exit', function () { - assert.equal(sent, received); -}); diff --git a/benchmark/tls/throughput.js b/benchmark/tls/throughput.js new file mode 100644 index 0000000000..3896382492 --- /dev/null +++ b/benchmark/tls/throughput.js @@ -0,0 +1,74 @@ +var common = require('../common.js'); +var bench = common.createBenchmark(main, { + dur: [1, 3], + 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(); + } +} +