1
1
var assert = require ( 'assert' )
2
2
var finalhandler = require ( '../..' )
3
3
var http = require ( 'http' )
4
+
5
+ var http2
6
+
7
+ try {
8
+ http2 = require ( 'http2' )
9
+ } catch ( _err ) {
10
+ // Nothing
11
+ }
12
+
4
13
var request = require ( 'supertest' )
5
14
var SlowWriteStream = require ( './sws' )
6
15
7
16
exports . assert = assert
8
17
exports . createError = createError
9
- exports . createServer = createServer
18
+ exports . createHTTPServer = createHTTPServer
19
+ exports . createHTTP2Server = createHTTP2Server
10
20
exports . createSlowWriteStream = createSlowWriteStream
11
21
exports . rawrequest = rawrequest
22
+ exports . rawrequestHTTP2 = rawrequestHTTP2
12
23
exports . request = request
13
24
exports . shouldHaveStatusMessage = shouldHaveStatusMessage
14
25
exports . shouldNotHaveBody = shouldNotHaveBody
@@ -26,7 +37,7 @@ function createError (message, props) {
26
37
return err
27
38
}
28
39
29
- function createServer ( err , opts ) {
40
+ function createHTTPServer ( err , opts ) {
30
41
return http . createServer ( function ( req , res ) {
31
42
var done = finalhandler ( req , res , opts )
32
43
@@ -39,6 +50,19 @@ function createServer (err, opts) {
39
50
} )
40
51
}
41
52
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
+
42
66
function createSlowWriteStream ( ) {
43
67
return new SlowWriteStream ( )
44
68
}
@@ -107,6 +131,72 @@ function rawrequest (server) {
107
131
}
108
132
}
109
133
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
+
110
200
function shouldHaveStatusMessage ( statusMessage ) {
111
201
return function ( test ) {
112
202
assert . strictEqual ( test . res . statusMessage , statusMessage , 'should have statusMessage "' + statusMessage + '"' )
0 commit comments