comparison h2_headers.t @ 1020:196d33c2bb45

Tests: removed TODO and try_run() checks for legacy versions. Also removed now unused spdy.t and shmem prerequisite.
author Andrey Zelenkov <zelenkov@nginx.com>
date Wed, 31 Aug 2016 18:21:07 +0300
parents 882267679006
children e2adef0c3faa
comparison
equal deleted inserted replaced
1019:41139d6f8b7b 1020:196d33c2bb45
403 { name => 'x-foo', value => 'aaaaa', mode => 2 }]}); 403 { name => 'x-foo', value => 'aaaaa', mode => 2 }]});
404 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); 404 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
405 405
406 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 406 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
407 is($frame->{headers}->{'x-sent-foo'}, 'aaaaa', 'well known chars'); 407 is($frame->{headers}->{'x-sent-foo'}, 'aaaaa', 'well known chars');
408
409 TODO: {
410 local $TODO = 'not yet' unless $t->has_version('1.9.12');
411
412 unlike($s->{headers}, qr/aaaaa/, 'well known chars - huffman encoding'); 408 unlike($s->{headers}, qr/aaaaa/, 'well known chars - huffman encoding');
413
414 }
415 409
416 # response header field with huffman encoding - complete table mod \0, CR, LF 410 # response header field with huffman encoding - complete table mod \0, CR, LF
417 # first saturate with short-encoded characters (NB: implementation detail) 411 # first saturate with short-encoded characters (NB: implementation detail)
418 412
419 my $field = pack "C*", ((map { 97 } (1 .. 862)), 1 .. 9, 11, 12, 14 .. 255); 413 my $field = pack "C*", ((map { 97 } (1 .. 862)), 1 .. 9, 11, 12, 14 .. 255);
427 { name => 'x-foo', value => $field, mode => 2 }]}); 421 { name => 'x-foo', value => $field, mode => 2 }]});
428 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); 422 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
429 423
430 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 424 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
431 is($frame->{headers}->{'x-sent-foo'}, $field, 'all chars'); 425 is($frame->{headers}->{'x-sent-foo'}, $field, 'all chars');
432
433 TODO: {
434 local $TODO = 'not yet' unless $t->has_version('1.9.12');
435
436 unlike($s->{headers}, qr/abcde/, 'all chars - huffman encoding'); 426 unlike($s->{headers}, qr/abcde/, 'all chars - huffman encoding');
437
438 }
439 427
440 # 6.3. Dynamic Table Size Update 428 # 6.3. Dynamic Table Size Update
441 429
442 # remove some indexed headers from the dynamic table 430 # remove some indexed headers from the dynamic table
443 # by maintaining dynamic table space only for index 0 431 # by maintaining dynamic table space only for index 0
655 @data = sort { $a <=> $b } map { $_->{length} } @data; 643 @data = sort { $a <=> $b } map { $_->{length} } @data;
656 cmp_ok($data[-1], '<=', 2**14, 'response header frames limited'); 644 cmp_ok($data[-1], '<=', 2**14, 'response header frames limited');
657 645
658 # response header frame sent in parts 646 # response header frame sent in parts
659 647
660 TODO: {
661 local $TODO = 'not yet' unless $t->has_version('1.9.7');
662
663 $s = Test::Nginx::HTTP2->new(port(8082)); 648 $s = Test::Nginx::HTTP2->new(port(8082));
664 $s->h2_settings(0, 0x5 => 2**17); 649 $s->h2_settings(0, 0x5 => 2**17);
665 650
666 $sid = $s->new_stream({ path => '/frame_size?h=' . 'x' x 2**15 }); 651 $sid = $s->new_stream({ path => '/frame_size?h=' . 'x' x 2**15 });
667 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]); 652 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]);
687 my ($lengths) = sort { $b <=> $a } map { $_->{length} } @data; 672 my ($lengths) = sort { $b <=> $a } map { $_->{length} } @data;
688 cmp_ok($lengths, '<=', 16384, 'response header split - max size'); 673 cmp_ok($lengths, '<=', 16384, 'response header split - max size');
689 674
690 is(length join('', @{@$frames[-1]->{headers}->{'x-longheader'}}), 98304, 675 is(length join('', @{@$frames[-1]->{headers}->{'x-longheader'}}), 98304,
691 'response header split - headers'); 676 'response header split - headers');
692
693 }
694 677
695 # max_field_size - header field name 678 # max_field_size - header field name
696 679
697 $s = Test::Nginx::HTTP2->new(port(8084)); 680 $s = Test::Nginx::HTTP2->new(port(8084));
698 $sid = $s->new_stream({ headers => [ 681 $sid = $s->new_stream({ headers => [
949 is($frame->{flags}, 0, 'newline in request header - RST_STREAM flags'); 932 is($frame->{flags}, 0, 'newline in request header - RST_STREAM flags');
950 is($frame->{code}, 1, 'newline in request header - RST_STREAM code'); 933 is($frame->{code}, 1, 'newline in request header - RST_STREAM code');
951 934
952 # invalid header name as seen with underscore should not lead to ignoring rest 935 # invalid header name as seen with underscore should not lead to ignoring rest
953 936
954 TODO: {
955 local $TODO = 'not yet' unless $t->has_version('1.9.7');
956
957 $s = Test::Nginx::HTTP2->new(); 937 $s = Test::Nginx::HTTP2->new();
958 $sid = $s->new_stream({ headers => [ 938 $sid = $s->new_stream({ headers => [
959 { name => ':method', value => 'GET', mode => 0 }, 939 { name => ':method', value => 'GET', mode => 0 },
960 { name => ':scheme', value => 'http', mode => 0 }, 940 { name => ':scheme', value => 'http', mode => 0 },
961 { name => ':path', value => '/', mode => 0 }, 941 { name => ':path', value => '/', mode => 0 },
964 { name => 'referer', value => "see-this", mode => 1 }]}); 944 { name => 'referer', value => "see-this", mode => 1 }]});
965 $frames = $s->read(all => [{ type => 'HEADERS' }]); 945 $frames = $s->read(all => [{ type => 'HEADERS' }]);
966 946
967 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; 947 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
968 is($frame->{headers}->{'x-referer'}, 'see-this', 'after invalid header name'); 948 is($frame->{headers}->{'x-referer'}, 'see-this', 'after invalid header name');
969
970 }
971 949
972 # missing mandatory request header ':scheme' 950 # missing mandatory request header ':scheme'
973 951
974 TODO: { 952 TODO: {
975 local $TODO = 'not yet'; 953 local $TODO = 'not yet';