annotate h3_headers.t @ 1888:cc13f7b098db

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