annotate h2_headers.t @ 1988:b5c1c3ef2345

Tests: adjusted sub_filter_multi.t limit rate settings. With previous settings some tests with short buffers, which are under TEST_NGINX_UNSAFE, used to hit 8 seconds timeout in http_get(), leading to test failures. Reported by Hiroaki Nakamura, https://freenginx.org/pipermail/nginx-devel/2024-June/000373.html
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 20 Jun 2024 21:12:00 +0300
parents a095b971fbcc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
2
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
5
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
6 # Tests for HTTP/2 headers.
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
7
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
8 ###############################################################################
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
9
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
10 use warnings;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
11 use strict;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
12
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
13 use Test::More;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
14
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
16
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
17 use lib 'lib';
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
19 use Test::Nginx::HTTP2;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
20
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
21 ###############################################################################
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
22
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
23 select STDERR; $| = 1;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
24 select STDOUT; $| = 1;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
25
1823
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite/)->plan(103)
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
28
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
30
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
31 daemon off;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
32
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
33 events {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
34 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
35
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
36 http {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
38
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
39 server {
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
40 listen 127.0.0.1:8080;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
41 listen 127.0.0.1:8081;
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
42 listen 127.0.0.1:8082 sndbuf=128;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
43 server_name localhost;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
44
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
45 http2 on;
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
46 large_client_header_buffers 2 64k;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
47
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
48 location / {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
49 add_header X-Sent-Foo $http_x_foo;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
50 add_header X-Referer $http_referer;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
51 return 200;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
52 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
53 location /frame_size {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
54 add_header X-LongHeader $arg_h;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
55 add_header X-LongHeader $arg_h;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
56 add_header X-LongHeader $arg_h;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
57 alias %%TESTDIR%%/t2.html;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
58 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
59 location /continuation {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
60 add_header X-LongHeader $arg_h;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
61 add_header X-LongHeader $arg_h;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
62 add_header X-LongHeader $arg_h;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
63 return 200 body;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
64
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
65 location /continuation/204 {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
66 return 204;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
67 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
68 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
69 location /proxy/ {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
70 add_header X-UC-a $upstream_cookie_a;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
71 add_header X-UC-c $upstream_cookie_c;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
72 proxy_pass http://127.0.0.1:8083/;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
73 proxy_set_header X-Cookie-a $cookie_a;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
74 proxy_set_header X-Cookie-c $cookie_c;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
75 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
76 location /proxy2/ {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
77 proxy_pass http://127.0.0.1:8081/;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
78 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
79 location /set-cookie {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
80 add_header Set-Cookie a=b;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
81 add_header Set-Cookie c=d;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
82 return 200;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
83 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
84 location /cookie {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
85 add_header X-Cookie $http_cookie;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
86 add_header X-Cookie-a $cookie_a;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
87 add_header X-Cookie-c $cookie_c;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
88 return 200;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
89 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
90 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
91
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
92 server {
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
93 listen 127.0.0.1:8084;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
94 server_name localhost;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
95
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
96 http2 on;
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
97 large_client_header_buffers 4 512;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
98 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
99
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
100 server {
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
101 listen 127.0.0.1:8085;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
102 server_name localhost;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
103
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
104 http2 on;
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
105 large_client_header_buffers 1 512;
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
106 }
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
107
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
108 server {
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
109 listen 127.0.0.1:8086;
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
110 server_name localhost;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
111
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
112 http2 on;
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
113 underscores_in_headers on;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
114 add_header X-Sent-Foo $http_x_foo always;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
115 }
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
116
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
117 server {
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
118 listen 127.0.0.1:8087;
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
119 server_name localhost;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
120
1986
11463d379570 Tests: reworked HTTP/2 tests to use "http2 on".
Maxim Dounin <mdounin@mdounin.ru>
parents: 1937
diff changeset
121 http2 on;
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
122 ignore_invalid_headers off;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
123 add_header X-Sent-Foo $http_x_foo always;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
124 }
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
125 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
126
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
127 EOF
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
128
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
129 $t->run_daemon(\&http_daemon);
1900
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1823
diff changeset
130
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1823
diff changeset
131 $t->run();
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1823
diff changeset
132
236d038dc04a Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1823
diff changeset
133 $t->waitforsocket('127.0.0.1:' . port(8083));
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
134
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
135 # file size is slightly beyond initial window size: 2**16 + 80 bytes
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
136
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
137 $t->write_file('t1.html',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
138 join('', map { sprintf "X%04dXXX", $_ } (1 .. 8202)));
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
139
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
140 $t->write_file('t2.html', 'SEE-THIS');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
141
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
142 ###############################################################################
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
143
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
144 # 6.1. Indexed Header Field Representation
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
145
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
146 my $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
147 my $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
148 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
149 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
150 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
151 { name => ':authority', value => 'localhost', mode => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
152 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
153
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
154 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
155 is($frame->{headers}->{':status'}, 200, 'indexed header field');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
156
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
157 # 6.2.1. Literal Header Field with Incremental Indexing
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
158
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
159 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
160 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
161 { name => ':method', value => 'GET', mode => 1, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
162 { name => ':scheme', value => 'http', mode => 1, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
163 { name => ':path', value => '/', mode => 1, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
164 { name => ':authority', value => 'localhost', mode => 1, huff => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
165 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
166
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
167 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
168 is($frame->{headers}->{':status'}, 200, 'literal with indexing');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
169
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
170 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
171 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
172 { name => ':method', value => 'GET', mode => 1, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
173 { name => ':scheme', value => 'http', mode => 1, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
174 { name => ':path', value => '/', mode => 1, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
175 { name => ':authority', value => 'localhost', mode => 1, huff => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
176 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
177
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
178 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
179 is($frame->{headers}->{':status'}, 200, 'literal with indexing - huffman');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
180
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
181 # 6.2.1. Literal Header Field with Incremental Indexing -- New Name
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
182
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
183 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
184 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
185 { name => ':method', value => 'GET', mode => 2, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
186 { name => ':scheme', value => 'http', mode => 2, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
187 { name => ':path', value => '/', mode => 2, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
188 { name => ':authority', value => 'localhost', mode => 2, huff => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
189 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
190
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
191 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
192 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
193
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
194 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
195 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
196 { name => ':method', value => 'GET', mode => 2, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
197 { name => ':scheme', value => 'http', mode => 2, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
198 { name => ':path', value => '/', mode => 2, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
199 { name => ':authority', value => 'localhost', mode => 2, huff => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
200 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
201
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
202 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
203 is($frame->{headers}->{':status'}, 200, 'literal with indexing - new huffman');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
204
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
205 # 6.2.2. Literal Header Field without Indexing
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
206
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
207 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
208 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
209 { name => ':method', value => 'GET', mode => 3, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
210 { name => ':scheme', value => 'http', mode => 3, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
211 { name => ':path', value => '/', mode => 3, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
212 { name => ':authority', value => 'localhost', mode => 3, huff => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
213 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
214
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
215 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
216 is($frame->{headers}->{':status'}, 200, 'literal without indexing');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
217
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
218 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
219 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
220 { name => ':method', value => 'GET', mode => 3, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
221 { name => ':scheme', value => 'http', mode => 3, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
222 { name => ':path', value => '/', mode => 3, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
223 { name => ':authority', value => 'localhost', mode => 3, huff => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
224 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
225
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
226 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
227 is($frame->{headers}->{':status'}, 200, 'literal without indexing - huffman');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
228
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
229 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
230 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
231 { name => ':method', value => 'GET', mode => 3, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
232 { name => ':scheme', value => 'http', mode => 3, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
233 { name => ':path', value => '/', mode => 3, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
234 { name => ':authority', value => 'localhost', mode => 3, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
235 { name => 'referer', value => 'foo', mode => 3, huff => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
236 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
237
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
238 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
239 is($frame->{headers}->{':status'}, 200,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
240 'literal without indexing - multibyte index');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
241 is($frame->{headers}->{'x-referer'}, 'foo',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
242 'literal without indexing - multibyte index value');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
243
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
244 # 6.2.2. Literal Header Field without Indexing -- New Name
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
245
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
246 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
247 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
248 { name => ':method', value => 'GET', mode => 4, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
249 { name => ':scheme', value => 'http', mode => 4, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
250 { name => ':path', value => '/', mode => 4, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
251 { name => ':authority', value => 'localhost', mode => 4, huff => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
252 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
253
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
254 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
255 is($frame->{headers}->{':status'}, 200, 'literal without indexing - new');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
256
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
257 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
258 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
259 { name => ':method', value => 'GET', mode => 4, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
260 { name => ':scheme', value => 'http', mode => 4, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
261 { name => ':path', value => '/', mode => 4, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
262 { name => ':authority', value => 'localhost', mode => 4, huff => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
263 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
264
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
265 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
266 is($frame->{headers}->{':status'}, 200,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
267 'literal without indexing - new huffman');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
268
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
269 # 6.2.3. Literal Header Field Never Indexed
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
270
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
271 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
272 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
273 { name => ':method', value => 'GET', mode => 5, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
274 { name => ':scheme', value => 'http', mode => 5, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
275 { name => ':path', value => '/', mode => 5, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
276 { name => ':authority', value => 'localhost', mode => 5, huff => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
277 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
278
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
279 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
280 is($frame->{headers}->{':status'}, 200, 'literal never indexed');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
281
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
282 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
283 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
284 { name => ':method', value => 'GET', mode => 5, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
285 { name => ':scheme', value => 'http', mode => 5, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
286 { name => ':path', value => '/', mode => 5, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
287 { name => ':authority', value => 'localhost', mode => 5, huff => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
288 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
289
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
290 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
291 is($frame->{headers}->{':status'}, 200, 'literal never indexed - huffman');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
292
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
293 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
294 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
295 { name => ':method', value => 'GET', mode => 5, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
296 { name => ':scheme', value => 'http', mode => 5, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
297 { name => ':path', value => '/', mode => 5, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
298 { name => ':authority', value => 'localhost', mode => 5, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
299 { name => 'referer', value => 'foo', mode => 5, huff => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
300 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
301
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
302 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
303 is($frame->{headers}->{':status'}, 200,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
304 'literal never indexed - multibyte index');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
305 is($frame->{headers}->{'x-referer'}, 'foo',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
306 'literal never indexed - multibyte index value');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
307
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
308 # 6.2.3. Literal Header Field Never Indexed -- New Name
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
309
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
310 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
311 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
312 { name => ':method', value => 'GET', mode => 6, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
313 { name => ':scheme', value => 'http', mode => 6, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
314 { name => ':path', value => '/', mode => 6, huff => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
315 { name => ':authority', value => 'localhost', mode => 6, huff => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
316 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
317
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
318 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
319 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
320
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
321 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
322 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
323 { name => ':method', value => 'GET', mode => 6, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
324 { name => ':scheme', value => 'http', mode => 6, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
325 { name => ':path', value => '/', mode => 6, huff => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
326 { name => ':authority', value => 'localhost', mode => 6, huff => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
327 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
328
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
329 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
330 is($frame->{headers}->{':status'}, 200, 'literal never indexed - new huffman');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
331
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
332 # reuse literal with multibyte indexing
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
333
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
334 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
335 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
336 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
337 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
338 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
339 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
340 { name => 'referer', value => 'foo', mode => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
341 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
342
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
343 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
344 is($frame->{headers}->{'x-referer'}, 'foo', 'value with indexing - new');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
345
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
346 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
347 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
348 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
349 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
350 { name => ':authority', value => 'localhost', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
351 { name => 'referer', value => 'foo', mode => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
352 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
353
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
354 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
355 is($frame->{headers}->{'x-referer'}, 'foo', 'value with indexing - indexed');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
356
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
357 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
358 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
359 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
360 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
361 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
362 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
363 { name => 'x-foo', value => 'X-Bar', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
364 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
365
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
366 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
367 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - new');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
368
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
369 # reuse literal with multibyte indexing - reused name
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
370
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
371 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
372 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
373 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
374 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
375 { name => ':authority', value => 'localhost', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
376 { name => 'x-foo', value => 'X-Bar', mode => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
377 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
378
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
379 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
380 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'name with indexing - indexed');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
381
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
382 # reuse literal with multibyte indexing - reused name only
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
383
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
384 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
385 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
386 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
387 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
388 { name => ':authority', value => 'localhost', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
389 { name => 'x-foo', value => 'X-Baz', mode => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
390 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
391
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
392 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
393 is($frame->{headers}->{'x-sent-foo'}, 'X-Baz',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
394 'name with indexing - indexed name');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
395
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
396 # response header field with characters not suitable for huffman encoding
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
397
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
398 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
399 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
400 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
401 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
402 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
403 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
404 { name => 'x-foo', value => '{{{{{', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
405 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
406
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
407 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
408 is($frame->{headers}->{'x-sent-foo'}, '{{{{{', 'rare chars');
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
409 like($s->{headers}, qr/\Q{{{{{/, 'rare chars - no huffman encoding');
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
410
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
411 # response header field with huffman encoding
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
412 # NB: implementation detail, not obligated
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
413
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
414 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
415 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
416 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
417 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
418 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
419 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
420 { name => 'x-foo', value => 'aaaaa', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
421 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
422
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
423 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
424 is($frame->{headers}->{'x-sent-foo'}, 'aaaaa', 'well known chars');
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
425 unlike($s->{headers}, qr/aaaaa/, 'well known chars - huffman encoding');
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
426
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
427 # response header field with huffman encoding - complete table mod \0, CR, LF
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
428 # first saturate with short-encoded characters (NB: implementation detail)
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
429
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
430 my $field = pack "C*", ((map { 97 } (1 .. 862)), 1 .. 9, 11, 12, 14 .. 255);
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
431
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
432 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
433 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
434 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
435 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
436 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
437 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
438 { name => 'x-foo', value => $field, mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
439 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
440
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
441 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
442 is($frame->{headers}->{'x-sent-foo'}, $field, 'all chars');
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
443 unlike($s->{headers}, qr/abcde/, 'all chars - huffman encoding');
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
444
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
445 # 6.3. Dynamic Table Size Update
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
446
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
447 # remove some indexed headers from the dynamic table
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
448 # by maintaining dynamic table space only for index 0
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
449 # 'x-foo' has index 0, and 'referer' has index 1
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
450
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
451 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
452 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
453 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
454 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
455 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
456 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
457 { name => 'referer', value => 'foo', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
458 { name => 'x-foo', value => 'X-Bar', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
459 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
460
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
461 $sid = $s->new_stream({ table_size => 61, headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
462 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
463 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
464 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
465 { name => 'x-foo', value => 'X-Bar', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
466 { name => ':authority', value => 'localhost', mode => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
467 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
468
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
469 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
470 isnt($frame, undef, 'updated table size - remaining index');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
471
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
472 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
473 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
474 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
475 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
476 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
477 { name => 'referer', value => 'foo', mode => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
478 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
479
1550
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
480 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
481 is($frame->{code}, 0x9, 'invalid index');
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
482
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
483 $s = Test::Nginx::HTTP2->new();
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
484 $sid = $s->new_stream({ headers => [
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
485 { name => ':method', value => 'GET', mode => 0 },
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
486 { name => ':scheme', value => 'http', mode => 0 },
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
487 { name => ':path', value => '/', mode => 0 },
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
488 { name => ':authority', value => 'localhost', mode => 1 },
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
489 { name => 'unknown', value => 'foo', mode => 3 }]});
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
490 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
491
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
492 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
5c96745988c4 Tests: added HTTP/2 test for invalid index in literal header field.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1549
diff changeset
493 is($frame->{code}, 0x9, 'invalid index in literal header field');
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
494
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
495 # 5.4.1. Connection Error Handling
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
496 # An endpoint that encounters a connection error SHOULD first send a
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
497 # GOAWAY frame <..>
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
498
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
499 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
500 ok($frame, 'invalid index - GOAWAY');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
501
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
502 # RFC 7541, 2.3.3. Index Address Space
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
503 # Indices strictly greater than the sum of the lengths of both tables
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
504 # MUST be treated as a decoding error.
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
505
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
506 # 4.3. Header Compression and Decompression
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
507 # A decoding error in a header block MUST be treated
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
508 # as a connection error of type COMPRESSION_ERROR.
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
509
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
510 is($frame->{last_sid}, $sid, 'invalid index - GOAWAY last stream');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
511 is($frame->{code}, 9, 'invalid index - GOAWAY COMPRESSION_ERROR');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
512
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
513 # HPACK zero index
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
514
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
515 # RFC 7541, 6.1 Indexed Header Field Representation
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
516 # The index value of 0 is not used. It MUST be treated as a decoding
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
517 # error if found in an indexed header field representation.
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
518
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
519 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
520 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
521 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
522 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
523 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
524 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
525 { name => '', value => '', mode => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
526 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
527
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
528 ok($frame, 'zero index - GOAWAY');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
529 is($frame->{code}, 9, 'zero index - GOAWAY COMPRESSION_ERROR');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
530
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
531 # invalid table size update
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
532
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
533 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
534 $sid = $s->new_stream({ table_size => 4097, headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
535 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
536 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
537 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
538 { name => 'x-foo', value => 'X-Bar', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
539 { name => ':authority', value => 'localhost', mode => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
540 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
541
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
542 ($frame) = grep { $_->{type} eq "GOAWAY" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
543 ok($frame, 'invalid table size - GOAWAY');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
544 is($frame->{last_sid}, $sid, 'invalid table size - GOAWAY last stream');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
545 is($frame->{code}, 9, 'invalid table size - GOAWAY COMPRESSION_ERROR');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
546
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
547 # request header field with multiple values
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
548
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
549 # 8.1.2.5. Compressing the Cookie Header Field
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
550 # To allow for better compression efficiency, the Cookie header field
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
551 # MAY be split into separate header fields <..>.
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
552
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
553 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
554 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
555 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
556 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
557 { name => ':path', value => '/cookie', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
558 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
559 { name => 'cookie', value => 'a=b', mode => 2},
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
560 { name => 'cookie', value => 'c=d', mode => 2}]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
561 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
562
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
563 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
564 is($frame->{headers}->{'x-cookie-a'}, 'b',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
565 'multiple request header fields - cookie');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
566 is($frame->{headers}->{'x-cookie-c'}, 'd',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
567 'multiple request header fields - cookie 2');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
568 is($frame->{headers}->{'x-cookie'}, 'a=b; c=d',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
569 'multiple request header fields - semi-colon');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
570
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
571 # request header field with multiple values to HTTP backend
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
572
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
573 # 8.1.2.5. Compressing the Cookie Header Field
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
574 # these MUST be concatenated into a single octet string
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
575 # using the two-octet delimiter of 0x3B, 0x20 (the ASCII string "; ")
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
576 # before being passed into a non-HTTP/2 context, such as an HTTP/1.1
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
577 # connection <..>
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
578
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
579 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
580 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
581 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
582 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
583 { name => ':path', value => '/proxy/cookie', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
584 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
585 { name => 'cookie', value => 'a=b', mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
586 { name => 'cookie', value => 'c=d', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
587 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
588
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
589 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
590 is($frame->{headers}->{'x-sent-cookie'}, 'a=b; c=d',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
591 'multiple request header fields proxied - semi-colon');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
592 is($frame->{headers}->{'x-sent-cookie2'}, '',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
593 'multiple request header fields proxied - dublicate cookie');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
594 is($frame->{headers}->{'x-sent-cookie-a'}, 'b',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
595 'multiple request header fields proxied - cookie 1');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
596 is($frame->{headers}->{'x-sent-cookie-c'}, 'd',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
597 'multiple request header fields proxied - cookie 2');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
598
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
599 # response header field with multiple values
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
600
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
601 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
602 $sid = $s->new_stream({ path => '/set-cookie' });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
603 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
604
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
605 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
606 is($frame->{headers}->{'set-cookie'}[0], 'a=b',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
607 'multiple response header fields - cookie');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
608 is($frame->{headers}->{'set-cookie'}[1], 'c=d',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
609 'multiple response header fields - cookie 2');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
610
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
611 # response header field with multiple values from HTTP backend
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
612
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
613 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
614 $sid = $s->new_stream({ path => '/proxy/set-cookie' });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
615 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
616
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
617 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
618 is($frame->{headers}->{'set-cookie'}[0], 'a=b',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
619 'multiple response header proxied - cookie');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
620 is($frame->{headers}->{'set-cookie'}[1], 'c=d',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
621 'multiple response header proxied - cookie 2');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
622 is($frame->{headers}->{'x-uc-a'}, 'b',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
623 'multiple response header proxied - upstream cookie');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
624 is($frame->{headers}->{'x-uc-c'}, 'd',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
625 'multiple response header proxied - upstream cookie 2');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
626
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
627 # CONTINUATION in response
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
628 # put three long header fields (not less than SETTINGS_MAX_FRAME_SIZE/2)
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
629 # to break header block into separate frames, one such field per frame
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
630
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
631 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
632 $sid = $s->new_stream({ path => '/continuation?h=' . 'x' x 2**13 });
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
633
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
634 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
635 my @data = grep { $_->{type} =~ "HEADERS|CONTINUATION" } @$frames;
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
636 my $data = $data[-1];
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
637 is(@{$data->{headers}{'x-longheader'}}, 3,
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
638 'response CONTINUATION - headers');
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
639 is($data->{headers}{'x-longheader'}[0], 'x' x 2**13,
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
640 'response CONTINUATION - header 1');
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
641 is($data->{headers}{'x-longheader'}[1], 'x' x 2**13,
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
642 'response CONTINUATION - header 2');
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
643 is($data->{headers}{'x-longheader'}[2], 'x' x 2**13,
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
644 'response CONTINUATION - header 3');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
645 @data = sort { $a <=> $b } map { $_->{length} } @data;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
646 cmp_ok($data[-1], '<=', 2**14, 'response CONTINUATION - max frame size');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
647
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
648 # same but without response DATA frames
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
649
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
650 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
651 $sid = $s->new_stream({ path => '/continuation/204?h=' . 'x' x 2**13 });
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
652
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
653 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
654 @data = grep { $_->{type} =~ "HEADERS|CONTINUATION" } @$frames;
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
655 $data = $data[-1];
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
656 is(@{$data->{headers}{'x-longheader'}}, 3,
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
657 'no body CONTINUATION - headers');
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
658 is($data->{headers}{'x-longheader'}[0], 'x' x 2**13,
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
659 'no body CONTINUATION - header 1');
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
660 is($data->{headers}{'x-longheader'}[1], 'x' x 2**13,
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
661 'no body CONTINUATION - header 2');
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
662 is($data->{headers}{'x-longheader'}[2], 'x' x 2**13,
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
663 'no body CONTINUATION - header 3');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
664 @data = sort { $a <=> $b } map { $_->{length} } @data;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
665 cmp_ok($data[-1], '<=', 2**14, 'no body CONTINUATION - max frame size');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
666
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
667 # response header block is always split by SETTINGS_MAX_FRAME_SIZE
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
668
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
669 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
670 $sid = $s->new_stream({ path => '/continuation?h=' . 'x' x 2**15 });
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
671
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
672 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
673 @data = grep { $_->{type} =~ "HEADERS|CONTINUATION" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
674 @data = sort { $a <=> $b } map { $_->{length} } @data;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
675 cmp_ok($data[-1], '<=', 2**14, 'response header frames limited');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
676
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
677 # response header frame sent in parts
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
678
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
679 $s = Test::Nginx::HTTP2->new(port(8082));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
680 $s->h2_settings(0, 0x5 => 2**17);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
681
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
682 $sid = $s->new_stream({ path => '/frame_size?h=' . 'x' x 2**15 });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
683 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
684
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
685 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
686 ok($frame, 'response header - parts');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
687
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
688 SKIP: {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
689 skip 'response header failed', 1 unless $frame;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
690
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
691 is(length join('', @{$frame->{headers}->{'x-longheader'}}), 98304,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
692 'response header - headers');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
693
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
694 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
695
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
696 # response header block split and sent in parts
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
697
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
698 $s = Test::Nginx::HTTP2->new(port(8082));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
699 $sid = $s->new_stream({ path => '/continuation?h=' . 'x' x 2**15 });
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
700 $frames = $s->read(all => [{ sid => $sid, fin => 0x4 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
701
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
702 @data = grep { $_->{type} =~ "HEADERS|CONTINUATION" } @$frames;
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
703 ok(@data, 'response header split');
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
704
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
705 SKIP: {
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
706 skip 'response header split failed', 2 unless @data;
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
707
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
708 my ($lengths) = sort { $b <=> $a } map { $_->{length} } @data;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
709 cmp_ok($lengths, '<=', 16384, 'response header split - max size');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
710
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
711 is(length join('', @{$data[-1]->{headers}->{'x-longheader'}}), 98304,
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
712 'response header split - headers');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
713
1169
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
714 }
518d1c865812 Tests: avoid illegal dereference on errors in h2_headers.t.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1058
diff changeset
715
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
716 # max_field_size - header field name
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
717
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
718 $s = Test::Nginx::HTTP2->new(port(8084));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
719 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
720 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
721 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
722 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
723 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
724 { name => 'x' x 511, value => 'value', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
725 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
726
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
727 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
728 ok($frame, 'field name size less');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
729
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
730 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
731 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
732 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
733 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
734 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
735 { name => 'x' x 511, value => 'value', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
736 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
737
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
738 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
739 ok($frame, 'field name size second');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
740
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
741 $s = Test::Nginx::HTTP2->new(port(8084));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
742 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
743 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
744 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
745 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
746 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
747 { name => 'x' x 512, value => 'value', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
748 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
749
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
750 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
751 ok($frame, 'field name size equal');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
752
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
753 $s = Test::Nginx::HTTP2->new(port(8084));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
754 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
755 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
756 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
757 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
758 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
759 { name => 'x' x 513, value => 'value', mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
760 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
761
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
762 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
763 is($frame, undef, 'field name size greater');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
764
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
765 # max_field_size - header field value
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
766
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
767 $s = Test::Nginx::HTTP2->new(port(8084));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
768 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
769 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
770 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
771 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
772 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
773 { name => 'name', value => 'x' x 511, mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
774 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
775
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
776 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
777 ok($frame, 'field value size less');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
778
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
779 $s = Test::Nginx::HTTP2->new(port(8084));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
780 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
781 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
782 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
783 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
784 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
785 { name => 'name', value => 'x' x 511, mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
786 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
787
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
788 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
789 ok($frame, 'field value size equal');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
790
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
791 $s = Test::Nginx::HTTP2->new(port(8084));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
792 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
793 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
794 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
795 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
796 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
797 { name => 'name', value => 'x' x 513, mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
798 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
799
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
800 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
801 is($frame, undef, 'field value size greater');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
802
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
803 # max_header_size
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
804
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
805 $s = Test::Nginx::HTTP2->new(port(8085));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
806 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
807 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
808 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
809 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
810 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
811 { name => 'longname', value => 'x' x 450, mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
812 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
813
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
814 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
815 ok($frame, 'header size less');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
816
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
817 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
818 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
819 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
820 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
821 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
822 { name => 'longname', value => 'x' x 450, mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
823 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
824
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
825 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
826 ok($frame, 'header size second');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
827
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
828 $s = Test::Nginx::HTTP2->new(port(8085));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
829 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
830 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
831 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
832 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
833 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
834 { name => 'longname', value => 'x' x 451, mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
835 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
836
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
837 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
838 ok($frame, 'header size equal');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
839
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
840 $s = Test::Nginx::HTTP2->new(port(8085));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
841 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
842 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
843 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
844 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
845 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
846 { name => 'longname', value => 'x' x 452, mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
847 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
848
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
849 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
850 is($frame, undef, 'header size greater');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
851
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
852 # header size is based on (decompressed) header list
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
853 # two extra 1-byte indices would otherwise fit in max_header_size
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
854
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
855 $s = Test::Nginx::HTTP2->new(port(8085));
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
856 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
857 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
858 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
859 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
860 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
861 { name => 'longname', value => 'x' x 400, mode => 2 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
862 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
863
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
864 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
865 ok($frame, 'header size new index');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
866
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
867 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
868 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
869 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
870 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
871 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
872 { name => 'longname', value => 'x' x 400, mode => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
873 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
874
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
875 ($frame) = grep { $_->{type} eq 'DATA' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
876 ok($frame, 'header size indexed');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
877
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
878 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
879 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
880 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
881 { name => ':path', value => '/t2.html', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
882 { name => ':authority', value => 'localhost', mode => 1 },
1653
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
883 { name => 'longname', value => 'x' x 400, mode => 0 },
259dfb223f9a Tests: compatibility with http2_max_header/field_size removal.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1550
diff changeset
884 { name => 'longname', value => 'x' x 400, mode => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
885 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
886
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
887 ($frame) = grep { $_->{type} eq 'GOAWAY' } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
888 is($frame->{code}, 0xb, 'header size indexed greater');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
889
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
890 # HPACK table boundary
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
891
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
892 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
893 $s->read(all => [{ sid => $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
894 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
895 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
896 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
897 { name => ':authority', value => '', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
898 { name => 'x' x 2016, value => 'x' x 2048, mode => 2 }]}), fin => 1 }]);
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
899 $frames = $s->read(all => [{ sid => $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
900 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
901 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
902 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
903 { name => ':authority', value => '', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
904 { name => 'x' x 2016, value => 'x' x 2048, mode => 0 }]}), fin => 1 }]);
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
905
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
906 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
907 ok($frame, 'HPACK table boundary');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
908
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
909 $s->read(all => [{ sid => $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
910 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
911 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
912 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
913 { name => ':authority', value => '', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
914 { name => 'x' x 33, value => 'x' x 4031, mode => 2 }]}), fin => 1 }]);
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
915 $frames = $s->read(all => [{ sid => $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
916 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
917 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
918 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
919 { name => ':authority', value => '', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
920 { name => 'x' x 33, value => 'x' x 4031, mode => 0 }]}), fin => 1 }]);
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
921
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
922 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
923 ok($frame, 'HPACK table boundary - header field name');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
924
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
925 $s->read(all => [{ sid => $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
926 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
927 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
928 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
929 { name => ':authority', value => '', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
930 { name => 'x', value => 'x' x 64, mode => 2 }]}), fin => 1 }]);
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
931 $frames = $s->read(all => [{ sid => $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
932 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
933 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
934 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
935 { name => ':authority', value => '', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
936 { name => 'x', value => 'x' x 64, mode => 0 }]}), fin => 1 }]);
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
937
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
938 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
939 ok($frame, 'HPACK table boundary - header field value');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
940
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
941 # ensure that request header field value with newline doesn't get split
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
942 #
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
943 # 10.3. Intermediary Encapsulation Attacks
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
944 # Any request or response that contains a character not permitted
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
945 # in a header field value MUST be treated as malformed.
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
946
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
947 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
948 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
949 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
950 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
951 { name => ':path', value => '/proxy2/', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
952 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
953 { name => 'x-foo', value => "x-bar\r\nreferer:see-this", mode => 2 }]});
1823
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
954 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
955
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
956 # 10.3. Intermediary Encapsulation Attacks
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
957 # An intermediary therefore cannot translate an HTTP/2 request or response
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
958 # containing an invalid field name into an HTTP/1.1 message.
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
959
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
960 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
961 isnt($frame->{headers}->{'x-referer'}, 'see-this', 'newline in request header');
1987
a095b971fbcc Tests: removed TODO and try_run() checks for legacy versions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1986
diff changeset
962 is($frame->{headers}->{':status'}, 400,
a095b971fbcc Tests: removed TODO and try_run() checks for legacy versions.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1986
diff changeset
963 'newline in request header - bad request');
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
964
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
965 # invalid header name as seen with underscore should not lead to ignoring rest
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
966
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
967 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
968 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
969 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
970 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
971 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
972 { name => ':authority', value => 'localhost', mode => 1 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
973 { name => 'x_foo', value => "x-bar", mode => 2 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
974 { name => 'referer', value => "see-this", mode => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
975 $frames = $s->read(all => [{ type => 'HEADERS' }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
976
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
977 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
978 is($frame->{headers}->{'x-referer'}, 'see-this', 'after invalid header name');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
979
1823
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
980 # other invalid header name characters as seen with ':'
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
981
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
982 $s = Test::Nginx::HTTP2->new();
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
983 $sid = $s->new_stream({ headers => [
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
984 { name => ':method', value => 'GET', mode => 0 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
985 { name => ':scheme', value => 'http', mode => 0 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
986 { name => ':path', value => '/', mode => 0 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
987 { name => ':authority', value => 'localhost', mode => 1 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
988 { name => 'x:foo', value => "x-bar", mode => 2 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
989 { name => 'referer', value => "see-this", mode => 1 }]});
1823
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
990 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
991
1823
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
992 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
993 is($frame->{headers}->{':status'}, 400, 'colon in header name');
1715
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
994
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
995 $s = Test::Nginx::HTTP2->new();
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
996 $sid = $s->new_stream({ headers => [
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
997 { name => ':method', value => 'GET', mode => 0 },
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
998 { name => ':scheme', value => 'http', mode => 0 },
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
999 { name => ':path', value => '/', mode => 0 },
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1000 { name => ':authority', value => 'localhost', mode => 1 },
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1001 { name => 'x foo', value => "bar", mode => 2 }]});
1823
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
1002 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1715
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1003
1823
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
1004 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
1005 is($frame->{headers}->{':status'}, 400, 'space in header name');
1715
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1006
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1007 $s = Test::Nginx::HTTP2->new();
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1008 $sid = $s->new_stream({ headers => [
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1009 { name => ':method', value => 'GET', mode => 0 },
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1010 { name => ':scheme', value => 'http', mode => 0 },
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1011 { name => ':path', value => '/', mode => 0 },
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1012 { name => ':authority', value => 'localhost', mode => 1 },
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1013 { name => "foo\x02", value => "bar", mode => 2 }]});
1823
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
1014 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
1715
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1015
1823
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
1016 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
1e1d0f3874b0 Tests: expect HTTP 400 on HTTP/2 header validation errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1717
diff changeset
1017 is($frame->{headers}->{':status'}, 400, 'control in header name');
1715
3604ef83c1aa Tests: added header name tests with forbidden characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1714
diff changeset
1018
1522
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1019 # header name with underscore - underscores_in_headers on
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1020
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1021 $s = Test::Nginx::HTTP2->new(port(8086));
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1022 $sid = $s->new_stream({ headers => [
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1023 { name => ':method', value => 'GET', mode => 0 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1024 { name => ':scheme', value => 'http', mode => 0 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1025 { name => ':path', value => '/', mode => 0 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1026 { name => ':authority', value => 'localhost', mode => 1 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1027 { name => 'x_foo', value => "x-bar", mode => 2 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1028 { name => 'referer', value => "see-this", mode => 1 }]});
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1029 $frames = $s->read(all => [{ type => 'HEADERS' }]);
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1030
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1031 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1032 is($frame->{headers}->{'x-sent-foo'}, 'x-bar',
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1033 'underscore in header name - underscores_in_headers');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1034
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1035 # header name with underscore - ignore_invalid_headers off
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1036
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1037 $s = Test::Nginx::HTTP2->new(port(8087));
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1038 $sid = $s->new_stream({ headers => [
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1039 { name => ':method', value => 'GET', mode => 0 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1040 { name => ':scheme', value => 'http', mode => 0 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1041 { name => ':path', value => '/', mode => 0 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1042 { name => ':authority', value => 'localhost', mode => 1 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1043 { name => 'x_foo', value => "x-bar", mode => 2 },
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1044 { name => 'referer', value => "see-this", mode => 1 }]});
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1045 $frames = $s->read(all => [{ type => 'HEADERS' }]);
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1046
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1047 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1048 is($frame->{headers}->{'x-sent-foo'}, 'x-bar',
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1049 'underscore in header name - ignore_invalid_headers');
d8684b300d22 Tests: ignore_invalid_headers, underscores_in_headers directives.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1483
diff changeset
1050
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1051 # missing mandatory request header ':scheme'
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1052
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
1053 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
1054 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1055 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1056 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1057 { name => ':authority', value => 'localhost', mode => 1 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
1058 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1059
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1060 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1061 is($frame->{headers}->{':status'}, 400, 'incomplete headers');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1062
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1063 # empty request header ':authority'
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1064
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
1065 $s = Test::Nginx::HTTP2->new();
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
1066 $sid = $s->new_stream({ headers => [
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1067 { name => ':method', value => 'GET', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1068 { name => ':scheme', value => 'http', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1069 { name => ':path', value => '/', mode => 0 },
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1070 { name => ':authority', value => '', mode => 0 }]});
948
4dc302d8e04f Tests: changed HTTP2 package to act as a class.
Sergey Kandaurov <pluknet@nginx.com>
parents: 945
diff changeset
1071 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1072
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1073 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1074 is($frame->{headers}->{':status'}, 400, 'empty authority');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1075
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1076 # client sent invalid :path header
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1077
1273
9b737ad4260b Tests: expect HTTP 400 on HTTP/2 pseudo-header parsing error.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1192
diff changeset
1078 $sid = $s->new_stream({ path => 't1.html' });
9b737ad4260b Tests: expect HTTP 400 on HTTP/2 pseudo-header parsing error.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1192
diff changeset
1079 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
9b737ad4260b Tests: expect HTTP 400 on HTTP/2 pseudo-header parsing error.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1192
diff changeset
1080
9b737ad4260b Tests: expect HTTP 400 on HTTP/2 pseudo-header parsing error.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1192
diff changeset
1081 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
9b737ad4260b Tests: expect HTTP 400 on HTTP/2 pseudo-header parsing error.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1192
diff changeset
1082 is($frame->{headers}->{':status'}, 400, 'invalid path');
9b737ad4260b Tests: expect HTTP 400 on HTTP/2 pseudo-header parsing error.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1192
diff changeset
1083
1714
e4e711d07e6c Tests: added URI tests with forbidden control characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
1084 $sid = $s->new_stream({ path => "/t1.html\x02" });
e4e711d07e6c Tests: added URI tests with forbidden control characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
1085 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
e4e711d07e6c Tests: added URI tests with forbidden control characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
1086
e4e711d07e6c Tests: added URI tests with forbidden control characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
1087 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
e4e711d07e6c Tests: added URI tests with forbidden control characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
1088 is($frame->{headers}->{':status'}, 400, 'invalid path control');
e4e711d07e6c Tests: added URI tests with forbidden control characters.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1693
diff changeset
1089
1549
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1090 # ngx_http_v2_parse_int() error handling
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1091
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1092 # NGX_ERROR
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1093
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1094 $s = Test::Nginx::HTTP2->new();
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1095 {
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1096 local $SIG{PIPE} = 'IGNORE';
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1097 syswrite($s->{socket}, pack("x2C3NC", 1, 0x1, 5, 1, 0xff));
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1098 }
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1099 $frames = $s->read(all => [{ type => "GOAWAY" }]);
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1100
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1101 ($frame) = grep { $_->{type} eq 'GOAWAY' } @$frames;
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1102 is($frame->{code}, 0x6, 'invalid index length');
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1103
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1104 $s = Test::Nginx::HTTP2->new();
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1105 {
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1106 local $SIG{PIPE} = 'IGNORE';
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1107 syswrite($s->{socket}, pack("x2C3NC2", 2, 0x1, 5, 1, 0x42, 0xff));
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1108 }
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1109 $frames = $s->read(all => [{ type => "GOAWAY" }]);
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1110
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1111 ($frame) = grep { $_->{type} eq 'GOAWAY' } @$frames;
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1112 is($frame->{code}, 0x6, 'invalid literal length');
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1113
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1114 # NGX_DECLINED
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1115
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1116 $s = Test::Nginx::HTTP2->new();
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1117 {
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1118 local $SIG{PIPE} = 'IGNORE';
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1119 syswrite($s->{socket}, pack("x2C3NN", 5, 0x1, 5, 1, 0xffffffff));
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1120 }
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1121 $frames = $s->read(all => [{ type => "GOAWAY" }]);
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1122
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1123 ($frame) = grep { $_->{type} eq 'GOAWAY' } @$frames;
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1124 is($frame->{code}, 0x9, 'too long index');
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1125
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1126 $s = Test::Nginx::HTTP2->new();
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1127 {
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1128 local $SIG{PIPE} = 'IGNORE';
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1129 syswrite($s->{socket}, pack("x2C3NCN", 6, 0x1, 5, 1, 0x42, 0xffffffff));
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1130 }
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1131 $frames = $s->read(all => [{ type => "GOAWAY" }]);
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1132
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1133 ($frame) = grep { $_->{type} eq 'GOAWAY' } @$frames;
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1134 is($frame->{code}, 0x9, 'too long literal');
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1135
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1136 # NGX_AGAIN
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1137
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1138 $s = Test::Nginx::HTTP2->new();
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1139 $sid = $s->new_stream({ split => [35], split_delay => 1.1, headers => [
1717
3052d6ea8ff3 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1715
diff changeset
1140 { name => ':method', value => 'GET', mode => 3, huff => 0 },
3052d6ea8ff3 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1715
diff changeset
1141 { name => ':scheme', value => 'http', mode => 3, huff => 0 },
3052d6ea8ff3 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1715
diff changeset
1142 { name => ':path', value => '/', mode => 3, huff => 0 },
3052d6ea8ff3 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1715
diff changeset
1143 { name => ':authority', value => 'localhost', mode => 3, huff => 0 },
3052d6ea8ff3 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1715
diff changeset
1144 { name => 'referer', value => 'foo', mode => 3, huff => 0 }]});
1549
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1145 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1146
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1147 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1148 is($frame->{headers}->{'x-referer'}, 'foo', 'header split index');
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1149
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1150 $s = Test::Nginx::HTTP2->new();
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1151 $sid = $s->new_stream({ split => [37], split_delay => 1.1, headers => [
1717
3052d6ea8ff3 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1715
diff changeset
1152 { name => ':method', value => 'GET', mode => 3, huff => 0 },
3052d6ea8ff3 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1715
diff changeset
1153 { name => ':scheme', value => 'http', mode => 3, huff => 0 },
3052d6ea8ff3 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1715
diff changeset
1154 { name => ':path', value => '/', mode => 3, huff => 0 },
3052d6ea8ff3 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1715
diff changeset
1155 { name => ':authority', value => 'localhost', mode => 3, huff => 0 },
3052d6ea8ff3 Tests: style.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1715
diff changeset
1156 { name => 'referer', value => '1234' x 32, mode => 3, huff => 0 }]});
1549
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1157 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]);
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1158
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1159 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames;
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1160 is($frame->{headers}->{'x-referer'}, '1234' x 32, 'header split field length');
6c9e3e20af97 Tests: HTTP/2 tests for error handling in parsing HPACK integers.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1522
diff changeset
1161
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1162 ###############################################################################
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1163
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1164 sub http_daemon {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1165 my $server = IO::Socket::INET->new(
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1166 Proto => 'tcp',
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1167 LocalHost => '127.0.0.1',
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
1168 LocalPort => port(8083),
876
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1169 Listen => 5,
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1170 Reuse => 1
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1171 )
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1172 or die "Can't create listening socket: $!\n";
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1173
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1174 local $SIG{PIPE} = 'IGNORE';
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1175
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1176 while (my $client = $server->accept()) {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1177 $client->autoflush(1);
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1178
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1179 my $headers = '';
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1180 my $uri = '';
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1181
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1182 while (<$client>) {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1183 $headers .= $_;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1184 last if (/^\x0d?\x0a?$/);
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1185 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1186
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1187 next if $headers eq '';
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1188 $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1189
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1190 if ($uri eq '/cookie') {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1191
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1192 my ($cookie, $cookie2) = $headers =~ /Cookie: (.+)/ig;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1193 $cookie2 = '' unless defined $cookie2;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1194
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1195 my ($cookie_a, $cookie_c) = ('', '');
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1196 $cookie_a = $1 if $headers =~ /X-Cookie-a: (.+)/i;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1197 $cookie_c = $1 if $headers =~ /X-Cookie-c: (.+)/i;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1198
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1199 print $client <<EOF;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1200 HTTP/1.1 200 OK
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1201 Connection: close
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1202 X-Sent-Cookie: $cookie
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1203 X-Sent-Cookie2: $cookie2
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1204 X-Sent-Cookie-a: $cookie_a
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1205 X-Sent-Cookie-c: $cookie_c
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1206
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1207 EOF
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1208
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1209 } elsif ($uri eq '/set-cookie') {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1210
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1211 print $client <<EOF;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1212 HTTP/1.1 200 OK
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1213 Connection: close
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1214 Set-Cookie: a=b
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1215 Set-Cookie: c=d
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1216
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1217 EOF
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1218
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1219 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1220
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1221 } continue {
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1222 close $client;
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1223 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1224 }
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1225
a6abbfed42c0 Tests: split HTTP/2 tests, HTTP2 package introduced.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff changeset
1226 ###############################################################################