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 {