| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 7a3bbd2 commit dd772c1
1 file changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -8,28 +8,42 @@ const common = require('../common'); | |||
| 8 | 8 | if (!common.hasCrypto) | |
| 9 | 9 | common.skip('missing crypto'); | |
| 10 | 10 | ||
| 11 | + const makeDuplexPair = require('../common/duplexpair'); | ||
| 12 | + const onGC = require('../common/ongc'); | ||
| 11 | 13 | const assert = require('assert'); | |
| 12 | - const net = require('net'); | ||
| 13 | 14 | const tls = require('tls'); | |
| 14 | 15 | ||
| 15 | 16 | // Payload doesn't matter. We just need to have the tls | |
| 16 | 17 | // connection try and connect somewhere. | |
| 17 | - const yolo = Buffer.alloc(10000).fill('yolo'); | ||
| 18 | - const server = net.createServer(function(socket) { | ||
| 19 | - socket.write(yolo); | ||
| 20 | - }); | ||
| 18 | + const dummyPayload = Buffer.alloc(10000, 'yolo'); | ||
| 21 | 19 | ||
| 22 | - server.listen(0, common.mustCall(function() { | ||
| 23 | - const { port } = server.address(); | ||
| 24 | - let runs = 0; | ||
| 25 | - connect(); | ||
| 20 | + let runs = 0; | ||
| 26 | 21 | ||
| 27 | - function connect() { | ||
| 22 | + // Count garbage-collected TLS sockets. | ||
| 23 | + let gced = 0; | ||
| 24 | + function ongc() { gced++; } | ||
| 25 | + | ||
| 26 | + connect(); | ||
| 27 | + | ||
| 28 | + function connect() { | ||
| 29 | + if (runs % 64 === 0) | ||
| 28 | 30 | global.gc(); | |
| 29 | - assert(process.memoryUsage().external >= 0); | ||
| 30 | - if (runs++ < 512) | ||
| 31 | - tls.connect(port).on('error', connect); | ||
| 32 | - else | ||
| 33 | - server.close(); | ||
| 31 | + const externalMemoryUsage = process.memoryUsage().external; | ||
| 32 | + assert(externalMemoryUsage >= 0, `${externalMemoryUsage} < 0`); | ||
| 33 | + if (runs++ === 512) { | ||
| 34 | + // Make sure at least half the TLS sockets have been gargbage collected | ||
| 35 | + // (so that this test can actually check what it's testing): | ||
| 36 | + assert(gced >= 256, `${gced} < 256`); | ||
| 37 | + return; | ||
| 34 | 38 | } | |
| 35 | - })); | ||
| 39 | + | ||
| 40 | + const { clientSide, serverSide } = makeDuplexPair(); | ||
| 41 | + | ||
| 42 | + const tlsSocket = tls.connect({ socket: clientSide }); | ||
| 43 | + tlsSocket.on('error', common.mustCall(connect)); | ||
| 44 | + onGC(tlsSocket, { ongc }); | ||
| 45 | + | ||
| 46 | + // Use setImmediate so that we don't trigger the error within the same | ||
| 47 | + // event loop tick. | ||
| 48 | + setImmediate(() => serverSide.write(dummyPayload)); | ||
| 49 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments