1// Flags: --expose-internals 2'use strict'; 3require('../common'); 4const assert = require('assert'); 5const { internalBinding } = require('internal/test/binding'); 6const { 7 TCP, 8 constants: TCPConstants, 9 TCPConnectWrap 10} = internalBinding('tcp_wrap'); 11const { ShutdownWrap } = internalBinding('stream_wrap'); 12 13function makeConnection() { 14 const client = new TCP(TCPConstants.SOCKET); 15 16 const req = new TCPConnectWrap(); 17 const err = client.connect(req, '127.0.0.1', this.address().port); 18 assert.strictEqual(err, 0); 19 20 req.oncomplete = function(status, client_, req_, readable, writable) { 21 assert.strictEqual(status, 0); 22 assert.strictEqual(client_, client); 23 assert.strictEqual(req_, req); 24 assert.strictEqual(readable, true); 25 assert.strictEqual(writable, true); 26 27 const shutdownReq = new ShutdownWrap(); 28 const err = client.shutdown(shutdownReq); 29 assert.strictEqual(err, 0); 30 31 shutdownReq.oncomplete = function(status, client_, error) { 32 assert.strictEqual(status, 0); 33 assert.strictEqual(client_, client); 34 assert.strictEqual(error, undefined); 35 shutdownCount++; 36 client.close(); 37 }; 38 }; 39} 40 41let connectCount = 0; 42let endCount = 0; 43let shutdownCount = 0; 44 45const server = require('net').Server(function(s) { 46 connectCount++; 47 s.resume(); 48 s.on('end', function() { 49 endCount++; 50 s.destroy(); 51 server.close(); 52 }); 53}); 54 55server.listen(0, makeConnection); 56 57process.on('exit', function() { 58 assert.strictEqual(shutdownCount, 1); 59 assert.strictEqual(connectCount, 1); 60 assert.strictEqual(endCount, 1); 61}); 62