Skip to content

Commit 56de3bf

Browse files
Alex FernándezMylesBorins
authored andcommitted
benchmark: add tls benchmark for legacy SecurePair
PR-URL: #20344 Refs: #20263 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
1 parent de2b047 commit 56de3bf

2 files changed

Lines changed: 106 additions & 0 deletions

File tree

‎benchmark/tls/secure-pair.js‎

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
'use strict';
2+
constcommon=require('../common.js');
3+
constbench=common.createBenchmark(main,{
4+
dur: [5],
5+
securing: ['SecurePair','TLSSocket'],
6+
size: [2,1024,1024*1024]
7+
});
8+
9+
constfs=require('fs');
10+
consttls=require('tls');
11+
constnet=require('net');
12+
constpath=require('path');
13+
14+
constcert_dir=path.resolve(__dirname,'../../test/fixtures');
15+
constREDIRECT_PORT=28347;
16+
17+
functionmain({ dur, size, securing }){
18+
constchunk=Buffer.alloc(size,'b');
19+
20+
constoptions={
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+
constserver=net.createServer(onRedirectConnection);
31+
server.listen(REDIRECT_PORT,()=>{
32+
constproxy=net.createServer(onProxyConnection);
33+
proxy.listen(common.PORT,()=>{
34+
constclientOptions={
35+
port: common.PORT,
36+
ca: options.ca,
37+
key: options.key,
38+
cert: options.cert,
39+
isServer: false,
40+
rejectUnauthorized: false,
41+
};
42+
constconn=tls.connect(clientOptions,()=>{
43+
setTimeout(()=>{
44+
constmbits=(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+
thrownewError(`Client error: ${e}`);
57+
});
58+
59+
functionwrite(){
60+
while(false!==conn.write(chunk));
61+
}
62+
});
63+
});
64+
65+
functiononProxyConnection(conn){
66+
constclient=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+
thrownewError('Invalid securing method');
76+
}
77+
});
78+
}
79+
80+
functionsecurePair(conn,client){
81+
constserverCtx=tls.createSecureContext(options);
82+
constserverPair=tls.createSecurePair(serverCtx,true,true,false);
83+
conn.pipe(serverPair.encrypted);
84+
serverPair.encrypted.pipe(conn);
85+
serverPair.on('error',(error)=>{
86+
thrownewError(`Pair error: ${error}`);
87+
});
88+
serverPair.cleartext.pipe(client);
89+
}
90+
91+
functionsecureTLSSocket(conn,client){
92+
constserverSocket=newtls.TLSSocket(conn,options);
93+
serverSocket.on('error',(e)=>{
94+
thrownewError(`Socket error: ${e}`);
95+
});
96+
serverSocket.pipe(client);
97+
}
98+
99+
letreceived=0;
100+
functiononRedirectConnection(conn){
101+
conn.on('data',(chunk)=>{
102+
received+=chunk.length;
103+
});
104+
}
105+
}

‎test/sequential/test-benchmark-tls.js‎

Lines changed: 1 addition & 0 deletions
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)