Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Side by Side Diff: net/quic/quic_stream_factory_test.cc

Issue 16256017: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix for Android DEBUG builds with DEATH_TEST Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_stream_factory.h" 5 #include "net/quic/quic_stream_factory.h"
6 6
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "net/dns/mock_host_resolver.h" 9 #include "net/dns/mock_host_resolver.h"
10 #include "net/http/http_response_headers.h" 10 #include "net/http/http_response_headers.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 BoundNetLog net_log_; 122 BoundNetLog net_log_;
123 TestCompletionCallback callback_; 123 TestCompletionCallback callback_;
124 }; 124 };
125 125
126 TEST_F(QuicStreamFactoryTest, CreateIfSessionExists) { 126 TEST_F(QuicStreamFactoryTest, CreateIfSessionExists) {
127 EXPECT_EQ(NULL, factory_.CreateIfSessionExists(host_port_proxy_pair_, 127 EXPECT_EQ(NULL, factory_.CreateIfSessionExists(host_port_proxy_pair_,
128 net_log_).get()); 128 net_log_).get());
129 } 129 }
130 130
131 TEST_F(QuicStreamFactoryTest, Create) { 131 TEST_F(QuicStreamFactoryTest, Create) {
132 scoped_ptr<QuicEncryptedPacket> rst3(ConstructRstPacket(1, 3)); 132 MockRead reads[] = {
133 scoped_ptr<QuicEncryptedPacket> rst5(ConstructRstPacket(2, 5)); 133 MockRead(ASYNC, OK, 0) // EOF
134 scoped_ptr<QuicEncryptedPacket> rst7(ConstructRstPacket(3, 7));
135 MockWrite writes[] = {
136 MockWrite(SYNCHRONOUS, rst3->data(), rst3->length(), 0),
137 MockWrite(SYNCHRONOUS, rst5->data(), rst5->length(), 1),
138 MockWrite(SYNCHRONOUS, rst7->data(), rst7->length(), 2),
139 }; 134 };
140 MockRead reads[] = { 135 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
141 MockRead(ASYNC, OK, 3) // EOF
142 };
143 DeterministicSocketData socket_data(reads, arraysize(reads),
144 writes, arraysize(writes));
145 socket_factory_.AddSocketDataProvider(&socket_data); 136 socket_factory_.AddSocketDataProvider(&socket_data);
146 socket_data.StopAfter(3); 137 socket_data.StopAfter(1);
147 138
148 QuicStreamRequest request(&factory_); 139 QuicStreamRequest request(&factory_);
149 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, net_log_, 140 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, net_log_,
150 callback_.callback())); 141 callback_.callback()));
151 142
152 EXPECT_EQ(OK, callback_.WaitForResult()); 143 EXPECT_EQ(OK, callback_.WaitForResult());
153 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 144 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
154 EXPECT_TRUE(stream.get()); 145 EXPECT_TRUE(stream.get());
155 146
156 // Will reset stream 3. 147 // Will reset stream 3.
157 stream = factory_.CreateIfSessionExists(host_port_proxy_pair_, net_log_); 148 stream = factory_.CreateIfSessionExists(host_port_proxy_pair_, net_log_);
158 EXPECT_TRUE(stream.get()); 149 EXPECT_TRUE(stream.get());
159 150
160 QuicStreamRequest request2(&factory_); 151 QuicStreamRequest request2(&factory_);
161 EXPECT_EQ(OK, request2.Request(host_port_proxy_pair_, net_log_, 152 EXPECT_EQ(OK, request2.Request(host_port_proxy_pair_, net_log_,
162 callback_.callback())); 153 callback_.callback()));
163 stream = request2.ReleaseStream(); // Will reset stream 5. 154 stream = request2.ReleaseStream(); // Will reset stream 5.
164 stream.reset(); // Will reset stream 7. 155 stream.reset(); // Will reset stream 7.
165 156
166 socket_data.RunFor(1);
167
168 EXPECT_TRUE(socket_data.at_read_eof()); 157 EXPECT_TRUE(socket_data.at_read_eof());
169 EXPECT_TRUE(socket_data.at_write_eof()); 158 EXPECT_TRUE(socket_data.at_write_eof());
170 } 159 }
171 160
172 TEST_F(QuicStreamFactoryTest, CreateError) { 161 TEST_F(QuicStreamFactoryTest, CreateError) {
173 DeterministicSocketData socket_data(NULL, 0, NULL, 0); 162 DeterministicSocketData socket_data(NULL, 0, NULL, 0);
174 socket_factory_.AddSocketDataProvider(&socket_data); 163 socket_factory_.AddSocketDataProvider(&socket_data);
175 164
176 host_resolver_.rules()->AddSimulatedFailure("www.google.com"); 165 host_resolver_.rules()->AddSimulatedFailure("www.google.com");
177 166
178 QuicStreamRequest request(&factory_); 167 QuicStreamRequest request(&factory_);
179 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, net_log_, 168 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, net_log_,
180 callback_.callback())); 169 callback_.callback()));
181 170
182 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback_.WaitForResult()); 171 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback_.WaitForResult());
183 172
184 EXPECT_TRUE(socket_data.at_read_eof()); 173 EXPECT_TRUE(socket_data.at_read_eof());
185 EXPECT_TRUE(socket_data.at_write_eof()); 174 EXPECT_TRUE(socket_data.at_write_eof());
186 } 175 }
187 176
188 TEST_F(QuicStreamFactoryTest, CancelCreate) { 177 TEST_F(QuicStreamFactoryTest, CancelCreate) {
189 scoped_ptr<QuicEncryptedPacket> rst3(ConstructRstPacket(1, 3)); 178 MockRead reads[] = {
190 179 MockRead(ASYNC, OK, 0) // EOF
191 MockWrite writes[] = {
192 MockWrite(SYNCHRONOUS, rst3->data(), rst3->length(), 0),
193 }; 180 };
194 MockRead reads[] = { 181 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
195 MockRead(ASYNC, OK, 1) // EOF
196 };
197 DeterministicSocketData socket_data(reads, arraysize(reads),
198 writes, arraysize(writes));
199 socket_factory_.AddSocketDataProvider(&socket_data); 182 socket_factory_.AddSocketDataProvider(&socket_data);
200 { 183 {
201 QuicStreamRequest request(&factory_); 184 QuicStreamRequest request(&factory_);
202 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, net_log_, 185 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, net_log_,
203 callback_.callback())); 186 callback_.callback()));
204 } 187 }
205 188
206 socket_data.StopAfter(2); 189 socket_data.StopAfter(1);
207 base::RunLoop run_loop; 190 base::RunLoop run_loop;
208 run_loop.RunUntilIdle(); 191 run_loop.RunUntilIdle();
209 192
210 scoped_ptr<QuicHttpStream> stream( 193 scoped_ptr<QuicHttpStream> stream(
211 factory_.CreateIfSessionExists(host_port_proxy_pair_, net_log_)); 194 factory_.CreateIfSessionExists(host_port_proxy_pair_, net_log_));
212 EXPECT_TRUE(stream.get()); 195 EXPECT_TRUE(stream.get());
213 stream.reset(); 196 stream.reset();
214 197
215 socket_data.RunFor(1);
216
217 EXPECT_TRUE(socket_data.at_read_eof()); 198 EXPECT_TRUE(socket_data.at_read_eof());
218 EXPECT_TRUE(socket_data.at_write_eof()); 199 EXPECT_TRUE(socket_data.at_write_eof());
219 } 200 }
220 201
221 TEST_F(QuicStreamFactoryTest, CloseAllSessions) { 202 TEST_F(QuicStreamFactoryTest, CloseAllSessions) {
222 scoped_ptr<QuicEncryptedPacket> rst3(ConstructRstPacket(1, 3));
223 MockRead reads[] = { 203 MockRead reads[] = {
224 MockRead(ASYNC, 0, 0) // EOF 204 MockRead(ASYNC, 0, 0) // EOF
225 }; 205 };
226 DeterministicSocketData socket_data(reads, arraysize(reads), 206 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
227 NULL, 0);
228 socket_factory_.AddSocketDataProvider(&socket_data); 207 socket_factory_.AddSocketDataProvider(&socket_data);
229 socket_data.StopAfter(1); 208 socket_data.StopAfter(1);
230 209
231 MockWrite writes2[] = { 210 MockRead reads2[] = {
232 MockWrite(SYNCHRONOUS, rst3->data(), rst3->length(), 0), 211 MockRead(ASYNC, 0, 0) // EOF
233 }; 212 };
234 MockRead reads2[] = { 213 DeterministicSocketData socket_data2(reads2, arraysize(reads2), NULL, 0);
235 MockRead(ASYNC, 0, 1) // EOF
236 };
237 DeterministicSocketData socket_data2(reads2, arraysize(reads2),
238 writes2, arraysize(writes2));
239 socket_factory_.AddSocketDataProvider(&socket_data2); 214 socket_factory_.AddSocketDataProvider(&socket_data2);
240 socket_data2.StopAfter(1); 215 socket_data2.StopAfter(1);
241 216
242 QuicStreamRequest request(&factory_); 217 QuicStreamRequest request(&factory_);
243 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, net_log_, 218 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, net_log_,
244 callback_.callback())); 219 callback_.callback()));
245 220
246 EXPECT_EQ(OK, callback_.WaitForResult()); 221 EXPECT_EQ(OK, callback_.WaitForResult());
247 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 222 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
248 223
249 // Close the session and verify that stream saw the error. 224 // Close the session and verify that stream saw the error.
250 factory_.CloseAllSessions(ERR_INTERNET_DISCONNECTED); 225 factory_.CloseAllSessions(ERR_INTERNET_DISCONNECTED);
251 EXPECT_EQ(ERR_INTERNET_DISCONNECTED, 226 EXPECT_EQ(ERR_INTERNET_DISCONNECTED,
252 stream->ReadResponseHeaders(callback_.callback())); 227 stream->ReadResponseHeaders(callback_.callback()));
253 228
254 // Now attempting to request a stream to the same origin should create 229 // Now attempting to request a stream to the same origin should create
255 // a new session. 230 // a new session.
256 231
257 QuicStreamRequest request2(&factory_); 232 QuicStreamRequest request2(&factory_);
258 EXPECT_EQ(ERR_IO_PENDING, request2.Request(host_port_proxy_pair_, net_log_, 233 EXPECT_EQ(ERR_IO_PENDING, request2.Request(host_port_proxy_pair_, net_log_,
259 callback_.callback())); 234 callback_.callback()));
260 235
261 EXPECT_EQ(OK, callback_.WaitForResult()); 236 EXPECT_EQ(OK, callback_.WaitForResult());
262 stream = request2.ReleaseStream(); 237 stream = request2.ReleaseStream();
263 stream.reset(); // Will reset stream 3. 238 stream.reset(); // Will reset stream 3.
264 239
265 socket_data2.RunFor(1);
266
267 EXPECT_TRUE(socket_data.at_read_eof()); 240 EXPECT_TRUE(socket_data.at_read_eof());
268 EXPECT_TRUE(socket_data.at_write_eof()); 241 EXPECT_TRUE(socket_data.at_write_eof());
269 EXPECT_TRUE(socket_data2.at_read_eof()); 242 EXPECT_TRUE(socket_data2.at_read_eof());
270 EXPECT_TRUE(socket_data2.at_write_eof()); 243 EXPECT_TRUE(socket_data2.at_write_eof());
271 } 244 }
272 245
273 TEST_F(QuicStreamFactoryTest, OnIPAddressChanged) { 246 TEST_F(QuicStreamFactoryTest, OnIPAddressChanged) {
274 scoped_ptr<QuicEncryptedPacket> rst3(ConstructRstPacket(1, 3));
275 MockRead reads[] = { 247 MockRead reads[] = {
276 MockRead(ASYNC, 0, 0) // EOF 248 MockRead(ASYNC, 0, 0) // EOF
277 }; 249 };
278 DeterministicSocketData socket_data(reads, arraysize(reads), 250 DeterministicSocketData socket_data(reads, arraysize(reads), NULL, 0);
279 NULL, 0);
280 socket_factory_.AddSocketDataProvider(&socket_data); 251 socket_factory_.AddSocketDataProvider(&socket_data);
281 socket_data.StopAfter(1); 252 socket_data.StopAfter(1);
282 253
283 MockWrite writes2[] = { 254 MockRead reads2[] = {
284 MockWrite(SYNCHRONOUS, rst3->data(), rst3->length(), 0), 255 MockRead(ASYNC, 0, 0) // EOF
285 }; 256 };
286 MockRead reads2[] = { 257 DeterministicSocketData socket_data2(reads2, arraysize(reads2), NULL, 0);
287 MockRead(ASYNC, 0, 1) // EOF
288 };
289 DeterministicSocketData socket_data2(reads2, arraysize(reads2),
290 writes2, arraysize(writes2));
291 socket_factory_.AddSocketDataProvider(&socket_data2); 258 socket_factory_.AddSocketDataProvider(&socket_data2);
292 socket_data2.StopAfter(1); 259 socket_data2.StopAfter(1);
293 260
294 QuicStreamRequest request(&factory_); 261 QuicStreamRequest request(&factory_);
295 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, net_log_, 262 EXPECT_EQ(ERR_IO_PENDING, request.Request(host_port_proxy_pair_, net_log_,
296 callback_.callback())); 263 callback_.callback()));
297 264
298 EXPECT_EQ(OK, callback_.WaitForResult()); 265 EXPECT_EQ(OK, callback_.WaitForResult());
299 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream(); 266 scoped_ptr<QuicHttpStream> stream = request.ReleaseStream();
300 267
301 // Change the IP address and verify that stream saw the error. 268 // Change the IP address and verify that stream saw the error.
302 factory_.OnIPAddressChanged(); 269 factory_.OnIPAddressChanged();
303 EXPECT_EQ(ERR_NETWORK_CHANGED, 270 EXPECT_EQ(ERR_NETWORK_CHANGED,
304 stream->ReadResponseHeaders(callback_.callback())); 271 stream->ReadResponseHeaders(callback_.callback()));
305 272
306 // Now attempting to request a stream to the same origin should create 273 // Now attempting to request a stream to the same origin should create
307 // a new session. 274 // a new session.
308 275
309 QuicStreamRequest request2(&factory_); 276 QuicStreamRequest request2(&factory_);
310 EXPECT_EQ(ERR_IO_PENDING, request2.Request(host_port_proxy_pair_, net_log_, 277 EXPECT_EQ(ERR_IO_PENDING, request2.Request(host_port_proxy_pair_, net_log_,
311 callback_.callback())); 278 callback_.callback()));
312 279
313 EXPECT_EQ(OK, callback_.WaitForResult()); 280 EXPECT_EQ(OK, callback_.WaitForResult());
314 stream = request2.ReleaseStream(); 281 stream = request2.ReleaseStream();
315 stream.reset(); // Will reset stream 3. 282 stream.reset(); // Will reset stream 3.
316 283
317 socket_data2.RunFor(1);
318
319 EXPECT_TRUE(socket_data.at_read_eof()); 284 EXPECT_TRUE(socket_data.at_read_eof());
320 EXPECT_TRUE(socket_data.at_write_eof()); 285 EXPECT_TRUE(socket_data.at_write_eof());
321 EXPECT_TRUE(socket_data2.at_read_eof()); 286 EXPECT_TRUE(socket_data2.at_read_eof());
322 EXPECT_TRUE(socket_data2.at_write_eof()); 287 EXPECT_TRUE(socket_data2.at_write_eof());
323 } 288 }
324 289
325 } // namespace test 290 } // namespace test
326 } // namespace net 291 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698