Mercurial > hg > nginx-tests
annotate h3_headers.t @ 1878:b69bae343c53
Tests: HTTP/3 keepalive tests.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 12 Jan 2023 14:09:25 +0400 |
parents | 74cb9454a13e |
children | ff50c265a5ac |
rev | line source |
---|---|
1876
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
2 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
3 # (C) Sergey Kandaurov |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
5 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
6 # Tests for HTTP/3 headers. |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
7 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
9 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
11 use strict; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
12 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
14 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
16 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
17 use lib 'lib'; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
18 use Test::Nginx; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
19 use Test::Nginx::HTTP3; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
20 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
21 ############################################################################### |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
22 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
25 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
26 eval { require Crypt::Misc; die if $Crypt::Misc::VERSION < 0.067; }; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
27 plan(skip_all => 'CryptX version >= 0.067 required') if $@; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
28 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
29 my $t = Test::Nginx->new()->has(qw/http http_v3 proxy rewrite/) |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
30 ->has_daemon('openssl')->plan(66) |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
31 ->write_file_expand('nginx.conf', <<'EOF'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
32 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
33 %%TEST_GLOBALS%% |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
34 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
35 daemon off; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
36 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
37 events { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
38 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
39 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
40 http { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
41 %%TEST_GLOBALS_HTTP%% |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
42 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
43 ssl_certificate_key localhost.key; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
44 ssl_certificate localhost.crt; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
45 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
46 server { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
47 listen 127.0.0.1:%%PORT_8980_UDP%% quic; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
48 listen 127.0.0.1:8081; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
49 server_name localhost; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
50 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
51 location / { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
52 add_header X-Sent-Foo $http_x_foo; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
53 add_header X-Referer $http_referer; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
54 add_header X-Path $uri; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
55 return 200; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
56 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
57 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
58 location /proxy/ { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
59 add_header X-UC-a $upstream_cookie_a; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
60 add_header X-UC-c $upstream_cookie_c; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
61 proxy_pass http://127.0.0.1:8083/; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
62 proxy_set_header X-Cookie-a $cookie_a; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
63 proxy_set_header X-Cookie-c $cookie_c; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
64 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
65 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
66 location /proxy2/ { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
67 proxy_pass http://127.0.0.1:8081/; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
68 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
69 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
70 location /set-cookie { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
71 add_header Set-Cookie a=b; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
72 add_header Set-Cookie c=d; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
73 return 200; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
74 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
75 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
76 location /cookie { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
77 add_header X-Cookie $http_cookie; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
78 add_header X-Cookie-a $cookie_a; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
79 add_header X-Cookie-c $cookie_c; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
80 return 200; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
81 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
82 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
83 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
84 server { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
85 listen 127.0.0.1:%%PORT_8984_UDP%% quic; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
86 server_name localhost; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
87 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
88 large_client_header_buffers 4 512; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
89 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
90 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
91 server { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
92 listen 127.0.0.1:%%PORT_8985_UDP%% quic; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
93 server_name localhost; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
94 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
95 large_client_header_buffers 1 512; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
96 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
97 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
98 server { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
99 listen 127.0.0.1:%%PORT_8986_UDP%% quic; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
100 server_name localhost; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
101 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
102 underscores_in_headers on; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
103 add_header X-Sent-Foo $http_x_foo always; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
104 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
105 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
106 server { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
107 listen 127.0.0.1:%%PORT_8987_UDP%% quic; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
108 server_name localhost; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
109 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
110 ignore_invalid_headers off; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
111 add_header X-Sent-Foo $http_x_foo always; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
112 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
113 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
114 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
115 EOF |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
116 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
117 $t->write_file('openssl.conf', <<EOF); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
118 [ req ] |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
119 default_bits = 2048 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
120 encrypt_key = no |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
121 distinguished_name = req_distinguished_name |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
122 [ req_distinguished_name ] |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
123 EOF |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
124 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
125 my $d = $t->testdir(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
126 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
127 foreach my $name ('localhost') { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
128 system('openssl req -x509 -new ' |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
129 . "-config $d/openssl.conf -subj /CN=$name/ " |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
130 . "-out $d/$name.crt -keyout $d/$name.key " |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
131 . ">>$d/openssl.out 2>&1") == 0 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
132 or die "Can't create certificate for $name: $!\n"; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
133 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
134 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
135 $t->run_daemon(\&http_daemon); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
136 $t->run()->waitforsocket('127.0.0.1:' . port(8083)); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
137 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
138 $t->write_file('t2.html', 'SEE-THIS'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
139 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
140 ############################################################################### |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
141 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
142 my ($s, $sid, $frames, $frame); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
143 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
144 # 4.5.2. Indexed Field Line |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
145 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
146 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
147 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
148 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
149 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
150 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
151 { name => ':authority', value => 'localhost', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
152 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
153 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
154 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
155 is($frame->{headers}->{'x-path'}, '/', 'indexed'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
156 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
157 $s->insert_literal(':path', '/foo'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
158 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
159 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
160 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
161 { name => ':path', value => '/foo', mode => 0, dyn => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
162 { name => ':authority', value => 'localhost', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
163 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
164 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
165 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
166 is($frame->{headers}->{'x-path'}, '/foo', 'indexed dynamic'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
167 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
168 $s->insert_literal(':path', '/bar', huff => 1); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
169 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
170 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
171 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
172 { name => ':path', value => '/bar', mode => 0, dyn => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
173 { name => ':authority', value => 'localhost', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
174 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
175 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
176 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
177 is($frame->{headers}->{'x-path'}, '/bar', 'indexed dynamic huffman'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
178 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
179 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
180 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
181 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
182 { name => ':path', value => '/foo', mode => 0, dyn => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
183 { name => ':authority', value => 'localhost', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
184 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
185 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
186 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
187 is($frame->{headers}->{'x-path'}, '/foo', 'indexed dynamic previous'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
188 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
189 $s->insert_reference(':path', '/qux'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
190 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
191 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
192 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
193 { name => ':path', value => '/qux', mode => 0, dyn => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
194 { name => ':authority', value => 'localhost', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
195 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
196 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
197 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
198 is($frame->{headers}->{'x-path'}, '/qux', 'indexed reference'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
199 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
200 $s->insert_reference(':path', '/corge', dyn => 1); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
201 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
202 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
203 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
204 { name => ':path', value => '/corge', mode => 0, dyn => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
205 { name => ':authority', value => 'localhost', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
206 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
207 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
208 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
209 is($frame->{headers}->{'x-path'}, '/corge', 'indexed reference dynamic'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
210 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
211 $s->insert_reference(':path', '/grault', huff => 1); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
212 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
213 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
214 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
215 { name => ':path', value => '/grault', mode => 0, dyn => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
216 { name => ':authority', value => 'localhost', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
217 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
218 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
219 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
220 is($frame->{headers}->{'x-path'}, '/grault', 'indexed reference huffman'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
221 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
222 # 4.5.3. Indexed Field Line with Post-Base Index |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
223 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
224 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
225 $s->insert_literal(':path', '/foo'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
226 $sid = $s->new_stream({ base => -1, headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
227 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
228 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
229 { name => ':path', value => '/foo', mode => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
230 { name => ':authority', value => 'localhost', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
231 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
232 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
233 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
234 is($frame->{headers}->{'x-path'}, '/foo', 'post-base index'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
235 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
236 # 4.5.4. Literal Field Line with Name Reference |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
237 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
238 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
239 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
240 { name => ':method', value => 'GET', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
241 { name => ':scheme', value => 'http', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
242 { name => ':path', value => '/', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
243 { name => ':authority', value => 'localhost', mode => 2 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
244 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
245 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
246 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
247 is($frame->{headers}->{':status'}, 200, 'reference'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
248 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
249 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
250 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
251 { name => ':method', value => 'GET', mode => 2, huff => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
252 { name => ':scheme', value => 'http', mode => 2, huff => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
253 { name => ':path', value => '/', mode => 2, huff => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
254 { name => ':authority', value => 'localhost', mode => 2, huff => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
255 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
256 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
257 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
258 is($frame->{headers}->{':status'}, 200, 'reference huffman'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
259 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
260 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
261 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
262 { name => ':method', value => 'GET', mode => 2, ni => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
263 { name => ':scheme', value => 'http', mode => 2, ni => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
264 { name => ':path', value => '/', mode => 2, ni => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
265 { name => ':authority', value => 'localhost', mode => 2, ni => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
266 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
267 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
268 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
269 is($frame->{headers}->{':status'}, 200, 'reference never indexed'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
270 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
271 $s->insert_literal('x-foo', 'X-Bar'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
272 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
273 { name => ':method', value => 'GET', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
274 { name => ':scheme', value => 'http', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
275 { name => ':path', value => '/', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
276 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
277 { name => 'x-foo', value => 'X-Baz', mode => 2, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
278 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
279 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
280 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
281 is($frame->{headers}->{'x-sent-foo'}, 'X-Baz', 'reference dynamic'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
282 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
283 # 4.5.5. Literal Field Line with Post-Base Name Reference |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
284 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
285 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
286 $s->insert_literal('x-foo', 'X-Bar'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
287 $sid = $s->new_stream({ base => -1, headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
288 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
289 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
290 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
291 { name => ':authority', value => 'localhost', mode => 4 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
292 { name => 'x-foo', value => 'X-Baz', mode => 3 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
293 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
294 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
295 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
296 is($frame->{headers}->{'x-sent-foo'}, 'X-Baz', 'base-base ref'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
297 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
298 $sid = $s->new_stream({ base => -1, headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
299 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
300 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
301 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
302 { name => ':authority', value => 'localhost', mode => 4 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
303 { name => 'x-foo', value => 'X-Baz', mode => 3, huff => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
304 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
305 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
306 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
307 is($frame->{headers}->{'x-sent-foo'}, 'X-Baz', 'post-base ref huffman'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
308 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
309 $sid = $s->new_stream({ base => -1, headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
310 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
311 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
312 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
313 { name => ':authority', value => 'localhost', mode => 4 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
314 { name => 'x-foo', value => 'X-Baz', mode => 3, ni => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
315 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
316 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
317 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
318 is($frame->{headers}->{'x-sent-foo'}, 'X-Baz', 'post-base ref never indexed'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
319 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
320 # 4.5.6. Literal Field Line with Literal Name |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
321 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
322 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
323 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
324 { name => ':method', value => 'GET', mode => 4 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
325 { name => ':scheme', value => 'http', mode => 4 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
326 { name => ':path', value => '/', mode => 4 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
327 { name => ':authority', value => 'localhost', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
328 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
329 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
330 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
331 is($frame->{headers}->{':status'}, 200, 'literal'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
332 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
333 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
334 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
335 { name => ':method', value => 'GET', mode => 4, huff => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
336 { name => ':scheme', value => 'http', mode => 4, huff => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
337 { name => ':path', value => '/', mode => 4, huff => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
338 { name => ':authority', value => 'localhost', mode => 4, huff => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
339 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
340 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
341 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
342 is($frame->{headers}->{':status'}, 200, 'literal huffman'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
343 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
344 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
345 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
346 { name => ':method', value => 'GET', mode => 4, ni => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
347 { name => ':scheme', value => 'http', mode => 4, ni => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
348 { name => ':path', value => '/', mode => 4, ni => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
349 { name => ':authority', value => 'localhost', mode => 4, ni => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
350 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
351 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
352 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
353 is($frame->{headers}->{':status'}, 200, 'literal never indexed'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
354 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
355 # response header field with characters not suitable for huffman encoding |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
356 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
357 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
358 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
359 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
360 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
361 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
362 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
363 { name => 'x-foo', value => '{{{{{', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
364 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
365 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
366 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
367 is($frame->{headers}->{'x-sent-foo'}, '{{{{{', 'rare chars'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
368 like($s->{headers}, qr/\Q{{{{{/, 'rare chars - no huffman encoding'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
369 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
370 # response header field with huffman encoding |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
371 # NB: implementation detail, not obligated |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
372 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
373 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
374 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
375 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
376 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
377 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
378 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
379 { name => 'x-foo', value => 'aaaaa', mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
380 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
381 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
382 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
383 is($frame->{headers}->{'x-sent-foo'}, 'aaaaa', 'well known chars'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
384 unlike($s->{headers}, qr/aaaaa/, 'well known chars - huffman encoding'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
385 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
386 # response header field with huffman encoding - complete table mod \0, CR, LF |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
387 # first saturate with short-encoded characters (NB: implementation detail) |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
388 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
389 my $field = pack "C*", ((map { 97 } (1 .. 862)), 1 .. 9, 11, 12, 14 .. 255); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
390 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
391 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
392 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
393 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
394 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
395 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
396 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
397 { name => 'x-foo', value => $field, mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
398 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
399 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
400 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
401 is($frame->{headers}->{'x-sent-foo'}, $field, 'all chars'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
402 unlike($s->{headers}, qr/abcde/, 'all chars - huffman encoding'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
403 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
404 # 3.2.2. Dynamic Table Capacity and Eviction |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
405 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
406 # remove some indexed headers from the dynamic table |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
407 # by maintaining dynamic table space only for index 0 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
408 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
409 $s = Test::Nginx::HTTP3->new(undef, capacity => 64); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
410 $s->insert_literal('x-foo', 'X-Bar'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
411 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
412 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
413 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
414 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
415 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
416 { name => 'x-foo', value => 'X-Bar', mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
417 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
418 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
419 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
420 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'capacity insert'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
421 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
422 $s->insert_literal('x-foo', 'X-Baz'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
423 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
424 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
425 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
426 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
427 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
428 { name => 'x-foo', value => 'X-Baz', mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
429 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
430 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
431 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
432 is($frame->{headers}->{'x-sent-foo'}, 'X-Baz', 'capacity replace'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
433 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
434 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
435 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
436 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
437 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
438 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
439 { name => 'x-foo', value => 'X-Bar', mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
440 $frames = $s->read(all => [{ type => 'DECODER_C' }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
441 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
442 ($frame) = grep { $_->{type} eq "DECODER_C" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
443 is($frame->{'val'}, $sid, 'capacity eviction'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
444 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
445 # insert with referenced entry eviction |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
446 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
447 $s = Test::Nginx::HTTP3->new(undef, capacity => 64); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
448 $s->insert_literal('x-foo', 'X-Bar'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
449 $s->insert_reference('x-foo', 'X-Baz', dyn => 1); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
450 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
451 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
452 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
453 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
454 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
455 { name => 'x-foo', value => 'X-Baz', mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
456 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
457 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
458 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
459 is($frame->{headers}->{'x-sent-foo'}, 'X-Baz', 'insert ref eviction'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
460 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
461 $s = Test::Nginx::HTTP3->new(undef, capacity => 64); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
462 $s->insert_literal('x-foo', 'X-Bar'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
463 $s->duplicate('x-foo'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
464 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
465 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
466 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
467 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
468 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
469 { name => 'x-foo', value => 'X-Bar', mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
470 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
471 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
472 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
473 is($frame->{headers}->{'x-sent-foo'}, 'X-Bar', 'duplicate eviction'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
474 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
475 # invalid capacity |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
476 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
477 $s = Test::Nginx::HTTP3->new(undef, capacity => 4097); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
478 $frames = $s->read(all => [{ type => 'CONNECTION_CLOSE' }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
479 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
480 ($frame) = grep { $_->{type} eq "CONNECTION_CLOSE" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
481 is($frame->{'phrase'}, 'stream error', 'capacity invalid'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
482 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
483 # request header field with multiple values |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
484 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
485 # 4.2.1. Field Compression |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
486 # To allow for better compression efficiency, the Cookie header field |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
487 # MAY be split into separate field lines <..>. |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
488 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
489 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
490 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
491 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
492 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
493 { name => ':path', value => '/cookie', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
494 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
495 { name => 'cookie', value => 'a=b', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
496 { name => 'cookie', value => 'c=d', mode => 2 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
497 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
498 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
499 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
500 is($frame->{headers}->{'x-cookie-a'}, 'b', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
501 'multiple request header fields - cookie'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
502 is($frame->{headers}->{'x-cookie-c'}, 'd', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
503 'multiple request header fields - cookie 2'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
504 is($frame->{headers}->{'x-cookie'}, 'a=b; c=d', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
505 'multiple request header fields - semi-colon'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
506 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
507 # request header field with multiple values to HTTP backend |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
508 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
509 # 4.2.1. Field Compression |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
510 # these MUST be concatenated into a single byte string |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
511 # using the two-byte delimiter of "; " (ASCII 0x3b, 0x20) |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
512 # before being passed into a context other than HTTP/2 or |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
513 # HTTP/3, such as an HTTP/1.1 connection <..> |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
514 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
515 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
516 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
517 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
518 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
519 { name => ':path', value => '/proxy/cookie', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
520 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
521 { name => 'cookie', value => 'a=b', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
522 { name => 'cookie', value => 'c=d', mode => 2 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
523 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
524 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
525 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
526 is($frame->{headers}->{'x-sent-cookie'}, 'a=b; c=d', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
527 'multiple request header fields proxied - semi-colon'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
528 is($frame->{headers}->{'x-sent-cookie2'}, '', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
529 'multiple request header fields proxied - dublicate cookie'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
530 is($frame->{headers}->{'x-sent-cookie-a'}, 'b', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
531 'multiple request header fields proxied - cookie 1'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
532 is($frame->{headers}->{'x-sent-cookie-c'}, 'd', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
533 'multiple request header fields proxied - cookie 2'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
534 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
535 # response header field with multiple values |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
536 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
537 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
538 $sid = $s->new_stream({ path => '/set-cookie' }); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
539 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
540 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
541 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
542 is($frame->{headers}->{'set-cookie'}[0], 'a=b', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
543 'multiple response header fields - cookie'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
544 is($frame->{headers}->{'set-cookie'}[1], 'c=d', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
545 'multiple response header fields - cookie 2'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
546 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
547 # response header field with multiple values from HTTP backend |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
548 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
549 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
550 $sid = $s->new_stream({ path => '/proxy/set-cookie' }); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
551 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
552 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
553 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
554 is($frame->{headers}->{'set-cookie'}[0], 'a=b', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
555 'multiple response header proxied - cookie'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
556 is($frame->{headers}->{'set-cookie'}[1], 'c=d', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
557 'multiple response header proxied - cookie 2'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
558 is($frame->{headers}->{'x-uc-a'}, 'b', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
559 'multiple response header proxied - upstream cookie'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
560 is($frame->{headers}->{'x-uc-c'}, 'd', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
561 'multiple response header proxied - upstream cookie 2'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
562 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
563 # max_field_size - header field name |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
564 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
565 $s = Test::Nginx::HTTP3->new(8984, capacity => 2048); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
566 $s->insert_literal('x' x 511, 'value'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
567 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
568 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
569 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
570 { name => ':path', value => '/t2.html', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
571 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
572 { name => 'x' x 511, value => 'value', mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
573 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
574 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
575 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
576 ok($frame, 'field name size less'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
577 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
578 $s = Test::Nginx::HTTP3->new(8984, capacity => 2048); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
579 $s->insert_literal('x' x 512, 'value'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
580 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
581 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
582 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
583 { name => ':path', value => '/t2.html', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
584 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
585 { name => 'x' x 512, value => 'value', mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
586 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
587 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
588 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
589 ok($frame, 'field name size equal'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
590 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
591 $s = Test::Nginx::HTTP3->new(8984, capacity => 2048); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
592 $s->insert_literal('x' x 513, 'value'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
593 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
594 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
595 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
596 { name => ':path', value => '/t2.html', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
597 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
598 { name => 'x' x 513, value => 'value', mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
599 $frames = $s->read(all => [{ type => 'CONNECTION_CLOSE' }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
600 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
601 ($frame) = grep { $_->{type} eq "CONNECTION_CLOSE" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
602 is($frame->{'phrase'}, 'stream error', 'field name size greater'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
603 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
604 # max_field_size - header field value |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
605 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
606 $s = Test::Nginx::HTTP3->new(8984, capacity => 2048); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
607 $s->insert_literal('name', 'x' x 511); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
608 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
609 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
610 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
611 { name => ':path', value => '/t2.html', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
612 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
613 { name => 'name', value => 'x' x 511, mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
614 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
615 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
616 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
617 ok($frame, 'field value size less'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
618 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
619 $s = Test::Nginx::HTTP3->new(8984, capacity => 2048); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
620 $s->insert_literal('name', 'x' x 512); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
621 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
622 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
623 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
624 { name => ':path', value => '/t2.html', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
625 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
626 { name => 'name', value => 'x' x 512, mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
627 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
628 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
629 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
630 ok($frame, 'field value size equal'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
631 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
632 $s = Test::Nginx::HTTP3->new(8984, capacity => 2048); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
633 $s->insert_literal('name', 'x' x 513); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
634 $frames = $s->read(all => [{ type => 'CONNECTION_CLOSE' }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
635 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
636 ($frame) = grep { $_->{type} eq "CONNECTION_CLOSE" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
637 is($frame->{'phrase'}, 'stream error', 'field value size greater'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
638 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
639 # max_header_size |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
640 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
641 $s = Test::Nginx::HTTP3->new(8985, capacity => 2048); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
642 $s->insert_literal('longname', 'x' x 450); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
643 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
644 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
645 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
646 { name => ':path', value => '/t2.html', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
647 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
648 { name => 'longname', value => 'x' x 450, mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
649 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
650 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
651 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
652 ok($frame, 'header size less'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
653 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
654 $s = Test::Nginx::HTTP3->new(8985, capacity => 2048); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
655 $s->insert_literal('longname', 'x' x 451); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
656 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
657 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
658 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
659 { name => ':path', value => '/t2.html', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
660 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
661 { name => 'longname', value => 'x' x 451, mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
662 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
663 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
664 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
665 ok($frame, 'header size equal'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
666 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
667 $s = Test::Nginx::HTTP3->new(8985, capacity => 2048); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
668 $s->insert_literal('longname', 'x' x 452); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
669 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
670 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
671 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
672 { name => ':path', value => '/t2.html', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
673 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
674 { name => 'longname', value => 'x' x 452, mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
675 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
676 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
677 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
678 is($frame->{headers}->{':status'}, 400, 'header size greater'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
679 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
680 # header size is based on (decompressed) header list |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
681 # two extra 1-byte indices would otherwise fit in max_header_size |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
682 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
683 $s = Test::Nginx::HTTP3->new(8985, capacity => 2048); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
684 $s->insert_literal('longname', 'x' x 400); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
685 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
686 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
687 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
688 { name => ':path', value => '/t2.html', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
689 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
690 { name => 'longname', value => 'x' x 400, mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
691 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
692 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
693 ($frame) = grep { $_->{type} eq "DATA" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
694 ok($frame, 'header size indexed'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
695 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
696 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
697 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
698 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
699 { name => ':path', value => '/t2.html', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
700 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
701 { name => 'longname', value => 'x' x 400, mode => 0, dyn => 1 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
702 { name => 'longname', value => 'x' x 400, mode => 0, dyn => 1 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
703 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
704 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
705 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
706 is($frame->{headers}->{':status'}, 400, 'header size indexed greater'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
707 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
708 # ensure that request header field value with newline doesn't get split |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
709 # |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
710 # 10.3. Intermediary-Encapsulation Attacks |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
711 # Requests or responses containing invalid field names MUST be treated |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
712 # as malformed. |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
713 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
714 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
715 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
716 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
717 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
718 { name => ':path', value => '/proxy2/', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
719 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
720 { name => 'x-foo', value => "x-bar\r\nreferer:see-this", mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
721 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
722 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
723 # 10.3. Intermediary Encapsulation Attacks |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
724 # Therefore, an intermediary cannot translate an HTTP/3 request or response |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
725 # containing an invalid field name into an HTTP/1.1 message. |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
726 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
727 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
728 isnt($frame->{headers}->{'x-referer'}, 'see-this', 'newline in request header'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
729 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
730 is($frame->{headers}->{':status'}, 400, 'newline in request header - bad request'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
731 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
732 # invalid header name as seen with underscore should not lead to ignoring rest |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
733 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
734 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
735 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
736 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
737 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
738 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
739 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
740 { name => 'x_foo', value => "x-bar", mode => 4 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
741 { name => 'referer', value => "see-this", mode => 2 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
742 $frames = $s->read(all => [{ type => 'HEADERS' }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
743 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
744 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
745 is($frame->{headers}->{'x-referer'}, 'see-this', 'after invalid header name'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
746 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
747 # other invalid header name characters as seen with ':' |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
748 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
749 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
750 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
751 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
752 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
753 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
754 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
755 { name => 'x:foo', value => "x-bar", mode => 4 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
756 { name => 'referer', value => "see-this", mode => 2 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
757 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
758 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
759 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
760 is($frame->{headers}->{':status'}, 400, 'colon in header name'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
761 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
762 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
763 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
764 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
765 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
766 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
767 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
768 { name => 'x foo', value => "bar", mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
769 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
770 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
771 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
772 is($frame->{headers}->{':status'}, 400, 'space in header name'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
773 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
774 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
775 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
776 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
777 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
778 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
779 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
780 { name => "foo\x02", value => "bar", mode => 4 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
781 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
782 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
783 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
784 is($frame->{headers}->{':status'}, 400, 'control in header name'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
785 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
786 # header name with underscore - underscores_in_headers on |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
787 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
788 $s = Test::Nginx::HTTP3->new(8986); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
789 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
790 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
791 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
792 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
793 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
794 { name => 'x_foo', value => "x-bar", mode => 4 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
795 { name => 'referer', value => "see-this", mode => 2 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
796 $frames = $s->read(all => [{ type => 'HEADERS' }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
797 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
798 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
799 is($frame->{headers}->{'x-sent-foo'}, 'x-bar', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
800 'underscore in header name - underscores_in_headers'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
801 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
802 # header name with underscore - ignore_invalid_headers off |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
803 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
804 $s = Test::Nginx::HTTP3->new(8987); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
805 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
806 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
807 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
808 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
809 { name => ':authority', value => 'localhost', mode => 2 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
810 { name => 'x_foo', value => "x-bar", mode => 4 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
811 { name => 'referer', value => "see-this", mode => 2 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
812 $frames = $s->read(all => [{ type => 'HEADERS' }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
813 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
814 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
815 is($frame->{headers}->{'x-sent-foo'}, 'x-bar', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
816 'underscore in header name - ignore_invalid_headers'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
817 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
818 # missing mandatory request header ':scheme' |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
819 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
820 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
821 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
822 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
823 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
824 { name => ':authority', value => 'localhost', mode => 2 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
825 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
826 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
827 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
828 is($frame->{headers}->{':status'}, 400, 'incomplete headers'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
829 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
830 # empty request header ':authority' |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
831 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
832 $s = Test::Nginx::HTTP3->new(); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
833 $sid = $s->new_stream({ headers => [ |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
834 { name => ':method', value => 'GET', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
835 { name => ':scheme', value => 'http', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
836 { name => ':path', value => '/', mode => 0 }, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
837 { name => ':authority', value => '', mode => 0 }]}); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
838 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
839 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
840 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
841 is($frame->{headers}->{':status'}, 400, 'empty authority'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
842 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
843 # client sent invalid :path header |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
844 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
845 $sid = $s->new_stream({ path => 't2.html' }); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
846 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
847 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
848 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
849 is($frame->{headers}->{':status'}, 400, 'invalid path'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
850 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
851 $sid = $s->new_stream({ path => "/t2.html\x02" }); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
852 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
853 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
854 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
855 is($frame->{headers}->{':status'}, 400, 'invalid path control'); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
856 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
857 ############################################################################### |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
858 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
859 sub http_daemon { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
860 my $server = IO::Socket::INET->new( |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
861 Proto => 'tcp', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
862 LocalHost => '127.0.0.1', |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
863 LocalPort => port(8083), |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
864 Listen => 5, |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
865 Reuse => 1 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
866 ) |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
867 or die "Can't create listening socket: $!\n"; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
868 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
869 local $SIG{PIPE} = 'IGNORE'; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
870 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
871 while (my $client = $server->accept()) { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
872 $client->autoflush(1); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
873 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
874 my $headers = ''; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
875 my $uri = ''; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
876 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
877 while (<$client>) { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
878 $headers .= $_; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
879 last if (/^\x0d?\x0a?$/); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
880 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
881 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
882 next if $headers eq ''; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
883 $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
884 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
885 if ($uri eq '/cookie') { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
886 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
887 my ($cookie, $cookie2) = $headers =~ /Cookie: (.+)/ig; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
888 $cookie2 = '' unless defined $cookie2; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
889 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
890 my ($cookie_a, $cookie_c) = ('', ''); |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
891 $cookie_a = $1 if $headers =~ /X-Cookie-a: (.+)/i; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
892 $cookie_c = $1 if $headers =~ /X-Cookie-c: (.+)/i; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
893 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
894 print $client <<EOF; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
895 HTTP/1.1 200 OK |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
896 Connection: close |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
897 X-Sent-Cookie: $cookie |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
898 X-Sent-Cookie2: $cookie2 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
899 X-Sent-Cookie-a: $cookie_a |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
900 X-Sent-Cookie-c: $cookie_c |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
901 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
902 EOF |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
903 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
904 } elsif ($uri eq '/set-cookie') { |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
905 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
906 print $client <<EOF; |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
907 HTTP/1.1 200 OK |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
908 Connection: close |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
909 Set-Cookie: a=b |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
910 Set-Cookie: c=d |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
911 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
912 EOF |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
913 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
914 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
915 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
916 } |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
917 |
74cb9454a13e
Tests: HTTP/3 header tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff
changeset
|
918 ############################################################################### |