comparison h2_proxy_request_buffering.t @ 938:d3ff66fc7f5c

Tests: reverted cb8438c28482. See ce94f07d5082 in nginx for details.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 24 May 2016 17:55:05 +0300
parents 44f37197181f
children d73bef563aea
comparison
equal deleted inserted replaced
937:b1fa8e0cc27b 938:d3ff66fc7f5c
63 63
64 my $f = get_body('/chunked'); 64 my $f = get_body('/chunked');
65 plan(skip_all => 'no unbuffered request body') unless $f; 65 plan(skip_all => 'no unbuffered request body') unless $f;
66 $f->{http_end}(); 66 $f->{http_end}();
67 67
68 $t->plan(70); 68 $t->plan(48);
69 69
70 ############################################################################### 70 ###############################################################################
71 71
72 # unbuffered request body 72 # unbuffered request body
73 73
74 $f = get_body('/', 'content-length' => 10); 74 $f = get_body('/', 'content-length' => 10);
75 ok($f->{headers}, 'request'); 75 ok($f->{headers}, 'request');
76 is($f->{upload}('01234', body_more => 1), '01234', 'part'); 76 is($f->{upload}('01234', body_more => 1), '01234', 'part');
77 is($f->{window}, 10, 'part - window');
78 is($f->{upload}('56789'), '56789', 'part 2'); 77 is($f->{upload}('56789'), '56789', 'part 2');
79 is($f->{window}, 5, 'part 2 - window');
80 is($f->{http_end}(), 200, 'response'); 78 is($f->{http_end}(), 200, 'response');
81 79
82 $f = get_body('/', 'content-length' => 10); 80 $f = get_body('/', 'content-length' => 10);
83 ok($f->{headers}, 'much'); 81 ok($f->{headers}, 'much');
84 is($f->{upload}('0123456789', body_more => 1), '0123456789', 'much - part'); 82 is($f->{upload}('0123456789', body_more => 1), '0123456789', 'much - part');
85 is($f->{window}, 10, 'much - part - window');
86 is($f->{upload}('many'), '', 'much - part 2'); 83 is($f->{upload}('many'), '', 'much - part 2');
87 is($f->{window}, 10, 'much - part 2 - window');
88 is($f->{http_end}(), 400, 'much - response'); 84 is($f->{http_end}(), 400, 'much - response');
89 85
90 $f = get_body('/', 'content-length' => 10); 86 $f = get_body('/', 'content-length' => 10);
91 ok($f->{headers}, 'less'); 87 ok($f->{headers}, 'less');
92 is($f->{upload}('0123', body_more => 1), '0123', 'less - part'); 88 is($f->{upload}('0123', body_more => 1), '0123', 'less - part');
93 is($f->{window}, 10, 'less - part - window');
94 is($f->{upload}('56789'), '', 'less - part 2'); 89 is($f->{upload}('56789'), '', 'less - part 2');
95 is($f->{window}, 4, 'less - part 2 - window');
96 is($f->{http_end}(), 400, 'less - response'); 90 is($f->{http_end}(), 400, 'less - response');
97 91
98 $f = get_body('/', 'content-length' => 18); 92 $f = get_body('/', 'content-length' => 18);
99 ok($f->{headers}, 'many'); 93 ok($f->{headers}, 'many');
100 is($f->{upload}('01234many', body_split => [ 5 ], body_more => 1), 94 is($f->{upload}('01234many', body_split => [ 5 ], body_more => 1),
101 '01234many', 'many - part'); 95 '01234many', 'many - part');
102 is($f->{window}, 18, 'many - part - window');
103 is($f->{upload}('56789many', body_split => [ 5 ]), 96 is($f->{upload}('56789many', body_split => [ 5 ]),
104 '56789many', 'many - part 2'); 97 '56789many', 'many - part 2');
105 is($f->{window}, 9, 'many - part 2 - window');
106 is($f->{http_end}(), 200, 'many - response'); 98 is($f->{http_end}(), 200, 'many - response');
107 99
108 $f = get_body('/', 'content-length' => 0); 100 $f = get_body('/', 'content-length' => 0);
109 ok($f->{headers}, 'empty'); 101 ok($f->{headers}, 'empty');
110 is($f->{upload}('', body_more => 1), '', 'empty - part'); 102 is($f->{upload}('', body_more => 1), '', 'empty - part');
111
112 TODO: {
113 local $TODO = 'not yet' unless $t->has_version('1.9.15');
114
115 is($f->{window}, undef, 'empty - part - window');
116
117 }
118
119 is($f->{upload}(''), '', 'empty - part 2'); 103 is($f->{upload}(''), '', 'empty - part 2');
120 is($f->{window}, undef, 'empty - part 2 - window');
121 is($f->{http_end}(), 200, 'empty - response'); 104 is($f->{http_end}(), 200, 'empty - response');
122 105
123 $f = get_body('/', 'content-length' => 1536); 106 $f = get_body('/', 'content-length' => 1536);
124 ok($f->{headers}, 'buffer'); 107 ok($f->{headers}, 'buffer');
125 is($f->{upload}('0123' x 128, body_more => 1), '0123' x 128, 108 is($f->{upload}('0123' x 128, body_more => 1), '0123' x 128,
126 'buffer - below'); 109 'buffer - below');
127 is($f->{window}, 1024, 'buffer - below - window');
128 is($f->{upload}('4567' x 128, body_more => 1), '4567' x 128, 110 is($f->{upload}('4567' x 128, body_more => 1), '4567' x 128,
129 'buffer - equal'); 111 'buffer - equal');
130 is($f->{window}, 512, 'buffer - equal - window');
131 is($f->{upload}('89AB' x 128), '89AB' x 128, 'buffer - above'); 112 is($f->{upload}('89AB' x 128), '89AB' x 128, 'buffer - above');
132 is($f->{window}, 512, 'buffer - above - window');
133 is($f->{http_end}(), 200, 'buffer - response'); 113 is($f->{http_end}(), 200, 'buffer - response');
134 114
135 $f = get_body('/', 'content-length' => 10); 115 $f = get_body('/', 'content-length' => 10);
136 ok($f->{headers}, 'split'); 116 ok($f->{headers}, 'split');
137 is($f->{upload}('0123456789', split => [ 14 ]), '0123456789', 'split'); 117 is($f->{upload}('0123456789', split => [ 14 ]), '0123456789', 'split');
141 121
142 $f = get_body('/chunked'); 122 $f = get_body('/chunked');
143 ok($f->{headers}, 'chunked'); 123 ok($f->{headers}, 'chunked');
144 is($f->{upload}('01234', body_more => 1), '5' . CRLF . '01234' . CRLF, 124 is($f->{upload}('01234', body_more => 1), '5' . CRLF . '01234' . CRLF,
145 'chunked - part'); 125 'chunked - part');
146 is($f->{window}, 1024, 'chunked - part - window');
147 is($f->{upload}('56789'), '5' . CRLF . '56789' . CRLF . '0' . CRLF . CRLF, 126 is($f->{upload}('56789'), '5' . CRLF . '56789' . CRLF . '0' . CRLF . CRLF,
148 'chunked - part 2'); 127 'chunked - part 2');
149 is($f->{window}, 5, 'chunked - part 2 - window');
150 is($f->{http_end}(), 200, 'chunked - response'); 128 is($f->{http_end}(), 200, 'chunked - response');
151 129
152 $f = get_body('/chunked'); 130 $f = get_body('/chunked');
153 ok($f->{headers}, 'chunked buffer'); 131 ok($f->{headers}, 'chunked buffer');
154 is($f->{upload}('0123' x 128, body_more => 1), 132 is($f->{upload}('0123' x 128, body_more => 1),
155 '200' . CRLF . '0123' x 128 . CRLF, 'chunked buffer - below'); 133 '200' . CRLF . '0123' x 128 . CRLF, 'chunked buffer - below');
156 is($f->{window}, 1024, 'chunked buffer - below - window');
157 is($f->{upload}('4567' x 128, body_more => 1), 134 is($f->{upload}('4567' x 128, body_more => 1),
158 '200' . CRLF . '4567' x 128 . CRLF, 'chunked buffer - equal'); 135 '200' . CRLF . '4567' x 128 . CRLF, 'chunked buffer - equal');
159 is($f->{window}, 512, 'chunked buffer - equal - window');
160 is($f->{upload}('89AB' x 128), 136 is($f->{upload}('89AB' x 128),
161 '200' . CRLF . '89AB' x 128 . CRLF . '0' . CRLF . CRLF, 137 '200' . CRLF . '89AB' x 128 . CRLF . '0' . CRLF . CRLF,
162 'chunked buffer - above'); 138 'chunked buffer - above');
163 is($f->{window}, 512, 'chunked buffer - above - window');
164 is($f->{http_end}(), 200, 'chunked buffer - response'); 139 is($f->{http_end}(), 200, 'chunked buffer - response');
165 140
166 $f = get_body('/chunked'); 141 $f = get_body('/chunked');
167 ok($f->{headers}, 'chunked many'); 142 ok($f->{headers}, 'chunked many');
168 is($f->{upload}('01234many', body_split => [ 5 ], body_more => 1), 143 is($f->{upload}('01234many', body_split => [ 5 ], body_more => 1),
169 '9' . CRLF . '01234many' . CRLF, 'chunked many - part'); 144 '9' . CRLF . '01234many' . CRLF, 'chunked many - part');
170 is($f->{window}, 1024, 'chunked many - part - window');
171 is($f->{upload}('56789many', body_split => [ 5 ]), 145 is($f->{upload}('56789many', body_split => [ 5 ]),
172 '9' . CRLF . '56789many' . CRLF . '0' . CRLF . CRLF, 146 '9' . CRLF . '56789many' . CRLF . '0' . CRLF . CRLF,
173 'chunked many - part 2'); 147 'chunked many - part 2');
174 is($f->{window}, 9, 'chunked many - part 2 - window');
175 is($f->{http_end}(), 200, 'chunked many - response'); 148 is($f->{http_end}(), 200, 'chunked many - response');
176 149
177 $f = get_body('/chunked'); 150 $f = get_body('/chunked');
178 ok($f->{headers}, 'chunked empty'); 151 ok($f->{headers}, 'chunked empty');
179 is($f->{upload}('', body_more => 1), '', 'chunked empty - part'); 152 is($f->{upload}('', body_more => 1), '', 'chunked empty - part');
180 is($f->{window}, 1024, 'chunked empty - part - window');
181 is($f->{upload}(''), '0' . CRLF . CRLF, 'chunked empty - part 2'); 153 is($f->{upload}(''), '0' . CRLF . CRLF, 'chunked empty - part 2');
182 is($f->{window}, undef, 'chunked empty - part 2 - window');
183 is($f->{http_end}(), 200, 'chunked empty - response'); 154 is($f->{http_end}(), 200, 'chunked empty - response');
184 155
185 $f = get_body('/chunked'); 156 $f = get_body('/chunked');
186 ok($f->{headers}, 'chunked split'); 157 ok($f->{headers}, 'chunked split');
187 is($f->{upload}('0123456789', split => [ 14 ]), 158 is($f->{upload}('0123456789', split => [ 14 ]),
243 }; 214 };
244 215
245 $f->{upload} = sub { 216 $f->{upload} = sub {
246 my ($body, %extra) = @_; 217 my ($body, %extra) = @_;
247 218
248 my $frames = h2_read($sess,
249 all => [{ type => 'WINDOW_UPDATE' }]);
250 my ($frame) = grep { $_->{type} eq "WINDOW_UPDATE" } @$frames;
251 $f->{window} = $frame->{wdelta};
252
253 h2_body($sess, $body, { %extra }); 219 h2_body($sess, $body, { %extra });
254 220
255 return $body_read->($client, '', length($body)); 221 return $body_read->($client, '', length($body));
256 }; 222 };
257 $f->{http_end} = sub { 223 $f->{http_end} = sub {