11var assert = require ( 'assert' )
22var finalhandler = require ( '../..' )
33var http = require ( 'http' )
4+
5+ var http2
6+
7+ try {
8+ http2 = require ( 'http2' )
9+ } catch ( _err ) {
10+ // Nothing
11+ }
12+
413var request = require ( 'supertest' )
514var SlowWriteStream = require ( './sws' )
615
716exports . assert = assert
817exports . createError = createError
9- exports . createServer = createServer
18+ exports . createHTTPServer = createHTTPServer
19+ exports . createHTTP2Server = createHTTP2Server
1020exports . createSlowWriteStream = createSlowWriteStream
1121exports . rawrequest = rawrequest
22+ exports . rawrequestHTTP2 = rawrequestHTTP2
1223exports . request = request
1324exports . shouldHaveStatusMessage = shouldHaveStatusMessage
1425exports . shouldNotHaveBody = shouldNotHaveBody
@@ -26,7 +37,7 @@ function createError (message, props) {
2637 return err
2738}
2839
29- function createServer ( err , opts ) {
40+ function createHTTPServer ( err , opts ) {
3041 return http . createServer ( function ( req , res ) {
3142 var done = finalhandler ( req , res , opts )
3243
@@ -39,6 +50,19 @@ function createServer (err, opts) {
3950 } )
4051}
4152
53+ function createHTTP2Server ( err , opts ) {
54+ return http2 . createServer ( function ( req , res ) {
55+ var done = finalhandler ( req , res , opts )
56+
57+ if ( typeof err === 'function' ) {
58+ err ( req , res , done )
59+ return
60+ }
61+
62+ done ( err )
63+ } )
64+ }
65+
4266function createSlowWriteStream ( ) {
4367 return new SlowWriteStream ( )
4468}
@@ -107,6 +131,72 @@ function rawrequest (server) {
107131 }
108132}
109133
134+ function rawrequestHTTP2 ( server ) {
135+ var _headers = { }
136+ var _path
137+
138+ function expect ( status , body , callback ) {
139+ if ( arguments . length === 2 ) {
140+ _headers [ status . toLowerCase ( ) ] = body
141+ return this
142+ }
143+
144+ server . listen ( function onlisten ( ) {
145+ var buf = ''
146+ var resHeaders
147+ var addr = this . address ( )
148+ var port = addr . port
149+
150+ var client = http2 . connect ( 'http://127.0.0.1:' + port )
151+ var req = client . request ( {
152+ ':method' : 'GET' ,
153+ ':path' : _path . replace ( / h t t p : \/ \/ l o c a l h o s t / , '' )
154+ } )
155+ req . on ( 'error' , callback )
156+ req . on ( 'response' , function onresponse ( responseHeaders ) {
157+ resHeaders = responseHeaders
158+ } )
159+ req . on ( 'data' , function ondata ( s ) { buf += s } )
160+ req . on ( 'end' , function onend ( ) {
161+ var err = null
162+
163+ try {
164+ for ( var key in _headers ) {
165+ assert . strictEqual ( resHeaders [ key ] , _headers [ key ] )
166+ }
167+
168+ assert . strictEqual ( resHeaders [ ':status' ] , status )
169+
170+ if ( body instanceof RegExp ) {
171+ assert . ok ( body . test ( buf ) , 'expected body ' + buf + ' to match ' + body )
172+ } else {
173+ assert . strictEqual ( buf , body , 'expected ' + body + ' response body, got ' + buf )
174+ }
175+ } catch ( e ) {
176+ err = e
177+ }
178+
179+ req . close ( )
180+ client . close ( )
181+ server . close ( )
182+ callback ( err )
183+ } )
184+ } )
185+ }
186+
187+ function get ( path ) {
188+ _path = path
189+
190+ return {
191+ expect : expect
192+ }
193+ }
194+
195+ return {
196+ get : get
197+ }
198+ }
199+
110200function shouldHaveStatusMessage ( statusMessage ) {
111201 return function ( test ) {
112202 assert . strictEqual ( test . res . statusMessage , statusMessage , 'should have statusMessage "' + statusMessage + '"' )
0 commit comments