annotate h3_headers.t @ 1883:ff50c265a5ac

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