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