Mercurial > hg > nginx-tests
comparison h2.t @ 743:9cd16dea1392
Tests: more HTTP/2 HPACK tests with multibyte indices.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Mon, 19 Oct 2015 17:05:20 +0300 |
parents | fc21544a8640 |
children | 51a413e673d6 |
comparison
equal
deleted
inserted
replaced
742:fc21544a8640 | 743:9cd16dea1392 |
---|---|
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(228); | 35 ->has_daemon('openssl')->plan(232); |
36 | 36 |
37 # Some systems have a bug in not treating zero writev iovcnt as EINVAL | 37 # Some systems have a bug in not treating zero writev iovcnt as EINVAL |
38 | 38 |
39 $t->todo_alerts() if $^O eq 'darwin'; | 39 $t->todo_alerts() if $^O eq 'darwin'; |
40 | 40 |
471 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 471 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
472 | 472 |
473 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 473 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
474 is($frame->{headers}->{':status'}, 200, 'literal without indexing - huffman'); | 474 is($frame->{headers}->{':status'}, 200, 'literal without indexing - huffman'); |
475 | 475 |
476 TODO: { | |
477 local $TODO = 'not yet'; | |
478 | |
479 $sess = new_session(); | |
480 $sid = new_stream($sess, { headers => [ | |
481 { name => ':method', value => 'GET', mode => 3, huff => 0 }, | |
482 { name => ':scheme', value => 'http', mode => 3, huff => 0 }, | |
483 { name => ':path', value => '/', mode => 3, huff => 0 }, | |
484 { name => ':authority', value => 'localhost', mode => 3, huff => 0 }, | |
485 { name => 'referer', value => 'foo', mode => 3, huff => 0 }]}); | |
486 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | |
487 | |
488 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
489 is($frame->{headers}->{':status'}, 200, | |
490 'literal without indexing - multibyte index'); | |
491 is($frame->{headers}->{'x-referer'}, 'foo', | |
492 'literal without indexing - multibyte index value'); | |
493 | |
494 } | |
495 | |
476 # 6.2.2. Literal Header Field without Indexing -- New Name | 496 # 6.2.2. Literal Header Field without Indexing -- New Name |
477 | 497 |
478 $sess = new_session(); | 498 $sess = new_session(); |
479 $sid = new_stream($sess, { headers => [ | 499 $sid = new_stream($sess, { headers => [ |
480 { name => ':method', value => 'GET', mode => 4, huff => 0 }, | 500 { name => ':method', value => 'GET', mode => 4, huff => 0 }, |
519 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 539 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
520 | 540 |
521 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 541 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
522 is($frame->{headers}->{':status'}, 200, 'literal never indexed - huffman'); | 542 is($frame->{headers}->{':status'}, 200, 'literal never indexed - huffman'); |
523 | 543 |
544 $sess = new_session(); | |
545 $sid = new_stream($sess, { headers => [ | |
546 { name => ':method', value => 'GET', mode => 5, huff => 0 }, | |
547 { name => ':scheme', value => 'http', mode => 5, huff => 0 }, | |
548 { name => ':path', value => '/', mode => 5, huff => 0 }, | |
549 { name => ':authority', value => 'localhost', mode => 5, huff => 0 }, | |
550 { name => 'referer', value => 'foo', mode => 5, huff => 0 }]}); | |
551 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | |
552 | |
553 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | |
554 is($frame->{headers}->{':status'}, 200, | |
555 'literal never indexed - multibyte index'); | |
556 is($frame->{headers}->{'x-referer'}, 'foo', | |
557 'literal never indexed - multibyte index value'); | |
558 | |
524 # 6.2.2. Literal Header Field Never Indexed -- New Name | 559 # 6.2.2. Literal Header Field Never Indexed -- New Name |
525 | 560 |
526 $sess = new_session(); | 561 $sess = new_session(); |
527 $sid = new_stream($sess, { headers => [ | 562 $sid = new_stream($sess, { headers => [ |
528 { name => ':method', value => 'GET', mode => 6, huff => 0 }, | 563 { name => ':method', value => 'GET', mode => 6, huff => 0 }, |
543 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 578 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
544 | 579 |
545 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 580 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
546 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new huffman'); | 581 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new huffman'); |
547 | 582 |
548 # reuse literal with indexing | 583 # reuse literal with multibyte indexing |
549 | 584 |
550 $sess = new_session(); | 585 $sess = new_session(); |
551 $sid = new_stream($sess, { headers => [ | 586 $sid = new_stream($sess, { headers => [ |
552 { name => ':method', value => 'GET', mode => 0 }, | 587 { name => ':method', value => 'GET', mode => 0 }, |
553 { name => ':scheme', value => 'http', mode => 0 }, | 588 { name => ':scheme', value => 'http', mode => 0 }, |
580 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 615 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
581 | 616 |
582 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 617 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
583 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - new'); | 618 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - new'); |
584 | 619 |
585 # reuse literal with indexing - reused name | 620 # reuse literal with multibyte indexing - reused name |
586 | 621 |
587 $sid = new_stream($sess, { headers => [ | 622 $sid = new_stream($sess, { headers => [ |
588 { name => ':method', value => 'GET', mode => 0 }, | 623 { name => ':method', value => 'GET', mode => 0 }, |
589 { name => ':scheme', value => 'http', mode => 0 }, | 624 { name => ':scheme', value => 'http', mode => 0 }, |
590 { name => ':path', value => '/', mode => 0 }, | 625 { name => ':path', value => '/', mode => 0 }, |
593 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 628 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); |
594 | 629 |
595 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 630 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
596 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - indexed'); | 631 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - indexed'); |
597 | 632 |
598 # reuse literal with indexing - reused name only | 633 # reuse literal with multibyte indexing - reused name only |
599 | 634 |
600 $sid = new_stream($sess, { headers => [ | 635 $sid = new_stream($sess, { headers => [ |
601 { name => ':method', value => 'GET', mode => 0 }, | 636 { name => ':method', value => 'GET', mode => 0 }, |
602 { name => ':scheme', value => 'http', mode => 0 }, | 637 { name => ':scheme', value => 'http', mode => 0 }, |
603 { name => ':path', value => '/', mode => 0 }, | 638 { name => ':path', value => '/', mode => 0 }, |