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

Side by Side Diff: net/tools/quic/end_to_end_test.cc

Issue 19858003: * Removed QuicTag kQuicVersion1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed comments from rch Created 7 years, 5 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
« no previous file with comments | « net/quic/test_tools/simple_quic_framer.cc ('k') | net/tools/quic/quic_client.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 5 #include <stddef.h>
6 #include <string> 6 #include <string>
7 7
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/singleton.h" 9 #include "base/memory/singleton.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 WaitableEvent listening_; 100 WaitableEvent listening_;
101 WaitableEvent quit_; 101 WaitableEvent quit_;
102 base::Lock port_lock_; 102 base::Lock port_lock_;
103 QuicServer server_; 103 QuicServer server_;
104 IPEndPoint address_; 104 IPEndPoint address_;
105 int port_; 105 int port_;
106 106
107 DISALLOW_COPY_AND_ASSIGN(ServerThread); 107 DISALLOW_COPY_AND_ASSIGN(ServerThread);
108 }; 108 };
109 109
110 class EndToEndTest : public ::testing::Test { 110 class EndToEndTest : public ::testing::TestWithParam<QuicVersion> {
111 public:
112 static void SetUpTestCase() {
113 QuicInMemoryCache::GetInstance()->ResetForTests();
114 }
115
111 protected: 116 protected:
112 EndToEndTest() 117 EndToEndTest()
113 : server_hostname_("example.com"), 118 : server_hostname_("example.com"),
114 server_started_(false) { 119 server_started_(false) {
115 net::IPAddressNumber ip; 120 net::IPAddressNumber ip;
116 CHECK(net::ParseIPLiteralToNumber("127.0.0.1", &ip)); 121 CHECK(net::ParseIPLiteralToNumber("127.0.0.1", &ip));
117 server_address_ = IPEndPoint(ip, 0); 122 server_address_ = IPEndPoint(ip, 0);
118 client_config_.SetDefaults(); 123 client_config_.SetDefaults();
119 server_config_.SetDefaults(); 124 server_config_.SetDefaults();
120 125
121 AddToCache("GET", kLargeRequest, "HTTP/1.1", "200", "OK", kFooResponseBody); 126 AddToCache("GET", kLargeRequest, "HTTP/1.1", "200", "OK", kFooResponseBody);
122 AddToCache("GET", "https://www.google.com/foo", 127 AddToCache("GET", "https://www.google.com/foo",
123 "HTTP/1.1", "200", "OK", kFooResponseBody); 128 "HTTP/1.1", "200", "OK", kFooResponseBody);
124 AddToCache("GET", "https://www.google.com/bar", 129 AddToCache("GET", "https://www.google.com/bar",
125 "HTTP/1.1", "200", "OK", kBarResponseBody); 130 "HTTP/1.1", "200", "OK", kBarResponseBody);
126 } 131 version_ = GetParam();
127
128 static void SetUpTestCase() {
129 QuicInMemoryCache::GetInstance()->ResetForTests();
130 } 132 }
131 133
132 virtual QuicTestClient* CreateQuicClient() { 134 virtual QuicTestClient* CreateQuicClient() {
133 QuicTestClient* client = new QuicTestClient(server_address_, 135 QuicTestClient* client = new QuicTestClient(server_address_,
134 server_hostname_, 136 server_hostname_,
135 client_config_); 137 client_config_,
138 version_);
136 client->Connect(); 139 client->Connect();
137 return client; 140 return client;
138 } 141 }
139 142
140 virtual bool Initialize() { 143 virtual bool Initialize() {
141 // Start the server first, because CreateQuicClient() attempts 144 // Start the server first, because CreateQuicClient() attempts
142 // to connect to the server. 145 // to connect to the server.
143 StartServer(); 146 StartServer();
144 client_.reset(CreateQuicClient()); 147 client_.reset(CreateQuicClient());
145 return client_->client()->connected(); 148 return client_->client()->connected();
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 cache->AddResponse(request_headers, response_headers, body); 201 cache->AddResponse(request_headers, response_headers, body);
199 } 202 }
200 203
201 IPEndPoint server_address_; 204 IPEndPoint server_address_;
202 string server_hostname_; 205 string server_hostname_;
203 scoped_ptr<ServerThread> server_thread_; 206 scoped_ptr<ServerThread> server_thread_;
204 scoped_ptr<QuicTestClient> client_; 207 scoped_ptr<QuicTestClient> client_;
205 bool server_started_; 208 bool server_started_;
206 QuicConfig client_config_; 209 QuicConfig client_config_;
207 QuicConfig server_config_; 210 QuicConfig server_config_;
211 QuicVersion version_;
208 }; 212 };
209 213
210 TEST_F(EndToEndTest, SimpleRequestResponse) { 214 // Run all end to end tests with QUIC version 6.
215 INSTANTIATE_TEST_CASE_P(EndToEndTests,
216 EndToEndTest,
217 ::testing::Values(QUIC_VERSION_6));
218
219 TEST_P(EndToEndTest, SimpleRequestResponse) {
211 // TODO(rtenneti): Delete this when NSS is supported. 220 // TODO(rtenneti): Delete this when NSS is supported.
212 if (!Aes128Gcm12Encrypter::IsSupported()) { 221 if (!Aes128Gcm12Encrypter::IsSupported()) {
213 LOG(INFO) << "AES GCM not supported. Test skipped."; 222 LOG(INFO) << "AES GCM not supported. Test skipped.";
214 return; 223 return;
215 } 224 }
216 225
217 ASSERT_TRUE(Initialize()); 226 ASSERT_TRUE(Initialize());
218 227
219 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); 228 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
220 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 229 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
221 } 230 }
222 231
223 TEST_F(EndToEndTest, SimpleRequestResponsev6) { 232 TEST_P(EndToEndTest, SimpleRequestResponsev6) {
224 // TODO(rtenneti): Delete this when NSS is supported. 233 // TODO(rtenneti): Delete this when NSS is supported.
225 if (!Aes128Gcm12Encrypter::IsSupported()) { 234 if (!Aes128Gcm12Encrypter::IsSupported()) {
226 LOG(INFO) << "AES GCM not supported. Test skipped."; 235 LOG(INFO) << "AES GCM not supported. Test skipped.";
227 return; 236 return;
228 } 237 }
229 238
230 IPAddressNumber ip; 239 IPAddressNumber ip;
231 CHECK(net::ParseIPLiteralToNumber("::1", &ip)); 240 CHECK(net::ParseIPLiteralToNumber("::1", &ip));
232 server_address_ = IPEndPoint(ip, server_address_.port()); 241 server_address_ = IPEndPoint(ip, server_address_.port());
233 ASSERT_TRUE(Initialize()); 242 ASSERT_TRUE(Initialize());
234 243
235 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); 244 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
236 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 245 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
237 } 246 }
238 247
239 TEST_F(EndToEndTest, SeparateFinPacket) { 248 TEST_P(EndToEndTest, SeparateFinPacket) {
240 // TODO(rtenneti): Delete this when NSS is supported. 249 // TODO(rtenneti): Delete this when NSS is supported.
241 if (!Aes128Gcm12Encrypter::IsSupported()) { 250 if (!Aes128Gcm12Encrypter::IsSupported()) {
242 LOG(INFO) << "AES GCM not supported. Test skipped."; 251 LOG(INFO) << "AES GCM not supported. Test skipped.";
243 return; 252 return;
244 } 253 }
245 254
246 ASSERT_TRUE(Initialize()); 255 ASSERT_TRUE(Initialize());
247 256
248 HTTPMessage request(HttpConstants::HTTP_1_1, 257 HTTPMessage request(HttpConstants::HTTP_1_1,
249 HttpConstants::POST, "/foo"); 258 HttpConstants::POST, "/foo");
250 request.set_has_complete_message(false); 259 request.set_has_complete_message(false);
251 260
252 client_->SendMessage(request); 261 client_->SendMessage(request);
253 262
254 client_->SendData(string(), true); 263 client_->SendData(string(), true);
255 264
256 client_->WaitForResponse(); 265 client_->WaitForResponse();
257 EXPECT_EQ(kFooResponseBody, client_->response_body()); 266 EXPECT_EQ(kFooResponseBody, client_->response_body());
258 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 267 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
259 268
260 request.AddBody("foo", true); 269 request.AddBody("foo", true);
261 270
262 client_->SendMessage(request); 271 client_->SendMessage(request);
263 client_->SendData(string(), true); 272 client_->SendData(string(), true);
264 client_->WaitForResponse(); 273 client_->WaitForResponse();
265 EXPECT_EQ(kFooResponseBody, client_->response_body()); 274 EXPECT_EQ(kFooResponseBody, client_->response_body());
266 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 275 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
267 } 276 }
268 277
269 TEST_F(EndToEndTest, MultipleRequestResponse) { 278 TEST_P(EndToEndTest, MultipleRequestResponse) {
270 // TODO(rtenneti): Delete this when NSS is supported. 279 // TODO(rtenneti): Delete this when NSS is supported.
271 if (!Aes128Gcm12Encrypter::IsSupported()) { 280 if (!Aes128Gcm12Encrypter::IsSupported()) {
272 LOG(INFO) << "AES GCM not supported. Test skipped."; 281 LOG(INFO) << "AES GCM not supported. Test skipped.";
273 return; 282 return;
274 } 283 }
275 284
276 ASSERT_TRUE(Initialize()); 285 ASSERT_TRUE(Initialize());
277 286
278 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); 287 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
279 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 288 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
280 EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest("/bar")); 289 EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest("/bar"));
281 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 290 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
282 } 291 }
283 292
284 TEST_F(EndToEndTest, MultipleClients) { 293 TEST_P(EndToEndTest, MultipleClients) {
285 // TODO(rtenneti): Delete this when NSS is supported. 294 // TODO(rtenneti): Delete this when NSS is supported.
286 if (!Aes128Gcm12Encrypter::IsSupported()) { 295 if (!Aes128Gcm12Encrypter::IsSupported()) {
287 LOG(INFO) << "AES GCM not supported. Test skipped."; 296 LOG(INFO) << "AES GCM not supported. Test skipped.";
288 return; 297 return;
289 } 298 }
290 299
291 ASSERT_TRUE(Initialize()); 300 ASSERT_TRUE(Initialize());
292 scoped_ptr<QuicTestClient> client2(CreateQuicClient()); 301 scoped_ptr<QuicTestClient> client2(CreateQuicClient());
293 302
294 HTTPMessage request(HttpConstants::HTTP_1_1, 303 HTTPMessage request(HttpConstants::HTTP_1_1,
295 HttpConstants::POST, "/foo"); 304 HttpConstants::POST, "/foo");
296 request.AddHeader("content-length", "3"); 305 request.AddHeader("content-length", "3");
297 request.set_has_complete_message(false); 306 request.set_has_complete_message(false);
298 307
299 client_->SendMessage(request); 308 client_->SendMessage(request);
300 client2->SendMessage(request); 309 client2->SendMessage(request);
301 310
302 client_->SendData("bar", true); 311 client_->SendData("bar", true);
303 client_->WaitForResponse(); 312 client_->WaitForResponse();
304 EXPECT_EQ(kFooResponseBody, client_->response_body()); 313 EXPECT_EQ(kFooResponseBody, client_->response_body());
305 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 314 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
306 315
307 client2->SendData("eep", true); 316 client2->SendData("eep", true);
308 client2->WaitForResponse(); 317 client2->WaitForResponse();
309 EXPECT_EQ(kFooResponseBody, client2->response_body()); 318 EXPECT_EQ(kFooResponseBody, client2->response_body());
310 EXPECT_EQ(200u, client2->response_headers()->parsed_response_code()); 319 EXPECT_EQ(200u, client2->response_headers()->parsed_response_code());
311 } 320 }
312 321
313 TEST_F(EndToEndTest, RequestOverMultiplePackets) { 322 TEST_P(EndToEndTest, RequestOverMultiplePackets) {
314 // TODO(rtenneti): Delete this when NSS is supported. 323 // TODO(rtenneti): Delete this when NSS is supported.
315 if (!Aes128Gcm12Encrypter::IsSupported()) { 324 if (!Aes128Gcm12Encrypter::IsSupported()) {
316 LOG(INFO) << "AES GCM not supported. Test skipped."; 325 LOG(INFO) << "AES GCM not supported. Test skipped.";
317 return; 326 return;
318 } 327 }
319 328
320 ASSERT_TRUE(Initialize()); 329 ASSERT_TRUE(Initialize());
321 // Set things up so we have a small payload, to guarantee fragmentation. 330 // Set things up so we have a small payload, to guarantee fragmentation.
322 // A congestion feedback frame can't be split into multiple packets, make sure 331 // A congestion feedback frame can't be split into multiple packets, make sure
323 // that our packet have room for at least this amount after the normal headers 332 // that our packet have room for at least this amount after the normal headers
(...skipping 11 matching lines...) Expand all
335 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, 344 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion,
336 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 345 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) +
337 ciphertext_size; 346 ciphertext_size;
338 347
339 // Make sure our request is too large to fit in one packet. 348 // Make sure our request is too large to fit in one packet.
340 EXPECT_GT(strlen(kLargeRequest), min_payload_size); 349 EXPECT_GT(strlen(kLargeRequest), min_payload_size);
341 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest(kLargeRequest)); 350 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest(kLargeRequest));
342 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 351 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
343 } 352 }
344 353
345 TEST_F(EndToEndTest, MultipleFramesRandomOrder) { 354 TEST_P(EndToEndTest, MultipleFramesRandomOrder) {
346 // TODO(rtenneti): Delete this when NSS is supported. 355 // TODO(rtenneti): Delete this when NSS is supported.
347 if (!Aes128Gcm12Encrypter::IsSupported()) { 356 if (!Aes128Gcm12Encrypter::IsSupported()) {
348 LOG(INFO) << "AES GCM not supported. Test skipped."; 357 LOG(INFO) << "AES GCM not supported. Test skipped.";
349 return; 358 return;
350 } 359 }
351 360
352 ASSERT_TRUE(Initialize()); 361 ASSERT_TRUE(Initialize());
353 // Set things up so we have a small payload, to guarantee fragmentation. 362 // Set things up so we have a small payload, to guarantee fragmentation.
354 // A congestion feedback frame can't be split into multiple packets, make sure 363 // A congestion feedback frame can't be split into multiple packets, make sure
355 // that our packet have room for at least this amount after the normal headers 364 // that our packet have room for at least this amount after the normal headers
(...skipping 12 matching lines...) Expand all
368 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 377 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) +
369 ciphertext_size; 378 ciphertext_size;
370 client_->options()->random_reorder = true; 379 client_->options()->random_reorder = true;
371 380
372 // Make sure our request is too large to fit in one packet. 381 // Make sure our request is too large to fit in one packet.
373 EXPECT_GT(strlen(kLargeRequest), min_payload_size); 382 EXPECT_GT(strlen(kLargeRequest), min_payload_size);
374 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest(kLargeRequest)); 383 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest(kLargeRequest));
375 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 384 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
376 } 385 }
377 386
378 TEST_F(EndToEndTest, PostMissingBytes) { 387 TEST_P(EndToEndTest, PostMissingBytes) {
379 // TODO(rtenneti): Delete this when NSS is supported. 388 // TODO(rtenneti): Delete this when NSS is supported.
380 if (!Aes128Gcm12Encrypter::IsSupported()) { 389 if (!Aes128Gcm12Encrypter::IsSupported()) {
381 LOG(INFO) << "AES GCM not supported. Test skipped."; 390 LOG(INFO) << "AES GCM not supported. Test skipped.";
382 return; 391 return;
383 } 392 }
384 393
385 ASSERT_TRUE(Initialize()); 394 ASSERT_TRUE(Initialize());
386 395
387 // Add a content length header with no body. 396 // Add a content length header with no body.
388 HTTPMessage request(HttpConstants::HTTP_1_1, 397 HTTPMessage request(HttpConstants::HTTP_1_1,
389 HttpConstants::POST, "/foo"); 398 HttpConstants::POST, "/foo");
390 request.AddHeader("content-length", "3"); 399 request.AddHeader("content-length", "3");
391 request.set_skip_message_validation(true); 400 request.set_skip_message_validation(true);
392 401
393 // This should be detected as stream fin without complete request, 402 // This should be detected as stream fin without complete request,
394 // triggering an error response. 403 // triggering an error response.
395 client_->SendCustomSynchronousRequest(request); 404 client_->SendCustomSynchronousRequest(request);
396 EXPECT_EQ("bad", client_->response_body()); 405 EXPECT_EQ("bad", client_->response_body());
397 EXPECT_EQ(500u, client_->response_headers()->parsed_response_code()); 406 EXPECT_EQ(500u, client_->response_headers()->parsed_response_code());
398 } 407 }
399 408
400 TEST_F(EndToEndTest, LargePost) { 409 TEST_P(EndToEndTest, LargePost) {
401 // TODO(rtenneti): Delete this when NSS is supported. 410 // TODO(rtenneti): Delete this when NSS is supported.
402 if (!Aes128Gcm12Encrypter::IsSupported()) { 411 if (!Aes128Gcm12Encrypter::IsSupported()) {
403 LOG(INFO) << "AES GCM not supported. Test skipped."; 412 LOG(INFO) << "AES GCM not supported. Test skipped.";
404 return; 413 return;
405 } 414 }
406 415
407 // FLAGS_fake_packet_loss_percentage = 30; 416 // FLAGS_fake_packet_loss_percentage = 30;
408 ASSERT_TRUE(Initialize()); 417 ASSERT_TRUE(Initialize());
409 418
410 string body; 419 string body;
411 GenerateBody(&body, 10240); 420 GenerateBody(&body, 10240);
412 421
413 HTTPMessage request(HttpConstants::HTTP_1_1, 422 HTTPMessage request(HttpConstants::HTTP_1_1,
414 HttpConstants::POST, "/foo"); 423 HttpConstants::POST, "/foo");
415 request.AddBody(body, true); 424 request.AddBody(body, true);
416 425
417 EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request)); 426 EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
418 } 427 }
419 428
420 // TODO(ianswett): Enable once b/9295090 is fixed. 429 // TODO(ianswett): Enable once b/9295090 is fixed.
421 TEST_F(EndToEndTest, DISABLED_LargePostFEC) { 430 TEST_P(EndToEndTest, DISABLED_LargePostFEC) {
422 // FLAGS_fake_packet_loss_percentage = 30; 431 // FLAGS_fake_packet_loss_percentage = 30;
423 ASSERT_TRUE(Initialize()); 432 ASSERT_TRUE(Initialize());
424 client_->options()->max_packets_per_fec_group = 6; 433 client_->options()->max_packets_per_fec_group = 6;
425 434
426 // TODO(rtenneti): Delete this when NSS is supported. 435 // TODO(rtenneti): Delete this when NSS is supported.
427 if (!Aes128Gcm12Encrypter::IsSupported()) { 436 if (!Aes128Gcm12Encrypter::IsSupported()) {
428 LOG(INFO) << "AES GCM not supported. Test skipped."; 437 LOG(INFO) << "AES GCM not supported. Test skipped.";
429 return; 438 return;
430 } 439 }
431 440
432 // FLAGS_fake_packet_loss_percentage = 30; 441 // FLAGS_fake_packet_loss_percentage = 30;
433 ASSERT_TRUE(Initialize()); 442 ASSERT_TRUE(Initialize());
434 client_->options()->max_packets_per_fec_group = 6; 443 client_->options()->max_packets_per_fec_group = 6;
435 444
436 string body; 445 string body;
437 GenerateBody(&body, 10240); 446 GenerateBody(&body, 10240);
438 447
439 HTTPMessage request(HttpConstants::HTTP_1_1, 448 HTTPMessage request(HttpConstants::HTTP_1_1,
440 HttpConstants::POST, "/foo"); 449 HttpConstants::POST, "/foo");
441 request.AddBody(body, true); 450 request.AddBody(body, true);
442 451
443 EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request)); 452 EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
444 } 453 }
445 454
446 /*TEST_F(EndToEndTest, PacketTooLarge) { 455 /*TEST_P(EndToEndTest, PacketTooLarge) {
447 FLAGS_quic_allow_oversized_packets_for_test = true; 456 FLAGS_quic_allow_oversized_packets_for_test = true;
448 ASSERT_TRUE(Initialize()); 457 ASSERT_TRUE(Initialize());
449 458
450 string body; 459 string body;
451 GenerateBody(&body, kMaxPacketSize); 460 GenerateBody(&body, kMaxPacketSize);
452 461
453 HTTPMessage request(HttpConstants::HTTP_1_1, 462 HTTPMessage request(HttpConstants::HTTP_1_1,
454 HttpConstants::POST, "/foo"); 463 HttpConstants::POST, "/foo");
455 request.AddBody(body, true); 464 request.AddBody(body, true);
456 client_->options()->max_packet_length = 20480; 465 client_->options()->max_packet_length = 20480;
457 466
458 EXPECT_EQ("", client_->SendCustomSynchronousRequest(request)); 467 EXPECT_EQ("", client_->SendCustomSynchronousRequest(request));
459 EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error()); 468 EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error());
460 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, client_->connection_error()); 469 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, client_->connection_error());
461 }*/ 470 }*/
462 471
463 TEST_F(EndToEndTest, InvalidStream) { 472 TEST_P(EndToEndTest, InvalidStream) {
464 // TODO(rtenneti): Delete this when NSS is supported. 473 // TODO(rtenneti): Delete this when NSS is supported.
465 if (!Aes128Gcm12Encrypter::IsSupported()) { 474 if (!Aes128Gcm12Encrypter::IsSupported()) {
466 LOG(INFO) << "AES GCM not supported. Test skipped."; 475 LOG(INFO) << "AES GCM not supported. Test skipped.";
467 return; 476 return;
468 } 477 }
469 478
470 ASSERT_TRUE(Initialize()); 479 ASSERT_TRUE(Initialize());
471 480
472 string body; 481 string body;
473 GenerateBody(&body, kMaxPacketSize); 482 GenerateBody(&body, kMaxPacketSize);
474 483
475 HTTPMessage request(HttpConstants::HTTP_1_1, 484 HTTPMessage request(HttpConstants::HTTP_1_1,
476 HttpConstants::POST, "/foo"); 485 HttpConstants::POST, "/foo");
477 request.AddBody(body, true); 486 request.AddBody(body, true);
478 // Force the client to write with a stream ID belonging to a nonexistant 487 // Force the client to write with a stream ID belonging to a nonexistant
479 // server-side stream. 488 // server-side stream.
480 QuicSessionPeer::SetNextStreamId(client_->client()->session(), 2); 489 QuicSessionPeer::SetNextStreamId(client_->client()->session(), 2);
481 490
482 client_->SendCustomSynchronousRequest(request); 491 client_->SendCustomSynchronousRequest(request);
483 // EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error()); 492 // EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error());
484 EXPECT_EQ(QUIC_PACKET_FOR_NONEXISTENT_STREAM, client_->connection_error()); 493 EXPECT_EQ(QUIC_PACKET_FOR_NONEXISTENT_STREAM, client_->connection_error());
485 } 494 }
486 495
487 TEST_F(EndToEndTest, MultipleTermination) { 496 TEST_P(EndToEndTest, MultipleTermination) {
488 // TODO(rtenneti): Delete this when NSS is supported. 497 // TODO(rtenneti): Delete this when NSS is supported.
489 if (!Aes128Gcm12Encrypter::IsSupported()) { 498 if (!Aes128Gcm12Encrypter::IsSupported()) {
490 LOG(INFO) << "AES GCM not supported. Test skipped."; 499 LOG(INFO) << "AES GCM not supported. Test skipped.";
491 return; 500 return;
492 } 501 }
493 502
494 ASSERT_TRUE(Initialize()); 503 ASSERT_TRUE(Initialize());
495 scoped_ptr<QuicTestClient> client2(CreateQuicClient()); 504 scoped_ptr<QuicTestClient> client2(CreateQuicClient());
496 505
497 HTTPMessage request(HttpConstants::HTTP_1_1, 506 HTTPMessage request(HttpConstants::HTTP_1_1,
(...skipping 15 matching lines...) Expand all
513 ReliableQuicStreamPeer::SetWriteSideClosed( 522 ReliableQuicStreamPeer::SetWriteSideClosed(
514 false, client_->GetOrCreateStream()); 523 false, client_->GetOrCreateStream());
515 EXPECT_DEBUG_DEATH({ 524 EXPECT_DEBUG_DEATH({
516 client_->SendData("eep", true); 525 client_->SendData("eep", true);
517 client_->WaitForResponse(); 526 client_->WaitForResponse();
518 EXPECT_EQ(QUIC_MULTIPLE_TERMINATION_OFFSETS, client_->stream_error()); 527 EXPECT_EQ(QUIC_MULTIPLE_TERMINATION_OFFSETS, client_->stream_error());
519 }, 528 },
520 "Check failed: !fin_buffered_"); 529 "Check failed: !fin_buffered_");
521 } 530 }
522 531
523 TEST_F(EndToEndTest, Timeout) { 532 TEST_P(EndToEndTest, Timeout) {
524 client_config_.set_idle_connection_state_lifetime( 533 client_config_.set_idle_connection_state_lifetime(
525 QuicTime::Delta::FromMicroseconds(500), 534 QuicTime::Delta::FromMicroseconds(500),
526 QuicTime::Delta::FromMicroseconds(500)); 535 QuicTime::Delta::FromMicroseconds(500));
527 // Note: we do NOT ASSERT_TRUE: we may time out during initial handshake: 536 // Note: we do NOT ASSERT_TRUE: we may time out during initial handshake:
528 // that's enough to validate timeout in this case. 537 // that's enough to validate timeout in this case.
529 Initialize(); 538 Initialize();
530 while (client_->client()->connected()) { 539 while (client_->client()->connected()) {
531 client_->client()->WaitForEvents(); 540 client_->client()->WaitForEvents();
532 } 541 }
533 } 542 }
534 543
535 TEST_F(EndToEndTest, LimitMaxOpenStreams) { 544 TEST_P(EndToEndTest, LimitMaxOpenStreams) {
536 // Server limits the number of max streams to 2. 545 // Server limits the number of max streams to 2.
537 server_config_.set_max_streams_per_connection(2, 2); 546 server_config_.set_max_streams_per_connection(2, 2);
538 // Client tries to negotiate for 10. 547 // Client tries to negotiate for 10.
539 client_config_.set_max_streams_per_connection(10, 5); 548 client_config_.set_max_streams_per_connection(10, 5);
540 549
541 ASSERT_TRUE(Initialize()); 550 ASSERT_TRUE(Initialize());
542 client_->client()->WaitForCryptoHandshakeConfirmed(); 551 client_->client()->WaitForCryptoHandshakeConfirmed();
543 QuicConfig* client_negotiated_config = client_->client()->session()->config(); 552 QuicConfig* client_negotiated_config = client_->client()->session()->config();
544 EXPECT_EQ(2u, client_negotiated_config->max_streams_per_connection()); 553 EXPECT_EQ(2u, client_negotiated_config->max_streams_per_connection());
545 } 554 }
546 555
547 TEST_F(EndToEndTest, ResetConnection) { 556 TEST_P(EndToEndTest, ResetConnection) {
548 // TODO(rtenneti): Delete this when NSS is supported. 557 // TODO(rtenneti): Delete this when NSS is supported.
549 if (!Aes128Gcm12Encrypter::IsSupported()) { 558 if (!Aes128Gcm12Encrypter::IsSupported()) {
550 LOG(INFO) << "AES GCM not supported. Test skipped."; 559 LOG(INFO) << "AES GCM not supported. Test skipped.";
551 return; 560 return;
552 } 561 }
553 562
554 ASSERT_TRUE(Initialize()); 563 ASSERT_TRUE(Initialize());
555 564
556 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); 565 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
557 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 566 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
(...skipping 17 matching lines...) Expand all
575 int* error) OVERRIDE { 584 int* error) OVERRIDE {
576 return QuicSocketUtils::WritePacket(fd_, buffer, buf_len, 585 return QuicSocketUtils::WritePacket(fd_, buffer, buf_len,
577 self_address_.address(), peer_address, 586 self_address_.address(), peer_address,
578 error); 587 error);
579 } 588 }
580 589
581 IPEndPoint self_address_; 590 IPEndPoint self_address_;
582 int fd_; 591 int fd_;
583 }; 592 };
584 593
585 TEST_F(EndToEndTest, ConnectionMigration) { 594 TEST_P(EndToEndTest, ConnectionMigration) {
586 // TODO(rtenneti): Delete this when NSS is supported. 595 // TODO(rtenneti): Delete this when NSS is supported.
587 if (!Aes128Gcm12Encrypter::IsSupported()) { 596 if (!Aes128Gcm12Encrypter::IsSupported()) {
588 LOG(INFO) << "AES GCM not supported. Test skipped."; 597 LOG(INFO) << "AES GCM not supported. Test skipped.";
589 return; 598 return;
590 } 599 }
591 600
592 ASSERT_TRUE(Initialize()); 601 ASSERT_TRUE(Initialize());
593 602
594 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); 603 EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
595 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code()); 604 EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
596 605
597 WrongAddressWriter writer(QuicClientPeer::GetFd(client_->client())); 606 WrongAddressWriter writer(QuicClientPeer::GetFd(client_->client()));
598 QuicEpollConnectionHelper* helper = 607 QuicEpollConnectionHelper* helper =
599 reinterpret_cast<QuicEpollConnectionHelper*>( 608 reinterpret_cast<QuicEpollConnectionHelper*>(
600 QuicConnectionPeer::GetHelper( 609 QuicConnectionPeer::GetHelper(
601 client_->client()->session()->connection())); 610 client_->client()->session()->connection()));
602 QuicEpollConnectionHelperPeer::SetWriter(helper, &writer); 611 QuicEpollConnectionHelperPeer::SetWriter(helper, &writer);
603 612
604 client_->SendSynchronousRequest("/bar"); 613 client_->SendSynchronousRequest("/bar");
605 QuicEpollConnectionHelperPeer::SetWriter(helper, NULL); 614 QuicEpollConnectionHelperPeer::SetWriter(helper, NULL);
606 615
607 EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error()); 616 EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error());
608 EXPECT_EQ(QUIC_ERROR_MIGRATING_ADDRESS, client_->connection_error()); 617 EXPECT_EQ(QUIC_ERROR_MIGRATING_ADDRESS, client_->connection_error());
609 } 618 }
610 619
611 } // namespace 620 } // namespace
612 } // namespace test 621 } // namespace test
613 } // namespace tools 622 } // namespace tools
614 } // namespace net 623 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/test_tools/simple_quic_framer.cc ('k') | net/tools/quic/quic_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698