11
22var assert = require ( 'assert' )
33var http = require ( 'http' )
4+ var http2
45var onHeaders = require ( '..' )
56var request = require ( 'supertest' )
7+ var server = require ( './support/servers' )
68
7- describe ( 'onHeaders(res, listener)' , function ( ) {
8- it ( 'should fire after setHeader' , function ( done ) {
9- var server = createServer ( echoListener )
9+ try {
10+ http2 = require ( 'http2' )
11+ } catch ( e ) { }
12+
13+ var createHTTPServer = server . createHTTPServer
14+ var createHTTP2Server = server . createHTTP2Server
15+
16+ // TODO: status message is not supported
17+
18+ var topDescribe = function ( type , createServer ) {
19+ var wrapper = function wrapper ( req ) {
20+ if ( type === 'http2' ) {
21+ return req . http2 ( )
22+ }
23+
24+ return req
25+ }
1026
11- request ( server )
12- . get ( '/' )
27+ describe ( 'onHeaders(res, listener)' , function ( ) {
28+ it ( 'should fire after setHeader' , function ( done ) {
29+ wrapper ( request ( createServer ( echoListener ) ) . get ( '/' ) )
30+ . expect ( 'X-Outgoing-Echo' , 'test' )
31+ . expect ( 200 , done )
32+ } )
33+ } )
34+
35+ it ( 'should fire after setHeader' , function ( done ) {
36+ wrapper ( request ( createServer ( echoListener ) ) . get ( '/' ) )
1337 . expect ( 'X-Outgoing-Echo' , 'test' )
1438 . expect ( 200 , done )
1539 } )
@@ -22,8 +46,7 @@ describe('onHeaders(res, listener)', function () {
2246 res . write ( '1' )
2347 }
2448
25- request ( server )
26- . get ( '/' )
49+ wrapper ( request ( server ) . get ( '/' ) )
2750 . expect ( 'X-Outgoing-Echo' , 'test' )
2851 . expect ( 200 , '1' , done )
2952 } )
@@ -37,8 +60,7 @@ describe('onHeaders(res, listener)', function () {
3760 this . setHeader ( 'X-Headers' , getAllHeaderNames ( this ) . join ( ',' ) )
3861 }
3962
40- request ( server )
41- . get ( '/' )
63+ wrapper ( request ( server ) . get ( '/' ) )
4264 . expect ( 'X-Headers' , '' )
4365 . expect ( 200 , done )
4466 } )
@@ -57,8 +79,7 @@ describe('onHeaders(res, listener)', function () {
5779 count ++
5880 }
5981
60- request ( server )
61- . get ( '/' )
82+ wrapper ( request ( server ) . get ( '/' ) )
6283 . expect ( 200 , function ( err ) {
6384 if ( err ) return done ( err )
6485 assert . strictEqual ( count , 1 )
@@ -76,8 +97,7 @@ describe('onHeaders(res, listener)', function () {
7697 res . setHeader ( 'X-Outgoing' , 'test' )
7798 }
7899
79- request ( server )
80- . get ( '/' )
100+ wrapper ( request ( server ) . get ( '/' ) )
81101 . expect ( 'X-Outgoing-Echo' , 'test,3,2,1' )
82102 . expect ( 200 , done )
83103 } )
@@ -93,16 +113,15 @@ describe('onHeaders(res, listener)', function () {
93113 it ( 'should be required' , function ( done ) {
94114 var server = createServer ( )
95115
96- request ( server )
97- . get ( '/' )
116+ wrapper ( request ( server )
117+ . get ( '/' ) )
98118 . expect ( 500 , / l i s t e n e r .* f u n c t i o n / , done )
99119 } )
100120
101121 it ( 'should only accept function' , function ( done ) {
102122 var server = createServer ( 42 )
103123
104- request ( server )
105- . get ( '/' )
124+ wrapper ( request ( server ) . get ( '/' ) )
106125 . expect ( 500 , / l i s t e n e r .* f u n c t i o n / , done )
107126 } )
108127 } )
@@ -112,8 +131,7 @@ describe('onHeaders(res, listener)', function () {
112131 it ( 'should be available in listener' , function ( done ) {
113132 var server = createServer ( echoListener )
114133
115- request ( server )
116- . get ( '/' )
134+ wrapper ( request ( server ) . get ( '/' ) )
117135 . expect ( 'X-Outgoing-Echo' , 'test' )
118136 . expect ( 200 , done )
119137 } )
@@ -131,8 +149,7 @@ describe('onHeaders(res, listener)', function () {
131149 this . setHeader ( 'X-Status' , this . statusCode )
132150 }
133151
134- request ( server )
135- . get ( '/' )
152+ wrapper ( request ( server ) . get ( '/' ) )
136153 . expect ( 'X-Status' , '201' )
137154 . expect ( 201 , done )
138155 } )
@@ -149,8 +166,7 @@ describe('onHeaders(res, listener)', function () {
149166 this . statusCode = 202
150167 }
151168
152- request ( server )
153- . get ( '/' )
169+ wrapper ( request ( server ) . get ( '/' ) )
154170 . expect ( 'X-Status' , '201' )
155171 . expect ( 202 , done )
156172 } )
@@ -162,26 +178,33 @@ describe('onHeaders(res, listener)', function () {
162178 res . writeHead ( ) // error
163179 }
164180
165- request ( server )
166- . get ( '/' )
181+ wrapper ( request ( server ) . get ( '/' ) )
167182 . expect ( 500 , done )
168183 } )
169184
170185 it ( 'should retain return value' , function ( done ) {
171- var server = http . createServer ( function ( req , res ) {
186+ function callbackServer ( req , res ) {
172187 if ( req . url === '/attach' ) {
173188 onHeaders ( res , appendHeader ( 1 ) )
174189 }
175190
176191 res . end ( typeof res . writeHead ( 200 ) )
177- } )
192+ }
178193
179- request ( server )
180- . get ( '/' )
194+ var server
195+ if ( type === 'http' ) {
196+ server = http . createServer ( callbackServer )
197+ } else {
198+ server = http2 . createServer ( callbackServer )
199+ }
200+
201+ wrapper ( request ( server ) . get ( '/' ) )
181202 . expect ( 200 , function ( err , res ) {
203+ // return done(err)
182204 if ( err ) return done ( err )
183- request ( server )
184- . get ( '/attach' )
205+
206+ wrapper ( request ( server )
207+ . get ( '/attach' ) )
185208 . expect ( 200 , res . text , done )
186209 } )
187210 } )
@@ -196,8 +219,7 @@ describe('onHeaders(res, listener)', function () {
196219 res . writeHead ( 200 , 'OK' )
197220 }
198221
199- request ( server )
200- . get ( '/' )
222+ wrapper ( request ( server ) . get ( '/' ) )
201223 . expect ( 'X-Outgoing-Echo' , 'test' )
202224 . expect ( 200 , done )
203225 } )
@@ -211,8 +233,7 @@ describe('onHeaders(res, listener)', function () {
211233 res . writeHead ( 200 , 'OK' , { 'X-Outgoing' : 'test' } )
212234 }
213235
214- request ( server )
215- . get ( '/' )
236+ wrapper ( request ( server ) . get ( '/' ) )
216237 . expect ( 'X-Outgoing-Echo' , 'test' )
217238 . expect ( 200 , done )
218239 } )
@@ -231,8 +252,7 @@ describe('onHeaders(res, listener)', function () {
231252 this . setHeader ( 'X-Outgoing-Echo' , this . getHeader ( 'X-Outgoing' ) )
232253 }
233254
234- request ( server )
235- . get ( '/' )
255+ wrapper ( request ( server ) . get ( '/' ) )
236256 . expect ( 'X-Status' , '201' )
237257 . expect ( 'X-Outgoing-Echo' , 'test' )
238258 . expect ( 201 , done )
@@ -250,8 +270,7 @@ describe('onHeaders(res, listener)', function () {
250270 this . setHeader ( 'X-Outgoing-Echo' , this . getHeader ( 'X-Outgoing' ) )
251271 }
252272
253- request ( server )
254- . get ( '/' )
273+ wrapper ( request ( server ) . get ( '/' ) )
255274 . expect ( 'X-Status' , '201' )
256275 . expect ( 'X-Outgoing-Echo' , 'test' )
257276 . expect ( 201 , done )
@@ -271,30 +290,12 @@ describe('onHeaders(res, listener)', function () {
271290 this . setHeader ( 'X-Outgoing-Echo' , this . getHeader ( 'X-Outgoing' ) )
272291 }
273292
274- request ( server )
275- . get ( '/' )
293+ wrapper ( request ( server ) . get ( '/' ) )
276294 . expect ( 'X-Status' , '201' )
277295 . expect ( 'X-Outgoing-Echo' , 'test' )
278296 . expect ( 201 , done )
279297 } )
280298 } )
281- } )
282-
283- function createServer ( listener , handler ) {
284- var fn = handler || echoHandler
285-
286- return http . createServer ( function ( req , res ) {
287- try {
288- onHeaders ( res , listener )
289- fn ( req , res )
290- res . statusCode = 200
291- } catch ( err ) {
292- res . statusCode = 500
293- res . write ( err . message )
294- } finally {
295- res . end ( )
296- }
297- } )
298299}
299300
300301function appendHeader ( num ) {
@@ -303,10 +304,6 @@ function appendHeader (num) {
303304 }
304305}
305306
306- function echoHandler ( req , res ) {
307- res . setHeader ( 'X-Outgoing' , 'test' )
308- }
309-
310307function echoListener ( ) {
311308 this . setHeader ( 'X-Outgoing-Echo' , this . getHeader ( 'X-Outgoing' ) )
312309}
@@ -316,3 +313,20 @@ function getAllHeaderNames (res) {
316313 ? Object . keys ( this . _headers || { } )
317314 : res . getHeaderNames ( )
318315}
316+
317+ var servers = [
318+ [ 'http' , createHTTPServer ]
319+ ]
320+
321+ var nodeVersion = process . versions . node . split ( '.' ) . map ( Number )
322+
323+ // `superagent` only supports `http2` since Node.js@10
324+ if ( http2 && nodeVersion [ 0 ] >= 10 ) {
325+ servers . push ( [ 'http2' , createHTTP2Server ] )
326+ }
327+
328+ for ( var i = 0 ; i < servers . length ; i ++ ) {
329+ var tests = topDescribe . bind ( undefined , servers [ i ] [ 0 ] , servers [ i ] [ 1 ] )
330+
331+ describe ( servers [ i ] [ 0 ] , tests )
332+ }
0 commit comments