Mercurial > hg > nginx-tests
comparison h2_headers.t @ 952:e9064d691790
Tests: converted tests to run in parallel.
author | Andrey Zelenkov <zelenkov@nginx.com> |
---|---|
date | Tue, 21 Jun 2016 16:39:13 +0300 |
parents | 4dc302d8e04f |
children | 882267679006 |
comparison
equal
deleted
inserted
replaced
951:9361c7eddfc1 | 952:e9064d691790 |
---|---|
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:8080 http2; | 41 listen 127.0.0.1:%%PORT_0%% http2; |
42 listen 127.0.0.1:8081; | 42 listen 127.0.0.1:%%PORT_1%%; |
43 listen 127.0.0.1:8082 http2 sndbuf=128; | 43 listen 127.0.0.1:%%PORT_2%% 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:8083/; | 73 proxy_pass http://127.0.0.1:%%PORT_3%%/; |
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:8081/; | 78 proxy_pass http://127.0.0.1:%%PORT_1%%/; |
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:8084 http2; | 94 listen 127.0.0.1:%%PORT_4%% 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:8085 http2; | 101 listen 127.0.0.1:%%PORT_5%% 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:8083'); | 116 $t->waitforsocket('127.0.0.1:' . port(3)); |
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(8082); | 663 $s = Test::Nginx::HTTP2->new(port(2)); |
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(8082); | 682 $s = Test::Nginx::HTTP2->new(port(2)); |
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(8084); | 697 $s = Test::Nginx::HTTP2->new(port(4)); |
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(8084); | 720 $s = Test::Nginx::HTTP2->new(port(4)); |
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(8084); | 732 $s = Test::Nginx::HTTP2->new(port(4)); |
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(8084); | 746 $s = Test::Nginx::HTTP2->new(port(4)); |
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(8084); | 758 $s = Test::Nginx::HTTP2->new(port(4)); |
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(8084); | 770 $s = Test::Nginx::HTTP2->new(port(4)); |
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(8085); | 784 $s = Test::Nginx::HTTP2->new(port(5)); |
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(8085); | 807 $s = Test::Nginx::HTTP2->new(port(5)); |
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(8085); | 819 $s = Test::Nginx::HTTP2->new(port(5)); |
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(8085); | 834 $s = Test::Nginx::HTTP2->new(port(5)); |
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 => 8083, | 1016 LocalPort => port(3), |
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 |