Mercurial > hg > nginx-tests
comparison h2.t @ 742:fc21544a8640
Tests: isolated simple HTTP/2 HPACK tests.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 19 Oct 2015 17:04:42 +0300 |
parents | a2e7f5ff3aa8 |
children | 9cd16dea1392 |
comparison
equal
deleted
inserted
replaced
741:a2e7f5ff3aa8 | 742:fc21544a8640 |
---|---|
388 | 388 |
389 # various HEADERS compression/encoding, see hpack() for mode details | 389 # various HEADERS compression/encoding, see hpack() for mode details |
390 | 390 |
391 # 6.1. Indexed Header Field Representation | 391 # 6.1. Indexed Header Field Representation |
392 | 392 |
393 $sess = new_session(); | |
393 $sid = new_stream($sess, { headers => [ | 394 $sid = new_stream($sess, { headers => [ |
394 { name => ':method', value => 'GET', mode => 0 }, | 395 { name => ':method', value => 'GET', mode => 0 }, |
395 { name => ':scheme', value => 'http', mode => 0 }, | 396 { name => ':scheme', value => 'http', mode => 0 }, |
396 { name => ':path', value => '/', mode => 0 }, | 397 { name => ':path', value => '/', mode => 0 }, |
397 { name => ':authority', value => 'localhost', mode => 1 }]}); | 398 { name => ':authority', value => 'localhost', mode => 1 }]}); |
400 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 401 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
401 is($frame->{headers}->{':status'}, 200, 'indexed header field'); | 402 is($frame->{headers}->{':status'}, 200, 'indexed header field'); |
402 | 403 |
403 # 6.2.1. Literal Header Field with Incremental Indexing | 404 # 6.2.1. Literal Header Field with Incremental Indexing |
404 | 405 |
406 $sess = new_session(); | |
405 $sid = new_stream($sess, { headers => [ | 407 $sid = new_stream($sess, { headers => [ |
406 { name => ':method', value => 'GET', mode => 1, huff => 0 }, | 408 { name => ':method', value => 'GET', mode => 1, huff => 0 }, |
407 { name => ':scheme', value => 'http', mode => 1, huff => 0 }, | 409 { name => ':scheme', value => 'http', mode => 1, huff => 0 }, |
408 { name => ':path', value => '/', mode => 1, huff => 0 }, | 410 { name => ':path', value => '/', mode => 1, huff => 0 }, |
409 { name => ':authority', value => 'localhost', mode => 1, huff => 0 }]}); | 411 { name => ':authority', value => 'localhost', mode => 1, huff => 0 }]}); |
410 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 412 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
411 | 413 |
412 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 414 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
413 is($frame->{headers}->{':status'}, 200, 'literal with indexing'); | 415 is($frame->{headers}->{':status'}, 200, 'literal with indexing'); |
414 | 416 |
417 $sess = new_session(); | |
415 $sid = new_stream($sess, { headers => [ | 418 $sid = new_stream($sess, { headers => [ |
416 { name => ':method', value => 'GET', mode => 1, huff => 1 }, | 419 { name => ':method', value => 'GET', mode => 1, huff => 1 }, |
417 { name => ':scheme', value => 'http', mode => 1, huff => 1 }, | 420 { name => ':scheme', value => 'http', mode => 1, huff => 1 }, |
418 { name => ':path', value => '/', mode => 1, huff => 1 }, | 421 { name => ':path', value => '/', mode => 1, huff => 1 }, |
419 { name => ':authority', value => 'localhost', mode => 1, huff => 1 }]}); | 422 { name => ':authority', value => 'localhost', mode => 1, huff => 1 }]}); |
422 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 425 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
423 is($frame->{headers}->{':status'}, 200, 'literal with indexing - huffman'); | 426 is($frame->{headers}->{':status'}, 200, 'literal with indexing - huffman'); |
424 | 427 |
425 # 6.2.1. Literal Header Field with Incremental Indexing -- New Name | 428 # 6.2.1. Literal Header Field with Incremental Indexing -- New Name |
426 | 429 |
430 $sess = new_session(); | |
427 $sid = new_stream($sess, { headers => [ | 431 $sid = new_stream($sess, { headers => [ |
428 { name => ':method', value => 'GET', mode => 2, huff => 0 }, | 432 { name => ':method', value => 'GET', mode => 2, huff => 0 }, |
429 { name => ':scheme', value => 'http', mode => 2, huff => 0 }, | 433 { name => ':scheme', value => 'http', mode => 2, huff => 0 }, |
430 { name => ':path', value => '/', mode => 2, huff => 0 }, | 434 { name => ':path', value => '/', mode => 2, huff => 0 }, |
431 { name => ':authority', value => 'localhost', mode => 2, huff => 0 }]}); | 435 { name => ':authority', value => 'localhost', mode => 2, huff => 0 }]}); |
432 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 436 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
433 | 437 |
434 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 438 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
435 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new'); | 439 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new'); |
436 | 440 |
441 $sess = new_session(); | |
437 $sid = new_stream($sess, { headers => [ | 442 $sid = new_stream($sess, { headers => [ |
438 { name => ':method', value => 'GET', mode => 2, huff => 1 }, | 443 { name => ':method', value => 'GET', mode => 2, huff => 1 }, |
439 { name => ':scheme', value => 'http', mode => 2, huff => 1 }, | 444 { name => ':scheme', value => 'http', mode => 2, huff => 1 }, |
440 { name => ':path', value => '/', mode => 2, huff => 1 }, | 445 { name => ':path', value => '/', mode => 2, huff => 1 }, |
441 { name => ':authority', value => 'localhost', mode => 2, huff => 1 }]}); | 446 { name => ':authority', value => 'localhost', mode => 2, huff => 1 }]}); |
444 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 449 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
445 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new huffman'); | 450 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new huffman'); |
446 | 451 |
447 # 6.2.2. Literal Header Field without Indexing | 452 # 6.2.2. Literal Header Field without Indexing |
448 | 453 |
454 $sess = new_session(); | |
449 $sid = new_stream($sess, { headers => [ | 455 $sid = new_stream($sess, { headers => [ |
450 { name => ':method', value => 'GET', mode => 3, huff => 0 }, | 456 { name => ':method', value => 'GET', mode => 3, huff => 0 }, |
451 { name => ':scheme', value => 'http', mode => 3, huff => 0 }, | 457 { name => ':scheme', value => 'http', mode => 3, huff => 0 }, |
452 { name => ':path', value => '/', mode => 3, huff => 0 }, | 458 { name => ':path', value => '/', mode => 3, huff => 0 }, |
453 { name => ':authority', value => 'localhost', mode => 3, huff => 0 }]}); | 459 { name => ':authority', value => 'localhost', mode => 3, huff => 0 }]}); |
454 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 460 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
455 | 461 |
456 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 462 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
457 is($frame->{headers}->{':status'}, 200, 'literal without indexing'); | 463 is($frame->{headers}->{':status'}, 200, 'literal without indexing'); |
458 | 464 |
465 $sess = new_session(); | |
459 $sid = new_stream($sess, { headers => [ | 466 $sid = new_stream($sess, { headers => [ |
460 { name => ':method', value => 'GET', mode => 3, huff => 1 }, | 467 { name => ':method', value => 'GET', mode => 3, huff => 1 }, |
461 { name => ':scheme', value => 'http', mode => 3, huff => 1 }, | 468 { name => ':scheme', value => 'http', mode => 3, huff => 1 }, |
462 { name => ':path', value => '/', mode => 3, huff => 1 }, | 469 { name => ':path', value => '/', mode => 3, huff => 1 }, |
463 { name => ':authority', value => 'localhost', mode => 3, huff => 1 }]}); | 470 { name => ':authority', value => 'localhost', mode => 3, huff => 1 }]}); |
466 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 473 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
467 is($frame->{headers}->{':status'}, 200, 'literal without indexing - huffman'); | 474 is($frame->{headers}->{':status'}, 200, 'literal without indexing - huffman'); |
468 | 475 |
469 # 6.2.2. Literal Header Field without Indexing -- New Name | 476 # 6.2.2. Literal Header Field without Indexing -- New Name |
470 | 477 |
478 $sess = new_session(); | |
471 $sid = new_stream($sess, { headers => [ | 479 $sid = new_stream($sess, { headers => [ |
472 { name => ':method', value => 'GET', mode => 4, huff => 0 }, | 480 { name => ':method', value => 'GET', mode => 4, huff => 0 }, |
473 { name => ':scheme', value => 'http', mode => 4, huff => 0 }, | 481 { name => ':scheme', value => 'http', mode => 4, huff => 0 }, |
474 { name => ':path', value => '/', mode => 4, huff => 0 }, | 482 { name => ':path', value => '/', mode => 4, huff => 0 }, |
475 { name => ':authority', value => 'localhost', mode => 4, huff => 0 }]}); | 483 { name => ':authority', value => 'localhost', mode => 4, huff => 0 }]}); |
476 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 484 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
477 | 485 |
478 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 486 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
479 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new'); | 487 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new'); |
480 | 488 |
489 $sess = new_session(); | |
481 $sid = new_stream($sess, { headers => [ | 490 $sid = new_stream($sess, { headers => [ |
482 { name => ':method', value => 'GET', mode => 4, huff => 1 }, | 491 { name => ':method', value => 'GET', mode => 4, huff => 1 }, |
483 { name => ':scheme', value => 'http', mode => 4, huff => 1 }, | 492 { name => ':scheme', value => 'http', mode => 4, huff => 1 }, |
484 { name => ':path', value => '/', mode => 4, huff => 1 }, | 493 { name => ':path', value => '/', mode => 4, huff => 1 }, |
485 { name => ':authority', value => 'localhost', mode => 4, huff => 1 }]}); | 494 { name => ':authority', value => 'localhost', mode => 4, huff => 1 }]}); |
488 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 497 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
489 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new huffman'); | 498 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new huffman'); |
490 | 499 |
491 # 6.2.3. Literal Header Field Never Indexed | 500 # 6.2.3. Literal Header Field Never Indexed |
492 | 501 |
502 $sess = new_session(); | |
493 $sid = new_stream($sess, { headers => [ | 503 $sid = new_stream($sess, { headers => [ |
494 { name => ':method', value => 'GET', mode => 5, huff => 0 }, | 504 { name => ':method', value => 'GET', mode => 5, huff => 0 }, |
495 { name => ':scheme', value => 'http', mode => 5, huff => 0 }, | 505 { name => ':scheme', value => 'http', mode => 5, huff => 0 }, |
496 { name => ':path', value => '/', mode => 5, huff => 0 }, | 506 { name => ':path', value => '/', mode => 5, huff => 0 }, |
497 { name => ':authority', value => 'localhost', mode => 5, huff => 0 }]}); | 507 { name => ':authority', value => 'localhost', mode => 5, huff => 0 }]}); |
498 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 508 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
499 | 509 |
500 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 510 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
501 is($frame->{headers}->{':status'}, 200, 'literal never indexed'); | 511 is($frame->{headers}->{':status'}, 200, 'literal never indexed'); |
502 | 512 |
513 $sess = new_session(); | |
503 $sid = new_stream($sess, { headers => [ | 514 $sid = new_stream($sess, { headers => [ |
504 { name => ':method', value => 'GET', mode => 5, huff => 1 }, | 515 { name => ':method', value => 'GET', mode => 5, huff => 1 }, |
505 { name => ':scheme', value => 'http', mode => 5, huff => 1 }, | 516 { name => ':scheme', value => 'http', mode => 5, huff => 1 }, |
506 { name => ':path', value => '/', mode => 5, huff => 1 }, | 517 { name => ':path', value => '/', mode => 5, huff => 1 }, |
507 { name => ':authority', value => 'localhost', mode => 5, huff => 1 }]}); | 518 { name => ':authority', value => 'localhost', mode => 5, huff => 1 }]}); |
510 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 521 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
511 is($frame->{headers}->{':status'}, 200, 'literal never indexed - huffman'); | 522 is($frame->{headers}->{':status'}, 200, 'literal never indexed - huffman'); |
512 | 523 |
513 # 6.2.2. Literal Header Field Never Indexed -- New Name | 524 # 6.2.2. Literal Header Field Never Indexed -- New Name |
514 | 525 |
526 $sess = new_session(); | |
515 $sid = new_stream($sess, { headers => [ | 527 $sid = new_stream($sess, { headers => [ |
516 { name => ':method', value => 'GET', mode => 6, huff => 0 }, | 528 { name => ':method', value => 'GET', mode => 6, huff => 0 }, |
517 { name => ':scheme', value => 'http', mode => 6, huff => 0 }, | 529 { name => ':scheme', value => 'http', mode => 6, huff => 0 }, |
518 { name => ':path', value => '/', mode => 6, huff => 0 }, | 530 { name => ':path', value => '/', mode => 6, huff => 0 }, |
519 { name => ':authority', value => 'localhost', mode => 6, huff => 0 }]}); | 531 { name => ':authority', value => 'localhost', mode => 6, huff => 0 }]}); |
520 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 532 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
521 | 533 |
522 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 534 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
523 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new'); | 535 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new'); |
524 | 536 |
537 $sess = new_session(); | |
525 $sid = new_stream($sess, { headers => [ | 538 $sid = new_stream($sess, { headers => [ |
526 { name => ':method', value => 'GET', mode => 6, huff => 1 }, | 539 { name => ':method', value => 'GET', mode => 6, huff => 1 }, |
527 { name => ':scheme', value => 'http', mode => 6, huff => 1 }, | 540 { name => ':scheme', value => 'http', mode => 6, huff => 1 }, |
528 { name => ':path', value => '/', mode => 6, huff => 1 }, | 541 { name => ':path', value => '/', mode => 6, huff => 1 }, |
529 { name => ':authority', value => 'localhost', mode => 6, huff => 1 }]}); | 542 { name => ':authority', value => 'localhost', mode => 6, huff => 1 }]}); |
555 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 568 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
556 | 569 |
557 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 570 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
558 is($frame->{headers}->{'x-referer'}, 'foo', 'value with indexing - indexed'); | 571 is($frame->{headers}->{'x-referer'}, 'foo', 'value with indexing - indexed'); |
559 | 572 |
573 $sess = new_session(); | |
560 $sid = new_stream($sess, { headers => [ | 574 $sid = new_stream($sess, { headers => [ |
561 { name => ':method', value => 'GET', mode => 0 }, | 575 { name => ':method', value => 'GET', mode => 0 }, |
562 { name => ':scheme', value => 'http', mode => 0 }, | 576 { name => ':scheme', value => 'http', mode => 0 }, |
563 { name => ':path', value => '/', mode => 0 }, | 577 { name => ':path', value => '/', mode => 0 }, |
564 { name => ':authority', value => 'localhost', mode => 0 }, | 578 { name => ':authority', value => 'localhost', mode => 1 }, |
565 { name => 'x-foo', value => 'X-Bar', mode => 2 }]}); | 579 { name => 'x-foo', value => 'X-Bar', mode => 2 }]}); |
566 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 580 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
567 | 581 |
568 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 582 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
569 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - new'); | 583 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - new'); |