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 },