unicorn 3.3.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.wrongdoc.yml +2 -2
- data/GIT-VERSION-GEN +1 -1
- data/KNOWN_ISSUES +17 -7
- data/README +2 -2
- data/Rakefile +3 -2
- data/examples/nginx.conf +12 -8
- data/ext/unicorn_http/unicorn_http.rl +12 -1
- data/ext/unicorn_http/unicorn_http_common.rl +1 -1
- data/lib/unicorn/app/exec_cgi.rb +25 -22
- data/lib/unicorn/configurator.rb +17 -11
- data/lib/unicorn/const.rb +2 -2
- data/lib/unicorn/http_response.rb +1 -1
- data/lib/unicorn/http_server.rb +0 -1
- data/lib/unicorn/socket_helper.rb +33 -19
- data/lib/unicorn/tee_input.rb +1 -1
- data/script/isolate_for_tests +1 -1
- data/t/bin/unused_listen +2 -15
- data/test/exec/test_exec.rb +1 -2
- data/test/rails/test_rails.rb +1 -1
- data/test/test_helper.rb +3 -16
- data/test/unit/test_configurator.rb +8 -0
- data/test/unit/test_http_parser.rb +294 -130
- data/test/unit/test_http_parser_ng.rb +147 -126
- data/test/unit/test_request.rb +3 -3
- data/test/unit/test_response.rb +0 -12
- data/test/unit/test_server.rb +4 -7
- data/test/unit/test_tee_input.rb +25 -21
- data/test/unit/test_upload.rb +10 -2
- data/unicorn.gemspec +2 -2
- metadata +12 -12
@@ -97,16 +97,17 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def test_identity_byte_headers
|
100
|
-
req =
|
100
|
+
req = @parser.env
|
101
101
|
str = "PUT / HTTP/1.1\r\n"
|
102
102
|
str << "Content-Length: 123\r\n"
|
103
103
|
str << "\r"
|
104
|
-
hdr =
|
104
|
+
hdr = @parser.buf
|
105
105
|
str.each_byte { |byte|
|
106
|
-
|
106
|
+
hdr << byte.chr
|
107
|
+
assert_nil @parser.parse
|
107
108
|
}
|
108
109
|
hdr << "\n"
|
109
|
-
assert_equal req.object_id, @parser.
|
110
|
+
assert_equal req.object_id, @parser.parse.object_id
|
110
111
|
assert_equal '123', req['CONTENT_LENGTH']
|
111
112
|
assert_equal 0, hdr.size
|
112
113
|
assert ! @parser.keepalive?
|
@@ -121,13 +122,14 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
121
122
|
end
|
122
123
|
|
123
124
|
def test_identity_step_headers
|
124
|
-
req =
|
125
|
-
str =
|
126
|
-
|
125
|
+
req = @parser.env
|
126
|
+
str = @parser.buf
|
127
|
+
str << "PUT / HTTP/1.1\r\n"
|
128
|
+
assert ! @parser.parse
|
127
129
|
str << "Content-Length: 123\r\n"
|
128
|
-
assert ! @parser.
|
130
|
+
assert ! @parser.parse
|
129
131
|
str << "\r\n"
|
130
|
-
assert_equal req.object_id, @parser.
|
132
|
+
assert_equal req.object_id, @parser.parse.object_id
|
131
133
|
assert_equal '123', req['CONTENT_LENGTH']
|
132
134
|
assert_equal 0, str.size
|
133
135
|
assert ! @parser.keepalive?
|
@@ -141,9 +143,10 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
141
143
|
end
|
142
144
|
|
143
145
|
def test_identity_oneshot_header
|
144
|
-
req =
|
145
|
-
str =
|
146
|
-
|
146
|
+
req = @parser.env
|
147
|
+
str = @parser.buf
|
148
|
+
str << "PUT / HTTP/1.1\r\nContent-Length: 123\r\n\r\n"
|
149
|
+
assert_equal req.object_id, @parser.parse.object_id
|
147
150
|
assert_equal '123', req['CONTENT_LENGTH']
|
148
151
|
assert_equal 0, str.size
|
149
152
|
assert ! @parser.keepalive?
|
@@ -157,11 +160,12 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
157
160
|
|
158
161
|
def test_identity_oneshot_header_with_body
|
159
162
|
body = ('a' * 123).freeze
|
160
|
-
req =
|
161
|
-
str =
|
162
|
-
|
163
|
-
|
164
|
-
|
163
|
+
req = @parser.env
|
164
|
+
str = @parser.buf
|
165
|
+
str << "PUT / HTTP/1.1\r\n" \
|
166
|
+
"Content-Length: #{body.length}\r\n" \
|
167
|
+
"\r\n#{body}"
|
168
|
+
assert_equal req.object_id, @parser.parse.object_id
|
165
169
|
assert_equal '123', req['CONTENT_LENGTH']
|
166
170
|
assert_equal 123, str.size
|
167
171
|
assert_equal body, str
|
@@ -174,8 +178,9 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
174
178
|
end
|
175
179
|
|
176
180
|
def test_identity_oneshot_header_with_body_partial
|
177
|
-
str =
|
178
|
-
|
181
|
+
str = @parser.buf
|
182
|
+
str << "PUT / HTTP/1.1\r\nContent-Length: 123\r\n\r\na"
|
183
|
+
assert_equal Hash, @parser.parse.class
|
179
184
|
assert_equal 1, str.size
|
180
185
|
assert_equal 'a', str
|
181
186
|
tmp = ''
|
@@ -192,8 +197,9 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
192
197
|
end
|
193
198
|
|
194
199
|
def test_identity_oneshot_header_with_body_slop
|
195
|
-
str =
|
196
|
-
|
200
|
+
str = @parser.buf
|
201
|
+
str << "PUT / HTTP/1.1\r\nContent-Length: 1\r\n\r\naG"
|
202
|
+
assert_equal Hash, @parser.parse.class
|
197
203
|
assert_equal 2, str.size
|
198
204
|
assert_equal 'aG', str
|
199
205
|
tmp = ''
|
@@ -206,92 +212,96 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
206
212
|
end
|
207
213
|
|
208
214
|
def test_chunked
|
209
|
-
str =
|
210
|
-
req =
|
211
|
-
|
215
|
+
str = @parser.buf
|
216
|
+
req = @parser.env
|
217
|
+
str << "PUT / HTTP/1.1\r\ntransfer-Encoding: chunked\r\n\r\n"
|
218
|
+
assert_equal req, @parser.parse, "msg=#{str}"
|
212
219
|
assert_equal 0, str.size
|
213
220
|
tmp = ""
|
214
|
-
assert_nil @parser.filter_body(tmp, "6")
|
221
|
+
assert_nil @parser.filter_body(tmp, str << "6")
|
215
222
|
assert_equal 0, tmp.size
|
216
|
-
assert_nil @parser.filter_body(tmp,
|
217
|
-
assert_equal 0,
|
223
|
+
assert_nil @parser.filter_body(tmp, str << "\r\n")
|
224
|
+
assert_equal 0, str.size
|
218
225
|
assert_equal 0, tmp.size
|
219
226
|
tmp = ""
|
220
|
-
assert_nil @parser.filter_body(tmp, "..")
|
227
|
+
assert_nil @parser.filter_body(tmp, str << "..")
|
221
228
|
assert_equal "..", tmp
|
222
|
-
assert_nil @parser.filter_body(tmp, "abcd\r\n0\r\n")
|
229
|
+
assert_nil @parser.filter_body(tmp, str << "abcd\r\n0\r\n")
|
223
230
|
assert_equal "abcd", tmp
|
224
|
-
|
225
|
-
assert_equal
|
226
|
-
assert_equal "PUT", rv
|
231
|
+
assert_equal str.object_id, @parser.filter_body(tmp, str << "PUT").object_id
|
232
|
+
assert_equal "PUT", str
|
227
233
|
assert ! @parser.keepalive?
|
228
|
-
|
229
|
-
assert_equal req, @parser.
|
234
|
+
str << "TY: FOO\r\n\r\n"
|
235
|
+
assert_equal req, @parser.parse
|
230
236
|
assert_equal "FOO", req["HTTP_PUTTY"]
|
231
237
|
assert @parser.keepalive?
|
232
238
|
end
|
233
239
|
|
234
240
|
def test_two_chunks
|
235
|
-
str =
|
236
|
-
|
237
|
-
|
241
|
+
str = @parser.buf
|
242
|
+
str << "PUT / HTTP/1.1\r\ntransfer-Encoding: chunked\r\n\r\n"
|
243
|
+
req = @parser.env
|
244
|
+
assert_equal req, @parser.parse
|
238
245
|
assert_equal 0, str.size
|
239
246
|
tmp = ""
|
240
|
-
assert_nil @parser.filter_body(tmp, "6")
|
247
|
+
assert_nil @parser.filter_body(tmp, str << "6")
|
241
248
|
assert_equal 0, tmp.size
|
242
|
-
assert_nil @parser.filter_body(tmp,
|
243
|
-
assert_equal "",
|
249
|
+
assert_nil @parser.filter_body(tmp, str << "\r\n")
|
250
|
+
assert_equal "", str
|
244
251
|
assert_equal 0, tmp.size
|
245
252
|
tmp = ""
|
246
|
-
assert_nil @parser.filter_body(tmp, "..")
|
253
|
+
assert_nil @parser.filter_body(tmp, str << "..")
|
247
254
|
assert_equal 2, tmp.size
|
248
255
|
assert_equal "..", tmp
|
249
|
-
assert_nil @parser.filter_body(tmp, "abcd\r\n1")
|
256
|
+
assert_nil @parser.filter_body(tmp, str << "abcd\r\n1")
|
250
257
|
assert_equal "abcd", tmp
|
251
|
-
assert_nil @parser.filter_body(tmp, "\r")
|
258
|
+
assert_nil @parser.filter_body(tmp, str << "\r")
|
252
259
|
assert_equal "", tmp
|
253
|
-
assert_nil @parser.filter_body(tmp, "\n")
|
260
|
+
assert_nil @parser.filter_body(tmp, str << "\n")
|
254
261
|
assert_equal "", tmp
|
255
|
-
assert_nil @parser.filter_body(tmp, "z")
|
262
|
+
assert_nil @parser.filter_body(tmp, str << "z")
|
256
263
|
assert_equal "z", tmp
|
257
|
-
assert_nil @parser.filter_body(tmp, "\r\n")
|
258
|
-
assert_nil @parser.filter_body(tmp, "0")
|
259
|
-
assert_nil @parser.filter_body(tmp, "\r")
|
260
|
-
rv = @parser.filter_body(tmp,
|
264
|
+
assert_nil @parser.filter_body(tmp, str << "\r\n")
|
265
|
+
assert_nil @parser.filter_body(tmp, str << "0")
|
266
|
+
assert_nil @parser.filter_body(tmp, str << "\r")
|
267
|
+
rv = @parser.filter_body(tmp, str << "\nGET")
|
261
268
|
assert_equal "GET", rv
|
262
|
-
assert_equal
|
269
|
+
assert_equal str.object_id, rv.object_id
|
263
270
|
assert ! @parser.keepalive?
|
264
271
|
end
|
265
272
|
|
266
273
|
def test_big_chunk
|
267
|
-
str =
|
268
|
-
|
269
|
-
|
270
|
-
|
274
|
+
str = @parser.buf
|
275
|
+
str << "PUT / HTTP/1.1\r\ntransfer-Encoding: chunked\r\n\r\n" \
|
276
|
+
"4000\r\nabcd"
|
277
|
+
req = @parser.env
|
278
|
+
assert_equal req, @parser.parse
|
271
279
|
tmp = ''
|
272
280
|
assert_nil @parser.filter_body(tmp, str)
|
273
281
|
assert_equal '', str
|
274
|
-
str
|
282
|
+
str << ' ' * 16300
|
275
283
|
assert_nil @parser.filter_body(tmp, str)
|
276
284
|
assert_equal '', str
|
277
|
-
str
|
285
|
+
str << ' ' * 80
|
278
286
|
assert_nil @parser.filter_body(tmp, str)
|
279
287
|
assert_equal '', str
|
280
288
|
assert ! @parser.body_eof?
|
281
|
-
assert_equal "", @parser.filter_body(tmp, "\r\n0\r\n")
|
289
|
+
assert_equal "", @parser.filter_body(tmp, str << "\r\n0\r\n")
|
282
290
|
assert_equal "", tmp
|
283
291
|
assert @parser.body_eof?
|
284
|
-
|
285
|
-
assert_equal
|
292
|
+
str << "\r\n"
|
293
|
+
assert_equal req, @parser.parse
|
294
|
+
assert_equal "", str
|
286
295
|
assert @parser.body_eof?
|
287
296
|
assert @parser.keepalive?
|
288
297
|
end
|
289
298
|
|
290
299
|
def test_two_chunks_oneshot
|
291
|
-
str =
|
292
|
-
|
293
|
-
|
294
|
-
|
300
|
+
str = @parser.buf
|
301
|
+
req = @parser.env
|
302
|
+
str << "PUT / HTTP/1.1\r\ntransfer-Encoding: chunked\r\n\r\n" \
|
303
|
+
"1\r\na\r\n2\r\n..\r\n0\r\n"
|
304
|
+
assert_equal req, @parser.parse
|
295
305
|
tmp = ''
|
296
306
|
assert_nil @parser.filter_body(tmp, str)
|
297
307
|
assert_equal 'a..', tmp
|
@@ -302,31 +312,33 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
302
312
|
|
303
313
|
def test_chunks_bytewise
|
304
314
|
chunked = "10\r\nabcdefghijklmnop\r\n11\r\n0123456789abcdefg\r\n0\r\n"
|
305
|
-
str = "PUT / HTTP/1.1\r\ntransfer-Encoding: chunked\r\n\r\n
|
306
|
-
|
307
|
-
|
308
|
-
|
315
|
+
str = "PUT / HTTP/1.1\r\ntransfer-Encoding: chunked\r\n\r\n"
|
316
|
+
buf = @parser.buf
|
317
|
+
buf << str
|
318
|
+
req = @parser.env
|
319
|
+
assert_equal req, @parser.parse
|
320
|
+
assert_equal "", buf
|
309
321
|
tmp = ''
|
310
|
-
buf = ''
|
311
322
|
body = ''
|
312
|
-
str =
|
323
|
+
str = chunked[0..-2]
|
313
324
|
str.each_byte { |byte|
|
314
325
|
assert_nil @parser.filter_body(tmp, buf << byte.chr)
|
315
326
|
body << tmp
|
316
327
|
}
|
317
328
|
assert_equal 'abcdefghijklmnop0123456789abcdefg', body
|
318
|
-
rv = @parser.filter_body(tmp, buf
|
329
|
+
rv = @parser.filter_body(tmp, buf<< "\n")
|
319
330
|
assert_equal rv.object_id, buf.object_id
|
320
331
|
assert ! @parser.keepalive?
|
321
332
|
end
|
322
333
|
|
323
334
|
def test_trailers
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
335
|
+
req = @parser.env
|
336
|
+
str = @parser.buf
|
337
|
+
str << "PUT / HTTP/1.1\r\n" \
|
338
|
+
"Trailer: Content-MD5\r\n" \
|
339
|
+
"transfer-Encoding: chunked\r\n\r\n" \
|
340
|
+
"1\r\na\r\n2\r\n..\r\n0\r\n"
|
341
|
+
assert_equal req, @parser.parse
|
330
342
|
assert_equal 'Content-MD5', req['HTTP_TRAILER']
|
331
343
|
assert_nil req['HTTP_CONTENT_MD5']
|
332
344
|
tmp = ''
|
@@ -341,19 +353,22 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
341
353
|
assert_nil @parser.trailers(req, str)
|
342
354
|
assert_equal md5_b64, req['HTTP_CONTENT_MD5']
|
343
355
|
assert_equal "CONTENT_MD5: #{md5_b64}\r\n", str
|
344
|
-
|
345
|
-
|
356
|
+
str << "\r"
|
357
|
+
assert_nil @parser.parse
|
358
|
+
str << "\nGET / "
|
359
|
+
assert_equal req, @parser.parse
|
346
360
|
assert_equal "GET / ", str
|
347
361
|
assert @parser.keepalive?
|
348
362
|
end
|
349
363
|
|
350
364
|
def test_trailers_slowly
|
351
|
-
str =
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
365
|
+
str = @parser.buf
|
366
|
+
str << "PUT / HTTP/1.1\r\n" \
|
367
|
+
"Trailer: Content-MD5\r\n" \
|
368
|
+
"transfer-Encoding: chunked\r\n\r\n" \
|
369
|
+
"1\r\na\r\n2\r\n..\r\n0\r\n"
|
370
|
+
req = @parser.env
|
371
|
+
assert_equal req, @parser.parse
|
357
372
|
assert_equal 'Content-MD5', req['HTTP_TRAILER']
|
358
373
|
assert_nil req['HTTP_CONTENT_MD5']
|
359
374
|
tmp = ''
|
@@ -371,16 +386,19 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
371
386
|
}
|
372
387
|
assert_equal md5_b64, req['HTTP_CONTENT_MD5']
|
373
388
|
assert_equal "CONTENT_MD5: #{md5_b64}\r\n", str
|
374
|
-
|
375
|
-
|
389
|
+
str << "\r"
|
390
|
+
assert_nil @parser.parse
|
391
|
+
str << "\n"
|
392
|
+
assert_equal req, @parser.parse
|
376
393
|
end
|
377
394
|
|
378
395
|
def test_max_chunk
|
379
|
-
str =
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
396
|
+
str = @parser.buf
|
397
|
+
str << "PUT / HTTP/1.1\r\n" \
|
398
|
+
"transfer-Encoding: chunked\r\n\r\n" \
|
399
|
+
"#{HttpParser::CHUNK_MAX.to_s(16)}\r\na\r\n2\r\n..\r\n0\r\n"
|
400
|
+
req = @parser.env
|
401
|
+
assert_equal req, @parser.parse
|
384
402
|
assert_nil @parser.content_length
|
385
403
|
assert_nothing_raised { @parser.filter_body('', str) }
|
386
404
|
assert ! @parser.keepalive?
|
@@ -388,59 +406,61 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
388
406
|
|
389
407
|
def test_max_body
|
390
408
|
n = HttpParser::LENGTH_MAX
|
391
|
-
|
392
|
-
req =
|
393
|
-
assert_nothing_raised { @parser.headers(req,
|
409
|
+
@parser.buf << "PUT / HTTP/1.1\r\nContent-Length: #{n}\r\n\r\n"
|
410
|
+
req = @parser.env
|
411
|
+
assert_nothing_raised { @parser.headers(req, @parser.buf) }
|
394
412
|
assert_equal n, req['CONTENT_LENGTH'].to_i
|
395
413
|
assert ! @parser.keepalive?
|
396
414
|
end
|
397
415
|
|
398
416
|
def test_overflow_chunk
|
399
417
|
n = HttpParser::CHUNK_MAX + 1
|
400
|
-
str =
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
418
|
+
str = @parser.buf
|
419
|
+
req = @parser.env
|
420
|
+
str << "PUT / HTTP/1.1\r\n" \
|
421
|
+
"transfer-Encoding: chunked\r\n\r\n" \
|
422
|
+
"#{n.to_s(16)}\r\na\r\n2\r\n..\r\n0\r\n"
|
423
|
+
assert_equal req, @parser.parse
|
405
424
|
assert_nil @parser.content_length
|
406
425
|
assert_raise(HttpParserError) { @parser.filter_body('', str) }
|
407
426
|
end
|
408
427
|
|
409
428
|
def test_overflow_content_length
|
410
429
|
n = HttpParser::LENGTH_MAX + 1
|
411
|
-
|
412
|
-
assert_raise(HttpParserError) { @parser.
|
430
|
+
@parser.buf << "PUT / HTTP/1.1\r\nContent-Length: #{n}\r\n\r\n"
|
431
|
+
assert_raise(HttpParserError) { @parser.parse }
|
413
432
|
end
|
414
433
|
|
415
434
|
def test_bad_chunk
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
req =
|
420
|
-
assert_equal req, @parser.
|
435
|
+
@parser.buf << "PUT / HTTP/1.1\r\n" \
|
436
|
+
"transfer-Encoding: chunked\r\n\r\n" \
|
437
|
+
"#zzz\r\na\r\n2\r\n..\r\n0\r\n"
|
438
|
+
req = @parser.env
|
439
|
+
assert_equal req, @parser.parse
|
421
440
|
assert_nil @parser.content_length
|
422
|
-
assert_raise(HttpParserError) { @parser.filter_body(
|
441
|
+
assert_raise(HttpParserError) { @parser.filter_body("", @parser.buf) }
|
423
442
|
end
|
424
443
|
|
425
444
|
def test_bad_content_length
|
426
|
-
|
427
|
-
assert_raise(HttpParserError) { @parser.
|
445
|
+
@parser.buf << "PUT / HTTP/1.1\r\nContent-Length: 7ff\r\n\r\n"
|
446
|
+
assert_raise(HttpParserError) { @parser.parse }
|
428
447
|
end
|
429
448
|
|
430
449
|
def test_bad_trailers
|
431
|
-
str =
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
450
|
+
str = @parser.buf
|
451
|
+
req = @parser.env
|
452
|
+
str << "PUT / HTTP/1.1\r\n" \
|
453
|
+
"Trailer: Transfer-Encoding\r\n" \
|
454
|
+
"transfer-Encoding: chunked\r\n\r\n" \
|
455
|
+
"1\r\na\r\n2\r\n..\r\n0\r\n"
|
456
|
+
assert_equal req, @parser.parse
|
437
457
|
assert_equal 'Transfer-Encoding', req['HTTP_TRAILER']
|
438
458
|
tmp = ''
|
439
459
|
assert_nil @parser.filter_body(tmp, str)
|
440
460
|
assert_equal 'a..', tmp
|
441
461
|
assert_equal '', str
|
442
462
|
str << "Transfer-Encoding: identity\r\n\r\n"
|
443
|
-
assert_raise(HttpParserError) { @parser.
|
463
|
+
assert_raise(HttpParserError) { @parser.parse }
|
444
464
|
end
|
445
465
|
|
446
466
|
def test_repeat_headers
|
@@ -449,18 +469,19 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
449
469
|
"Trailer: Content-SHA1\r\n" \
|
450
470
|
"transfer-Encoding: chunked\r\n\r\n" \
|
451
471
|
"1\r\na\r\n2\r\n..\r\n0\r\n"
|
452
|
-
req =
|
453
|
-
|
472
|
+
req = @parser.env
|
473
|
+
@parser.buf << str
|
474
|
+
assert_equal req, @parser.parse
|
454
475
|
assert_equal 'Content-MD5,Content-SHA1', req['HTTP_TRAILER']
|
455
476
|
assert ! @parser.keepalive?
|
456
477
|
end
|
457
478
|
|
458
479
|
def test_parse_simple_request
|
459
480
|
parser = HttpParser.new
|
460
|
-
req =
|
461
|
-
|
462
|
-
assert_equal req, parser.
|
463
|
-
assert_equal '',
|
481
|
+
req = parser.env
|
482
|
+
parser.buf << "GET /read-rfc1945-if-you-dont-believe-me\r\n"
|
483
|
+
assert_equal req, parser.parse
|
484
|
+
assert_equal '', parser.buf
|
464
485
|
expect = {
|
465
486
|
"SERVER_NAME"=>"localhost",
|
466
487
|
"rack.url_scheme"=>"http",
|
@@ -556,10 +577,10 @@ class HttpParserNgTest < Test::Unit::TestCase
|
|
556
577
|
end
|
557
578
|
|
558
579
|
def test_ignore_version_header
|
559
|
-
|
560
|
-
req =
|
561
|
-
assert_equal req, @parser.
|
562
|
-
assert_equal '',
|
580
|
+
@parser.buf << "GET / HTTP/1.1\r\nVersion: hello\r\n\r\n"
|
581
|
+
req = @parser.env
|
582
|
+
assert_equal req, @parser.parse
|
583
|
+
assert_equal '', @parser.buf
|
563
584
|
expect = {
|
564
585
|
"SERVER_NAME" => "localhost",
|
565
586
|
"rack.url_scheme" => "http",
|