22
33const common = require ( '../common' ) ;
44const assert = require ( 'assert' ) ;
5+ const { once } = require ( 'events' ) ;
56const { createServer } = require ( 'http' ) ;
67const { connect } = require ( 'net' ) ;
78
@@ -70,7 +71,7 @@ server.listen(0, common.mustCall(() => {
7071 request1 . client . write ( requestBodyPart1 ) ;
7172
7273 // After a little while send two new requests
73- setTimeout ( ( ) => {
74+ setTimeout ( common . mustCall ( ( ) => {
7475 request2 = createClient ( server ) ;
7576 request3 = createClient ( server ) ;
7677
@@ -79,7 +80,17 @@ server.listen(0, common.mustCall(() => {
7980
8081 // Send the third request and stop in the middle of the headers
8182 request3 . client . write ( requestBodyPart1 ) ;
82- } , headersTimeout * 0.2 ) ;
83+
84+ request2 . client . on ( 'end' , common . mustCall ( ( ) => {
85+ // The second request times out due to headersTimeout, so after the first
86+ // request has been completed and before the fourth request's body is sent
87+ assert ( request1 . completed ) ;
88+ assert ( ! request4 . completed ) ;
89+
90+ assert ( request1 . response . startsWith ( responseOk ) ) ;
91+ assert ( request2 . response . startsWith ( responseTimeout ) ) ; // It is expired due to headersTimeout
92+ } ) ) ;
93+ } ) , headersTimeout * 0.2 ) ;
8394
8495 // After another little while send the last two new requests
8596 setTimeout ( ( ) => {
@@ -103,31 +114,23 @@ server.listen(0, common.mustCall(() => {
103114 } , headersTimeout * 0.8 ) ;
104115
105116 setTimeout ( common . mustCall ( ( ) => {
106- // After the first timeout, the first request should have been completed and second timedout
107- assert ( request1 . completed ) ;
108- assert ( request2 . completed ) ;
117+ // After the first timeout, the requests with completed headers should still be pending
109118 assert ( ! request3 . completed ) ;
110119 assert ( ! request4 . completed ) ;
111120 assert ( ! request5 . completed ) ;
112121
113- assert ( request1 . response . startsWith ( responseOk ) ) ;
114- assert ( request2 . response . startsWith ( responseTimeout ) ) ; // It is expired due to headersTimeout
122+ const pending = [ request3 , request4 , request5 ] ;
123+ Promise . all ( pending . map ( ( { client } ) => once ( client , 'end' ) ) ) . then ( common . mustCall ( ( ) => {
124+ // All request should be completed now, either with 200 or 408
125+ assert ( request3 . response . startsWith ( responseTimeout ) ) ; // It is expired due to requestTimeout
126+ assert ( request4 . response . startsWith ( responseOk ) ) ;
127+ assert ( request5 . response . startsWith ( responseTimeout ) ) ; // It is expired due to requestTimeout
128+ server . close ( ) ;
129+ } ) ) ;
115130 } ) , headersTimeout * 1.4 ) ;
116131
117132 setTimeout ( ( ) => {
118133 // Complete the body for the fourth request
119134 request4 . client . write ( requestBodyPart3 ) ;
120135 } , headersTimeout * 1.5 ) ;
121-
122- setTimeout ( common . mustCall ( ( ) => {
123- // All request should be completed now, either with 200 or 408
124- assert ( request3 . completed ) ;
125- assert ( request4 . completed ) ;
126- assert ( request5 . completed ) ;
127-
128- assert ( request3 . response . startsWith ( responseTimeout ) ) ; // It is expired due to requestTimeout
129- assert ( request4 . response . startsWith ( responseOk ) ) ;
130- assert ( request5 . response . startsWith ( responseTimeout ) ) ; // It is expired due to requestTimeout
131- server . close ( ) ;
132- } ) , headersTimeout * 3 + connectionsCheckingInterval ) ;
133136} ) ) ;
0 commit comments