annotate h3_headers.t @ 1940:aec72dcee93b

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