@@ -6,6 +6,7 @@ if (!common.hasCrypto)
66const assert = require ( 'assert' ) ;
77const tls = require ( 'tls' ) ;
88const net = require ( 'net' ) ;
9+ const Countdown = require ( '../common/countdown' ) ;
910const fixtures = require ( '../common/fixtures' ) ;
1011
1112const key = fixtures . readKey ( 'agent2-key.pem' ) ;
@@ -14,19 +15,28 @@ const cert = fixtures.readKey('agent2-cert.pem');
1415let serverTlsSocket ;
1516const tlsServer = tls . createServer ( { cert, key } , ( socket ) => {
1617 serverTlsSocket = socket ;
18+ socket . on ( 'close' , dec ) ;
1719} ) ;
1820
1921// A plain net server, that manually passes connections to the TLS
20- // server to be upgraded
22+ // server to be upgraded.
2123let netSocket ;
24+ let netSocketCloseEmitted = false ;
2225const netServer = net . createServer ( ( socket ) => {
23- tlsServer . emit ( 'connection' , socket ) ;
24-
2526 netSocket = socket ;
26- } ) . listen ( 0 , common . mustCall ( function ( ) {
27+ tlsServer . emit ( 'connection' , socket ) ;
28+ socket . on ( 'close' , ( ) => {
29+ netSocketCloseEmitted = true ;
30+ assert . strictEqual ( serverTlsSocket . destroyed , true ) ;
31+ } ) ;
32+ } ) . listen ( 0 , common . mustCall ( ( ) => {
2733 connectClient ( netServer ) ;
2834} ) ) ;
2935
36+ const countdown = new Countdown ( 2 , ( ) => {
37+ netServer . close ( ) ;
38+ } ) ;
39+
3040// A client that connects, sends one message, and closes the raw connection:
3141function connectClient ( server ) {
3242 const clientTlsSocket = tls . connect ( {
@@ -41,18 +51,22 @@ function connectClient(server) {
4151 assert ( serverTlsSocket ) ;
4252
4353 netSocket . destroy ( ) ;
54+ assert . strictEqual ( netSocket . destroyed , true ) ;
4455
4556 setImmediate ( ( ) => {
46- assert . strictEqual ( netSocket . destroyed , true ) ;
47-
57+ // Close callbacks are executed after `setImmediate()` callbacks.
58+ assert . strictEqual ( netSocketCloseEmitted , false ) ;
59+ assert . strictEqual ( serverTlsSocket . destroyed , false ) ;
4860 setImmediate ( ( ) => {
49- assert . strictEqual ( clientTlsSocket . destroyed , true ) ;
50- assert . strictEqual ( serverTlsSocket . destroyed , true ) ;
51-
52- tlsServer . close ( ) ;
53- netServer . close ( ) ;
61+ assert . strictEqual ( netSocketCloseEmitted , true ) ;
5462 } ) ;
5563 } ) ;
5664 } ) ) ;
5765 } ) ) ;
66+
67+ clientTlsSocket . on ( 'close' , dec ) ;
68+ }
69+
70+ function dec ( ) {
71+ countdown . dec ( ) ;
5872}
0 commit comments