Skip to content

Commit 56de3bf

Browse files
Alex FernándezMylesBorins
Alex Fernández
authored andcommitted
benchmark: add tls benchmark for legacy SecurePair
PR-URL: #20344 Refs: #20263 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Tobias Nießen <[email protected]>
1 parent de2b047 commit 56de3bf

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed

benchmark/tls/secure-pair.js

+105
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
'use strict';
2+
const common = require('../common.js');
3+
const bench = common.createBenchmark(main, {
4+
dur: [5],
5+
securing: ['SecurePair', 'TLSSocket'],
6+
size: [2, 1024, 1024 * 1024]
7+
});
8+
9+
const fs = require('fs');
10+
const tls = require('tls');
11+
const net = require('net');
12+
const path = require('path');
13+
14+
const cert_dir = path.resolve(__dirname, '../../test/fixtures');
15+
const REDIRECT_PORT = 28347;
16+
17+
function main({ dur, size, securing }) {
18+
const chunk = Buffer.alloc(size, 'b');
19+
20+
const options = {
21+
key: fs.readFileSync(`${cert_dir}/test_key.pem`),
22+
cert: fs.readFileSync(`${cert_dir}/test_cert.pem`),
23+
ca: [ fs.readFileSync(`${cert_dir}/test_ca.pem`) ],
24+
ciphers: 'AES256-GCM-SHA384',
25+
isServer: true,
26+
requestCert: true,
27+
rejectUnauthorized: true,
28+
};
29+
30+
const server = net.createServer(onRedirectConnection);
31+
server.listen(REDIRECT_PORT, () => {
32+
const proxy = net.createServer(onProxyConnection);
33+
proxy.listen(common.PORT, () => {
34+
const clientOptions = {
35+
port: common.PORT,
36+
ca: options.ca,
37+
key: options.key,
38+
cert: options.cert,
39+
isServer: false,
40+
rejectUnauthorized: false,
41+
};
42+
const conn = tls.connect(clientOptions, () => {
43+
setTimeout(() => {
44+
const mbits = (received * 8) / (1024 * 1024);
45+
bench.end(mbits);
46+
if (conn)
47+
conn.destroy();
48+
server.close();
49+
proxy.close();
50+
}, dur * 1000);
51+
bench.start();
52+
conn.on('drain', write);
53+
write();
54+
});
55+
conn.on('error', (e) => {
56+
throw new Error(`Client error: ${e}`);
57+
});
58+
59+
function write() {
60+
while (false !== conn.write(chunk));
61+
}
62+
});
63+
});
64+
65+
function onProxyConnection(conn) {
66+
const client = net.connect(REDIRECT_PORT, () => {
67+
switch (securing) {
68+
case 'SecurePair':
69+
securePair(conn, client);
70+
break;
71+
case 'TLSSocket':
72+
secureTLSSocket(conn, client);
73+
break;
74+
default:
75+
throw new Error('Invalid securing method');
76+
}
77+
});
78+
}
79+
80+
function securePair(conn, client) {
81+
const serverCtx = tls.createSecureContext(options);
82+
const serverPair = tls.createSecurePair(serverCtx, true, true, false);
83+
conn.pipe(serverPair.encrypted);
84+
serverPair.encrypted.pipe(conn);
85+
serverPair.on('error', (error) => {
86+
throw new Error(`Pair error: ${error}`);
87+
});
88+
serverPair.cleartext.pipe(client);
89+
}
90+
91+
function secureTLSSocket(conn, client) {
92+
const serverSocket = new tls.TLSSocket(conn, options);
93+
serverSocket.on('error', (e) => {
94+
throw new Error(`Socket error: ${e}`);
95+
});
96+
serverSocket.pipe(client);
97+
}
98+
99+
let received = 0;
100+
function onRedirectConnection(conn) {
101+
conn.on('data', (chunk) => {
102+
received += chunk.length;
103+
});
104+
}
105+
}

test/sequential/test-benchmark-tls.js

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ runBenchmark('tls',
2020
'dur=0.1',
2121
'n=1',
2222
'size=2',
23+
'securing=SecurePair',
2324
'type=asc'
2425
],
2526
{

0 commit comments

Comments
 (0)