Mercurial > hg > nginx-tests
annotate h2_request_body_extra.t @ 1836:74cffa9d4c43
Tests: enabled session reuse via TLS session tickets.
This fixes tests with TLSv1.3 enabled when using BoringSSL, since
for TLSv1.3 it only supports session reuse via TLS session tickets,
and not server-side session cache.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 23 Mar 2023 19:50:02 +0300 |
parents | f66266cc82c8 |
children | 236d038dc04a |
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 plan(skip_all => 'not yet') unless $t->has_version('1.21.2'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 $t->plan(50); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 $t->run(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 ############################################################################### |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 # 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
|
98 # 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
|
99 # |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 # buffered vs. non-buffered, length vs. chunked, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 # single frame vs. multiple frames |
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 # 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
|
104 # 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
|
105 # is used in unbuffered tests |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 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
|
108 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 like(http2_get_body('/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 qr/x-body: 0123456789$/ms, 'body'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 like(http2_get_body('/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 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
|
113 like(http2_get_body('/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 qr/x-body-file/ms, 'body in file'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 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
|
116 qr/^(0123456789){512}$/s, 'body in file only'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 like(http2_get_body('/single', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 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
|
119 like(http2_get_body('/large', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
120 qr/:status: 413/, 'body too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
121 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
122 # without Content-Length header |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
123 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 like(http2_get_body_nolen('/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
125 qr/x-body: 0123456789$/ms, 'body nolen'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
126 like(http2_get_body_nolen('/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
127 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
|
128 like(http2_get_body_nolen('/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
129 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
|
130 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
|
131 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
|
132 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
|
133 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
|
134 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
|
135 qr/:status: 413/, 'body nolen too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 # with multiple frames |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
138 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
139 like(http2_get_body_multi('/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
140 qr/x-body: 0123456789$/ms, 'body multi'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
141 like(http2_get_body_multi('/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 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
|
143 like(http2_get_body_multi('/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
144 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
|
145 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
|
146 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
|
147 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
|
148 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
|
149 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
|
150 qr/:status: 413/, 'body multi too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
151 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 # with multiple frames and without Content-Length header |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
153 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 like(http2_get_body_multi_nolen('/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
155 qr/x-body: 0123456789$/ms, 'body multi nolen'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
156 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
|
157 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
|
158 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
|
159 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
|
160 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
|
161 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
|
162 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
|
163 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
|
164 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
|
165 qr/:status: 413/, 'body multi nolen too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
166 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
167 # unbuffered |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
168 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
169 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
|
170 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 like(http2_get_body('/unbuf/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 qr/x-body: 0123456789$/ms, 'body unbuf'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 like(http2_get_body('/unbuf/', '0123456789' x 128), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 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
|
175 like(http2_get_body('/unbuf/', '0123456789' x 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
176 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
|
177 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
|
178 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
|
179 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
|
180 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
|
181 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
|
182 qr/:status: 413/, 'body unbuf too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
183 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
184 # unbuffered without Content-Length |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
185 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
186 like(http2_get_body_nolen('/unbuf/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
187 qr/x-body: 0123456789$/ms, 'body unbuf nolen'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
188 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
|
189 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
|
190 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
|
191 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
|
192 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
|
193 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
|
194 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
|
195 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
|
196 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
|
197 qr/:status: 413/, 'body unbuf nolen too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
198 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
199 # unbuffered with multiple frames |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
200 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
201 like(http2_get_body_multi('/unbuf/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
202 qr/x-body: 0123456789$/ms, 'body unbuf multi'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
203 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
|
204 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
|
205 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
|
206 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
|
207 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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 qr/:status: 413/, 'body unbuf multi too large'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
213 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
214 # unbuffered with multiple frames and without Content-Length |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
215 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
216 like(http2_get_body_multi_nolen('/unbuf/', '0123456789'), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
217 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
|
218 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
|
219 qr/x-body: (0123456789){128}$/ms, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
220 'body unbuf multi nolen in two buffers'); |
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 512), |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
222 qr/(?!.*x-unbuf-file.*)x-body-file/ms, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
223 'body unbuf multi nolen in file'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
224 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
|
225 '0123456789' x 512)), qr/^(0123456789){512}$/s, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
226 'body unbuf multi nolen in file only'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
227 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
|
228 qr/x-body: (0123456789){128}$/ms, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
229 'body unbuf multi nolen in single buffer'); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
230 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
|
231 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
|
232 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
233 ############################################################################### |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
234 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
235 sub http2_get { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
236 my ($uri) = @_; |
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 my $s = Test::Nginx::HTTP2->new(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
239 my $sid = $s->new_stream({ path => $uri }); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
240 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
|
241 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
242 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
243 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
244 return join("\n", map { "$_: " . $frame->{headers}->{$_}; } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
245 keys %{$frame->{headers}}); |
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 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
248 sub http2_get_body { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
249 my ($uri, $body) = @_; |
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 my $s = Test::Nginx::HTTP2->new(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
252 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
|
253 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
|
254 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
255 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
256 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
257 return join("\n", map { "$_: " . $frame->{headers}->{$_}; } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
258 keys %{$frame->{headers}}); |
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 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
261 sub http2_get_body_nolen { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
262 my ($uri, $body) = @_; |
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 my $s = Test::Nginx::HTTP2->new(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
265 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
|
266 $s->h2_body($body); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
267 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
|
268 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
269 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
270 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
271 return join("\n", map { "$_: " . $frame->{headers}->{$_}; } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
272 keys %{$frame->{headers}}); |
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 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
275 sub http2_get_body_multi { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
276 my ($uri, $body) = @_; |
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 my $s = Test::Nginx::HTTP2->new(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
279 my $sid = $s->new_stream({ |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
280 headers => [ |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
281 { name => ':method', value => 'GET' }, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
282 { name => ':scheme', value => 'http' }, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
283 { name => ':path', value => $uri }, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
284 { name => ':authority', value => 'localhost' }, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
285 { name => 'content-length', value => length $body }, |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
286 ], |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
287 body_more => 1 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
288 }); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
289 for my $b (split //, $body, 10) { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
290 $s->h2_body($b, { 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 select undef, undef, undef, 0.1; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
293 $s->h2_body(''); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
294 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
|
295 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
296 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
297 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
298 return join("\n", map { "$_: " . $frame->{headers}->{$_}; } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
299 keys %{$frame->{headers}}); |
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 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
302 sub http2_get_body_multi_nolen { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
303 my ($uri, $body) = @_; |
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 my $s = Test::Nginx::HTTP2->new(); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
306 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
|
307 for my $b (split //, $body, 10) { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
308 $s->h2_body($b, { body_more => 1 }); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
309 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
310 select undef, undef, undef, 0.1; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
311 $s->h2_body(''); |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
312 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
|
313 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
314 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
315 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
316 return join("\n", map { "$_: " . $frame->{headers}->{$_}; } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
317 keys %{$frame->{headers}}); |
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 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
320 sub read_body_file { |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
321 my ($r) = @_; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
322 return '' unless $r =~ m/x-body-file: (.*)/; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
323 open FILE, $1 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
324 or return "$!"; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
325 local $/; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
326 my $content = <FILE>; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
327 close FILE; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
328 return $content; |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
329 } |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
330 |
f66266cc82c8
Tests: additional HTTP/2 request body tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
331 ############################################################################### |