Mercurial > hg > nginx-tests
annotate h2_request_body_extra.t @ 1938:e1059682aeef
Tests: fixed ClientHello with resending Initial QUIC packets.
Previously it was rebuilt each time using distinct ClientHello.random
resulting in different CRYPTO payload. As such, it led to TLS digest
hash and derived secrets mismatch when resending Initial packet. Now
ClientHello is built once and reused when resending Initial packets.
Additionally, this required to preserve a generated secret value used
in shared secret calculation as part of TLS key schedule. Previously
it was regenerated when receiving a Retry packet, but this won't work
with reused ClientHello as the resulting shared secrets won't match.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Wed, 30 Aug 2023 02:22:58 +0400 |
parents | 2a0a6035a1af |
children |
rev | line source |
---|---|
1726
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 # Tests for HTTP/2 protocol with request body, additional tests. |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 ############################################################################### |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use warnings; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 use strict; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 use Test::More; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 use lib 'lib'; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 use Test::Nginx; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 use Test::Nginx::HTTP2; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 ############################################################################### |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 my $t = Test::Nginx->new()->has(qw/http http_v2 proxy rewrite/); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 $t->write_file_expand('nginx.conf', <<'EOF'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 %%TEST_GLOBALS%% |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 daemon off; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 events { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 http { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 %%TEST_GLOBALS_HTTP%% |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 server { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 listen 127.0.0.1:8080 http2; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 listen 127.0.0.1:8081; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 server_name localhost; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 client_header_buffer_size 1k; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 client_body_buffer_size 2k; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 location / { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 add_header X-Body $request_body; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 add_header X-Body-File $request_body_file; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 proxy_pass http://127.0.0.1:8082; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 location /file { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 client_body_in_file_only on; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 add_header X-Body "$request_body"; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 add_header X-Body-File "$request_body_file"; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 proxy_pass http://127.0.0.1:8082; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 location /single { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 client_body_in_single_buffer on; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 add_header X-Body "$request_body"; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 add_header X-Body-File "$request_body_file"; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 proxy_pass http://127.0.0.1:8082; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 location /large { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 client_max_body_size 1k; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 proxy_pass http://127.0.0.1:8082; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 location /unbuf/ { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 add_header X-Unbuf-File "$request_body_file"; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 proxy_pass http://127.0.0.1:8081/; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 proxy_request_buffering off; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 proxy_http_version 1.1; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 server { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 listen 127.0.0.1:8082; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 server_name localhost; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 return 204; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 EOF |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 $t->plan(50); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 |
1900
236d038dc04a
Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1726
diff
changeset
|
92 # suppress deprecation warning |
236d038dc04a
Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1726
diff
changeset
|
93 |
236d038dc04a
Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1726
diff
changeset
|
94 open OLDERR, ">&", \*STDERR; close STDERR; |
1726
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 $t->run(); |
1900
236d038dc04a
Tests: suppress "listen .. http2;" deprecation warnings.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1726
diff
changeset
|
96 open STDERR, ">&", \*OLDERR; |
1726
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 ############################################################################### |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 # below are basic body tests from body.t, slightly |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 # adapted to HTTP/2, repeated multiple times with variations: |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 # |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 # buffered vs. non-buffered, length vs. chunked, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 # single frame vs. multiple frames |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 # |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 # some does not make sense in HTTP/2 (such as "body in two buffers"), but |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 # preserved for consistency and due to the fact that proxying via HTTP/1.1 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 # is used in unbuffered tests |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 unlike(http2_get('/'), qr/x-body:/ms, 'no body'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 like(http2_get_body('/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 qr/x-body: 0123456789$/ms, 'body'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 like(http2_get_body('/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 qr/x-body: (0123456789){128}$/ms, 'body in two buffers'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 like(http2_get_body('/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 qr/x-body-file/ms, 'body in file'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 like(read_body_file(http2_get_body('/file', '0123456789' x 512)), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
119 qr/^(0123456789){512}$/s, 'body in file only'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
120 like(http2_get_body('/single', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
121 qr/x-body: (0123456789){128}$/ms, 'body in single buffer'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
122 like(http2_get_body('/large', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
123 qr/:status: 413/, 'body too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
125 # without Content-Length header |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
126 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
127 like(http2_get_body_nolen('/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
128 qr/x-body: 0123456789$/ms, 'body nolen'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
129 like(http2_get_body_nolen('/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
130 qr/x-body: (0123456789){128}$/ms, 'body nolen in two buffers'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
131 like(http2_get_body_nolen('/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
132 qr/x-body-file/ms, 'body nolen in file'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
133 like(read_body_file(http2_get_body_nolen('/file', '0123456789' x 512)), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
134 qr/^(0123456789){512}$/s, 'body nolen in file only'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
135 like(http2_get_body_nolen('/single', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 qr/x-body: (0123456789){128}$/ms, 'body nolen in single buffer'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 like(http2_get_body_nolen('/large', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
138 qr/:status: 413/, 'body nolen too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
139 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
140 # with multiple frames |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
141 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 like(http2_get_body_multi('/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
143 qr/x-body: 0123456789$/ms, 'body multi'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
144 like(http2_get_body_multi('/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
145 qr/x-body: (0123456789){128}$/ms, 'body multi in two buffers'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
146 like(http2_get_body_multi('/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
147 qr/x-body-file/ms, 'body multi in file'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
148 like(read_body_file(http2_get_body_multi('/file', '0123456789' x 512)), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
149 qr/^(0123456789){512}$/s, 'body multi in file only'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
150 like(http2_get_body_multi('/single', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
151 qr/x-body: (0123456789){128}$/ms, 'body multi in single buffer'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 like(http2_get_body_multi('/large', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
153 qr/:status: 413/, 'body multi too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
155 # with multiple frames and without Content-Length header |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
156 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
157 like(http2_get_body_multi_nolen('/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
158 qr/x-body: 0123456789$/ms, 'body multi nolen'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
159 like(http2_get_body_multi_nolen('/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
160 qr/x-body: (0123456789){128}/ms, 'body multi nolen in two buffers'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
161 like(http2_get_body_multi_nolen('/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
162 qr/x-body-file/ms, 'body multi nolen in file'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
163 like(read_body_file(http2_get_body_multi_nolen('/file', '0123456789' x 512)), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
164 qr/^(0123456789){512}$/s, 'body multi nolen in file only'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
165 like(http2_get_body_multi_nolen('/single', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
166 qr/x-body: (0123456789){128}$/ms, 'body multi nolen in single buffer'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
167 like(http2_get_body_multi_nolen('/large', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
168 qr/:status: 413/, 'body multi nolen too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
169 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
170 # unbuffered |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 unlike(http2_get('/unbuf/'), qr/x-body:/ms, 'no body unbuf'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 like(http2_get_body('/unbuf/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 qr/x-body: 0123456789$/ms, 'body unbuf'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
176 like(http2_get_body('/unbuf/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
177 qr/x-body: (0123456789){128}$/ms, 'body unbuf in two buffers'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
178 like(http2_get_body('/unbuf/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
179 qr/(?!.*x-unbuf-file.*)x-body-file/ms, 'body unbuf in file'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
180 like(read_body_file(http2_get_body('/unbuf/file', '0123456789' x 512)), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 qr/^(0123456789){512}$/s, 'body unbuf in file only'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
182 like(http2_get_body('/unbuf/single', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
183 qr/x-body: (0123456789){128}$/ms, 'body unbuf in single buffer'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
184 like(http2_get_body('/unbuf/large', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
185 qr/:status: 413/, 'body unbuf too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
186 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
187 # unbuffered without Content-Length |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
188 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
189 like(http2_get_body_nolen('/unbuf/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
190 qr/x-body: 0123456789$/ms, 'body unbuf nolen'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
191 like(http2_get_body_nolen('/unbuf/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
192 qr/x-body: (0123456789){128}$/ms, 'body unbuf nolen in two buffers'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
193 like(http2_get_body_nolen('/unbuf/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
194 qr/(?!.*x-unbuf-file.*)x-body-file/ms, 'body unbuf nolen in file'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
195 like(read_body_file(http2_get_body_nolen('/unbuf/file', '0123456789' x 512)), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
196 qr/^(0123456789){512}$/s, 'body unbuf nolen in file only'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
197 like(http2_get_body_nolen('/unbuf/single', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
198 qr/x-body: (0123456789){128}$/ms, 'body unbuf nolen in single buffer'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
199 like(http2_get_body_nolen('/unbuf/large', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
200 qr/:status: 413/, 'body unbuf nolen too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
201 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
202 # unbuffered with multiple frames |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
203 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
204 like(http2_get_body_multi('/unbuf/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
205 qr/x-body: 0123456789$/ms, 'body unbuf multi'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
206 like(http2_get_body_multi('/unbuf/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
207 qr/x-body: (0123456789){128}$/ms, 'body unbuf multi in two buffers'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
208 like(http2_get_body_multi('/unbuf/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
209 qr/(?!.*x-unbuf-file.*)x-body-file/ms, 'body unbuf multi in file'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
210 like(read_body_file(http2_get_body_multi('/unbuf/file', '0123456789' x 512)), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
211 qr/^(0123456789){512}$/s, 'body unbuf multi in file only'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
212 like(http2_get_body_multi('/unbuf/single', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
213 qr/x-body: (0123456789){128}$/ms, 'body unbuf multi in single buffer'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
214 like(http2_get_body_multi('/unbuf/large', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
215 qr/:status: 413/, 'body unbuf multi too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
216 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
217 # unbuffered with multiple frames and without Content-Length |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
218 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
219 like(http2_get_body_multi_nolen('/unbuf/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
220 qr/x-body: 0123456789$/ms, 'body unbuf multi nolen'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
221 like(http2_get_body_multi_nolen('/unbuf/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
222 qr/x-body: (0123456789){128}$/ms, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
223 'body unbuf multi nolen in two buffers'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
224 like(http2_get_body_multi_nolen('/unbuf/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
225 qr/(?!.*x-unbuf-file.*)x-body-file/ms, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
226 'body unbuf multi nolen in file'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
227 like(read_body_file(http2_get_body_multi_nolen('/unbuf/file', |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
228 '0123456789' x 512)), qr/^(0123456789){512}$/s, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
229 'body unbuf multi nolen in file only'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
230 like(http2_get_body_multi_nolen('/unbuf/single', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
231 qr/x-body: (0123456789){128}$/ms, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
232 'body unbuf multi nolen in single buffer'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
233 like(http2_get_body_multi_nolen('/unbuf/large', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
234 qr/:status: 413/, 'body unbuf multi nolen too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
235 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
236 ############################################################################### |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
237 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
238 sub http2_get { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
239 my ($uri) = @_; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
240 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
241 my $s = Test::Nginx::HTTP2->new(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
242 my $sid = $s->new_stream({ path => $uri }); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
243 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
244 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
245 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
246 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
247 return join("\n", map { "$_: " . $frame->{headers}->{$_}; } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
248 keys %{$frame->{headers}}); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
249 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
250 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
251 sub http2_get_body { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
252 my ($uri, $body) = @_; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
253 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
254 my $s = Test::Nginx::HTTP2->new(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
255 my $sid = $s->new_stream({ path => $uri, body => $body }); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
256 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
257 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
258 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
259 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
260 return join("\n", map { "$_: " . $frame->{headers}->{$_}; } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
261 keys %{$frame->{headers}}); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
262 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
263 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
264 sub http2_get_body_nolen { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
265 my ($uri, $body) = @_; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
266 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
267 my $s = Test::Nginx::HTTP2->new(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
268 my $sid = $s->new_stream({ path => $uri, body_more => 1 }); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
269 $s->h2_body($body); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
270 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
271 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
272 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
273 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
274 return join("\n", map { "$_: " . $frame->{headers}->{$_}; } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
275 keys %{$frame->{headers}}); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
276 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
277 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
278 sub http2_get_body_multi { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
279 my ($uri, $body) = @_; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
280 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
281 my $s = Test::Nginx::HTTP2->new(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
282 my $sid = $s->new_stream({ |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
283 headers => [ |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
284 { name => ':method', value => 'GET' }, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
285 { name => ':scheme', value => 'http' }, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
286 { name => ':path', value => $uri }, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
287 { name => ':authority', value => 'localhost' }, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
288 { name => 'content-length', value => length $body }, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
289 ], |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
290 body_more => 1 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
291 }); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
292 for my $b (split //, $body, 10) { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
293 $s->h2_body($b, { body_more => 1 }); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
294 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
295 select undef, undef, undef, 0.1; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
296 $s->h2_body(''); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
297 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
298 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
299 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
300 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
301 return join("\n", map { "$_: " . $frame->{headers}->{$_}; } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
302 keys %{$frame->{headers}}); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
303 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
304 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
305 sub http2_get_body_multi_nolen { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
306 my ($uri, $body) = @_; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
307 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
308 my $s = Test::Nginx::HTTP2->new(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
309 my $sid = $s->new_stream({ path => $uri, body_more => 1 }); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
310 for my $b (split //, $body, 10) { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
311 $s->h2_body($b, { body_more => 1 }); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
312 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
313 select undef, undef, undef, 0.1; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
314 $s->h2_body(''); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
315 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
316 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
317 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
318 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
319 return join("\n", map { "$_: " . $frame->{headers}->{$_}; } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
320 keys %{$frame->{headers}}); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
321 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
322 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
323 sub read_body_file { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
324 my ($r) = @_; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
325 return '' unless $r =~ m/x-body-file: (.*)/; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
326 open FILE, $1 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
327 or return "$!"; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
328 local $/; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
329 my $content = <FILE>; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
330 close FILE; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
331 return $content; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
332 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
333 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
334 ############################################################################### |