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

Side by Side Diff: net/spdy/spdy_proxy_client_socket_unittest.cc

Issue 1852423004: Implement SpdySerializedFrame move semantics. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « net/spdy/spdy_protocol.h ('k') | net/spdy/spdy_session.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 "net/spdy/spdy_proxy_client_socket.h" 5 #include "net/spdy/spdy_proxy_client_socket.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 void TearDown() override; 85 void TearDown() override;
86 86
87 protected: 87 protected:
88 NextProto GetProtocol() const; 88 NextProto GetProtocol() const;
89 bool GetDependenciesFromPriority() const; 89 bool GetDependenciesFromPriority() const;
90 90
91 void Initialize(MockRead* reads, size_t reads_count, MockWrite* writes, 91 void Initialize(MockRead* reads, size_t reads_count, MockWrite* writes,
92 size_t writes_count); 92 size_t writes_count);
93 void PopulateConnectRequestIR(SpdyHeaderBlock* syn_ir); 93 void PopulateConnectRequestIR(SpdyHeaderBlock* syn_ir);
94 void PopulateConnectReplyIR(SpdyHeaderBlock* block, const char* status); 94 void PopulateConnectReplyIR(SpdyHeaderBlock* block, const char* status);
95 SpdyFrame* ConstructConnectRequestFrame(); 95 SpdySerializedFrame* ConstructConnectRequestFrame();
96 SpdyFrame* ConstructConnectAuthRequestFrame(); 96 SpdySerializedFrame* ConstructConnectAuthRequestFrame();
97 SpdyFrame* ConstructConnectReplyFrame(); 97 SpdySerializedFrame* ConstructConnectReplyFrame();
98 SpdyFrame* ConstructConnectAuthReplyFrame(); 98 SpdySerializedFrame* ConstructConnectAuthReplyFrame();
99 SpdyFrame* ConstructConnectRedirectReplyFrame(); 99 SpdySerializedFrame* ConstructConnectRedirectReplyFrame();
100 SpdyFrame* ConstructConnectErrorReplyFrame(); 100 SpdySerializedFrame* ConstructConnectErrorReplyFrame();
101 SpdyFrame* ConstructBodyFrame(const char* data, int length); 101 SpdySerializedFrame* ConstructBodyFrame(const char* data, int length);
102 scoped_refptr<IOBufferWithSize> CreateBuffer(const char* data, int size); 102 scoped_refptr<IOBufferWithSize> CreateBuffer(const char* data, int size);
103 void AssertConnectSucceeds(); 103 void AssertConnectSucceeds();
104 void AssertConnectFails(int result); 104 void AssertConnectFails(int result);
105 void AssertConnectionEstablished(); 105 void AssertConnectionEstablished();
106 void AssertSyncReadEquals(const char* data, int len); 106 void AssertSyncReadEquals(const char* data, int len);
107 void AssertAsyncReadEquals(const char* data, int len); 107 void AssertAsyncReadEquals(const char* data, int len);
108 void AssertReadStarts(const char* data, int len); 108 void AssertReadStarts(const char* data, int len);
109 void AssertReadReturns(const char* data, int len); 109 void AssertReadReturns(const char* data, int len);
110 void AssertAsyncWriteSucceeds(const char* data, int len); 110 void AssertAsyncWriteSucceeds(const char* data, int len);
111 void AssertWriteReturns(const char* data, int len, int rv); 111 void AssertWriteReturns(const char* data, int len, int rv);
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 (*block)["user-agent"] = kUserAgent; 328 (*block)["user-agent"] = kUserAgent;
329 } 329 }
330 330
331 void SpdyProxyClientSocketTest::PopulateConnectReplyIR(SpdyHeaderBlock* block, 331 void SpdyProxyClientSocketTest::PopulateConnectReplyIR(SpdyHeaderBlock* block,
332 const char* status) { 332 const char* status) {
333 (*block)[spdy_util_.GetStatusKey()] = status; 333 (*block)[spdy_util_.GetStatusKey()] = status;
334 spdy_util_.MaybeAddVersionHeader(block); 334 spdy_util_.MaybeAddVersionHeader(block);
335 } 335 }
336 336
337 // Constructs a standard SPDY SYN_STREAM frame for a CONNECT request. 337 // Constructs a standard SPDY SYN_STREAM frame for a CONNECT request.
338 SpdyFrame* 338 SpdySerializedFrame* SpdyProxyClientSocketTest::ConstructConnectRequestFrame() {
339 SpdyProxyClientSocketTest::ConstructConnectRequestFrame() {
340 SpdyHeaderBlock block; 339 SpdyHeaderBlock block;
341 PopulateConnectRequestIR(&block); 340 PopulateConnectRequestIR(&block);
342 return spdy_util_.ConstructSpdySyn(kStreamId, block, LOWEST, false); 341 return spdy_util_.ConstructSpdySyn(kStreamId, block, LOWEST, false);
343 } 342 }
344 343
345 // Constructs a SPDY SYN_STREAM frame for a CONNECT request which includes 344 // Constructs a SPDY SYN_STREAM frame for a CONNECT request which includes
346 // Proxy-Authorization headers. 345 // Proxy-Authorization headers.
347 SpdyFrame* SpdyProxyClientSocketTest::ConstructConnectAuthRequestFrame() { 346 SpdySerializedFrame*
347 SpdyProxyClientSocketTest::ConstructConnectAuthRequestFrame() {
348 SpdyHeaderBlock block; 348 SpdyHeaderBlock block;
349 PopulateConnectRequestIR(&block); 349 PopulateConnectRequestIR(&block);
350 block["proxy-authorization"] = "Basic Zm9vOmJhcg=="; 350 block["proxy-authorization"] = "Basic Zm9vOmJhcg==";
351 return spdy_util_.ConstructSpdySyn(kStreamId, block, LOWEST, false); 351 return spdy_util_.ConstructSpdySyn(kStreamId, block, LOWEST, false);
352 } 352 }
353 353
354 // Constructs a standard SPDY SYN_REPLY frame to match the SPDY CONNECT. 354 // Constructs a standard SPDY SYN_REPLY frame to match the SPDY CONNECT.
355 SpdyFrame* SpdyProxyClientSocketTest::ConstructConnectReplyFrame() { 355 SpdySerializedFrame* SpdyProxyClientSocketTest::ConstructConnectReplyFrame() {
356 SpdyHeaderBlock block; 356 SpdyHeaderBlock block;
357 PopulateConnectReplyIR(&block, "200"); 357 PopulateConnectReplyIR(&block, "200");
358 SpdySynReplyIR reply_ir(kStreamId); 358 SpdySynReplyIR reply_ir(kStreamId);
359 return spdy_util_.ConstructSpdyReply(kStreamId, block); 359 return spdy_util_.ConstructSpdyReply(kStreamId, block);
360 } 360 }
361 361
362 // Constructs a standard SPDY SYN_REPLY frame to match the SPDY CONNECT, 362 // Constructs a standard SPDY SYN_REPLY frame to match the SPDY CONNECT,
363 // including Proxy-Authenticate headers. 363 // including Proxy-Authenticate headers.
364 SpdyFrame* SpdyProxyClientSocketTest::ConstructConnectAuthReplyFrame() { 364 SpdySerializedFrame*
365 SpdyProxyClientSocketTest::ConstructConnectAuthReplyFrame() {
365 SpdyHeaderBlock block; 366 SpdyHeaderBlock block;
366 PopulateConnectReplyIR(&block, "407"); 367 PopulateConnectReplyIR(&block, "407");
367 block["proxy-authenticate"] = "Basic realm=\"MyRealm1\""; 368 block["proxy-authenticate"] = "Basic realm=\"MyRealm1\"";
368 return spdy_util_.ConstructSpdyReply(kStreamId, block); 369 return spdy_util_.ConstructSpdyReply(kStreamId, block);
369 } 370 }
370 371
371 // Constructs a SPDY SYN_REPLY frame with an HTTP 302 redirect. 372 // Constructs a SPDY SYN_REPLY frame with an HTTP 302 redirect.
372 SpdyFrame* SpdyProxyClientSocketTest::ConstructConnectRedirectReplyFrame() { 373 SpdySerializedFrame*
374 SpdyProxyClientSocketTest::ConstructConnectRedirectReplyFrame() {
373 SpdyHeaderBlock block; 375 SpdyHeaderBlock block;
374 PopulateConnectReplyIR(&block, "302"); 376 PopulateConnectReplyIR(&block, "302");
375 block["location"] = kRedirectUrl; 377 block["location"] = kRedirectUrl;
376 block["set-cookie"] = "foo=bar"; 378 block["set-cookie"] = "foo=bar";
377 return spdy_util_.ConstructSpdyReply(kStreamId, block); 379 return spdy_util_.ConstructSpdyReply(kStreamId, block);
378 } 380 }
379 381
380 // Constructs a SPDY SYN_REPLY frame with an HTTP 500 error. 382 // Constructs a SPDY SYN_REPLY frame with an HTTP 500 error.
381 SpdyFrame* SpdyProxyClientSocketTest::ConstructConnectErrorReplyFrame() { 383 SpdySerializedFrame*
384 SpdyProxyClientSocketTest::ConstructConnectErrorReplyFrame() {
382 SpdyHeaderBlock block; 385 SpdyHeaderBlock block;
383 PopulateConnectReplyIR(&block, "500"); 386 PopulateConnectReplyIR(&block, "500");
384 return spdy_util_.ConstructSpdyReply(kStreamId, block); 387 return spdy_util_.ConstructSpdyReply(kStreamId, block);
385 } 388 }
386 389
387 SpdyFrame* SpdyProxyClientSocketTest::ConstructBodyFrame( 390 SpdySerializedFrame* SpdyProxyClientSocketTest::ConstructBodyFrame(
388 const char* data, 391 const char* data,
389 int length) { 392 int length) {
390 return framer_.CreateDataFrame(kStreamId, data, length, DATA_FLAG_NONE); 393 return framer_.CreateDataFrame(kStreamId, data, length, DATA_FLAG_NONE);
391 } 394 }
392 395
393 // ----------- Connect 396 // ----------- Connect
394 397
395 TEST_P(SpdyProxyClientSocketTest, ConnectSendsCorrectRequest) { 398 TEST_P(SpdyProxyClientSocketTest, ConnectSendsCorrectRequest) {
396 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 399 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
397 MockWrite writes[] = { 400 MockWrite writes[] = {
398 CreateMockWrite(*conn, 0, SYNCHRONOUS), 401 CreateMockWrite(*conn, 0, SYNCHRONOUS),
399 }; 402 };
400 403
401 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 404 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
402 MockRead reads[] = { 405 MockRead reads[] = {
403 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 406 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
404 }; 407 };
405 408
406 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 409 Initialize(reads, arraysize(reads), writes, arraysize(writes));
407 410
408 ASSERT_FALSE(sock_->IsConnected()); 411 ASSERT_FALSE(sock_->IsConnected());
409 412
410 AssertConnectSucceeds(); 413 AssertConnectSucceeds();
411 414
412 AssertConnectionEstablished(); 415 AssertConnectionEstablished();
413 } 416 }
414 417
415 TEST_P(SpdyProxyClientSocketTest, ConnectWithAuthRequested) { 418 TEST_P(SpdyProxyClientSocketTest, ConnectWithAuthRequested) {
416 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 419 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
417 MockWrite writes[] = { 420 MockWrite writes[] = {
418 CreateMockWrite(*conn, 0, SYNCHRONOUS), 421 CreateMockWrite(*conn, 0, SYNCHRONOUS),
419 }; 422 };
420 423
421 scoped_ptr<SpdyFrame> resp(ConstructConnectAuthReplyFrame()); 424 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectAuthReplyFrame());
422 MockRead reads[] = { 425 MockRead reads[] = {
423 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 426 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
424 }; 427 };
425 428
426 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 429 Initialize(reads, arraysize(reads), writes, arraysize(writes));
427 430
428 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED); 431 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED);
429 432
430 const HttpResponseInfo* response = sock_->GetConnectResponseInfo(); 433 const HttpResponseInfo* response = sock_->GetConnectResponseInfo();
431 ASSERT_TRUE(response != NULL); 434 ASSERT_TRUE(response != NULL);
432 ASSERT_EQ(407, response->headers->response_code()); 435 ASSERT_EQ(407, response->headers->response_code());
433 } 436 }
434 437
435 TEST_P(SpdyProxyClientSocketTest, ConnectWithAuthCredentials) { 438 TEST_P(SpdyProxyClientSocketTest, ConnectWithAuthCredentials) {
436 scoped_ptr<SpdyFrame> conn(ConstructConnectAuthRequestFrame()); 439 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectAuthRequestFrame());
437 MockWrite writes[] = { 440 MockWrite writes[] = {
438 CreateMockWrite(*conn, 0, SYNCHRONOUS), 441 CreateMockWrite(*conn, 0, SYNCHRONOUS),
439 }; 442 };
440 443
441 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 444 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
442 MockRead reads[] = { 445 MockRead reads[] = {
443 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 446 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
444 }; 447 };
445 448
446 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 449 Initialize(reads, arraysize(reads), writes, arraysize(writes));
447 AddAuthToCache(); 450 AddAuthToCache();
448 451
449 AssertConnectSucceeds(); 452 AssertConnectSucceeds();
450 453
451 AssertConnectionEstablished(); 454 AssertConnectionEstablished();
452 } 455 }
453 456
454 TEST_P(SpdyProxyClientSocketTest, ConnectRedirects) { 457 TEST_P(SpdyProxyClientSocketTest, ConnectRedirects) {
455 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 458 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
456 scoped_ptr<SpdyFrame> rst( 459 scoped_ptr<SpdySerializedFrame> rst(
457 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 460 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
458 MockWrite writes[] = { 461 MockWrite writes[] = {
459 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3), 462 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3),
460 }; 463 };
461 464
462 scoped_ptr<SpdyFrame> resp(ConstructConnectRedirectReplyFrame()); 465 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectRedirectReplyFrame());
463 MockRead reads[] = { 466 MockRead reads[] = {
464 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 467 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
465 }; 468 };
466 469
467 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 470 Initialize(reads, arraysize(reads), writes, arraysize(writes));
468 471
469 AssertConnectFails(ERR_HTTPS_PROXY_TUNNEL_RESPONSE); 472 AssertConnectFails(ERR_HTTPS_PROXY_TUNNEL_RESPONSE);
470 473
471 const HttpResponseInfo* response = sock_->GetConnectResponseInfo(); 474 const HttpResponseInfo* response = sock_->GetConnectResponseInfo();
472 ASSERT_TRUE(response != NULL); 475 ASSERT_TRUE(response != NULL);
473 476
474 const HttpResponseHeaders* headers = response->headers.get(); 477 const HttpResponseHeaders* headers = response->headers.get();
475 ASSERT_EQ(302, headers->response_code()); 478 ASSERT_EQ(302, headers->response_code());
476 ASSERT_FALSE(headers->HasHeader("set-cookie")); 479 ASSERT_FALSE(headers->HasHeader("set-cookie"));
477 ASSERT_TRUE(headers->HasHeaderValue("content-length", "0")); 480 ASSERT_TRUE(headers->HasHeaderValue("content-length", "0"));
478 481
479 std::string location; 482 std::string location;
480 ASSERT_TRUE(headers->IsRedirect(&location)); 483 ASSERT_TRUE(headers->IsRedirect(&location));
481 ASSERT_EQ(location, kRedirectUrl); 484 ASSERT_EQ(location, kRedirectUrl);
482 485
483 // Let the RST_STREAM write while |rst| is in-scope. 486 // Let the RST_STREAM write while |rst| is in-scope.
484 base::MessageLoop::current()->RunUntilIdle(); 487 base::MessageLoop::current()->RunUntilIdle();
485 } 488 }
486 489
487 TEST_P(SpdyProxyClientSocketTest, ConnectFails) { 490 TEST_P(SpdyProxyClientSocketTest, ConnectFails) {
488 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 491 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
489 MockWrite writes[] = { 492 MockWrite writes[] = {
490 CreateMockWrite(*conn, 0, SYNCHRONOUS), 493 CreateMockWrite(*conn, 0, SYNCHRONOUS),
491 }; 494 };
492 495
493 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 496 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
494 MockRead reads[] = { 497 MockRead reads[] = {
495 MockRead(ASYNC, 0, 1), // EOF 498 MockRead(ASYNC, 0, 1), // EOF
496 }; 499 };
497 500
498 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 501 Initialize(reads, arraysize(reads), writes, arraysize(writes));
499 502
500 ASSERT_FALSE(sock_->IsConnected()); 503 ASSERT_FALSE(sock_->IsConnected());
501 504
502 AssertConnectFails(ERR_CONNECTION_CLOSED); 505 AssertConnectFails(ERR_CONNECTION_CLOSED);
503 506
504 ASSERT_FALSE(sock_->IsConnected()); 507 ASSERT_FALSE(sock_->IsConnected());
505 } 508 }
506 509
507 // ----------- WasEverUsed 510 // ----------- WasEverUsed
508 511
509 TEST_P(SpdyProxyClientSocketTest, WasEverUsedReturnsCorrectValues) { 512 TEST_P(SpdyProxyClientSocketTest, WasEverUsedReturnsCorrectValues) {
510 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 513 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
511 scoped_ptr<SpdyFrame> rst( 514 scoped_ptr<SpdySerializedFrame> rst(
512 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 515 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
513 MockWrite writes[] = { 516 MockWrite writes[] = {
514 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3), 517 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3),
515 }; 518 };
516 519
517 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 520 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
518 MockRead reads[] = { 521 MockRead reads[] = {
519 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 522 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
520 }; 523 };
521 524
522 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 525 Initialize(reads, arraysize(reads), writes, arraysize(writes));
523 526
524 EXPECT_FALSE(sock_->WasEverUsed()); 527 EXPECT_FALSE(sock_->WasEverUsed());
525 AssertConnectSucceeds(); 528 AssertConnectSucceeds();
526 EXPECT_TRUE(sock_->WasEverUsed()); 529 EXPECT_TRUE(sock_->WasEverUsed());
527 sock_->Disconnect(); 530 sock_->Disconnect();
528 EXPECT_TRUE(sock_->WasEverUsed()); 531 EXPECT_TRUE(sock_->WasEverUsed());
529 532
530 // Let the RST_STREAM write while |rst| is in-scope. 533 // Let the RST_STREAM write while |rst| is in-scope.
531 base::MessageLoop::current()->RunUntilIdle(); 534 base::MessageLoop::current()->RunUntilIdle();
532 } 535 }
533 536
534 // ----------- GetPeerAddress 537 // ----------- GetPeerAddress
535 538
536 TEST_P(SpdyProxyClientSocketTest, GetPeerAddressReturnsCorrectValues) { 539 TEST_P(SpdyProxyClientSocketTest, GetPeerAddressReturnsCorrectValues) {
537 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 540 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
538 MockWrite writes[] = { 541 MockWrite writes[] = {
539 CreateMockWrite(*conn, 0, SYNCHRONOUS), 542 CreateMockWrite(*conn, 0, SYNCHRONOUS),
540 }; 543 };
541 544
542 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 545 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
543 MockRead reads[] = { 546 MockRead reads[] = {
544 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 547 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
545 MockRead(ASYNC, 0, 3), // EOF 548 MockRead(ASYNC, 0, 3), // EOF
546 }; 549 };
547 550
548 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 551 Initialize(reads, arraysize(reads), writes, arraysize(writes));
549 552
550 IPEndPoint addr; 553 IPEndPoint addr;
551 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr)); 554 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr));
552 555
553 AssertConnectSucceeds(); 556 AssertConnectSucceeds();
554 EXPECT_TRUE(sock_->IsConnected()); 557 EXPECT_TRUE(sock_->IsConnected());
555 EXPECT_EQ(OK, sock_->GetPeerAddress(&addr)); 558 EXPECT_EQ(OK, sock_->GetPeerAddress(&addr));
556 559
557 ResumeAndRun(); 560 ResumeAndRun();
558 561
559 EXPECT_FALSE(sock_->IsConnected()); 562 EXPECT_FALSE(sock_->IsConnected());
560 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr)); 563 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr));
561 564
562 sock_->Disconnect(); 565 sock_->Disconnect();
563 566
564 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr)); 567 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr));
565 } 568 }
566 569
567 // ----------- Write 570 // ----------- Write
568 571
569 TEST_P(SpdyProxyClientSocketTest, WriteSendsDataInDataFrame) { 572 TEST_P(SpdyProxyClientSocketTest, WriteSendsDataInDataFrame) {
570 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 573 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
571 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 574 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
572 scoped_ptr<SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 575 scoped_ptr<SpdySerializedFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
573 MockWrite writes[] = { 576 MockWrite writes[] = {
574 CreateMockWrite(*conn, 0, SYNCHRONOUS), 577 CreateMockWrite(*conn, 0, SYNCHRONOUS),
575 CreateMockWrite(*msg1, 3, SYNCHRONOUS), 578 CreateMockWrite(*msg1, 3, SYNCHRONOUS),
576 CreateMockWrite(*msg2, 4, SYNCHRONOUS), 579 CreateMockWrite(*msg2, 4, SYNCHRONOUS),
577 }; 580 };
578 581
579 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 582 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
580 MockRead reads[] = { 583 MockRead reads[] = {
581 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 584 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
582 }; 585 };
583 586
584 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 587 Initialize(reads, arraysize(reads), writes, arraysize(writes));
585 588
586 AssertConnectSucceeds(); 589 AssertConnectSucceeds();
587 590
588 AssertAsyncWriteSucceeds(kMsg1, kLen1); 591 AssertAsyncWriteSucceeds(kMsg1, kLen1);
589 AssertAsyncWriteSucceeds(kMsg2, kLen2); 592 AssertAsyncWriteSucceeds(kMsg2, kLen2);
590 } 593 }
591 594
592 TEST_P(SpdyProxyClientSocketTest, WriteSplitsLargeDataIntoMultipleFrames) { 595 TEST_P(SpdyProxyClientSocketTest, WriteSplitsLargeDataIntoMultipleFrames) {
593 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x'); 596 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
594 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 597 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
595 scoped_ptr<SpdyFrame> chunk(ConstructBodyFrame(chunk_data.data(), 598 scoped_ptr<SpdySerializedFrame> chunk(
596 chunk_data.length())); 599 ConstructBodyFrame(chunk_data.data(), chunk_data.length()));
597 MockWrite writes[] = {CreateMockWrite(*conn, 0, SYNCHRONOUS), 600 MockWrite writes[] = {CreateMockWrite(*conn, 0, SYNCHRONOUS),
598 CreateMockWrite(*chunk, 3, SYNCHRONOUS), 601 CreateMockWrite(*chunk, 3, SYNCHRONOUS),
599 CreateMockWrite(*chunk, 4, SYNCHRONOUS), 602 CreateMockWrite(*chunk, 4, SYNCHRONOUS),
600 CreateMockWrite(*chunk, 5, SYNCHRONOUS)}; 603 CreateMockWrite(*chunk, 5, SYNCHRONOUS)};
601 604
602 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 605 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
603 MockRead reads[] = { 606 MockRead reads[] = {
604 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 607 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
605 }; 608 };
606 609
607 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 610 Initialize(reads, arraysize(reads), writes, arraysize(writes));
608 611
609 AssertConnectSucceeds(); 612 AssertConnectSucceeds();
610 613
611 std::string big_data(kMaxSpdyFrameChunkSize * 3, 'x'); 614 std::string big_data(kMaxSpdyFrameChunkSize * 3, 'x');
612 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(big_data.data(), 615 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(big_data.data(),
613 big_data.length())); 616 big_data.length()));
614 617
615 EXPECT_EQ(ERR_IO_PENDING, 618 EXPECT_EQ(ERR_IO_PENDING,
616 sock_->Write(buf.get(), buf->size(), write_callback_.callback())); 619 sock_->Write(buf.get(), buf->size(), write_callback_.callback()));
617 EXPECT_EQ(buf->size(), write_callback_.WaitForResult()); 620 EXPECT_EQ(buf->size(), write_callback_.WaitForResult());
618 } 621 }
619 622
620 // ----------- Read 623 // ----------- Read
621 624
622 TEST_P(SpdyProxyClientSocketTest, ReadReadsDataInDataFrame) { 625 TEST_P(SpdyProxyClientSocketTest, ReadReadsDataInDataFrame) {
623 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 626 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
624 MockWrite writes[] = { 627 MockWrite writes[] = {
625 CreateMockWrite(*conn, 0, SYNCHRONOUS), 628 CreateMockWrite(*conn, 0, SYNCHRONOUS),
626 }; 629 };
627 630
628 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 631 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
629 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 632 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
630 MockRead reads[] = { 633 MockRead reads[] = {
631 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 634 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
632 CreateMockRead(*msg1, 3, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4), 635 CreateMockRead(*msg1, 3, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4),
633 }; 636 };
634 637
635 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 638 Initialize(reads, arraysize(reads), writes, arraysize(writes));
636 639
637 AssertConnectSucceeds(); 640 AssertConnectSucceeds();
638 641
639 // SpdySession consumes the next read and sends it to sock_ to be buffered. 642 // SpdySession consumes the next read and sends it to sock_ to be buffered.
640 ResumeAndRun(); 643 ResumeAndRun();
641 AssertSyncReadEquals(kMsg1, kLen1); 644 AssertSyncReadEquals(kMsg1, kLen1);
642 } 645 }
643 646
644 TEST_P(SpdyProxyClientSocketTest, ReadDataFromBufferedFrames) { 647 TEST_P(SpdyProxyClientSocketTest, ReadDataFromBufferedFrames) {
645 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 648 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
646 MockWrite writes[] = { 649 MockWrite writes[] = {
647 CreateMockWrite(*conn, 0, SYNCHRONOUS), 650 CreateMockWrite(*conn, 0, SYNCHRONOUS),
648 }; 651 };
649 652
650 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 653 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
651 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 654 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
652 scoped_ptr<SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 655 scoped_ptr<SpdySerializedFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
653 MockRead reads[] = { 656 MockRead reads[] = {
654 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 657 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
655 CreateMockRead(*msg1, 3, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 4), 658 CreateMockRead(*msg1, 3, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 4),
656 CreateMockRead(*msg2, 5, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), 659 CreateMockRead(*msg2, 5, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6),
657 }; 660 };
658 661
659 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 662 Initialize(reads, arraysize(reads), writes, arraysize(writes));
660 663
661 AssertConnectSucceeds(); 664 AssertConnectSucceeds();
662 665
663 // SpdySession consumes the next read and sends it to sock_ to be buffered. 666 // SpdySession consumes the next read and sends it to sock_ to be buffered.
664 ResumeAndRun(); 667 ResumeAndRun();
665 AssertSyncReadEquals(kMsg1, kLen1); 668 AssertSyncReadEquals(kMsg1, kLen1);
666 // SpdySession consumes the next read and sends it to sock_ to be buffered. 669 // SpdySession consumes the next read and sends it to sock_ to be buffered.
667 ResumeAndRun(); 670 ResumeAndRun();
668 AssertSyncReadEquals(kMsg2, kLen2); 671 AssertSyncReadEquals(kMsg2, kLen2);
669 } 672 }
670 673
671 TEST_P(SpdyProxyClientSocketTest, ReadDataMultipleBufferedFrames) { 674 TEST_P(SpdyProxyClientSocketTest, ReadDataMultipleBufferedFrames) {
672 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 675 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
673 MockWrite writes[] = { 676 MockWrite writes[] = {
674 CreateMockWrite(*conn, 0, SYNCHRONOUS), 677 CreateMockWrite(*conn, 0, SYNCHRONOUS),
675 }; 678 };
676 679
677 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 680 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
678 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 681 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
679 scoped_ptr<SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 682 scoped_ptr<SpdySerializedFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
680 MockRead reads[] = { 683 MockRead reads[] = {
681 CreateMockRead(*resp, 1, ASYNC), 684 CreateMockRead(*resp, 1, ASYNC),
682 MockRead(ASYNC, ERR_IO_PENDING, 2), 685 MockRead(ASYNC, ERR_IO_PENDING, 2),
683 CreateMockRead(*msg1, 3, ASYNC), 686 CreateMockRead(*msg1, 3, ASYNC),
684 CreateMockRead(*msg2, 4, ASYNC), 687 CreateMockRead(*msg2, 4, ASYNC),
685 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), 688 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5),
686 }; 689 };
687 690
688 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 691 Initialize(reads, arraysize(reads), writes, arraysize(writes));
689 692
690 AssertConnectSucceeds(); 693 AssertConnectSucceeds();
691 694
692 // SpdySession consumes the next two reads and sends then to sock_ to be 695 // SpdySession consumes the next two reads and sends then to sock_ to be
693 // buffered. 696 // buffered.
694 ResumeAndRun(); 697 ResumeAndRun();
695 AssertSyncReadEquals(kMsg1, kLen1); 698 AssertSyncReadEquals(kMsg1, kLen1);
696 AssertSyncReadEquals(kMsg2, kLen2); 699 AssertSyncReadEquals(kMsg2, kLen2);
697 } 700 }
698 701
699 TEST_P(SpdyProxyClientSocketTest, 702 TEST_P(SpdyProxyClientSocketTest,
700 LargeReadWillMergeDataFromDifferentFrames) { 703 LargeReadWillMergeDataFromDifferentFrames) {
701 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 704 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
702 MockWrite writes[] = { 705 MockWrite writes[] = {
703 CreateMockWrite(*conn, 0, SYNCHRONOUS), 706 CreateMockWrite(*conn, 0, SYNCHRONOUS),
704 }; 707 };
705 708
706 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 709 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
707 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 710 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
708 scoped_ptr<SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3)); 711 scoped_ptr<SpdySerializedFrame> msg3(ConstructBodyFrame(kMsg3, kLen3));
709 MockRead reads[] = { 712 MockRead reads[] = {
710 CreateMockRead(*resp, 1, ASYNC), 713 CreateMockRead(*resp, 1, ASYNC),
711 MockRead(ASYNC, ERR_IO_PENDING, 2), 714 MockRead(ASYNC, ERR_IO_PENDING, 2),
712 CreateMockRead(*msg3, 3, ASYNC), 715 CreateMockRead(*msg3, 3, ASYNC),
713 CreateMockRead(*msg3, 4, ASYNC), 716 CreateMockRead(*msg3, 4, ASYNC),
714 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), 717 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5),
715 }; 718 };
716 719
717 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 720 Initialize(reads, arraysize(reads), writes, arraysize(writes));
718 721
719 AssertConnectSucceeds(); 722 AssertConnectSucceeds();
720 723
721 // SpdySession consumes the next two reads and sends then to sock_ to be 724 // SpdySession consumes the next two reads and sends then to sock_ to be
722 // buffered. 725 // buffered.
723 ResumeAndRun(); 726 ResumeAndRun();
724 // The payload from two data frames, each with kMsg3 will be combined 727 // The payload from two data frames, each with kMsg3 will be combined
725 // together into a single read(). 728 // together into a single read().
726 AssertSyncReadEquals(kMsg33, kLen33); 729 AssertSyncReadEquals(kMsg33, kLen33);
727 } 730 }
728 731
729 TEST_P(SpdyProxyClientSocketTest, MultipleShortReadsThenMoreRead) { 732 TEST_P(SpdyProxyClientSocketTest, MultipleShortReadsThenMoreRead) {
730 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 733 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
731 MockWrite writes[] = { 734 MockWrite writes[] = {
732 CreateMockWrite(*conn, 0, SYNCHRONOUS), 735 CreateMockWrite(*conn, 0, SYNCHRONOUS),
733 }; 736 };
734 737
735 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 738 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
736 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 739 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
737 scoped_ptr<SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3)); 740 scoped_ptr<SpdySerializedFrame> msg3(ConstructBodyFrame(kMsg3, kLen3));
738 scoped_ptr<SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 741 scoped_ptr<SpdySerializedFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
739 MockRead reads[] = { 742 MockRead reads[] = {
740 CreateMockRead(*resp, 1, ASYNC), 743 CreateMockRead(*resp, 1, ASYNC),
741 MockRead(ASYNC, ERR_IO_PENDING, 2), 744 MockRead(ASYNC, ERR_IO_PENDING, 2),
742 CreateMockRead(*msg1, 3, ASYNC), 745 CreateMockRead(*msg1, 3, ASYNC),
743 CreateMockRead(*msg3, 4, ASYNC), 746 CreateMockRead(*msg3, 4, ASYNC),
744 CreateMockRead(*msg3, 5, ASYNC), 747 CreateMockRead(*msg3, 5, ASYNC),
745 CreateMockRead(*msg2, 6, ASYNC), 748 CreateMockRead(*msg2, 6, ASYNC),
746 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 7), 749 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 7),
747 }; 750 };
748 751
749 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 752 Initialize(reads, arraysize(reads), writes, arraysize(writes));
750 753
751 AssertConnectSucceeds(); 754 AssertConnectSucceeds();
752 755
753 // SpdySession consumes the next four reads and sends then to sock_ to be 756 // SpdySession consumes the next four reads and sends then to sock_ to be
754 // buffered. 757 // buffered.
755 ResumeAndRun(); 758 ResumeAndRun();
756 AssertSyncReadEquals(kMsg1, kLen1); 759 AssertSyncReadEquals(kMsg1, kLen1);
757 // The payload from two data frames, each with kMsg3 will be combined 760 // The payload from two data frames, each with kMsg3 will be combined
758 // together into a single read(). 761 // together into a single read().
759 AssertSyncReadEquals(kMsg33, kLen33); 762 AssertSyncReadEquals(kMsg33, kLen33);
760 AssertSyncReadEquals(kMsg2, kLen2); 763 AssertSyncReadEquals(kMsg2, kLen2);
761 } 764 }
762 765
763 TEST_P(SpdyProxyClientSocketTest, ReadWillSplitDataFromLargeFrame) { 766 TEST_P(SpdyProxyClientSocketTest, ReadWillSplitDataFromLargeFrame) {
764 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 767 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
765 MockWrite writes[] = { 768 MockWrite writes[] = {
766 CreateMockWrite(*conn, 0, SYNCHRONOUS), 769 CreateMockWrite(*conn, 0, SYNCHRONOUS),
767 }; 770 };
768 771
769 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 772 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
770 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 773 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
771 scoped_ptr<SpdyFrame> msg33(ConstructBodyFrame(kMsg33, kLen33)); 774 scoped_ptr<SpdySerializedFrame> msg33(ConstructBodyFrame(kMsg33, kLen33));
772 scoped_ptr<SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 775 scoped_ptr<SpdySerializedFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
773 MockRead reads[] = { 776 MockRead reads[] = {
774 CreateMockRead(*resp, 1, ASYNC), 777 CreateMockRead(*resp, 1, ASYNC),
775 MockRead(ASYNC, ERR_IO_PENDING, 2), 778 MockRead(ASYNC, ERR_IO_PENDING, 2),
776 CreateMockRead(*msg1, 3, ASYNC), 779 CreateMockRead(*msg1, 3, ASYNC),
777 CreateMockRead(*msg33, 4, ASYNC), 780 CreateMockRead(*msg33, 4, ASYNC),
778 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), 781 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5),
779 }; 782 };
780 783
781 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 784 Initialize(reads, arraysize(reads), writes, arraysize(writes));
782 785
783 AssertConnectSucceeds(); 786 AssertConnectSucceeds();
784 787
785 // SpdySession consumes the next two reads and sends then to sock_ to be 788 // SpdySession consumes the next two reads and sends then to sock_ to be
786 // buffered. 789 // buffered.
787 ResumeAndRun(); 790 ResumeAndRun();
788 AssertSyncReadEquals(kMsg1, kLen1); 791 AssertSyncReadEquals(kMsg1, kLen1);
789 // The payload from the single large data frame will be read across 792 // The payload from the single large data frame will be read across
790 // two different reads. 793 // two different reads.
791 AssertSyncReadEquals(kMsg3, kLen3); 794 AssertSyncReadEquals(kMsg3, kLen3);
792 AssertSyncReadEquals(kMsg3, kLen3); 795 AssertSyncReadEquals(kMsg3, kLen3);
793 } 796 }
794 797
795 TEST_P(SpdyProxyClientSocketTest, MultipleReadsFromSameLargeFrame) { 798 TEST_P(SpdyProxyClientSocketTest, MultipleReadsFromSameLargeFrame) {
796 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 799 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
797 MockWrite writes[] = { 800 MockWrite writes[] = {
798 CreateMockWrite(*conn, 0, SYNCHRONOUS), 801 CreateMockWrite(*conn, 0, SYNCHRONOUS),
799 }; 802 };
800 803
801 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 804 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
802 scoped_ptr<SpdyFrame> msg333(ConstructBodyFrame(kMsg333, kLen333)); 805 scoped_ptr<SpdySerializedFrame> msg333(ConstructBodyFrame(kMsg333, kLen333));
803 MockRead reads[] = { 806 MockRead reads[] = {
804 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 807 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
805 CreateMockRead(*msg333, 3, ASYNC), 808 CreateMockRead(*msg333, 3, ASYNC),
806 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4), 809 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4),
807 }; 810 };
808 811
809 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 812 Initialize(reads, arraysize(reads), writes, arraysize(writes));
810 813
811 AssertConnectSucceeds(); 814 AssertConnectSucceeds();
812 815
813 // SpdySession consumes the next read and sends it to sock_ to be buffered. 816 // SpdySession consumes the next read and sends it to sock_ to be buffered.
814 ResumeAndRun(); 817 ResumeAndRun();
815 // The payload from the single large data frame will be read across 818 // The payload from the single large data frame will be read across
816 // two different reads. 819 // two different reads.
817 AssertSyncReadEquals(kMsg33, kLen33); 820 AssertSyncReadEquals(kMsg33, kLen33);
818 821
819 // Now attempt to do a read of more data than remains buffered 822 // Now attempt to do a read of more data than remains buffered
820 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen33)); 823 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen33));
821 ASSERT_EQ(kLen3, sock_->Read(buf.get(), kLen33, read_callback_.callback())); 824 ASSERT_EQ(kLen3, sock_->Read(buf.get(), kLen33, read_callback_.callback()));
822 ASSERT_EQ(std::string(kMsg3, kLen3), std::string(buf->data(), kLen3)); 825 ASSERT_EQ(std::string(kMsg3, kLen3), std::string(buf->data(), kLen3));
823 ASSERT_TRUE(sock_->IsConnected()); 826 ASSERT_TRUE(sock_->IsConnected());
824 } 827 }
825 828
826 TEST_P(SpdyProxyClientSocketTest, ReadAuthResponseBody) { 829 TEST_P(SpdyProxyClientSocketTest, ReadAuthResponseBody) {
827 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 830 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
828 MockWrite writes[] = { 831 MockWrite writes[] = {
829 CreateMockWrite(*conn, 0, SYNCHRONOUS), 832 CreateMockWrite(*conn, 0, SYNCHRONOUS),
830 }; 833 };
831 834
832 scoped_ptr<SpdyFrame> resp(ConstructConnectAuthReplyFrame()); 835 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectAuthReplyFrame());
833 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 836 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
834 scoped_ptr<SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 837 scoped_ptr<SpdySerializedFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
835 MockRead reads[] = { 838 MockRead reads[] = {
836 CreateMockRead(*resp, 1, ASYNC), 839 CreateMockRead(*resp, 1, ASYNC),
837 MockRead(ASYNC, ERR_IO_PENDING, 2), 840 MockRead(ASYNC, ERR_IO_PENDING, 2),
838 CreateMockRead(*msg1, 3, ASYNC), 841 CreateMockRead(*msg1, 3, ASYNC),
839 CreateMockRead(*msg2, 4, ASYNC), 842 CreateMockRead(*msg2, 4, ASYNC),
840 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5), 843 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5),
841 }; 844 };
842 845
843 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 846 Initialize(reads, arraysize(reads), writes, arraysize(writes));
844 847
845 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED); 848 AssertConnectFails(ERR_PROXY_AUTH_REQUESTED);
846 849
847 // SpdySession consumes the next two reads and sends then to sock_ to be 850 // SpdySession consumes the next two reads and sends then to sock_ to be
848 // buffered. 851 // buffered.
849 ResumeAndRun(); 852 ResumeAndRun();
850 AssertSyncReadEquals(kMsg1, kLen1); 853 AssertSyncReadEquals(kMsg1, kLen1);
851 AssertSyncReadEquals(kMsg2, kLen2); 854 AssertSyncReadEquals(kMsg2, kLen2);
852 } 855 }
853 856
854 TEST_P(SpdyProxyClientSocketTest, ReadErrorResponseBody) { 857 TEST_P(SpdyProxyClientSocketTest, ReadErrorResponseBody) {
855 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 858 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
856 MockWrite writes[] = { 859 MockWrite writes[] = {
857 CreateMockWrite(*conn, 0, SYNCHRONOUS), 860 CreateMockWrite(*conn, 0, SYNCHRONOUS),
858 }; 861 };
859 862
860 scoped_ptr<SpdyFrame> resp(ConstructConnectErrorReplyFrame()); 863 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectErrorReplyFrame());
861 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 864 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
862 scoped_ptr<SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 865 scoped_ptr<SpdySerializedFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
863 MockRead reads[] = { 866 MockRead reads[] = {
864 CreateMockRead(*resp, 1, ASYNC), 867 CreateMockRead(*resp, 1, ASYNC),
865 CreateMockRead(*msg1, 2, ASYNC), 868 CreateMockRead(*msg1, 2, ASYNC),
866 CreateMockRead(*msg2, 3, ASYNC), 869 CreateMockRead(*msg2, 3, ASYNC),
867 MockRead(ASYNC, 0, 4), // EOF 870 MockRead(ASYNC, 0, 4), // EOF
868 }; 871 };
869 872
870 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 873 Initialize(reads, arraysize(reads), writes, arraysize(writes));
871 874
872 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED); 875 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED);
873 } 876 }
874 877
875 // ----------- Reads and Writes 878 // ----------- Reads and Writes
876 879
877 TEST_P(SpdyProxyClientSocketTest, AsyncReadAroundWrite) { 880 TEST_P(SpdyProxyClientSocketTest, AsyncReadAroundWrite) {
878 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 881 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
879 scoped_ptr<SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 882 scoped_ptr<SpdySerializedFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
880 MockWrite writes[] = { 883 MockWrite writes[] = {
881 CreateMockWrite(*conn, 0, SYNCHRONOUS), 884 CreateMockWrite(*conn, 0, SYNCHRONOUS),
882 CreateMockWrite(*msg2, 4, SYNCHRONOUS), 885 CreateMockWrite(*msg2, 4, SYNCHRONOUS),
883 }; 886 };
884 887
885 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 888 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
886 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 889 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
887 scoped_ptr<SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3)); 890 scoped_ptr<SpdySerializedFrame> msg3(ConstructBodyFrame(kMsg3, kLen3));
888 MockRead reads[] = { 891 MockRead reads[] = {
889 CreateMockRead(*resp, 1, ASYNC), 892 CreateMockRead(*resp, 1, ASYNC),
890 MockRead(ASYNC, ERR_IO_PENDING, 2), 893 MockRead(ASYNC, ERR_IO_PENDING, 2),
891 CreateMockRead(*msg1, 3, ASYNC), // sync read 894 CreateMockRead(*msg1, 3, ASYNC), // sync read
892 MockRead(ASYNC, ERR_IO_PENDING, 5), 895 MockRead(ASYNC, ERR_IO_PENDING, 5),
893 CreateMockRead(*msg3, 6, ASYNC), // async read 896 CreateMockRead(*msg3, 6, ASYNC), // async read
894 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 7), 897 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 7),
895 }; 898 };
896 899
897 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 900 Initialize(reads, arraysize(reads), writes, arraysize(writes));
898 901
899 AssertConnectSucceeds(); 902 AssertConnectSucceeds();
900 903
901 ResumeAndRun(); 904 ResumeAndRun();
902 AssertSyncReadEquals(kMsg1, kLen1); 905 AssertSyncReadEquals(kMsg1, kLen1);
903 906
904 AssertReadStarts(kMsg3, kLen3); 907 AssertReadStarts(kMsg3, kLen3);
905 // Read should block until after the write succeeds. 908 // Read should block until after the write succeeds.
906 909
907 AssertAsyncWriteSucceeds(kMsg2, kLen2); // Advances past paused read. 910 AssertAsyncWriteSucceeds(kMsg2, kLen2); // Advances past paused read.
908 911
909 ASSERT_FALSE(read_callback_.have_result()); 912 ASSERT_FALSE(read_callback_.have_result());
910 ResumeAndRun(); 913 ResumeAndRun();
911 // Now the read will return. 914 // Now the read will return.
912 AssertReadReturns(kMsg3, kLen3); 915 AssertReadReturns(kMsg3, kLen3);
913 } 916 }
914 917
915 TEST_P(SpdyProxyClientSocketTest, AsyncWriteAroundReads) { 918 TEST_P(SpdyProxyClientSocketTest, AsyncWriteAroundReads) {
916 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 919 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
917 scoped_ptr<SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 920 scoped_ptr<SpdySerializedFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
918 MockWrite writes[] = { 921 MockWrite writes[] = {
919 CreateMockWrite(*conn, 0, SYNCHRONOUS), 922 CreateMockWrite(*conn, 0, SYNCHRONOUS),
920 MockWrite(ASYNC, ERR_IO_PENDING, 7), CreateMockWrite(*msg2, 8, ASYNC), 923 MockWrite(ASYNC, ERR_IO_PENDING, 7), CreateMockWrite(*msg2, 8, ASYNC),
921 }; 924 };
922 925
923 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 926 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
924 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 927 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
925 scoped_ptr<SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3)); 928 scoped_ptr<SpdySerializedFrame> msg3(ConstructBodyFrame(kMsg3, kLen3));
926 MockRead reads[] = { 929 MockRead reads[] = {
927 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 930 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
928 CreateMockRead(*msg1, 3, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 4), 931 CreateMockRead(*msg1, 3, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 4),
929 CreateMockRead(*msg3, 5, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), 932 CreateMockRead(*msg3, 5, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6),
930 }; 933 };
931 934
932 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 935 Initialize(reads, arraysize(reads), writes, arraysize(writes));
933 936
934 AssertConnectSucceeds(); 937 AssertConnectSucceeds();
935 938
936 ResumeAndRun(); 939 ResumeAndRun();
937 AssertSyncReadEquals(kMsg1, kLen1); 940 AssertSyncReadEquals(kMsg1, kLen1);
938 // Write should block until the read completes 941 // Write should block until the read completes
939 AssertWriteReturns(kMsg2, kLen2, ERR_IO_PENDING); 942 AssertWriteReturns(kMsg2, kLen2, ERR_IO_PENDING);
940 943
941 AssertAsyncReadEquals(kMsg3, kLen3); 944 AssertAsyncReadEquals(kMsg3, kLen3);
942 945
943 ASSERT_FALSE(write_callback_.have_result()); 946 ASSERT_FALSE(write_callback_.have_result());
944 947
945 // Now the write will complete 948 // Now the write will complete
946 ResumeAndRun(); 949 ResumeAndRun();
947 AssertWriteLength(kLen2); 950 AssertWriteLength(kLen2);
948 } 951 }
949 952
950 // ----------- Reading/Writing on Closed socket 953 // ----------- Reading/Writing on Closed socket
951 954
952 // Reading from an already closed socket should return 0 955 // Reading from an already closed socket should return 0
953 TEST_P(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsZero) { 956 TEST_P(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsZero) {
954 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 957 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
955 MockWrite writes[] = { 958 MockWrite writes[] = {
956 CreateMockWrite(*conn, 0, SYNCHRONOUS), 959 CreateMockWrite(*conn, 0, SYNCHRONOUS),
957 }; 960 };
958 961
959 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 962 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
960 MockRead reads[] = { 963 MockRead reads[] = {
961 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 964 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
962 MockRead(ASYNC, 0, 3), // EOF 965 MockRead(ASYNC, 0, 3), // EOF
963 }; 966 };
964 967
965 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 968 Initialize(reads, arraysize(reads), writes, arraysize(writes));
966 969
967 AssertConnectSucceeds(); 970 AssertConnectSucceeds();
968 971
969 ResumeAndRun(); 972 ResumeAndRun();
970 973
971 ASSERT_FALSE(sock_->IsConnected()); 974 ASSERT_FALSE(sock_->IsConnected());
972 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback())); 975 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
973 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback())); 976 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
974 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback())); 977 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
975 ASSERT_FALSE(sock_->IsConnectedAndIdle()); 978 ASSERT_FALSE(sock_->IsConnectedAndIdle());
976 } 979 }
977 980
978 // Read pending when socket is closed should return 0 981 // Read pending when socket is closed should return 0
979 TEST_P(SpdyProxyClientSocketTest, PendingReadOnCloseReturnsZero) { 982 TEST_P(SpdyProxyClientSocketTest, PendingReadOnCloseReturnsZero) {
980 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 983 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
981 MockWrite writes[] = { 984 MockWrite writes[] = {
982 CreateMockWrite(*conn, 0, SYNCHRONOUS), 985 CreateMockWrite(*conn, 0, SYNCHRONOUS),
983 }; 986 };
984 987
985 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 988 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
986 MockRead reads[] = { 989 MockRead reads[] = {
987 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 990 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
988 MockRead(ASYNC, 0, 3), // EOF 991 MockRead(ASYNC, 0, 3), // EOF
989 }; 992 };
990 993
991 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 994 Initialize(reads, arraysize(reads), writes, arraysize(writes));
992 995
993 AssertConnectSucceeds(); 996 AssertConnectSucceeds();
994 997
995 AssertReadStarts(kMsg1, kLen1); 998 AssertReadStarts(kMsg1, kLen1);
996 999
997 ResumeAndRun(); 1000 ResumeAndRun();
998 1001
999 ASSERT_EQ(0, read_callback_.WaitForResult()); 1002 ASSERT_EQ(0, read_callback_.WaitForResult());
1000 } 1003 }
1001 1004
1002 // Reading from a disconnected socket is an error 1005 // Reading from a disconnected socket is an error
1003 TEST_P(SpdyProxyClientSocketTest, 1006 TEST_P(SpdyProxyClientSocketTest,
1004 ReadOnDisconnectSocketReturnsNotConnected) { 1007 ReadOnDisconnectSocketReturnsNotConnected) {
1005 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1008 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
1006 scoped_ptr<SpdyFrame> rst( 1009 scoped_ptr<SpdySerializedFrame> rst(
1007 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1010 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1008 MockWrite writes[] = { 1011 MockWrite writes[] = {
1009 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3), 1012 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3),
1010 }; 1013 };
1011 1014
1012 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1015 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
1013 MockRead reads[] = { 1016 MockRead reads[] = {
1014 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 1017 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
1015 }; 1018 };
1016 1019
1017 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1020 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1018 1021
1019 AssertConnectSucceeds(); 1022 AssertConnectSucceeds();
1020 1023
1021 sock_->Disconnect(); 1024 sock_->Disconnect();
1022 1025
1023 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED, 1026 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED,
1024 sock_->Read(NULL, 1, CompletionCallback())); 1027 sock_->Read(NULL, 1, CompletionCallback()));
1025 1028
1026 // Let the RST_STREAM write while |rst| is in-scope. 1029 // Let the RST_STREAM write while |rst| is in-scope.
1027 base::MessageLoop::current()->RunUntilIdle(); 1030 base::MessageLoop::current()->RunUntilIdle();
1028 } 1031 }
1029 1032
1030 // Reading buffered data from an already closed socket should return 1033 // Reading buffered data from an already closed socket should return
1031 // buffered data, then 0. 1034 // buffered data, then 0.
1032 TEST_P(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsBufferedData) { 1035 TEST_P(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsBufferedData) {
1033 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1036 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
1034 MockWrite writes[] = { 1037 MockWrite writes[] = {
1035 CreateMockWrite(*conn, 0, SYNCHRONOUS), 1038 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1036 }; 1039 };
1037 1040
1038 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1041 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
1039 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1042 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1040 MockRead reads[] = { 1043 MockRead reads[] = {
1041 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 1044 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
1042 CreateMockRead(*msg1, 3, ASYNC), MockRead(ASYNC, 0, 4), // EOF 1045 CreateMockRead(*msg1, 3, ASYNC), MockRead(ASYNC, 0, 4), // EOF
1043 }; 1046 };
1044 1047
1045 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1048 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1046 1049
1047 AssertConnectSucceeds(); 1050 AssertConnectSucceeds();
1048 1051
1049 ResumeAndRun(); 1052 ResumeAndRun();
1050 1053
1051 ASSERT_FALSE(sock_->IsConnected()); 1054 ASSERT_FALSE(sock_->IsConnected());
1052 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1)); 1055 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1));
1053 ASSERT_EQ(kLen1, sock_->Read(buf.get(), kLen1, CompletionCallback())); 1056 ASSERT_EQ(kLen1, sock_->Read(buf.get(), kLen1, CompletionCallback()));
1054 ASSERT_EQ(std::string(kMsg1, kLen1), std::string(buf->data(), kLen1)); 1057 ASSERT_EQ(std::string(kMsg1, kLen1), std::string(buf->data(), kLen1));
1055 1058
1056 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback())); 1059 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
1057 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback())); 1060 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
1058 sock_->Disconnect(); 1061 sock_->Disconnect();
1059 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED, 1062 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED,
1060 sock_->Read(NULL, 1, CompletionCallback())); 1063 sock_->Read(NULL, 1, CompletionCallback()));
1061 } 1064 }
1062 1065
1063 // Calling Write() on a closed socket is an error 1066 // Calling Write() on a closed socket is an error
1064 TEST_P(SpdyProxyClientSocketTest, WriteOnClosedStream) { 1067 TEST_P(SpdyProxyClientSocketTest, WriteOnClosedStream) {
1065 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1068 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
1066 MockWrite writes[] = { 1069 MockWrite writes[] = {
1067 CreateMockWrite(*conn, 0, SYNCHRONOUS), 1070 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1068 }; 1071 };
1069 1072
1070 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1073 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
1071 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1074 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1072 MockRead reads[] = { 1075 MockRead reads[] = {
1073 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 1076 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
1074 MockRead(ASYNC, 0, 3), // EOF 1077 MockRead(ASYNC, 0, 3), // EOF
1075 }; 1078 };
1076 1079
1077 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1080 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1078 1081
1079 AssertConnectSucceeds(); 1082 AssertConnectSucceeds();
1080 1083
1081 // Read EOF which will close the stream. 1084 // Read EOF which will close the stream.
1082 ResumeAndRun(); 1085 ResumeAndRun();
1083 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1086 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1084 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, 1087 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED,
1085 sock_->Write(buf.get(), buf->size(), CompletionCallback())); 1088 sock_->Write(buf.get(), buf->size(), CompletionCallback()));
1086 } 1089 }
1087 1090
1088 // Calling Write() on a disconnected socket is an error. 1091 // Calling Write() on a disconnected socket is an error.
1089 TEST_P(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) { 1092 TEST_P(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) {
1090 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1093 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
1091 scoped_ptr<SpdyFrame> rst( 1094 scoped_ptr<SpdySerializedFrame> rst(
1092 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1095 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1093 MockWrite writes[] = { 1096 MockWrite writes[] = {
1094 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3), 1097 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3),
1095 }; 1098 };
1096 1099
1097 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1100 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
1098 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1101 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1099 MockRead reads[] = { 1102 MockRead reads[] = {
1100 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 1103 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
1101 }; 1104 };
1102 1105
1103 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1106 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1104 1107
1105 AssertConnectSucceeds(); 1108 AssertConnectSucceeds();
1106 1109
1107 sock_->Disconnect(); 1110 sock_->Disconnect();
1108 1111
1109 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1112 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1110 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, 1113 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED,
1111 sock_->Write(buf.get(), buf->size(), CompletionCallback())); 1114 sock_->Write(buf.get(), buf->size(), CompletionCallback()));
1112 1115
1113 // Let the RST_STREAM write while |rst| is in-scope. 1116 // Let the RST_STREAM write while |rst| is in-scope.
1114 base::MessageLoop::current()->RunUntilIdle(); 1117 base::MessageLoop::current()->RunUntilIdle();
1115 } 1118 }
1116 1119
1117 // If the socket is closed with a pending Write(), the callback 1120 // If the socket is closed with a pending Write(), the callback
1118 // should be called with ERR_CONNECTION_CLOSED. 1121 // should be called with ERR_CONNECTION_CLOSED.
1119 TEST_P(SpdyProxyClientSocketTest, WritePendingOnClose) { 1122 TEST_P(SpdyProxyClientSocketTest, WritePendingOnClose) {
1120 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1123 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
1121 MockWrite writes[] = { 1124 MockWrite writes[] = {
1122 CreateMockWrite(*conn, 0, SYNCHRONOUS), 1125 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1123 MockWrite(SYNCHRONOUS, ERR_IO_PENDING, 3), 1126 MockWrite(SYNCHRONOUS, ERR_IO_PENDING, 3),
1124 }; 1127 };
1125 1128
1126 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1129 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
1127 MockRead reads[] = { 1130 MockRead reads[] = {
1128 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 1131 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
1129 }; 1132 };
1130 1133
1131 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1134 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1132 1135
1133 AssertConnectSucceeds(); 1136 AssertConnectSucceeds();
1134 1137
1135 EXPECT_TRUE(sock_->IsConnected()); 1138 EXPECT_TRUE(sock_->IsConnected());
1136 1139
1137 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1140 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1138 EXPECT_EQ(ERR_IO_PENDING, 1141 EXPECT_EQ(ERR_IO_PENDING,
1139 sock_->Write(buf.get(), buf->size(), write_callback_.callback())); 1142 sock_->Write(buf.get(), buf->size(), write_callback_.callback()));
1140 // Make sure the write actually starts. 1143 // Make sure the write actually starts.
1141 base::RunLoop().RunUntilIdle(); 1144 base::RunLoop().RunUntilIdle();
1142 1145
1143 CloseSpdySession(ERR_ABORTED, std::string()); 1146 CloseSpdySession(ERR_ABORTED, std::string());
1144 1147
1145 EXPECT_EQ(ERR_CONNECTION_CLOSED, write_callback_.WaitForResult()); 1148 EXPECT_EQ(ERR_CONNECTION_CLOSED, write_callback_.WaitForResult());
1146 } 1149 }
1147 1150
1148 // If the socket is Disconnected with a pending Write(), the callback 1151 // If the socket is Disconnected with a pending Write(), the callback
1149 // should not be called. 1152 // should not be called.
1150 TEST_P(SpdyProxyClientSocketTest, DisconnectWithWritePending) { 1153 TEST_P(SpdyProxyClientSocketTest, DisconnectWithWritePending) {
1151 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1154 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
1152 scoped_ptr<SpdyFrame> rst( 1155 scoped_ptr<SpdySerializedFrame> rst(
1153 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1156 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1154 MockWrite writes[] = { 1157 MockWrite writes[] = {
1155 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3), 1158 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3),
1156 }; 1159 };
1157 1160
1158 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1161 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
1159 MockRead reads[] = { 1162 MockRead reads[] = {
1160 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 1163 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
1161 }; 1164 };
1162 1165
1163 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1166 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1164 1167
1165 AssertConnectSucceeds(); 1168 AssertConnectSucceeds();
1166 1169
1167 EXPECT_TRUE(sock_->IsConnected()); 1170 EXPECT_TRUE(sock_->IsConnected());
1168 1171
1169 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1172 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1170 EXPECT_EQ(ERR_IO_PENDING, 1173 EXPECT_EQ(ERR_IO_PENDING,
1171 sock_->Write(buf.get(), buf->size(), write_callback_.callback())); 1174 sock_->Write(buf.get(), buf->size(), write_callback_.callback()));
1172 1175
1173 sock_->Disconnect(); 1176 sock_->Disconnect();
1174 1177
1175 EXPECT_FALSE(sock_->IsConnected()); 1178 EXPECT_FALSE(sock_->IsConnected());
1176 EXPECT_FALSE(write_callback_.have_result()); 1179 EXPECT_FALSE(write_callback_.have_result());
1177 1180
1178 // Let the RST_STREAM write while |rst| is in-scope. 1181 // Let the RST_STREAM write while |rst| is in-scope.
1179 base::MessageLoop::current()->RunUntilIdle(); 1182 base::MessageLoop::current()->RunUntilIdle();
1180 } 1183 }
1181 1184
1182 // If the socket is Disconnected with a pending Read(), the callback 1185 // If the socket is Disconnected with a pending Read(), the callback
1183 // should not be called. 1186 // should not be called.
1184 TEST_P(SpdyProxyClientSocketTest, DisconnectWithReadPending) { 1187 TEST_P(SpdyProxyClientSocketTest, DisconnectWithReadPending) {
1185 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1188 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
1186 scoped_ptr<SpdyFrame> rst( 1189 scoped_ptr<SpdySerializedFrame> rst(
1187 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1190 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1188 MockWrite writes[] = { 1191 MockWrite writes[] = {
1189 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3), 1192 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 3),
1190 }; 1193 };
1191 1194
1192 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1195 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
1193 MockRead reads[] = { 1196 MockRead reads[] = {
1194 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2), 1197 CreateMockRead(*resp, 1, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 2),
1195 }; 1198 };
1196 1199
1197 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1200 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1198 1201
1199 AssertConnectSucceeds(); 1202 AssertConnectSucceeds();
1200 1203
1201 EXPECT_TRUE(sock_->IsConnected()); 1204 EXPECT_TRUE(sock_->IsConnected());
1202 1205
1203 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1)); 1206 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1));
1204 ASSERT_EQ(ERR_IO_PENDING, 1207 ASSERT_EQ(ERR_IO_PENDING,
1205 sock_->Read(buf.get(), kLen1, read_callback_.callback())); 1208 sock_->Read(buf.get(), kLen1, read_callback_.callback()));
1206 1209
1207 sock_->Disconnect(); 1210 sock_->Disconnect();
1208 1211
1209 EXPECT_FALSE(sock_->IsConnected()); 1212 EXPECT_FALSE(sock_->IsConnected());
1210 EXPECT_FALSE(read_callback_.have_result()); 1213 EXPECT_FALSE(read_callback_.have_result());
1211 1214
1212 // Let the RST_STREAM write while |rst| is in-scope. 1215 // Let the RST_STREAM write while |rst| is in-scope.
1213 base::MessageLoop::current()->RunUntilIdle(); 1216 base::MessageLoop::current()->RunUntilIdle();
1214 } 1217 }
1215 1218
1216 // If the socket is Reset when both a read and write are pending, 1219 // If the socket is Reset when both a read and write are pending,
1217 // both should be called back. 1220 // both should be called back.
1218 TEST_P(SpdyProxyClientSocketTest, RstWithReadAndWritePending) { 1221 TEST_P(SpdyProxyClientSocketTest, RstWithReadAndWritePending) {
1219 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1222 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
1220 MockWrite writes[] = { 1223 MockWrite writes[] = {
1221 CreateMockWrite(*conn, 0, SYNCHRONOUS), 1224 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1222 }; 1225 };
1223 1226
1224 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1227 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
1225 scoped_ptr<SpdyFrame> rst( 1228 scoped_ptr<SpdySerializedFrame> rst(
1226 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1229 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1227 MockRead reads[] = { 1230 MockRead reads[] = {
1228 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 1231 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
1229 CreateMockRead(*rst, 3, ASYNC), MockRead(ASYNC, 0, 4) // EOF 1232 CreateMockRead(*rst, 3, ASYNC), MockRead(ASYNC, 0, 4) // EOF
1230 }; 1233 };
1231 1234
1232 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1235 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1233 1236
1234 AssertConnectSucceeds(); 1237 AssertConnectSucceeds();
1235 1238
(...skipping 15 matching lines...) Expand all
1251 EXPECT_TRUE(read_callback_.have_result()); 1254 EXPECT_TRUE(read_callback_.have_result());
1252 EXPECT_TRUE(write_callback_.have_result()); 1255 EXPECT_TRUE(write_callback_.have_result());
1253 1256
1254 // Let the RST_STREAM write while |rst| is in-scope. 1257 // Let the RST_STREAM write while |rst| is in-scope.
1255 base::MessageLoop::current()->RunUntilIdle(); 1258 base::MessageLoop::current()->RunUntilIdle();
1256 } 1259 }
1257 1260
1258 // Makes sure the proxy client socket's source gets the expected NetLog events 1261 // Makes sure the proxy client socket's source gets the expected NetLog events
1259 // and only the expected NetLog events (No SpdySession events). 1262 // and only the expected NetLog events (No SpdySession events).
1260 TEST_P(SpdyProxyClientSocketTest, NetLog) { 1263 TEST_P(SpdyProxyClientSocketTest, NetLog) {
1261 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1264 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
1262 scoped_ptr<SpdyFrame> rst( 1265 scoped_ptr<SpdySerializedFrame> rst(
1263 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1266 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1264 MockWrite writes[] = { 1267 MockWrite writes[] = {
1265 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 5), 1268 CreateMockWrite(*conn, 0, SYNCHRONOUS), CreateMockWrite(*rst, 5),
1266 }; 1269 };
1267 1270
1268 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1271 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
1269 scoped_ptr<SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1272 scoped_ptr<SpdySerializedFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1270 MockRead reads[] = { 1273 MockRead reads[] = {
1271 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 1274 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
1272 CreateMockRead(*msg1, 3, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4), 1275 CreateMockRead(*msg1, 3, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4),
1273 }; 1276 };
1274 1277
1275 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1278 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1276 1279
1277 AssertConnectSucceeds(); 1280 AssertConnectSucceeds();
1278 1281
1279 // SpdySession consumes the next read and sends it to sock_ to be buffered. 1282 // SpdySession consumes the next read and sends it to sock_ to be buffered.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1337 scoped_ptr<SpdyProxyClientSocket>* sock_; 1340 scoped_ptr<SpdyProxyClientSocket>* sock_;
1338 CompletionCallback callback_; 1341 CompletionCallback callback_;
1339 1342
1340 DISALLOW_COPY_AND_ASSIGN(DeleteSockCallback); 1343 DISALLOW_COPY_AND_ASSIGN(DeleteSockCallback);
1341 }; 1344 };
1342 1345
1343 // If the socket is Reset when both a read and write are pending, and the 1346 // If the socket is Reset when both a read and write are pending, and the
1344 // read callback causes the socket to be deleted, the write callback should 1347 // read callback causes the socket to be deleted, the write callback should
1345 // not be called. 1348 // not be called.
1346 TEST_P(SpdyProxyClientSocketTest, RstWithReadAndWritePendingDelete) { 1349 TEST_P(SpdyProxyClientSocketTest, RstWithReadAndWritePendingDelete) {
1347 scoped_ptr<SpdyFrame> conn(ConstructConnectRequestFrame()); 1350 scoped_ptr<SpdySerializedFrame> conn(ConstructConnectRequestFrame());
1348 MockWrite writes[] = { 1351 MockWrite writes[] = {
1349 CreateMockWrite(*conn, 0, SYNCHRONOUS), 1352 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1350 }; 1353 };
1351 1354
1352 scoped_ptr<SpdyFrame> resp(ConstructConnectReplyFrame()); 1355 scoped_ptr<SpdySerializedFrame> resp(ConstructConnectReplyFrame());
1353 scoped_ptr<SpdyFrame> rst( 1356 scoped_ptr<SpdySerializedFrame> rst(
1354 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); 1357 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL));
1355 MockRead reads[] = { 1358 MockRead reads[] = {
1356 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2), 1359 CreateMockRead(*resp, 1, ASYNC), MockRead(ASYNC, ERR_IO_PENDING, 2),
1357 CreateMockRead(*rst, 3, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4), 1360 CreateMockRead(*rst, 3, ASYNC), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 4),
1358 }; 1361 };
1359 1362
1360 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1363 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1361 1364
1362 AssertConnectSucceeds(); 1365 AssertConnectSucceeds();
1363 1366
(...skipping 15 matching lines...) Expand all
1379 1382
1380 EXPECT_FALSE(sock_.get()); 1383 EXPECT_FALSE(sock_.get());
1381 EXPECT_TRUE(read_callback.have_result()); 1384 EXPECT_TRUE(read_callback.have_result());
1382 EXPECT_FALSE(write_callback_.have_result()); 1385 EXPECT_FALSE(write_callback_.have_result());
1383 1386
1384 // Let the RST_STREAM write while |rst| is in-scope. 1387 // Let the RST_STREAM write while |rst| is in-scope.
1385 base::MessageLoop::current()->RunUntilIdle(); 1388 base::MessageLoop::current()->RunUntilIdle();
1386 } 1389 }
1387 1390
1388 } // namespace net 1391 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_protocol.h ('k') | net/spdy/spdy_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698