Mercurial > hg > nginx-tests
annotate h3_headers.t @ 1888:cc13f7b098db
Tests: avoid premature stream reset in h3_limit_req.t.
STREAM and RESET_STREAM frames could be batched, which prevents the stream
from being processed and changes the status code. The fix is to wait for
the stream acknowledgment. Here we just look at the largest acknowledged,
this should be enough for simple cases.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 04 Apr 2023 00:33:54 +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 ############################################################################### |