comparison h2_headers.t @ 974:882267679006

Tests: simplified parallel modifications in tests. Mail tests were simplified in c227348453db.
author Andrey Zelenkov <zelenkov@nginx.com>
date Tue, 12 Jul 2016 17:39:03 +0300
parents e9064d691790
children 196d33c2bb45
comparison
equal deleted inserted replaced
973:7d7aef8b9f3a 974:882267679006
36 36
37 http { 37 http {
38 %%TEST_GLOBALS_HTTP%% 38 %%TEST_GLOBALS_HTTP%%
39 39
40 server { 40 server {
41 listen 127.0.0.1:%%PORT_0%% http2; 41 listen 127.0.0.1:8080 http2;
42 listen 127.0.0.1:%%PORT_1%%; 42 listen 127.0.0.1:8081;
43 listen 127.0.0.1:%%PORT_2%% http2 sndbuf=128; 43 listen 127.0.0.1:8082 http2 sndbuf=128;
44 server_name localhost; 44 server_name localhost;
45 45
46 http2_max_field_size 128k; 46 http2_max_field_size 128k;
47 http2_max_header_size 128k; 47 http2_max_header_size 128k;
48 48
68 } 68 }
69 } 69 }
70 location /proxy/ { 70 location /proxy/ {
71 add_header X-UC-a $upstream_cookie_a; 71 add_header X-UC-a $upstream_cookie_a;
72 add_header X-UC-c $upstream_cookie_c; 72 add_header X-UC-c $upstream_cookie_c;
73 proxy_pass http://127.0.0.1:%%PORT_3%%/; 73 proxy_pass http://127.0.0.1:8083/;
74 proxy_set_header X-Cookie-a $cookie_a; 74 proxy_set_header X-Cookie-a $cookie_a;
75 proxy_set_header X-Cookie-c $cookie_c; 75 proxy_set_header X-Cookie-c $cookie_c;
76 } 76 }
77 location /proxy2/ { 77 location /proxy2/ {
78 proxy_pass http://127.0.0.1:%%PORT_1%%/; 78 proxy_pass http://127.0.0.1:8081/;
79 } 79 }
80 location /set-cookie { 80 location /set-cookie {
81 add_header Set-Cookie a=b; 81 add_header Set-Cookie a=b;
82 add_header Set-Cookie c=d; 82 add_header Set-Cookie c=d;
83 return 200; 83 return 200;
89 return 200; 89 return 200;
90 } 90 }
91 } 91 }
92 92
93 server { 93 server {
94 listen 127.0.0.1:%%PORT_4%% http2; 94 listen 127.0.0.1:8084 http2;
95 server_name localhost; 95 server_name localhost;
96 96
97 http2_max_field_size 22; 97 http2_max_field_size 22;
98 } 98 }
99 99
100 server { 100 server {
101 listen 127.0.0.1:%%PORT_5%% http2; 101 listen 127.0.0.1:8085 http2;
102 server_name localhost; 102 server_name localhost;
103 103
104 http2_max_header_size 64; 104 http2_max_header_size 64;
105 } 105 }
106 } 106 }
111 111
112 open OLDERR, ">&", \*STDERR; close STDERR; 112 open OLDERR, ">&", \*STDERR; close STDERR;
113 $t->run(); 113 $t->run();
114 open STDERR, ">&", \*OLDERR; 114 open STDERR, ">&", \*OLDERR;
115 115
116 $t->waitforsocket('127.0.0.1:' . port(3)); 116 $t->waitforsocket('127.0.0.1:' . port(8083));
117 117
118 # file size is slightly beyond initial window size: 2**16 + 80 bytes 118 # file size is slightly beyond initial window size: 2**16 + 80 bytes
119 119
120 $t->write_file('t1.html', 120 $t->write_file('t1.html',
121 join('', map { sprintf "X%04dXXX", $_ } (1 .. 8202))); 121 join('', map { sprintf "X%04dXXX", $_ } (1 .. 8202)));
658 # response header frame sent in parts 658 # response header frame sent in parts
659 659
660 TODO: { 660 TODO: {
661 local $TODO = 'not yet' unless $t->has_version('1.9.7'); 661 local $TODO = 'not yet' unless $t->has_version('1.9.7');
662 662
663 $s = Test::Nginx::HTTP2->new(port(2)); 663 $s = Test::Nginx::HTTP2->new(port(8082));
664 $s->h2_settings(0, 0x5 => 2**17); 664 $s->h2_settings(0, 0x5 => 2**17);
665 665
666 $sid = $s->new_stream({ path => '/frame_size?h=' . 'x' x 2**15 }); 666 $sid = $s->new_stream({ path => '/frame_size?h=' . 'x' x 2**15 });
667 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]); 667 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]);
668 668
677 677
678 } 678 }
679 679
680 # response header block split and sent in parts 680 # response header block split and sent in parts
681 681
682 $s = Test::Nginx::HTTP2->new(port(2)); 682 $s = Test::Nginx::HTTP2->new(port(8082));
683 $sid = $s->new_stream({ path => '/continuation?h=' . 'x' x 2**15 }); 683 $sid = $s->new_stream({ path => '/continuation?h=' . 'x' x 2**15 });
684 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]); 684 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]);
685 685
686 @data = grep { $_->{type} =~ "HEADERS|CONTINUATION" } @$frames; 686 @data = grep { $_->{type} =~ "HEADERS|CONTINUATION" } @$frames;
687 my ($lengths) = sort { $b <=> $a } map { $_->{length} } @data; 687 my ($lengths) = sort { $b <=> $a } map { $_->{length} } @data;
692 692
693 } 693 }
694 694
695 # max_field_size - header field name 695 # max_field_size - header field name
696 696
697 $s = Test::Nginx::HTTP2->new(port(4)); 697 $s = Test::Nginx::HTTP2->new(port(8084));
698 $sid = $s->new_stream({ headers => [ 698 $sid = $s->new_stream({ headers => [
699 { name => ':method', value => 'GET', mode => 0 }, 699 { name => ':method', value => 'GET', mode => 0 },
700 { name => ':scheme', value => 'http', mode => 0 }, 700 { name => ':scheme', value => 'http', mode => 0 },
701 { name => ':path', value => '/t2.html', mode => 1 }, 701 { name => ':path', value => '/t2.html', mode => 1 },
702 { name => ':authority', value => 'localhost', mode => 1 }, 702 { name => ':authority', value => 'localhost', mode => 1 },
715 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); 715 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
716 716
717 ($frame) = grep { $_->{type} eq 'DATA' } @$frames; 717 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
718 ok($frame, 'field name size second'); 718 ok($frame, 'field name size second');
719 719
720 $s = Test::Nginx::HTTP2->new(port(4)); 720 $s = Test::Nginx::HTTP2->new(port(8084));
721 $sid = $s->new_stream({ headers => [ 721 $sid = $s->new_stream({ headers => [
722 { name => ':method', value => 'GET', mode => 0 }, 722 { name => ':method', value => 'GET', mode => 0 },
723 { name => ':scheme', value => 'http', mode => 0 }, 723 { name => ':scheme', value => 'http', mode => 0 },
724 { name => ':path', value => '/t2.html', mode => 1 }, 724 { name => ':path', value => '/t2.html', mode => 1 },
725 { name => ':authority', value => 'localhost', mode => 1 }, 725 { name => ':authority', value => 'localhost', mode => 1 },
727 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); 727 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
728 728
729 ($frame) = grep { $_->{type} eq 'DATA' } @$frames; 729 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
730 ok($frame, 'field name size equal'); 730 ok($frame, 'field name size equal');
731 731
732 $s = Test::Nginx::HTTP2->new(port(4)); 732 $s = Test::Nginx::HTTP2->new(port(8084));
733 $sid = $s->new_stream({ headers => [ 733 $sid = $s->new_stream({ headers => [
734 { name => ':method', value => 'GET', mode => 0 }, 734 { name => ':method', value => 'GET', mode => 0 },
735 { name => ':scheme', value => 'http', mode => 0 }, 735 { name => ':scheme', value => 'http', mode => 0 },
736 { name => ':path', value => '/t2.html', mode => 1 }, 736 { name => ':path', value => '/t2.html', mode => 1 },
737 { name => ':authority', value => 'localhost', mode => 1 }, 737 { name => ':authority', value => 'localhost', mode => 1 },
741 ($frame) = grep { $_->{type} eq 'DATA' } @$frames; 741 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
742 is($frame, undef, 'field name size greater'); 742 is($frame, undef, 'field name size greater');
743 743
744 # max_field_size - header field value 744 # max_field_size - header field value
745 745
746 $s = Test::Nginx::HTTP2->new(port(4)); 746 $s = Test::Nginx::HTTP2->new(port(8084));
747 $sid = $s->new_stream({ headers => [ 747 $sid = $s->new_stream({ headers => [
748 { name => ':method', value => 'GET', mode => 0 }, 748 { name => ':method', value => 'GET', mode => 0 },
749 { name => ':scheme', value => 'http', mode => 0 }, 749 { name => ':scheme', value => 'http', mode => 0 },
750 { name => ':path', value => '/t2.html', mode => 1 }, 750 { name => ':path', value => '/t2.html', mode => 1 },
751 { name => ':authority', value => 'localhost', mode => 1 }, 751 { name => ':authority', value => 'localhost', mode => 1 },
753 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); 753 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
754 754
755 ($frame) = grep { $_->{type} eq 'DATA' } @$frames; 755 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
756 ok($frame, 'field value size less'); 756 ok($frame, 'field value size less');
757 757
758 $s = Test::Nginx::HTTP2->new(port(4)); 758 $s = Test::Nginx::HTTP2->new(port(8084));
759 $sid = $s->new_stream({ headers => [ 759 $sid = $s->new_stream({ headers => [
760 { name => ':method', value => 'GET', mode => 0 }, 760 { name => ':method', value => 'GET', mode => 0 },
761 { name => ':scheme', value => 'http', mode => 0 }, 761 { name => ':scheme', value => 'http', mode => 0 },
762 { name => ':path', value => '/t2.html', mode => 1 }, 762 { name => ':path', value => '/t2.html', mode => 1 },
763 { name => ':authority', value => 'localhost', mode => 1 }, 763 { name => ':authority', value => 'localhost', mode => 1 },
765 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); 765 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
766 766
767 ($frame) = grep { $_->{type} eq 'DATA' } @$frames; 767 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
768 ok($frame, 'field value size equal'); 768 ok($frame, 'field value size equal');
769 769
770 $s = Test::Nginx::HTTP2->new(port(4)); 770 $s = Test::Nginx::HTTP2->new(port(8084));
771 $sid = $s->new_stream({ headers => [ 771 $sid = $s->new_stream({ headers => [
772 { name => ':method', value => 'GET', mode => 0 }, 772 { name => ':method', value => 'GET', mode => 0 },
773 { name => ':scheme', value => 'http', mode => 0 }, 773 { name => ':scheme', value => 'http', mode => 0 },
774 { name => ':path', value => '/t2.html', mode => 1 }, 774 { name => ':path', value => '/t2.html', mode => 1 },
775 { name => ':authority', value => 'localhost', mode => 1 }, 775 { name => ':authority', value => 'localhost', mode => 1 },
779 ($frame) = grep { $_->{type} eq 'DATA' } @$frames; 779 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
780 is($frame, undef, 'field value size greater'); 780 is($frame, undef, 'field value size greater');
781 781
782 # max_header_size 782 # max_header_size
783 783
784 $s = Test::Nginx::HTTP2->new(port(5)); 784 $s = Test::Nginx::HTTP2->new(port(8085));
785 $sid = $s->new_stream({ headers => [ 785 $sid = $s->new_stream({ headers => [
786 { name => ':method', value => 'GET', mode => 0 }, 786 { name => ':method', value => 'GET', mode => 0 },
787 { name => ':scheme', value => 'http', mode => 0 }, 787 { name => ':scheme', value => 'http', mode => 0 },
788 { name => ':path', value => '/t2.html', mode => 1 }, 788 { name => ':path', value => '/t2.html', mode => 1 },
789 { name => ':authority', value => 'localhost', mode => 1 }, 789 { name => ':authority', value => 'localhost', mode => 1 },
802 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); 802 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
803 803
804 ($frame) = grep { $_->{type} eq 'DATA' } @$frames; 804 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
805 ok($frame, 'header size second'); 805 ok($frame, 'header size second');
806 806
807 $s = Test::Nginx::HTTP2->new(port(5)); 807 $s = Test::Nginx::HTTP2->new(port(8085));
808 $sid = $s->new_stream({ headers => [ 808 $sid = $s->new_stream({ headers => [
809 { name => ':method', value => 'GET', mode => 0 }, 809 { name => ':method', value => 'GET', mode => 0 },
810 { name => ':scheme', value => 'http', mode => 0 }, 810 { name => ':scheme', value => 'http', mode => 0 },
811 { name => ':path', value => '/t2.html', mode => 1 }, 811 { name => ':path', value => '/t2.html', mode => 1 },
812 { name => ':authority', value => 'localhost', mode => 1 }, 812 { name => ':authority', value => 'localhost', mode => 1 },
814 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); 814 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
815 815
816 ($frame) = grep { $_->{type} eq 'DATA' } @$frames; 816 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
817 ok($frame, 'header size equal'); 817 ok($frame, 'header size equal');
818 818
819 $s = Test::Nginx::HTTP2->new(port(5)); 819 $s = Test::Nginx::HTTP2->new(port(8085));
820 $sid = $s->new_stream({ headers => [ 820 $sid = $s->new_stream({ headers => [
821 { name => ':method', value => 'GET', mode => 0 }, 821 { name => ':method', value => 'GET', mode => 0 },
822 { name => ':scheme', value => 'http', mode => 0 }, 822 { name => ':scheme', value => 'http', mode => 0 },
823 { name => ':path', value => '/t2.html', mode => 1 }, 823 { name => ':path', value => '/t2.html', mode => 1 },
824 { name => ':authority', value => 'localhost', mode => 1 }, 824 { name => ':authority', value => 'localhost', mode => 1 },
829 is($frame, undef, 'header size greater'); 829 is($frame, undef, 'header size greater');
830 830
831 # header size is based on (decompressed) header list 831 # header size is based on (decompressed) header list
832 # two extra 1-byte indices would otherwise fit in max_header_size 832 # two extra 1-byte indices would otherwise fit in max_header_size
833 833
834 $s = Test::Nginx::HTTP2->new(port(5)); 834 $s = Test::Nginx::HTTP2->new(port(8085));
835 $sid = $s->new_stream({ headers => [ 835 $sid = $s->new_stream({ headers => [
836 { name => ':method', value => 'GET', mode => 0 }, 836 { name => ':method', value => 'GET', mode => 0 },
837 { name => ':scheme', value => 'http', mode => 0 }, 837 { name => ':scheme', value => 'http', mode => 0 },
838 { name => ':path', value => '/t2.html', mode => 1 }, 838 { name => ':path', value => '/t2.html', mode => 1 },
839 { name => ':authority', value => 'localhost', mode => 1 }, 839 { name => ':authority', value => 'localhost', mode => 1 },
1011 1011
1012 sub http_daemon { 1012 sub http_daemon {
1013 my $server = IO::Socket::INET->new( 1013 my $server = IO::Socket::INET->new(
1014 Proto => 'tcp', 1014 Proto => 'tcp',
1015 LocalHost => '127.0.0.1', 1015 LocalHost => '127.0.0.1',
1016 LocalPort => port(3), 1016 LocalPort => port(8083),
1017 Listen => 5, 1017 Listen => 5,
1018 Reuse => 1 1018 Reuse => 1
1019 ) 1019 )
1020 or die "Can't create listening socket: $!\n"; 1020 or die "Can't create listening socket: $!\n";
1021 1021