Mercurial > hg > nginx-tests
comparison h2_proxy_request_buffering.t @ 904:cb8438c28482
Tests: added WINDOW_UPDATE tests to h2_proxy_request_buffering.t.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 19 Apr 2016 14:26:04 +0300 |
parents | 29aa547dd963 |
children | 44f37197181f |
comparison
equal
deleted
inserted
replaced
903:29aa547dd963 | 904:cb8438c28482 |
---|---|
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(48); | 68 $t->plan(70); |
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'); | |
77 is($f->{upload}('56789'), '56789', 'part 2'); | 78 is($f->{upload}('56789'), '56789', 'part 2'); |
79 is($f->{window}, 5, 'part 2 - window'); | |
78 is($f->{http_end}(), 200, 'response'); | 80 is($f->{http_end}(), 200, 'response'); |
79 | 81 |
80 $f = get_body('/', 'content-length' => 10); | 82 $f = get_body('/', 'content-length' => 10); |
81 ok($f->{headers}, 'much'); | 83 ok($f->{headers}, 'much'); |
82 is($f->{upload}('0123456789', body_more => 1), '0123456789', 'much - part'); | 84 is($f->{upload}('0123456789', body_more => 1), '0123456789', 'much - part'); |
85 is($f->{window}, 10, 'much - part - window'); | |
83 is($f->{upload}('many'), '', 'much - part 2'); | 86 is($f->{upload}('many'), '', 'much - part 2'); |
87 is($f->{window}, 10, 'much - part 2 - window'); | |
84 is($f->{http_end}(), 400, 'much - response'); | 88 is($f->{http_end}(), 400, 'much - response'); |
85 | 89 |
86 $f = get_body('/', 'content-length' => 10); | 90 $f = get_body('/', 'content-length' => 10); |
87 ok($f->{headers}, 'less'); | 91 ok($f->{headers}, 'less'); |
88 is($f->{upload}('0123', body_more => 1), '0123', 'less - part'); | 92 is($f->{upload}('0123', body_more => 1), '0123', 'less - part'); |
93 is($f->{window}, 10, 'less - part - window'); | |
89 is($f->{upload}('56789'), '', 'less - part 2'); | 94 is($f->{upload}('56789'), '', 'less - part 2'); |
95 is($f->{window}, 4, 'less - part 2 - window'); | |
90 is($f->{http_end}(), 400, 'less - response'); | 96 is($f->{http_end}(), 400, 'less - response'); |
91 | 97 |
92 $f = get_body('/', 'content-length' => 18); | 98 $f = get_body('/', 'content-length' => 18); |
93 ok($f->{headers}, 'many'); | 99 ok($f->{headers}, 'many'); |
94 is($f->{upload}('01234many', body_split => [ 5 ], body_more => 1), | 100 is($f->{upload}('01234many', body_split => [ 5 ], body_more => 1), |
95 '01234many', 'many - part'); | 101 '01234many', 'many - part'); |
102 is($f->{window}, 18, 'many - part - window'); | |
96 is($f->{upload}('56789many', body_split => [ 5 ]), | 103 is($f->{upload}('56789many', body_split => [ 5 ]), |
97 '56789many', 'many - part 2'); | 104 '56789many', 'many - part 2'); |
105 is($f->{window}, 9, 'many - part 2 - window'); | |
98 is($f->{http_end}(), 200, 'many - response'); | 106 is($f->{http_end}(), 200, 'many - response'); |
99 | 107 |
100 $f = get_body('/', 'content-length' => 0); | 108 $f = get_body('/', 'content-length' => 0); |
101 ok($f->{headers}, 'empty'); | 109 ok($f->{headers}, 'empty'); |
102 is($f->{upload}('', body_more => 1), '', 'empty - part'); | 110 is($f->{upload}('', body_more => 1), '', 'empty - part'); |
111 | |
112 TODO: { | |
113 local $TODO = 'not yet'; | |
114 | |
115 is($f->{window}, undef, 'empty - part - window'); | |
116 | |
117 } | |
118 | |
103 is($f->{upload}(''), '', 'empty - part 2'); | 119 is($f->{upload}(''), '', 'empty - part 2'); |
120 is($f->{window}, undef, 'empty - part 2 - window'); | |
104 is($f->{http_end}(), 200, 'empty - response'); | 121 is($f->{http_end}(), 200, 'empty - response'); |
105 | 122 |
106 $f = get_body('/', 'content-length' => 1536); | 123 $f = get_body('/', 'content-length' => 1536); |
107 ok($f->{headers}, 'buffer'); | 124 ok($f->{headers}, 'buffer'); |
108 is($f->{upload}('0123' x 128, body_more => 1), '0123' x 128, | 125 is($f->{upload}('0123' x 128, body_more => 1), '0123' x 128, |
109 'buffer - below'); | 126 'buffer - below'); |
127 is($f->{window}, 1024, 'buffer - below - window'); | |
110 is($f->{upload}('4567' x 128, body_more => 1), '4567' x 128, | 128 is($f->{upload}('4567' x 128, body_more => 1), '4567' x 128, |
111 'buffer - equal'); | 129 'buffer - equal'); |
130 is($f->{window}, 512, 'buffer - equal - window'); | |
112 is($f->{upload}('89AB' x 128), '89AB' x 128, 'buffer - above'); | 131 is($f->{upload}('89AB' x 128), '89AB' x 128, 'buffer - above'); |
132 is($f->{window}, 512, 'buffer - above - window'); | |
113 is($f->{http_end}(), 200, 'buffer - response'); | 133 is($f->{http_end}(), 200, 'buffer - response'); |
114 | 134 |
115 $f = get_body('/', 'content-length' => 10); | 135 $f = get_body('/', 'content-length' => 10); |
116 ok($f->{headers}, 'split'); | 136 ok($f->{headers}, 'split'); |
117 is($f->{upload}('0123456789', split => [ 14 ]), '0123456789', 'split'); | 137 is($f->{upload}('0123456789', split => [ 14 ]), '0123456789', 'split'); |
121 | 141 |
122 $f = get_body('/chunked'); | 142 $f = get_body('/chunked'); |
123 ok($f->{headers}, 'chunked'); | 143 ok($f->{headers}, 'chunked'); |
124 is($f->{upload}('01234', body_more => 1), '5' . CRLF . '01234' . CRLF, | 144 is($f->{upload}('01234', body_more => 1), '5' . CRLF . '01234' . CRLF, |
125 'chunked - part'); | 145 'chunked - part'); |
146 is($f->{window}, 1024, 'chunked - part - window'); | |
126 is($f->{upload}('56789'), '5' . CRLF . '56789' . CRLF . '0' . CRLF . CRLF, | 147 is($f->{upload}('56789'), '5' . CRLF . '56789' . CRLF . '0' . CRLF . CRLF, |
127 'chunked - part 2'); | 148 'chunked - part 2'); |
149 is($f->{window}, 5, 'chunked - part 2 - window'); | |
128 is($f->{http_end}(), 200, 'chunked - response'); | 150 is($f->{http_end}(), 200, 'chunked - response'); |
129 | 151 |
130 $f = get_body('/chunked'); | 152 $f = get_body('/chunked'); |
131 ok($f->{headers}, 'chunked buffer'); | 153 ok($f->{headers}, 'chunked buffer'); |
132 is($f->{upload}('0123' x 128, body_more => 1), | 154 is($f->{upload}('0123' x 128, body_more => 1), |
133 '200' . CRLF . '0123' x 128 . CRLF, 'chunked buffer - below'); | 155 '200' . CRLF . '0123' x 128 . CRLF, 'chunked buffer - below'); |
156 is($f->{window}, 1024, 'chunked buffer - below - window'); | |
134 is($f->{upload}('4567' x 128, body_more => 1), | 157 is($f->{upload}('4567' x 128, body_more => 1), |
135 '200' . CRLF . '4567' x 128 . CRLF, 'chunked buffer - equal'); | 158 '200' . CRLF . '4567' x 128 . CRLF, 'chunked buffer - equal'); |
159 is($f->{window}, 512, 'chunked buffer - equal - window'); | |
136 is($f->{upload}('89AB' x 128), | 160 is($f->{upload}('89AB' x 128), |
137 '200' . CRLF . '89AB' x 128 . CRLF . '0' . CRLF . CRLF, | 161 '200' . CRLF . '89AB' x 128 . CRLF . '0' . CRLF . CRLF, |
138 'chunked buffer - above'); | 162 'chunked buffer - above'); |
163 is($f->{window}, 512, 'chunked buffer - above - window'); | |
139 is($f->{http_end}(), 200, 'chunked buffer - response'); | 164 is($f->{http_end}(), 200, 'chunked buffer - response'); |
140 | 165 |
141 $f = get_body('/chunked'); | 166 $f = get_body('/chunked'); |
142 ok($f->{headers}, 'chunked many'); | 167 ok($f->{headers}, 'chunked many'); |
143 is($f->{upload}('01234many', body_split => [ 5 ], body_more => 1), | 168 is($f->{upload}('01234many', body_split => [ 5 ], body_more => 1), |
144 '9' . CRLF . '01234many' . CRLF, 'chunked many - part'); | 169 '9' . CRLF . '01234many' . CRLF, 'chunked many - part'); |
170 is($f->{window}, 1024, 'chunked many - part - window'); | |
145 is($f->{upload}('56789many', body_split => [ 5 ]), | 171 is($f->{upload}('56789many', body_split => [ 5 ]), |
146 '9' . CRLF . '56789many' . CRLF . '0' . CRLF . CRLF, | 172 '9' . CRLF . '56789many' . CRLF . '0' . CRLF . CRLF, |
147 'chunked many - part 2'); | 173 'chunked many - part 2'); |
174 is($f->{window}, 9, 'chunked many - part 2 - window'); | |
148 is($f->{http_end}(), 200, 'chunked many - response'); | 175 is($f->{http_end}(), 200, 'chunked many - response'); |
149 | 176 |
150 $f = get_body('/chunked'); | 177 $f = get_body('/chunked'); |
151 ok($f->{headers}, 'chunked empty'); | 178 ok($f->{headers}, 'chunked empty'); |
152 is($f->{upload}('', body_more => 1), '', 'chunked empty - part'); | 179 is($f->{upload}('', body_more => 1), '', 'chunked empty - part'); |
180 is($f->{window}, 1024, 'chunked empty - part - window'); | |
153 is($f->{upload}(''), '0' . CRLF . CRLF, 'chunked empty - part 2'); | 181 is($f->{upload}(''), '0' . CRLF . CRLF, 'chunked empty - part 2'); |
182 is($f->{window}, undef, 'chunked empty - part 2 - window'); | |
154 is($f->{http_end}(), 200, 'chunked empty - response'); | 183 is($f->{http_end}(), 200, 'chunked empty - response'); |
155 | 184 |
156 $f = get_body('/chunked'); | 185 $f = get_body('/chunked'); |
157 ok($f->{headers}, 'chunked split'); | 186 ok($f->{headers}, 'chunked split'); |
158 is($f->{upload}('0123456789', split => [ 14 ]), | 187 is($f->{upload}('0123456789', split => [ 14 ]), |
214 }; | 243 }; |
215 | 244 |
216 $f->{upload} = sub { | 245 $f->{upload} = sub { |
217 my ($body, %extra) = @_; | 246 my ($body, %extra) = @_; |
218 | 247 |
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 | |
219 h2_body($sess, $body, { %extra }); | 253 h2_body($sess, $body, { %extra }); |
220 | 254 |
221 return $body_read->($client, '', length($body)); | 255 return $body_read->($client, '', length($body)); |
222 }; | 256 }; |
223 $f->{http_end} = sub { | 257 $f->{http_end} = sub { |