Mercurial > hg > nginx-tests
comparison h2_request_body.t @ 948:4dc302d8e04f
Tests: changed HTTP2 package to act as a class.
Stopped exporting any subroutines. A subset of them now act as class methods.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 17 Jun 2016 11:36:33 +0300 |
parents | d73bef563aea |
children | e9064d691790 |
comparison
equal
deleted
inserted
replaced
947:b9e42c554ba7 | 948:4dc302d8e04f |
---|---|
14 | 14 |
15 BEGIN { use FindBin; chdir($FindBin::Bin); } | 15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
16 | 16 |
17 use lib 'lib'; | 17 use lib 'lib'; |
18 use Test::Nginx; | 18 use Test::Nginx; |
19 use Test::Nginx::HTTP2 qw/ :DEFAULT :frame /; | 19 use Test::Nginx::HTTP2; |
20 | 20 |
21 ############################################################################### | 21 ############################################################################### |
22 | 22 |
23 select STDERR; $| = 1; | 23 select STDERR; $| = 1; |
24 select STDOUT; $| = 1; | 24 select STDOUT; $| = 1; |
70 | 70 |
71 ############################################################################### | 71 ############################################################################### |
72 | 72 |
73 # request body (uses proxied response) | 73 # request body (uses proxied response) |
74 | 74 |
75 my $sess = new_session(); | 75 my $s = Test::Nginx::HTTP2->new(); |
76 my $sid = new_stream($sess, { path => '/proxy2/t.html', body_more => 1 }); | 76 my $sid = $s->new_stream({ path => '/proxy2/t.html', body_more => 1 }); |
77 h2_body($sess, 'TEST'); | 77 $s->h2_body('TEST'); |
78 my $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 78 my $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
79 | 79 |
80 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 80 my ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
81 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TEST', 'request body'); | 81 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TEST', 'request body'); |
82 | 82 |
83 # request body with padding (uses proxied response) | 83 # request body with padding (uses proxied response) |
84 | 84 |
85 $sess = new_session(); | 85 $s = Test::Nginx::HTTP2->new(); |
86 $sid = new_stream($sess, { path => '/proxy2/t.html', body_more => 1 }); | 86 $sid = $s->new_stream({ path => '/proxy2/t.html', body_more => 1 }); |
87 h2_body($sess, 'TEST', { body_padding => 42 }); | 87 $s->h2_body('TEST', { body_padding => 42 }); |
88 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 88 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
89 | 89 |
90 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 90 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
91 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TEST', | 91 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TEST', |
92 'request body with padding'); | 92 'request body with padding'); |
93 | 93 |
94 $sid = new_stream($sess); | 94 $sid = $s->new_stream(); |
95 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 95 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
96 | 96 |
97 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 97 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
98 is($frame->{headers}->{':status'}, '200', 'request body with padding - next'); | 98 is($frame->{headers}->{':status'}, '200', 'request body with padding - next'); |
99 | 99 |
100 # request body sent in multiple DATA frames in a single packet | 100 # request body sent in multiple DATA frames in a single packet |
101 | 101 |
102 $sess = new_session(); | 102 $s = Test::Nginx::HTTP2->new(); |
103 $sid = new_stream($sess, { path => '/proxy2/t.html', body_more => 1 }); | 103 $sid = $s->new_stream({ path => '/proxy2/t.html', body_more => 1 }); |
104 h2_body($sess, 'TEST', { body_split => [2] }); | 104 $s->h2_body('TEST', { body_split => [2] }); |
105 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 105 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
106 | 106 |
107 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 107 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
108 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TEST', | 108 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TEST', |
109 'request body in multiple frames'); | 109 'request body in multiple frames'); |
110 | 110 |
111 # request body sent in multiple DATA frames, each in its own packet | 111 # request body sent in multiple DATA frames, each in its own packet |
112 | 112 |
113 $sess = new_session(); | 113 $s = Test::Nginx::HTTP2->new(); |
114 $sid = new_stream($sess, { path => '/proxy2/t.html', body_more => 1 }); | 114 $sid = $s->new_stream({ path => '/proxy2/t.html', body_more => 1 }); |
115 h2_body($sess, 'TEST', { body_more => 1 }); | 115 $s->h2_body('TEST', { body_more => 1 }); |
116 select undef, undef, undef, 0.1; | 116 select undef, undef, undef, 0.1; |
117 h2_body($sess, 'MOREDATA'); | 117 $s->h2_body('MOREDATA'); |
118 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 118 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
119 | 119 |
120 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 120 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
121 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTMOREDATA', | 121 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTMOREDATA', |
122 'request body in multiple frames separately'); | 122 'request body in multiple frames separately'); |
123 | 123 |
124 # request body with an empty DATA frame | 124 # request body with an empty DATA frame |
125 # "zero size buf in output" alerts seen | 125 # "zero size buf in output" alerts seen |
126 | 126 |
127 $sess = new_session(); | 127 $s = Test::Nginx::HTTP2->new(); |
128 $sid = new_stream($sess, { path => '/proxy2/', body_more => 1 }); | 128 $sid = $s->new_stream({ path => '/proxy2/', body_more => 1 }); |
129 h2_body($sess, ''); | 129 $s->h2_body(''); |
130 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 130 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
131 | 131 |
132 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 132 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
133 is($frame->{headers}->{':status'}, 200, 'request body - empty'); | 133 is($frame->{headers}->{':status'}, 200, 'request body - empty'); |
134 | 134 |
135 TODO: { | 135 TODO: { |
151 # RST_STREAM with zero code received | 151 # RST_STREAM with zero code received |
152 | 152 |
153 TODO: { | 153 TODO: { |
154 local $TODO = 'not yet'; | 154 local $TODO = 'not yet'; |
155 | 155 |
156 $sess = new_session(); | 156 $s = Test::Nginx::HTTP2->new(); |
157 $sid = new_stream($sess, { body_more => 1 }); | 157 $sid = $s->new_stream({ body_more => 1 }); |
158 $frames = h2_read($sess, all => [{ type => 'RST_STREAM' }], wait => 0.5); | 158 $frames = $s->read(all => [{ type => 'RST_STREAM' }], wait => 0.5); |
159 | 159 |
160 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames; | 160 ($frame) = grep { $_->{type} eq "RST_STREAM" } @$frames; |
161 is($frame->{code}, 0, 'request body discarded - zero RST_STREAM'); | 161 is($frame->{code}, 0, 'request body discarded - zero RST_STREAM'); |
162 | 162 |
163 } | 163 } |
164 | 164 |
165 # malformed request body length not equal to content-length | 165 # malformed request body length not equal to content-length |
166 | 166 |
167 $sess = new_session(); | 167 $s = Test::Nginx::HTTP2->new(); |
168 $sid = new_stream($sess, | 168 $sid = $s->new_stream({ body_more => 1, headers => [ |
169 { body_more => 1, headers => [ | |
170 { name => ':method', value => 'GET', mode => 0 }, | 169 { name => ':method', value => 'GET', mode => 0 }, |
171 { name => ':scheme', value => 'http', mode => 0 }, | 170 { name => ':scheme', value => 'http', mode => 0 }, |
172 { name => ':path', value => '/client_max_body_size', mode => 1 }, | 171 { name => ':path', value => '/client_max_body_size', mode => 1 }, |
173 { name => ':authority', value => 'localhost', mode => 1 }, | 172 { name => ':authority', value => 'localhost', mode => 1 }, |
174 { name => 'content-length', value => '5', mode => 1 }]}); | 173 { name => 'content-length', value => '5', mode => 1 }]}); |
175 h2_body($sess, 'TEST'); | 174 $s->h2_body('TEST'); |
176 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 175 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
177 | 176 |
178 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 177 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
179 is($frame->{headers}->{':status'}, 400, 'request body less than content-length'); | 178 is($frame->{headers}->{':status'}, 400, 'request body less than content-length'); |
180 | 179 |
181 $sid = new_stream($sess, | 180 $sid = $s->new_stream({ body_more => 1, headers => [ |
182 { body_more => 1, headers => [ | |
183 { name => ':method', value => 'GET', mode => 0 }, | 181 { name => ':method', value => 'GET', mode => 0 }, |
184 { name => ':scheme', value => 'http', mode => 0 }, | 182 { name => ':scheme', value => 'http', mode => 0 }, |
185 { name => ':path', value => '/client_max_body_size', mode => 1 }, | 183 { name => ':path', value => '/client_max_body_size', mode => 1 }, |
186 { name => ':authority', value => 'localhost', mode => 1 }, | 184 { name => ':authority', value => 'localhost', mode => 1 }, |
187 { name => 'content-length', value => '3', mode => 1 }]}); | 185 { name => 'content-length', value => '3', mode => 1 }]}); |
188 h2_body($sess, 'TEST'); | 186 $s->h2_body('TEST'); |
189 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 187 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
190 | 188 |
191 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 189 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
192 is($frame->{headers}->{':status'}, 400, 'request body more than content-length'); | 190 is($frame->{headers}->{':status'}, 400, 'request body more than content-length'); |
193 | 191 |
194 # client_max_body_size | 192 # client_max_body_size |
195 | 193 |
196 $sess = new_session(); | 194 $s = Test::Nginx::HTTP2->new(); |
197 $sid = new_stream($sess, { path => '/client_max_body_size/t.html', | 195 $sid = $s->new_stream({ path => '/client_max_body_size/t.html', |
198 body_more => 1 }); | 196 body_more => 1 }); |
199 h2_body($sess, 'TESTTEST12'); | 197 $s->h2_body('TESTTEST12'); |
200 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 198 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
201 | 199 |
202 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 200 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
203 is($frame->{headers}->{':status'}, 200, 'client_max_body_size - status'); | 201 is($frame->{headers}->{':status'}, 200, 'client_max_body_size - status'); |
204 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', | 202 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', |
205 'client_max_body_size - body'); | 203 'client_max_body_size - body'); |
206 | 204 |
207 # client_max_body_size - limited | 205 # client_max_body_size - limited |
208 | 206 |
209 $sess = new_session(); | 207 $s = Test::Nginx::HTTP2->new(); |
210 $sid = new_stream($sess, { path => '/client_max_body_size/t.html', | 208 $sid = $s->new_stream({ path => '/client_max_body_size/t.html', |
211 body_more => 1 }); | 209 body_more => 1 }); |
212 h2_body($sess, 'TESTTEST123'); | 210 $s->h2_body('TESTTEST123'); |
213 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 211 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
214 | 212 |
215 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 213 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
216 is($frame->{headers}->{':status'}, 413, 'client_max_body_size - limited'); | 214 is($frame->{headers}->{':status'}, 413, 'client_max_body_size - limited'); |
217 | 215 |
218 # client_max_body_size - many DATA frames | 216 # client_max_body_size - many DATA frames |
219 | 217 |
220 $sess = new_session(); | 218 $s = Test::Nginx::HTTP2->new(); |
221 $sid = new_stream($sess, { path => '/client_max_body_size/t.html', | 219 $sid = $s->new_stream({ path => '/client_max_body_size/t.html', |
222 body_more => 1 }); | 220 body_more => 1 }); |
223 h2_body($sess, 'TESTTEST12', { body_split => [2] }); | 221 $s->h2_body('TESTTEST12', { body_split => [2] }); |
224 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 222 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
225 | 223 |
226 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 224 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
227 is($frame->{headers}->{':status'}, 200, 'client_max_body_size many - status'); | 225 is($frame->{headers}->{':status'}, 200, 'client_max_body_size many - status'); |
228 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', | 226 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', |
229 'client_max_body_size many - body'); | 227 'client_max_body_size many - body'); |
230 | 228 |
231 # client_max_body_size - many DATA frames - limited | 229 # client_max_body_size - many DATA frames - limited |
232 | 230 |
233 $sess = new_session(); | 231 $s = Test::Nginx::HTTP2->new(); |
234 $sid = new_stream($sess, { path => '/client_max_body_size/t.html', | 232 $sid = $s->new_stream({ path => '/client_max_body_size/t.html', |
235 body_more => 1 }); | 233 body_more => 1 }); |
236 h2_body($sess, 'TESTTEST123', { body_split => [2] }); | 234 $s->h2_body('TESTTEST123', { body_split => [2] }); |
237 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 235 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
238 | 236 |
239 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 237 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
240 is($frame->{headers}->{':status'}, 413, 'client_max_body_size many - limited'); | 238 is($frame->{headers}->{':status'}, 413, 'client_max_body_size many - limited'); |
241 | 239 |
242 # client_max_body_size - padded DATA | 240 # client_max_body_size - padded DATA |
243 | 241 |
244 $sess = new_session(); | 242 $s = Test::Nginx::HTTP2->new(); |
245 $sid = new_stream($sess, { path => '/client_max_body_size/t.html', | 243 $sid = $s->new_stream({ path => '/client_max_body_size/t.html', |
246 body_more => 1 }); | 244 body_more => 1 }); |
247 h2_body($sess, 'TESTTEST12', { body_padding => 42 }); | 245 $s->h2_body('TESTTEST12', { body_padding => 42 }); |
248 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 246 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
249 | 247 |
250 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 248 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
251 is($frame->{headers}->{':status'}, 200, 'client_max_body_size pad - status'); | 249 is($frame->{headers}->{':status'}, 200, 'client_max_body_size pad - status'); |
252 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', | 250 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', |
253 'client_max_body_size pad - body'); | 251 'client_max_body_size pad - body'); |
254 | 252 |
255 # client_max_body_size - padded DATA - limited | 253 # client_max_body_size - padded DATA - limited |
256 | 254 |
257 $sess = new_session(); | 255 $s = Test::Nginx::HTTP2->new(); |
258 $sid = new_stream($sess, { path => '/client_max_body_size/t.html', | 256 $sid = $s->new_stream({ path => '/client_max_body_size/t.html', |
259 body_more => 1 }); | 257 body_more => 1 }); |
260 h2_body($sess, 'TESTTEST123', { body_padding => 42 }); | 258 $s->h2_body('TESTTEST123', { body_padding => 42 }); |
261 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 259 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
262 | 260 |
263 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 261 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
264 is($frame->{headers}->{':status'}, 413, 'client_max_body_size pad - limited'); | 262 is($frame->{headers}->{':status'}, 413, 'client_max_body_size pad - limited'); |
265 | 263 |
266 # client_max_body_size - many padded DATA frames | 264 # client_max_body_size - many padded DATA frames |
267 | 265 |
268 $sess = new_session(); | 266 $s = Test::Nginx::HTTP2->new(); |
269 $sid = new_stream($sess, { path => '/client_max_body_size/t.html', | 267 $sid = $s->new_stream({ path => '/client_max_body_size/t.html', |
270 body_more => 1 }); | 268 body_more => 1 }); |
271 h2_body($sess, 'TESTTEST12', { body_padding => 42, body_split => [2] }); | 269 $s->h2_body('TESTTEST12', { body_padding => 42, body_split => [2] }); |
272 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 270 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
273 | 271 |
274 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 272 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
275 is($frame->{headers}->{':status'}, 200, | 273 is($frame->{headers}->{':status'}, 200, |
276 'client_max_body_size many pad - status'); | 274 'client_max_body_size many pad - status'); |
277 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', | 275 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', |
278 'client_max_body_size many pad - body'); | 276 'client_max_body_size many pad - body'); |
279 | 277 |
280 # client_max_body_size - many padded DATA frames - limited | 278 # client_max_body_size - many padded DATA frames - limited |
281 | 279 |
282 $sess = new_session(); | 280 $s = Test::Nginx::HTTP2->new(); |
283 $sid = new_stream($sess, { path => '/client_max_body_size/t.html', | 281 $sid = $s->new_stream({ path => '/client_max_body_size/t.html', |
284 body_more => 1 }); | 282 body_more => 1 }); |
285 h2_body($sess, 'TESTTEST123', { body_padding => 42, body_split => [2] }); | 283 $s->h2_body('TESTTEST123', { body_padding => 42, body_split => [2] }); |
286 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 284 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
287 | 285 |
288 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 286 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
289 is($frame->{headers}->{':status'}, 413, | 287 is($frame->{headers}->{':status'}, 413, |
290 'client_max_body_size many pad - limited'); | 288 'client_max_body_size many pad - limited'); |
291 | 289 |
292 # request body without content-length | 290 # request body without content-length |
293 | 291 |
294 $sess = new_session(); | 292 $s = Test::Nginx::HTTP2->new(); |
295 $sid = new_stream($sess, { body_more => 1, headers => [ | 293 $sid = $s->new_stream({ body_more => 1, headers => [ |
296 { name => ':method', value => 'GET', mode => 2 }, | 294 { name => ':method', value => 'GET', mode => 2 }, |
297 { name => ':scheme', value => 'http', mode => 2 }, | 295 { name => ':scheme', value => 'http', mode => 2 }, |
298 { name => ':path', value => '/client_max_body_size', mode => 2 }, | 296 { name => ':path', value => '/client_max_body_size', mode => 2 }, |
299 { name => ':authority', value => 'localhost', mode => 2 }]}); | 297 { name => ':authority', value => 'localhost', mode => 2 }]}); |
300 h2_body($sess, 'TESTTEST12'); | 298 $s->h2_body('TESTTEST12'); |
301 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 299 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
302 | 300 |
303 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 301 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
304 is($frame->{headers}->{':status'}, 200, | 302 is($frame->{headers}->{':status'}, 200, |
305 'request body without content-length - status'); | 303 'request body without content-length - status'); |
306 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', | 304 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', |
307 'request body without content-length - body'); | 305 'request body without content-length - body'); |
308 | 306 |
309 # request body without content-length - limited | 307 # request body without content-length - limited |
310 | 308 |
311 $sess = new_session(); | 309 $s = Test::Nginx::HTTP2->new(); |
312 $sid = new_stream($sess, { body_more => 1, headers => [ | 310 $sid = $s->new_stream({ body_more => 1, headers => [ |
313 { name => ':method', value => 'GET', mode => 2 }, | 311 { name => ':method', value => 'GET', mode => 2 }, |
314 { name => ':scheme', value => 'http', mode => 2 }, | 312 { name => ':scheme', value => 'http', mode => 2 }, |
315 { name => ':path', value => '/client_max_body_size', mode => 2 }, | 313 { name => ':path', value => '/client_max_body_size', mode => 2 }, |
316 { name => ':authority', value => 'localhost', mode => 2 }]}); | 314 { name => ':authority', value => 'localhost', mode => 2 }]}); |
317 h2_body($sess, 'TESTTEST123'); | 315 $s->h2_body('TESTTEST123'); |
318 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 316 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
319 | 317 |
320 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 318 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
321 is($frame->{headers}->{':status'}, 413, | 319 is($frame->{headers}->{':status'}, 413, |
322 'request body without content-length - limited'); | 320 'request body without content-length - limited'); |
323 | 321 |
324 # request body without content-length - many DATA frames | 322 # request body without content-length - many DATA frames |
325 | 323 |
326 $sess = new_session(); | 324 $s = Test::Nginx::HTTP2->new(); |
327 $sid = new_stream($sess, { body_more => 1, headers => [ | 325 $sid = $s->new_stream({ body_more => 1, headers => [ |
328 { name => ':method', value => 'GET', mode => 2 }, | 326 { name => ':method', value => 'GET', mode => 2 }, |
329 { name => ':scheme', value => 'http', mode => 2 }, | 327 { name => ':scheme', value => 'http', mode => 2 }, |
330 { name => ':path', value => '/client_max_body_size', mode => 2 }, | 328 { name => ':path', value => '/client_max_body_size', mode => 2 }, |
331 { name => ':authority', value => 'localhost', mode => 2 }]}); | 329 { name => ':authority', value => 'localhost', mode => 2 }]}); |
332 h2_body($sess, 'TESTTEST12', { body_split => [2] }); | 330 $s->h2_body('TESTTEST12', { body_split => [2] }); |
333 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 331 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
334 | 332 |
335 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 333 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
336 is($frame->{headers}->{':status'}, 200, | 334 is($frame->{headers}->{':status'}, 200, |
337 'request body without content-length many - status'); | 335 'request body without content-length many - status'); |
338 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', | 336 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', |
339 'request body without content-length many - body'); | 337 'request body without content-length many - body'); |
340 | 338 |
341 # request body without content-length - many DATA frames - limited | 339 # request body without content-length - many DATA frames - limited |
342 | 340 |
343 $sess = new_session(); | 341 $s = Test::Nginx::HTTP2->new(); |
344 $sid = new_stream($sess, { body_more => 1, headers => [ | 342 $sid = $s->new_stream({ body_more => 1, headers => [ |
345 { name => ':method', value => 'GET', mode => 2 }, | 343 { name => ':method', value => 'GET', mode => 2 }, |
346 { name => ':scheme', value => 'http', mode => 2 }, | 344 { name => ':scheme', value => 'http', mode => 2 }, |
347 { name => ':path', value => '/client_max_body_size', mode => 2 }, | 345 { name => ':path', value => '/client_max_body_size', mode => 2 }, |
348 { name => ':authority', value => 'localhost', mode => 2 }]}); | 346 { name => ':authority', value => 'localhost', mode => 2 }]}); |
349 h2_body($sess, 'TESTTEST123', { body_split => [2] }); | 347 $s->h2_body('TESTTEST123', { body_split => [2] }); |
350 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 348 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
351 | 349 |
352 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 350 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
353 is($frame->{headers}->{':status'}, 413, | 351 is($frame->{headers}->{':status'}, 413, |
354 'request body without content-length many - limited'); | 352 'request body without content-length many - limited'); |
355 | 353 |
356 # request body without content-length - padding | 354 # request body without content-length - padding |
357 | 355 |
358 $sess = new_session(); | 356 $s = Test::Nginx::HTTP2->new(); |
359 $sid = new_stream($sess, { body_more => 1, headers => [ | 357 $sid = $s->new_stream({ body_more => 1, headers => [ |
360 { name => ':method', value => 'GET', mode => 2 }, | 358 { name => ':method', value => 'GET', mode => 2 }, |
361 { name => ':scheme', value => 'http', mode => 2 }, | 359 { name => ':scheme', value => 'http', mode => 2 }, |
362 { name => ':path', value => '/client_max_body_size', mode => 2 }, | 360 { name => ':path', value => '/client_max_body_size', mode => 2 }, |
363 { name => ':authority', value => 'localhost', mode => 2 }]}); | 361 { name => ':authority', value => 'localhost', mode => 2 }]}); |
364 h2_body($sess, 'TESTTEST12', { body_padding => 42 }); | 362 $s->h2_body('TESTTEST12', { body_padding => 42 }); |
365 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 363 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
366 | 364 |
367 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 365 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
368 is($frame->{headers}->{':status'}, 200, | 366 is($frame->{headers}->{':status'}, 200, |
369 'request body without content-length pad - status'); | 367 'request body without content-length pad - status'); |
370 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', | 368 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST12', |
371 'request body without content-length pad - body'); | 369 'request body without content-length pad - body'); |
372 | 370 |
373 # request body without content-length - padding - limited | 371 # request body without content-length - padding - limited |
374 | 372 |
375 $sess = new_session(); | 373 $s = Test::Nginx::HTTP2->new(); |
376 $sid = new_stream($sess, { body_more => 1, headers => [ | 374 $sid = $s->new_stream({ body_more => 1, headers => [ |
377 { name => ':method', value => 'GET', mode => 2 }, | 375 { name => ':method', value => 'GET', mode => 2 }, |
378 { name => ':scheme', value => 'http', mode => 2 }, | 376 { name => ':scheme', value => 'http', mode => 2 }, |
379 { name => ':path', value => '/client_max_body_size', mode => 2 }, | 377 { name => ':path', value => '/client_max_body_size', mode => 2 }, |
380 { name => ':authority', value => 'localhost', mode => 2 }]}); | 378 { name => ':authority', value => 'localhost', mode => 2 }]}); |
381 h2_body($sess, 'TESTTEST123', { body_padding => 42 }); | 379 $s->h2_body('TESTTEST123', { body_padding => 42 }); |
382 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 380 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
383 | 381 |
384 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 382 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
385 is($frame->{headers}->{':status'}, 413, | 383 is($frame->{headers}->{':status'}, 413, |
386 'request body without content-length pad - limited'); | 384 'request body without content-length pad - limited'); |
387 | 385 |
388 # request body without content-length - padding with many DATA frames | 386 # request body without content-length - padding with many DATA frames |
389 | 387 |
390 $sess = new_session(); | 388 $s = Test::Nginx::HTTP2->new(); |
391 $sid = new_stream($sess, { body_more => 1, headers => [ | 389 $sid = $s->new_stream({ body_more => 1, headers => [ |
392 { name => ':method', value => 'GET', mode => 2 }, | 390 { name => ':method', value => 'GET', mode => 2 }, |
393 { name => ':scheme', value => 'http', mode => 2 }, | 391 { name => ':scheme', value => 'http', mode => 2 }, |
394 { name => ':path', value => '/client_max_body_size', mode => 2 }, | 392 { name => ':path', value => '/client_max_body_size', mode => 2 }, |
395 { name => ':authority', value => 'localhost', mode => 2 }]}); | 393 { name => ':authority', value => 'localhost', mode => 2 }]}); |
396 h2_body($sess, 'TESTTEST', { body_padding => 42, body_split => [2] }); | 394 $s->h2_body('TESTTEST', { body_padding => 42, body_split => [2] }); |
397 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 395 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
398 | 396 |
399 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 397 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
400 is($frame->{headers}->{':status'}, 200, | 398 is($frame->{headers}->{':status'}, 200, |
401 'request body without content-length many pad - status'); | 399 'request body without content-length many pad - status'); |
402 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST', | 400 is(read_body_file($frame->{headers}->{'x-body-file'}), 'TESTTEST', |
403 'request body without content-length many pad - body'); | 401 'request body without content-length many pad - body'); |
404 | 402 |
405 # request body without content-length - padding with many DATA frames - limited | 403 # request body without content-length - padding with many DATA frames - limited |
406 | 404 |
407 $sess = new_session(); | 405 $s = Test::Nginx::HTTP2->new(); |
408 $sid = new_stream($sess, { body_more => 1, headers => [ | 406 $sid = $s->new_stream({ body_more => 1, headers => [ |
409 { name => ':method', value => 'GET', mode => 2 }, | 407 { name => ':method', value => 'GET', mode => 2 }, |
410 { name => ':scheme', value => 'http', mode => 2 }, | 408 { name => ':scheme', value => 'http', mode => 2 }, |
411 { name => ':path', value => '/client_max_body_size', mode => 2 }, | 409 { name => ':path', value => '/client_max_body_size', mode => 2 }, |
412 { name => ':authority', value => 'localhost', mode => 2 }]}); | 410 { name => ':authority', value => 'localhost', mode => 2 }]}); |
413 h2_body($sess, 'TESTTEST123', { body_padding => 42, body_split => [2] }); | 411 $s->h2_body('TESTTEST123', { body_padding => 42, body_split => [2] }); |
414 $frames = h2_read($sess, all => [{ sid => $sid, fin => 1 }]); | 412 $frames = $s->read(all => [{ sid => $sid, fin => 1 }]); |
415 | 413 |
416 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; | 414 ($frame) = grep { $_->{type} eq "HEADERS" } @$frames; |
417 is($frame->{headers}->{':status'}, 413, | 415 is($frame->{headers}->{':status'}, 413, |
418 'request body without content-length many pad - limited'); | 416 'request body without content-length many pad - limited'); |
419 | 417 |