summaryrefslogtreecommitdiff
path: root/benchmark
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2013-02-11 18:27:02 -0800
committerisaacs <i@izs.me>2013-02-19 14:14:37 -0800
commit0a406869df990d030d2383abc7f1388aead57d0c (patch)
tree5891ca896aef7542464778679b99535bce0289ef /benchmark
parentbafc51c0f9bbd178e347ff2ea9d110e2f1a4202e (diff)
downloadandroid-node-v8-0a406869df990d030d2383abc7f1388aead57d0c.tar.gz
android-node-v8-0a406869df990d030d2383abc7f1388aead57d0c.tar.bz2
android-node-v8-0a406869df990d030d2383abc7f1388aead57d0c.zip
bench: Replace tls-fragmentation with tls/throughput
Diffstat (limited to 'benchmark')
-rw-r--r--benchmark/tls-fragmentation.js63
-rw-r--r--benchmark/tls/throughput.js74
2 files changed, 74 insertions, 63 deletions
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();
+ }
+}
+