1'use strict'; 2const common = require('../common'); 3if (!common.hasCrypto) 4 common.skip('missing crypto'); 5const assert = require('assert'); 6const fixtures = require('../common/fixtures'); 7const makeDuplexPair = require('../common/duplexpair'); 8const tls = require('tls'); 9const net = require('net'); 10 11// This test ensures that `bufferSize` also works for those tlsSockets 12// created from `socket` of `Duplex`, with which, TLSSocket will wrap 13// sockets in `StreamWrap`. 14{ 15 const iter = 10; 16 17 function createDuplex(port) { 18 const { clientSide, serverSide } = makeDuplexPair(); 19 20 return new Promise((resolve, reject) => { 21 const socket = net.connect({ 22 port, 23 }, common.mustCall(() => { 24 clientSide.pipe(socket); 25 socket.pipe(clientSide); 26 clientSide.on('close', common.mustCall(() => socket.destroy())); 27 socket.on('close', common.mustCall(() => clientSide.destroy())); 28 29 resolve(serverSide); 30 })); 31 }); 32 } 33 34 const server = tls.createServer({ 35 key: fixtures.readKey('agent2-key.pem'), 36 cert: fixtures.readKey('agent2-cert.pem') 37 }, common.mustCall((socket) => { 38 let str = ''; 39 socket.setEncoding('utf-8'); 40 socket.on('data', (chunk) => { str += chunk; }); 41 42 socket.on('end', common.mustCall(() => { 43 assert.strictEqual(str, 'a'.repeat(iter - 1)); 44 server.close(); 45 })); 46 })); 47 48 server.listen(0, common.mustCall(() => { 49 const { port } = server.address(); 50 createDuplex(port).then((socket) => { 51 const client = tls.connect({ 52 socket, 53 rejectUnauthorized: false, 54 }, common.mustCall(() => { 55 assert.strictEqual(client.bufferSize, 0); 56 57 for (let i = 1; i < iter; i++) { 58 client.write('a'); 59 assert.strictEqual(client.bufferSize, i); 60 } 61 62 client.on('end', common.mustCall()); 63 client.on('close', common.mustCall(() => { 64 assert.strictEqual(client.bufferSize, undefined); 65 })); 66 67 client.end(); 68 })); 69 }); 70 })); 71} 72