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