Mercurial > hg > nginx-tests
comparison h2.t @ 653:5ad620022234
Tests: HTTP/2 tests adapted to send ':authority' where needed.
This follows HTTP/1.1 semantics and is expected in the latest HTTP/2 patch.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Wed, 19 Aug 2015 23:51:40 +0300 |
parents | 5a85ad9382a3 |
children | a64fe1054fb4 |
comparison
equal
deleted
inserted
replaced
652:5a85ad9382a3 | 653:5ad620022234 |
---|---|
30 eval { IO::Socket::SSL::SSL_VERIFY_NONE(); }; | 30 eval { IO::Socket::SSL::SSL_VERIFY_NONE(); }; |
31 plan(skip_all => 'IO::Socket::SSL too old') if $@; | 31 plan(skip_all => 'IO::Socket::SSL too old') if $@; |
32 | 32 |
33 my $t = Test::Nginx->new()->has(qw/http http_ssl http_v2 proxy cache/) | 33 my $t = Test::Nginx->new()->has(qw/http http_ssl http_v2 proxy cache/) |
34 ->has(qw/limit_conn rewrite realip shmem/) | 34 ->has(qw/limit_conn rewrite realip shmem/) |
35 ->has_daemon('openssl')->plan(148); | 35 ->has_daemon('openssl')->plan(147); |
36 | 36 |
37 $t->write_file_expand('nginx.conf', <<'EOF'); | 37 $t->write_file_expand('nginx.conf', <<'EOF'); |
38 | 38 |
39 %%TEST_GLOBALS%% | 39 %%TEST_GLOBALS%% |
40 | 40 |
271 # 6.1. Indexed Header Field Representation | 271 # 6.1. Indexed Header Field Representation |
272 | 272 |
273 $sid = new_stream($sess, { headers => [ | 273 $sid = new_stream($sess, { headers => [ |
274 { name => ':method', value => 'GET', mode => 0 }, | 274 { name => ':method', value => 'GET', mode => 0 }, |
275 { name => ':scheme', value => 'http', mode => 0 }, | 275 { name => ':scheme', value => 'http', mode => 0 }, |
276 { name => ':path', value => '/', mode => 0 }]}); | 276 { name => ':path', value => '/', mode => 0 }, |
277 { name => ':authority', value => 'localhost', mode => 1 }]}); | |
277 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 278 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
278 | 279 |
279 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 280 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
280 is($frame->{headers}->{':status'}, 200, 'indexed header field'); | 281 is($frame->{headers}->{':status'}, 200, 'indexed header field'); |
281 | 282 |
282 # 6.2.1. Literal Header Field with Incremental Indexing | 283 # 6.2.1. Literal Header Field with Incremental Indexing |
283 | 284 |
284 $sid = new_stream($sess, { headers => [ | 285 $sid = new_stream($sess, { headers => [ |
285 { name => ':method', value => 'GET', mode => 1, huff => 0 }, | 286 { name => ':method', value => 'GET', mode => 1, huff => 0 }, |
286 { name => ':scheme', value => 'http', mode => 1, huff => 0 }, | 287 { name => ':scheme', value => 'http', mode => 1, huff => 0 }, |
287 { name => ':path', value => '/', mode => 1, huff => 0 }]}); | 288 { name => ':path', value => '/', mode => 1, huff => 0 }, |
289 { name => ':authority', value => 'localhost', mode => 1, huff => 0 }]}); | |
288 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 290 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
289 | 291 |
290 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 292 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
291 is($frame->{headers}->{':status'}, 200, 'literal with indexing'); | 293 is($frame->{headers}->{':status'}, 200, 'literal with indexing'); |
292 | 294 |
293 $sid = new_stream($sess, { headers => [ | 295 $sid = new_stream($sess, { headers => [ |
294 { name => ':method', value => 'GET', mode => 1, huff => 1 }, | 296 { name => ':method', value => 'GET', mode => 1, huff => 1 }, |
295 { name => ':scheme', value => 'http', mode => 1, huff => 1 }, | 297 { name => ':scheme', value => 'http', mode => 1, huff => 1 }, |
296 { name => ':path', value => '/', mode => 1, huff => 1 }]}); | 298 { name => ':path', value => '/', mode => 1, huff => 1 }, |
299 { name => ':authority', value => 'localhost', mode => 1, huff => 1 }]}); | |
297 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 300 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
298 | 301 |
299 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 302 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
300 is($frame->{headers}->{':status'}, 200, 'literal with indexing - huffman'); | 303 is($frame->{headers}->{':status'}, 200, 'literal with indexing - huffman'); |
301 | 304 |
302 # 6.2.1. Literal Header Field with Incremental Indexing -- New Name | 305 # 6.2.1. Literal Header Field with Incremental Indexing -- New Name |
303 | 306 |
304 $sid = new_stream($sess, { headers => [ | 307 $sid = new_stream($sess, { headers => [ |
305 { name => ':method', value => 'GET', mode => 2, huff => 0 }, | 308 { name => ':method', value => 'GET', mode => 2, huff => 0 }, |
306 { name => ':scheme', value => 'http', mode => 2, huff => 0 }, | 309 { name => ':scheme', value => 'http', mode => 2, huff => 0 }, |
307 { name => ':path', value => '/', mode => 2, huff => 0 }]}); | 310 { name => ':path', value => '/', mode => 2, huff => 0 }, |
311 { name => ':authority', value => 'localhost', mode => 2, huff => 0 }]}); | |
308 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 312 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
309 | 313 |
310 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 314 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
311 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new'); | 315 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new'); |
312 | 316 |
313 $sid = new_stream($sess, { headers => [ | 317 $sid = new_stream($sess, { headers => [ |
314 { name => ':method', value => 'GET', mode => 2, huff => 1 }, | 318 { name => ':method', value => 'GET', mode => 2, huff => 1 }, |
315 { name => ':scheme', value => 'http', mode => 2, huff => 1 }, | 319 { name => ':scheme', value => 'http', mode => 2, huff => 1 }, |
316 { name => ':path', value => '/', mode => 2, huff => 1 }]}); | 320 { name => ':path', value => '/', mode => 2, huff => 1 }, |
321 { name => ':authority', value => 'localhost', mode => 2, huff => 1 }]}); | |
317 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 322 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
318 | 323 |
319 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 324 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
320 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new huffman'); | 325 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new huffman'); |
321 | 326 |
322 # 6.2.2. Literal Header Field without Indexing | 327 # 6.2.2. Literal Header Field without Indexing |
323 | 328 |
324 $sid = new_stream($sess, { headers => [ | 329 $sid = new_stream($sess, { headers => [ |
325 { name => ':method', value => 'GET', mode => 3, huff => 0 }, | 330 { name => ':method', value => 'GET', mode => 3, huff => 0 }, |
326 { name => ':scheme', value => 'http', mode => 3, huff => 0 }, | 331 { name => ':scheme', value => 'http', mode => 3, huff => 0 }, |
327 { name => ':path', value => '/', mode => 3, huff => 0 }]}); | 332 { name => ':path', value => '/', mode => 3, huff => 0 }, |
333 { name => ':authority', value => 'localhost', mode => 3, huff => 0 }]}); | |
328 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 334 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
329 | 335 |
330 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 336 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
331 is($frame->{headers}->{':status'}, 200, 'literal without indexing'); | 337 is($frame->{headers}->{':status'}, 200, 'literal without indexing'); |
332 | 338 |
333 $sid = new_stream($sess, { headers => [ | 339 $sid = new_stream($sess, { headers => [ |
334 { name => ':method', value => 'GET', mode => 3, huff => 1 }, | 340 { name => ':method', value => 'GET', mode => 3, huff => 1 }, |
335 { name => ':scheme', value => 'http', mode => 3, huff => 1 }, | 341 { name => ':scheme', value => 'http', mode => 3, huff => 1 }, |
336 { name => ':path', value => '/', mode => 3, huff => 1 }]}); | 342 { name => ':path', value => '/', mode => 3, huff => 1 }, |
343 { name => ':authority', value => 'localhost', mode => 3, huff => 1 }]}); | |
337 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 344 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
338 | 345 |
339 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 346 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
340 is($frame->{headers}->{':status'}, 200, 'literal without indexing - huffman'); | 347 is($frame->{headers}->{':status'}, 200, 'literal without indexing - huffman'); |
341 | 348 |
342 # 6.2.2. Literal Header Field without Indexing -- New Name | 349 # 6.2.2. Literal Header Field without Indexing -- New Name |
343 | 350 |
344 $sid = new_stream($sess, { headers => [ | 351 $sid = new_stream($sess, { headers => [ |
345 { name => ':method', value => 'GET', mode => 4, huff => 0 }, | 352 { name => ':method', value => 'GET', mode => 4, huff => 0 }, |
346 { name => ':scheme', value => 'http', mode => 4, huff => 0 }, | 353 { name => ':scheme', value => 'http', mode => 4, huff => 0 }, |
347 { name => ':path', value => '/', mode => 4, huff => 0 }]}); | 354 { name => ':path', value => '/', mode => 4, huff => 0 }, |
355 { name => ':authority', value => 'localhost', mode => 4, huff => 0 }]}); | |
348 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 356 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
349 | 357 |
350 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 358 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
351 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new'); | 359 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new'); |
352 | 360 |
353 $sid = new_stream($sess, { headers => [ | 361 $sid = new_stream($sess, { headers => [ |
354 { name => ':method', value => 'GET', mode => 4, huff => 1 }, | 362 { name => ':method', value => 'GET', mode => 4, huff => 1 }, |
355 { name => ':scheme', value => 'http', mode => 4, huff => 1 }, | 363 { name => ':scheme', value => 'http', mode => 4, huff => 1 }, |
356 { name => ':path', value => '/', mode => 4, huff => 1 }]}); | 364 { name => ':path', value => '/', mode => 4, huff => 1 }, |
365 { name => ':authority', value => 'localhost', mode => 4, huff => 1 }]}); | |
357 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 366 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
358 | 367 |
359 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 368 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
360 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new huffman'); | 369 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new huffman'); |
361 | 370 |
362 # 6.2.3. Literal Header Field Never Indexed | 371 # 6.2.3. Literal Header Field Never Indexed |
363 | 372 |
364 $sid = new_stream($sess, { headers => [ | 373 $sid = new_stream($sess, { headers => [ |
365 { name => ':method', value => 'GET', mode => 5, huff => 0 }, | 374 { name => ':method', value => 'GET', mode => 5, huff => 0 }, |
366 { name => ':scheme', value => 'http', mode => 5, huff => 0 }, | 375 { name => ':scheme', value => 'http', mode => 5, huff => 0 }, |
367 { name => ':path', value => '/', mode => 5, huff => 0 }]}); | 376 { name => ':path', value => '/', mode => 5, huff => 0 }, |
377 { name => ':authority', value => 'localhost', mode => 5, huff => 0 }]}); | |
368 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 378 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
369 | 379 |
370 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 380 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
371 is($frame->{headers}->{':status'}, 200, 'literal never indexed'); | 381 is($frame->{headers}->{':status'}, 200, 'literal never indexed'); |
372 | 382 |
373 $sid = new_stream($sess, { headers => [ | 383 $sid = new_stream($sess, { headers => [ |
374 { name => ':method', value => 'GET', mode => 5, huff => 1 }, | 384 { name => ':method', value => 'GET', mode => 5, huff => 1 }, |
375 { name => ':scheme', value => 'http', mode => 5, huff => 1 }, | 385 { name => ':scheme', value => 'http', mode => 5, huff => 1 }, |
376 { name => ':path', value => '/', mode => 5, huff => 1 }]}); | 386 { name => ':path', value => '/', mode => 5, huff => 1 }, |
387 { name => ':authority', value => 'localhost', mode => 5, huff => 1 }]}); | |
377 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 388 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
378 | 389 |
379 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 390 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
380 is($frame->{headers}->{':status'}, 200, 'literal never indexed - huffman'); | 391 is($frame->{headers}->{':status'}, 200, 'literal never indexed - huffman'); |
381 | 392 |
382 # 6.2.2. Literal Header Field Never Indexed -- New Name | 393 # 6.2.2. Literal Header Field Never Indexed -- New Name |
383 | 394 |
384 $sid = new_stream($sess, { headers => [ | 395 $sid = new_stream($sess, { headers => [ |
385 { name => ':method', value => 'GET', mode => 6, huff => 0 }, | 396 { name => ':method', value => 'GET', mode => 6, huff => 0 }, |
386 { name => ':scheme', value => 'http', mode => 6, huff => 0 }, | 397 { name => ':scheme', value => 'http', mode => 6, huff => 0 }, |
387 { name => ':path', value => '/', mode => 6, huff => 0 }]}); | 398 { name => ':path', value => '/', mode => 6, huff => 0 }, |
399 { name => ':authority', value => 'localhost', mode => 6, huff => 0 }]}); | |
388 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 400 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
389 | 401 |
390 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 402 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
391 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new'); | 403 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new'); |
392 | 404 |
393 $sid = new_stream($sess, { headers => [ | 405 $sid = new_stream($sess, { headers => [ |
394 { name => ':method', value => 'GET', mode => 6, huff => 1 }, | 406 { name => ':method', value => 'GET', mode => 6, huff => 1 }, |
395 { name => ':scheme', value => 'http', mode => 6, huff => 1 }, | 407 { name => ':scheme', value => 'http', mode => 6, huff => 1 }, |
396 { name => ':path', value => '/', mode => 6, huff => 1 }]}); | 408 { name => ':path', value => '/', mode => 6, huff => 1 }, |
409 { name => ':authority', value => 'localhost', mode => 6, huff => 1 }]}); | |
397 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 410 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
398 | 411 |
399 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 412 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
400 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new huffman'); | 413 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new huffman'); |
401 | 414 |
404 $sess = new_session(); | 417 $sess = new_session(); |
405 $sid = new_stream($sess, { headers => [ | 418 $sid = new_stream($sess, { headers => [ |
406 { name => ':method', value => 'GET', mode => 0 }, | 419 { name => ':method', value => 'GET', mode => 0 }, |
407 { name => ':scheme', value => 'http', mode => 0 }, | 420 { name => ':scheme', value => 'http', mode => 0 }, |
408 { name => ':path', value => '/', mode => 0 }, | 421 { name => ':path', value => '/', mode => 0 }, |
422 { name => ':authority', value => 'localhost', mode => 1 }, | |
409 { name => 'referer', value => 'foo', mode => 1 }]}); | 423 { name => 'referer', value => 'foo', mode => 1 }]}); |
410 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 424 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
411 | 425 |
412 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 426 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
413 is($frame->{headers}->{'x-referer'}, 'foo', 'value with indexing - new'); | 427 is($frame->{headers}->{'x-referer'}, 'foo', 'value with indexing - new'); |
414 | 428 |
415 $sid = new_stream($sess, { headers => [ | 429 $sid = new_stream($sess, { headers => [ |
416 { name => ':method', value => 'GET', mode => 0 }, | 430 { name => ':method', value => 'GET', mode => 0 }, |
417 { name => ':scheme', value => 'http', mode => 0 }, | 431 { name => ':scheme', value => 'http', mode => 0 }, |
418 { name => ':path', value => '/', mode => 0 }, | 432 { name => ':path', value => '/', mode => 0 }, |
433 { name => ':authority', value => 'localhost', mode => 0 }, | |
419 { name => 'referer', value => 'foo', mode => 0 }]}); | 434 { name => 'referer', value => 'foo', mode => 0 }]}); |
420 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 435 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
421 | 436 |
422 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 437 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
423 is($frame->{headers}->{'x-referer'}, 'foo', 'value with indexing - indexed'); | 438 is($frame->{headers}->{'x-referer'}, 'foo', 'value with indexing - indexed'); |
424 | 439 |
425 $sid = new_stream($sess, { headers => [ | 440 $sid = new_stream($sess, { headers => [ |
426 { name => ':method', value => 'GET', mode => 0 }, | 441 { name => ':method', value => 'GET', mode => 0 }, |
427 { name => ':scheme', value => 'http', mode => 0 }, | 442 { name => ':scheme', value => 'http', mode => 0 }, |
428 { name => ':path', value => '/', mode => 0 }, | 443 { name => ':path', value => '/', mode => 0 }, |
444 { name => ':authority', value => 'localhost', mode => 0 }, | |
429 { name => 'x-foo', value => 'X-Bar', mode => 2 }]}); | 445 { name => 'x-foo', value => 'X-Bar', mode => 2 }]}); |
430 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 446 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
431 | 447 |
432 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 448 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
433 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - new'); | 449 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - new'); |
436 | 452 |
437 $sid = new_stream($sess, { headers => [ | 453 $sid = new_stream($sess, { headers => [ |
438 { name => ':method', value => 'GET', mode => 0 }, | 454 { name => ':method', value => 'GET', mode => 0 }, |
439 { name => ':scheme', value => 'http', mode => 0 }, | 455 { name => ':scheme', value => 'http', mode => 0 }, |
440 { name => ':path', value => '/', mode => 0 }, | 456 { name => ':path', value => '/', mode => 0 }, |
457 { name => ':authority', value => 'localhost', mode => 0 }, | |
441 { name => 'x-foo', value => 'X-Bar', mode => 0 }]}); | 458 { name => 'x-foo', value => 'X-Bar', mode => 0 }]}); |
442 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 459 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
443 | 460 |
444 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 461 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
445 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - indexed'); | 462 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - indexed'); |
446 | 463 |
447 # reuse literal with indexing - reused value with moved index | |
448 | |
449 $sid = new_stream($sess, { headers => [ | |
450 { name => ':method', value => 'GET', mode => 0 }, | |
451 { name => ':scheme', value => 'http', mode => 0 }, | |
452 { name => ':path', value => '/', mode => 0 }, | |
453 { name => 'referer', value => 'foo', mode => 0 }]}); | |
454 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | |
455 | |
456 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
457 is($frame->{headers}->{'x-referer'}, 'foo', 'moved index in dynamic table'); | |
458 | |
459 # 6.3. Dynamic Table Size Update | 464 # 6.3. Dynamic Table Size Update |
460 | 465 |
461 # remove one of two indexed headers from the dynamic table | 466 # remove some indexed headers from the dynamic table |
467 # by maintaining dynamic table space only for index 0 | |
462 # 'x-foo' has index 0, and 'referer' has index 1 | 468 # 'x-foo' has index 0, and 'referer' has index 1 |
463 | 469 |
464 $sid = new_stream($sess, { table_size => 61, headers => [ | 470 $sid = new_stream($sess, { table_size => 61, headers => [ |
465 { name => ':method', value => 'GET', mode => 0 }, | 471 { name => ':method', value => 'GET', mode => 0 }, |
466 { name => ':scheme', value => 'http', mode => 0 }, | 472 { name => ':scheme', value => 'http', mode => 0 }, |
467 { name => ':path', value => '/', mode => 0 }, | 473 { name => ':path', value => '/', mode => 0 }, |
468 { name => 'x-foo', value => 'X-Bar', mode => 0 }]}); | 474 { name => 'x-foo', value => 'X-Bar', mode => 0 }, |
475 { name => ':authority', value => 'localhost', mode => 1 }]}); | |
469 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 476 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
470 | 477 |
471 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 478 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
472 isnt($frame, undef, 'updated table size - remaining index'); | 479 isnt($frame, undef, 'updated table size - remaining index'); |
473 | 480 |
474 $sid = new_stream($sess, { headers => [ | 481 $sid = new_stream($sess, { headers => [ |
475 { name => ':method', value => 'GET', mode => 0 }, | 482 { name => ':method', value => 'GET', mode => 0 }, |
476 { name => ':scheme', value => 'http', mode => 0 }, | 483 { name => ':scheme', value => 'http', mode => 0 }, |
477 { name => ':path', value => '/', mode => 0 }, | 484 { name => ':path', value => '/', mode => 0 }, |
485 { name => ':authority', value => 'localhost', mode => 1 }, | |
478 { name => 'referer', value => 'foo', mode => 0 }]}); | 486 { name => 'referer', value => 'foo', mode => 0 }]}); |
479 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 487 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
480 | 488 |
481 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 489 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
482 is($frame, undef, 'updated table size - invalid index'); | 490 is($frame, undef, 'updated table size - invalid index'); |
523 $sess = new_session(); | 531 $sess = new_session(); |
524 $sid = new_stream($sess, { headers => [ | 532 $sid = new_stream($sess, { headers => [ |
525 { name => ':method', value => 'GET', mode => 0 }, | 533 { name => ':method', value => 'GET', mode => 0 }, |
526 { name => ':scheme', value => 'http', mode => 0 }, | 534 { name => ':scheme', value => 'http', mode => 0 }, |
527 { name => ':path', value => '/t1.html', mode => 1 }, | 535 { name => ':path', value => '/t1.html', mode => 1 }, |
536 { name => ':authority', value => 'localhost', mode => 1 }, | |
528 { name => 'range', value => 'bytes=10-19', mode => 1 }]}); | 537 { name => 'range', value => 'bytes=10-19', mode => 1 }]}); |
529 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 538 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
530 | 539 |
531 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 540 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
532 is($frame->{headers}->{':status'}, 206, 'range - HEADERS status'); | 541 is($frame->{headers}->{':status'}, 206, 'range - HEADERS status'); |
589 | 598 |
590 $sess = new_session(); | 599 $sess = new_session(); |
591 $sid = new_stream($sess, { continuation => 1, headers => [ | 600 $sid = new_stream($sess, { continuation => 1, headers => [ |
592 { name => ':method', value => 'HEAD', mode => 1 }, | 601 { name => ':method', value => 'HEAD', mode => 1 }, |
593 { name => ':scheme', value => 'http', mode => 0 }, | 602 { name => ':scheme', value => 'http', mode => 0 }, |
594 { name => ':path', value => '/', mode => 0 }]}); | 603 { name => ':path', value => '/', mode => 0 }, |
604 { name => ':authority', value => 'localhost', mode => 1 }]}); | |
595 h2_continue($sess, $sid, { continuation => 1, headers => [ | 605 h2_continue($sess, $sid, { continuation => 1, headers => [ |
596 { name => 'x-foo', value => 'X-Bar', mode => 2 }]}); | 606 { name => 'x-foo', value => 'X-Bar', mode => 2 }]}); |
597 h2_continue($sess, $sid, { headers => [ | 607 h2_continue($sess, $sid, { headers => [ |
598 { name => 'referer', value => 'foo', mode => 2 }]}); | 608 { name => 'referer', value => 'foo', mode => 2 }]}); |
599 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 609 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
609 | 619 |
610 $sess = new_session(); | 620 $sess = new_session(); |
611 $sid = new_stream($sess, { padding => 42, headers => [ | 621 $sid = new_stream($sess, { padding => 42, headers => [ |
612 { name => ':method', value => 'GET', mode => 0 }, | 622 { name => ':method', value => 'GET', mode => 0 }, |
613 { name => ':scheme', value => 'http', mode => 0 }, | 623 { name => ':scheme', value => 'http', mode => 0 }, |
614 { name => ':path', value => '/', mode => 0 }]}); | 624 { name => ':path', value => '/', mode => 0 }, |
625 { name => ':authority', value => 'localhost', mode => 1 }]}); | |
615 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 626 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
616 | 627 |
617 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 628 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
618 is($frame->{headers}->{':status'}, 200, 'padding - HEADERS status'); | 629 is($frame->{headers}->{':status'}, 200, 'padding - HEADERS status'); |
619 | 630 |
620 $sid = new_stream($sess, { headers => [ | 631 $sid = new_stream($sess, { headers => [ |
621 { name => ':method', value => 'GET', mode => 0 }, | 632 { name => ':method', value => 'GET', mode => 0 }, |
622 { name => ':scheme', value => 'http', mode => 0 }, | 633 { name => ':scheme', value => 'http', mode => 0 }, |
623 { name => ':path', value => '/', mode => 0 }]}); | 634 { name => ':path', value => '/', mode => 0 }, |
635 { name => ':authority', value => 'localhost', mode => 1 }]}); | |
624 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 636 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
625 | 637 |
626 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 638 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
627 is($frame->{headers}->{':status'}, 200, 'padding - next stream'); | 639 is($frame->{headers}->{':status'}, 200, 'padding - next stream'); |
628 | 640 |
635 $sess = new_session(); | 647 $sess = new_session(); |
636 $sid = new_stream($sess, { headers => [ | 648 $sid = new_stream($sess, { headers => [ |
637 { name => ':method', value => 'GET', mode => 0 }, | 649 { name => ':method', value => 'GET', mode => 0 }, |
638 { name => ':scheme', value => 'http', mode => 0 }, | 650 { name => ':scheme', value => 'http', mode => 0 }, |
639 { name => ':path', value => '/cookie', mode => 2 }, | 651 { name => ':path', value => '/cookie', mode => 2 }, |
652 { name => ':authority', value => 'localhost', mode => 1 }, | |
640 { name => 'cookie', value => 'a=b', mode => 2}, | 653 { name => 'cookie', value => 'a=b', mode => 2}, |
641 { name => 'cookie', value => 'c=d', mode => 2}]}); | 654 { name => 'cookie', value => 'c=d', mode => 2}]}); |
642 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 655 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
643 | 656 |
644 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 657 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
660 $sess = new_session(); | 673 $sess = new_session(); |
661 $sid = new_stream($sess, { headers => [ | 674 $sid = new_stream($sess, { headers => [ |
662 { name => ':method', value => 'GET', mode => 0 }, | 675 { name => ':method', value => 'GET', mode => 0 }, |
663 { name => ':scheme', value => 'http', mode => 0 }, | 676 { name => ':scheme', value => 'http', mode => 0 }, |
664 { name => ':path', value => '/proxy/cookie', mode => 2 }, | 677 { name => ':path', value => '/proxy/cookie', mode => 2 }, |
678 { name => ':authority', value => 'localhost', mode => 1 }, | |
665 { name => 'cookie', value => 'a=b', mode => 2 }, | 679 { name => 'cookie', value => 'a=b', mode => 2 }, |
666 { name => 'cookie', value => 'c=d', mode => 2 }]}); | 680 { name => 'cookie', value => 'c=d', mode => 2 }]}); |
667 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 681 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
668 | 682 |
669 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 683 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
836 $sess = new_session(); | 850 $sess = new_session(); |
837 $sid = new_stream($sess, { headers => [ | 851 $sid = new_stream($sess, { headers => [ |
838 { name => ':method', value => 'GET', mode => 0 }, | 852 { name => ':method', value => 'GET', mode => 0 }, |
839 { name => ':scheme', value => 'http', mode => 0 }, | 853 { name => ':scheme', value => 'http', mode => 0 }, |
840 { name => ':path', value => '/gzip.html' }, | 854 { name => ':path', value => '/gzip.html' }, |
855 { name => ':authority', value => 'localhost', mode => 1 }, | |
841 { name => 'accept-encoding', value => 'gzip' }]}); | 856 { name => 'accept-encoding', value => 'gzip' }]}); |
842 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 857 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
843 | 858 |
844 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 859 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
845 is($frame->{headers}->{'content-encoding'}, 'gzip', 'gzip - encoding'); | 860 is($frame->{headers}->{'content-encoding'}, 'gzip', 'gzip - encoding'); |
864 | 879 |
865 $sid = new_stream($sess, { headers => [ | 880 $sid = new_stream($sess, { headers => [ |
866 { name => ':method', value => 'GET', mode => 0 }, | 881 { name => ':method', value => 'GET', mode => 0 }, |
867 { name => ':scheme', value => 'http', mode => 0 }, | 882 { name => ':scheme', value => 'http', mode => 0 }, |
868 { name => ':path', value => '/proxy2/t2.html?2' }, | 883 { name => ':path', value => '/proxy2/t2.html?2' }, |
884 { name => ':authority', value => 'localhost', mode => 1 }, | |
869 { name => 'if-none-match', value => $etag }]}); | 885 { name => 'if-none-match', value => $etag }]}); |
870 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 886 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
871 | 887 |
872 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 888 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
873 is($frame->{headers}->{':status'}, 304, 'proxy cache conditional'); | 889 is($frame->{headers}->{':status'}, 304, 'proxy cache conditional'); |
1355 local $TODO = 'not yet'; | 1371 local $TODO = 'not yet'; |
1356 | 1372 |
1357 $sess = new_session(); | 1373 $sess = new_session(); |
1358 $sid = new_stream($sess, { headers => [ | 1374 $sid = new_stream($sess, { headers => [ |
1359 { name => ':method', value => 'GET', mode => 0 }, | 1375 { name => ':method', value => 'GET', mode => 0 }, |
1360 { name => ':path', value => '/', mode => 0 }]}); | 1376 { name => ':path', value => '/', mode => 0 }, |
1377 { name => ':authority', value => 'localhost', mode => 1 }]}); | |
1361 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 1378 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
1362 | 1379 |
1363 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 1380 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
1364 is($frame->{headers}->{':status'}, 400, 'incomplete headers'); | 1381 is($frame->{headers}->{':status'}, 400, 'incomplete headers'); |
1365 | 1382 |