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

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

Issue 9425016: Change MockRead and MockWrite (et. al.) to take an IoMode enum, instead (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 8 years, 10 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/spdy/spdy_network_transaction_unittest.cc ('k') | net/spdy/spdy_session_unittest.cc » ('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/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "net/base/address_list.h" 10 #include "net/base/address_list.h"
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 spdy::SpdyFrame* SpdyProxyClientSocketTest::ConstructBodyFrame(const char* data, 411 spdy::SpdyFrame* SpdyProxyClientSocketTest::ConstructBodyFrame(const char* data,
412 int length) { 412 int length) {
413 return framer_.CreateDataFrame(kStreamId, data, length, spdy::DATA_FLAG_NONE); 413 return framer_.CreateDataFrame(kStreamId, data, length, spdy::DATA_FLAG_NONE);
414 } 414 }
415 415
416 // ----------- Connect 416 // ----------- Connect
417 417
418 TEST_F(SpdyProxyClientSocketTest, ConnectSendsCorrectRequest) { 418 TEST_F(SpdyProxyClientSocketTest, ConnectSendsCorrectRequest) {
419 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 419 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
420 MockWrite writes[] = { 420 MockWrite writes[] = {
421 CreateMockWrite(*conn, 0, false), 421 CreateMockWrite(*conn, 0, SYNCHRONOUS),
422 }; 422 };
423 423
424 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 424 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
425 MockRead reads[] = { 425 MockRead reads[] = {
426 CreateMockRead(*resp, 1, true), 426 CreateMockRead(*resp, 1, ASYNC),
427 MockRead(true, 0, 3), // EOF 427 MockRead(ASYNC, 0, 3), // EOF
428 }; 428 };
429 429
430 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 430 Initialize(reads, arraysize(reads), writes, arraysize(writes));
431 431
432 ASSERT_FALSE(sock_->IsConnected()); 432 ASSERT_FALSE(sock_->IsConnected());
433 433
434 AssertConnectSucceeds(); 434 AssertConnectSucceeds();
435 435
436 AssertConnectionEstablished(); 436 AssertConnectionEstablished();
437 } 437 }
438 438
439 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthRequested) { 439 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthRequested) {
440 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 440 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
441 MockWrite writes[] = { 441 MockWrite writes[] = {
442 CreateMockWrite(*conn, 0, false), 442 CreateMockWrite(*conn, 0, SYNCHRONOUS),
443 }; 443 };
444 444
445 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectAuthReplyFrame()); 445 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectAuthReplyFrame());
446 MockRead reads[] = { 446 MockRead reads[] = {
447 CreateMockRead(*resp, 1, true), 447 CreateMockRead(*resp, 1, ASYNC),
448 MockRead(true, 0, 3), // EOF 448 MockRead(ASYNC, 0, 3), // EOF
449 }; 449 };
450 450
451 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 451 Initialize(reads, arraysize(reads), writes, arraysize(writes));
452 452
453 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED); 453 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED);
454 454
455 const HttpResponseInfo* response = sock_->GetConnectResponseInfo(); 455 const HttpResponseInfo* response = sock_->GetConnectResponseInfo();
456 ASSERT_TRUE(response != NULL); 456 ASSERT_TRUE(response != NULL);
457 ASSERT_EQ(407, response->headers->response_code()); 457 ASSERT_EQ(407, response->headers->response_code());
458 ASSERT_EQ("Proxy Authentication Required", 458 ASSERT_EQ("Proxy Authentication Required",
459 response->headers->GetStatusText()); 459 response->headers->GetStatusText());
460 } 460 }
461 461
462 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthCredentials) { 462 TEST_F(SpdyProxyClientSocketTest, ConnectWithAuthCredentials) {
463 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectAuthRequestFrame()); 463 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectAuthRequestFrame());
464 MockWrite writes[] = { 464 MockWrite writes[] = {
465 CreateMockWrite(*conn, 0, false), 465 CreateMockWrite(*conn, 0, SYNCHRONOUS),
466 }; 466 };
467 467
468 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 468 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
469 MockRead reads[] = { 469 MockRead reads[] = {
470 CreateMockRead(*resp, 1, true), 470 CreateMockRead(*resp, 1, ASYNC),
471 MockRead(true, 0, 3), // EOF 471 MockRead(ASYNC, 0, 3), // EOF
472 }; 472 };
473 473
474 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 474 Initialize(reads, arraysize(reads), writes, arraysize(writes));
475 AddAuthToCache(); 475 AddAuthToCache();
476 476
477 AssertConnectSucceeds(); 477 AssertConnectSucceeds();
478 478
479 AssertConnectionEstablished(); 479 AssertConnectionEstablished();
480 } 480 }
481 481
482 TEST_F(SpdyProxyClientSocketTest, ConnectFails) { 482 TEST_F(SpdyProxyClientSocketTest, ConnectFails) {
483 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 483 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
484 MockWrite writes[] = { 484 MockWrite writes[] = {
485 CreateMockWrite(*conn, 0, false), 485 CreateMockWrite(*conn, 0, SYNCHRONOUS),
486 }; 486 };
487 487
488 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 488 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
489 MockRead reads[] = { 489 MockRead reads[] = {
490 MockRead(true, 0, 1), // EOF 490 MockRead(ASYNC, 0, 1), // EOF
491 }; 491 };
492 492
493 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 493 Initialize(reads, arraysize(reads), writes, arraysize(writes));
494 494
495 ASSERT_FALSE(sock_->IsConnected()); 495 ASSERT_FALSE(sock_->IsConnected());
496 496
497 AssertConnectFails(ERR_CONNECTION_CLOSED); 497 AssertConnectFails(ERR_CONNECTION_CLOSED);
498 498
499 ASSERT_FALSE(sock_->IsConnected()); 499 ASSERT_FALSE(sock_->IsConnected());
500 } 500 }
501 501
502 // ----------- WasEverUsed 502 // ----------- WasEverUsed
503 503
504 TEST_F(SpdyProxyClientSocketTest, WasEverUsedReturnsCorrectValues) { 504 TEST_F(SpdyProxyClientSocketTest, WasEverUsedReturnsCorrectValues) {
505 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 505 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
506 MockWrite writes[] = { 506 MockWrite writes[] = {
507 CreateMockWrite(*conn, 0, false), 507 CreateMockWrite(*conn, 0, SYNCHRONOUS),
508 }; 508 };
509 509
510 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 510 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
511 MockRead reads[] = { 511 MockRead reads[] = {
512 CreateMockRead(*resp, 1, true), 512 CreateMockRead(*resp, 1, ASYNC),
513 MockRead(true, 0, 2), // EOF 513 MockRead(ASYNC, 0, 2), // EOF
514 }; 514 };
515 515
516 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 516 Initialize(reads, arraysize(reads), writes, arraysize(writes));
517 517
518 EXPECT_FALSE(sock_->WasEverUsed()); 518 EXPECT_FALSE(sock_->WasEverUsed());
519 AssertConnectSucceeds(); 519 AssertConnectSucceeds();
520 EXPECT_TRUE(sock_->WasEverUsed()); 520 EXPECT_TRUE(sock_->WasEverUsed());
521 sock_->Disconnect(); 521 sock_->Disconnect();
522 EXPECT_TRUE(sock_->WasEverUsed()); 522 EXPECT_TRUE(sock_->WasEverUsed());
523 } 523 }
524 524
525 // ----------- GetPeerAddress 525 // ----------- GetPeerAddress
526 526
527 TEST_F(SpdyProxyClientSocketTest, GetPeerAddressReturnsCorrectValues) { 527 TEST_F(SpdyProxyClientSocketTest, GetPeerAddressReturnsCorrectValues) {
528 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 528 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
529 MockWrite writes[] = { 529 MockWrite writes[] = {
530 CreateMockWrite(*conn, 0, false), 530 CreateMockWrite(*conn, 0, SYNCHRONOUS),
531 }; 531 };
532 532
533 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 533 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
534 MockRead reads[] = { 534 MockRead reads[] = {
535 CreateMockRead(*resp, 1, true), 535 CreateMockRead(*resp, 1, ASYNC),
536 MockRead(true, 0, 2), // EOF 536 MockRead(ASYNC, 0, 2), // EOF
537 }; 537 };
538 538
539 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 539 Initialize(reads, arraysize(reads), writes, arraysize(writes));
540 540
541 net::AddressList addr; 541 net::AddressList addr;
542 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr)); 542 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr));
543 543
544 AssertConnectSucceeds(); 544 AssertConnectSucceeds();
545 EXPECT_TRUE(sock_->IsConnected()); 545 EXPECT_TRUE(sock_->IsConnected());
546 EXPECT_EQ(OK, sock_->GetPeerAddress(&addr)); 546 EXPECT_EQ(OK, sock_->GetPeerAddress(&addr));
547 547
548 Run(1); 548 Run(1);
549 549
550 EXPECT_FALSE(sock_->IsConnected()); 550 EXPECT_FALSE(sock_->IsConnected());
551 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr)); 551 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr));
552 552
553 sock_->Disconnect(); 553 sock_->Disconnect();
554 554
555 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr)); 555 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, sock_->GetPeerAddress(&addr));
556 } 556 }
557 557
558 // ----------- Write 558 // ----------- Write
559 559
560 TEST_F(SpdyProxyClientSocketTest, WriteSendsDataInDataFrame) { 560 TEST_F(SpdyProxyClientSocketTest, WriteSendsDataInDataFrame) {
561 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 561 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
562 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 562 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
563 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 563 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
564 MockWrite writes[] = { 564 MockWrite writes[] = {
565 CreateMockWrite(*conn, 0, false), 565 CreateMockWrite(*conn, 0, SYNCHRONOUS),
566 CreateMockWrite(*msg1, 2, false), 566 CreateMockWrite(*msg1, 2, SYNCHRONOUS),
567 CreateMockWrite(*msg2, 3, false), 567 CreateMockWrite(*msg2, 3, SYNCHRONOUS),
568 }; 568 };
569 569
570 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 570 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
571 MockRead reads[] = { 571 MockRead reads[] = {
572 CreateMockRead(*resp, 1, true), 572 CreateMockRead(*resp, 1, ASYNC),
573 MockRead(true, 0, 4), // EOF 573 MockRead(ASYNC, 0, 4), // EOF
574 }; 574 };
575 575
576 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 576 Initialize(reads, arraysize(reads), writes, arraysize(writes));
577 577
578 AssertConnectSucceeds(); 578 AssertConnectSucceeds();
579 579
580 AssertAsyncWriteSucceeds(kMsg1, kLen1); 580 AssertAsyncWriteSucceeds(kMsg1, kLen1);
581 AssertAsyncWriteSucceeds(kMsg2, kLen2); 581 AssertAsyncWriteSucceeds(kMsg2, kLen2);
582 } 582 }
583 583
584 TEST_F(SpdyProxyClientSocketTest, WriteSplitsLargeDataIntoMultipleFrames) { 584 TEST_F(SpdyProxyClientSocketTest, WriteSplitsLargeDataIntoMultipleFrames) {
585 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x'); 585 std::string chunk_data(kMaxSpdyFrameChunkSize, 'x');
586 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 586 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
587 scoped_ptr<spdy::SpdyFrame> chunk(ConstructBodyFrame(chunk_data.data(), 587 scoped_ptr<spdy::SpdyFrame> chunk(ConstructBodyFrame(chunk_data.data(),
588 chunk_data.length())); 588 chunk_data.length()));
589 MockWrite writes[] = { 589 MockWrite writes[] = {
590 CreateMockWrite(*conn, 0, false), 590 CreateMockWrite(*conn, 0, SYNCHRONOUS),
591 CreateMockWrite(*chunk, 2, false), 591 CreateMockWrite(*chunk, 2, SYNCHRONOUS),
592 CreateMockWrite(*chunk, 3, false), 592 CreateMockWrite(*chunk, 3, SYNCHRONOUS),
593 CreateMockWrite(*chunk, 4, false) 593 CreateMockWrite(*chunk, 4, SYNCHRONOUS)
594 }; 594 };
595 595
596 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 596 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
597 MockRead reads[] = { 597 MockRead reads[] = {
598 CreateMockRead(*resp, 1, true), 598 CreateMockRead(*resp, 1, ASYNC),
599 MockRead(true, 0, 5), // EOF 599 MockRead(ASYNC, 0, 5), // EOF
600 }; 600 };
601 601
602 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 602 Initialize(reads, arraysize(reads), writes, arraysize(writes));
603 603
604 AssertConnectSucceeds(); 604 AssertConnectSucceeds();
605 605
606 std::string big_data(kMaxSpdyFrameChunkSize * 3, 'x'); 606 std::string big_data(kMaxSpdyFrameChunkSize * 3, 'x');
607 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(big_data.data(), 607 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(big_data.data(),
608 big_data.length())); 608 big_data.length()));
609 609
610 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(), 610 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(buf, buf->size(),
611 write_callback_.callback())); 611 write_callback_.callback()));
612 data_->RunFor(3); 612 data_->RunFor(3);
613 613
614 EXPECT_EQ(buf->size(), write_callback_.WaitForResult()); 614 EXPECT_EQ(buf->size(), write_callback_.WaitForResult());
615 } 615 }
616 616
617 // ----------- Read 617 // ----------- Read
618 618
619 TEST_F(SpdyProxyClientSocketTest, ReadReadsDataInDataFrame) { 619 TEST_F(SpdyProxyClientSocketTest, ReadReadsDataInDataFrame) {
620 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 620 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
621 MockWrite writes[] = { 621 MockWrite writes[] = {
622 CreateMockWrite(*conn, 0, false), 622 CreateMockWrite(*conn, 0, SYNCHRONOUS),
623 }; 623 };
624 624
625 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 625 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
626 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 626 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
627 MockRead reads[] = { 627 MockRead reads[] = {
628 CreateMockRead(*resp, 1, true), 628 CreateMockRead(*resp, 1, ASYNC),
629 CreateMockRead(*msg1, 2, true), 629 CreateMockRead(*msg1, 2, ASYNC),
630 MockRead(true, 0, 3), // EOF 630 MockRead(ASYNC, 0, 3), // EOF
631 }; 631 };
632 632
633 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 633 Initialize(reads, arraysize(reads), writes, arraysize(writes));
634 634
635 AssertConnectSucceeds(); 635 AssertConnectSucceeds();
636 636
637 Run(1); // SpdySession consumes the next read and sends it to 637 Run(1); // SpdySession consumes the next read and sends it to
638 // sock_ to be buffered. 638 // sock_ to be buffered.
639 AssertSyncReadEquals(kMsg1, kLen1); 639 AssertSyncReadEquals(kMsg1, kLen1);
640 } 640 }
641 641
642 TEST_F(SpdyProxyClientSocketTest, ReadDataFromBufferedFrames) { 642 TEST_F(SpdyProxyClientSocketTest, ReadDataFromBufferedFrames) {
643 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 643 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
644 MockWrite writes[] = { 644 MockWrite writes[] = {
645 CreateMockWrite(*conn, 0, false), 645 CreateMockWrite(*conn, 0, SYNCHRONOUS),
646 }; 646 };
647 647
648 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 648 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
649 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 649 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
650 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 650 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
651 MockRead reads[] = { 651 MockRead reads[] = {
652 CreateMockRead(*resp, 1, true), 652 CreateMockRead(*resp, 1, ASYNC),
653 CreateMockRead(*msg1, 2, true), 653 CreateMockRead(*msg1, 2, ASYNC),
654 CreateMockRead(*msg2, 3, true), 654 CreateMockRead(*msg2, 3, ASYNC),
655 MockRead(true, 0, 4), // EOF 655 MockRead(ASYNC, 0, 4), // EOF
656 }; 656 };
657 657
658 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 658 Initialize(reads, arraysize(reads), writes, arraysize(writes));
659 659
660 AssertConnectSucceeds(); 660 AssertConnectSucceeds();
661 661
662 Run(1); // SpdySession consumes the next read and sends it to 662 Run(1); // SpdySession consumes the next read and sends it to
663 // sock_ to be buffered. 663 // sock_ to be buffered.
664 AssertSyncReadEquals(kMsg1, kLen1); 664 AssertSyncReadEquals(kMsg1, kLen1);
665 Run(1); // SpdySession consumes the next read and sends it to 665 Run(1); // SpdySession consumes the next read and sends it to
666 // sock_ to be buffered. 666 // sock_ to be buffered.
667 AssertSyncReadEquals(kMsg2, kLen2); 667 AssertSyncReadEquals(kMsg2, kLen2);
668 } 668 }
669 669
670 TEST_F(SpdyProxyClientSocketTest, ReadDataMultipleBufferedFrames) { 670 TEST_F(SpdyProxyClientSocketTest, ReadDataMultipleBufferedFrames) {
671 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 671 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
672 MockWrite writes[] = { 672 MockWrite writes[] = {
673 CreateMockWrite(*conn, 0, false), 673 CreateMockWrite(*conn, 0, SYNCHRONOUS),
674 }; 674 };
675 675
676 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 676 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
677 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 677 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
678 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 678 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
679 MockRead reads[] = { 679 MockRead reads[] = {
680 CreateMockRead(*resp, 1, true), 680 CreateMockRead(*resp, 1, ASYNC),
681 CreateMockRead(*msg1, 2, true), 681 CreateMockRead(*msg1, 2, ASYNC),
682 CreateMockRead(*msg2, 3, true), 682 CreateMockRead(*msg2, 3, ASYNC),
683 MockRead(true, 0, 4), // EOF 683 MockRead(ASYNC, 0, 4), // EOF
684 }; 684 };
685 685
686 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 686 Initialize(reads, arraysize(reads), writes, arraysize(writes));
687 687
688 AssertConnectSucceeds(); 688 AssertConnectSucceeds();
689 689
690 Run(2); // SpdySession consumes the next two reads and sends then to 690 Run(2); // SpdySession consumes the next two reads and sends then to
691 // sock_ to be buffered. 691 // sock_ to be buffered.
692 AssertSyncReadEquals(kMsg1, kLen1); 692 AssertSyncReadEquals(kMsg1, kLen1);
693 AssertSyncReadEquals(kMsg2, kLen2); 693 AssertSyncReadEquals(kMsg2, kLen2);
694 } 694 }
695 695
696 TEST_F(SpdyProxyClientSocketTest, LargeReadWillMergeDataFromDifferentFrames) { 696 TEST_F(SpdyProxyClientSocketTest, LargeReadWillMergeDataFromDifferentFrames) {
697 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 697 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
698 MockWrite writes[] = { 698 MockWrite writes[] = {
699 CreateMockWrite(*conn, 0, false), 699 CreateMockWrite(*conn, 0, SYNCHRONOUS),
700 }; 700 };
701 701
702 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 702 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
703 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 703 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
704 scoped_ptr<spdy::SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3)); 704 scoped_ptr<spdy::SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3));
705 MockRead reads[] = { 705 MockRead reads[] = {
706 CreateMockRead(*resp, 1, true), 706 CreateMockRead(*resp, 1, ASYNC),
707 CreateMockRead(*msg3, 2, true), 707 CreateMockRead(*msg3, 2, ASYNC),
708 CreateMockRead(*msg3, 3, true), 708 CreateMockRead(*msg3, 3, ASYNC),
709 MockRead(true, 0, 4), // EOF 709 MockRead(ASYNC, 0, 4), // EOF
710 }; 710 };
711 711
712 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 712 Initialize(reads, arraysize(reads), writes, arraysize(writes));
713 713
714 AssertConnectSucceeds(); 714 AssertConnectSucceeds();
715 715
716 Run(2); // SpdySession consumes the next two reads and sends then to 716 Run(2); // SpdySession consumes the next two reads and sends then to
717 // sock_ to be buffered. 717 // sock_ to be buffered.
718 // The payload from two data frames, each with kMsg3 will be combined 718 // The payload from two data frames, each with kMsg3 will be combined
719 // together into a single read(). 719 // together into a single read().
720 AssertSyncReadEquals(kMsg33, kLen33); 720 AssertSyncReadEquals(kMsg33, kLen33);
721 } 721 }
722 722
723 TEST_F(SpdyProxyClientSocketTest, MultipleShortReadsThenMoreRead) { 723 TEST_F(SpdyProxyClientSocketTest, MultipleShortReadsThenMoreRead) {
724 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 724 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
725 MockWrite writes[] = { 725 MockWrite writes[] = {
726 CreateMockWrite(*conn, 0, false), 726 CreateMockWrite(*conn, 0, SYNCHRONOUS),
727 }; 727 };
728 728
729 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 729 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
730 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 730 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
731 scoped_ptr<spdy::SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3)); 731 scoped_ptr<spdy::SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3));
732 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 732 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
733 MockRead reads[] = { 733 MockRead reads[] = {
734 CreateMockRead(*resp, 1, true), 734 CreateMockRead(*resp, 1, ASYNC),
735 CreateMockRead(*msg1, 2, true), 735 CreateMockRead(*msg1, 2, ASYNC),
736 CreateMockRead(*msg3, 3, true), 736 CreateMockRead(*msg3, 3, ASYNC),
737 CreateMockRead(*msg3, 4, true), 737 CreateMockRead(*msg3, 4, ASYNC),
738 CreateMockRead(*msg2, 5, true), 738 CreateMockRead(*msg2, 5, ASYNC),
739 MockRead(true, 0, 6), // EOF 739 MockRead(ASYNC, 0, 6), // EOF
740 }; 740 };
741 741
742 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 742 Initialize(reads, arraysize(reads), writes, arraysize(writes));
743 743
744 AssertConnectSucceeds(); 744 AssertConnectSucceeds();
745 745
746 Run(4); // SpdySession consumes the next four reads and sends then to 746 Run(4); // SpdySession consumes the next four reads and sends then to
747 // sock_ to be buffered. 747 // sock_ to be buffered.
748 AssertSyncReadEquals(kMsg1, kLen1); 748 AssertSyncReadEquals(kMsg1, kLen1);
749 // The payload from two data frames, each with kMsg3 will be combined 749 // The payload from two data frames, each with kMsg3 will be combined
750 // together into a single read(). 750 // together into a single read().
751 AssertSyncReadEquals(kMsg33, kLen33); 751 AssertSyncReadEquals(kMsg33, kLen33);
752 AssertSyncReadEquals(kMsg2, kLen2); 752 AssertSyncReadEquals(kMsg2, kLen2);
753 } 753 }
754 754
755 TEST_F(SpdyProxyClientSocketTest, ReadWillSplitDataFromLargeFrame) { 755 TEST_F(SpdyProxyClientSocketTest, ReadWillSplitDataFromLargeFrame) {
756 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 756 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
757 MockWrite writes[] = { 757 MockWrite writes[] = {
758 CreateMockWrite(*conn, 0, false), 758 CreateMockWrite(*conn, 0, SYNCHRONOUS),
759 }; 759 };
760 760
761 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 761 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
762 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 762 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
763 scoped_ptr<spdy::SpdyFrame> msg33(ConstructBodyFrame(kMsg33, kLen33)); 763 scoped_ptr<spdy::SpdyFrame> msg33(ConstructBodyFrame(kMsg33, kLen33));
764 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 764 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
765 MockRead reads[] = { 765 MockRead reads[] = {
766 CreateMockRead(*resp, 1, true), 766 CreateMockRead(*resp, 1, ASYNC),
767 CreateMockRead(*msg1, 2, true), 767 CreateMockRead(*msg1, 2, ASYNC),
768 CreateMockRead(*msg33, 3, true), 768 CreateMockRead(*msg33, 3, ASYNC),
769 MockRead(true, 0, 4), // EOF 769 MockRead(ASYNC, 0, 4), // EOF
770 }; 770 };
771 771
772 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 772 Initialize(reads, arraysize(reads), writes, arraysize(writes));
773 773
774 AssertConnectSucceeds(); 774 AssertConnectSucceeds();
775 775
776 Run(2); // SpdySession consumes the next two reads and sends then to 776 Run(2); // SpdySession consumes the next two reads and sends then to
777 // sock_ to be buffered. 777 // sock_ to be buffered.
778 AssertSyncReadEquals(kMsg1, kLen1); 778 AssertSyncReadEquals(kMsg1, kLen1);
779 // The payload from the single large data frame will be read across 779 // The payload from the single large data frame will be read across
780 // two different reads. 780 // two different reads.
781 AssertSyncReadEquals(kMsg3, kLen3); 781 AssertSyncReadEquals(kMsg3, kLen3);
782 AssertSyncReadEquals(kMsg3, kLen3); 782 AssertSyncReadEquals(kMsg3, kLen3);
783 } 783 }
784 784
785 TEST_F(SpdyProxyClientSocketTest, MultipleReadsFromSameLargeFrame) { 785 TEST_F(SpdyProxyClientSocketTest, MultipleReadsFromSameLargeFrame) {
786 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 786 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
787 MockWrite writes[] = { 787 MockWrite writes[] = {
788 CreateMockWrite(*conn, 0, false), 788 CreateMockWrite(*conn, 0, SYNCHRONOUS),
789 }; 789 };
790 790
791 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 791 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
792 scoped_ptr<spdy::SpdyFrame> msg333(ConstructBodyFrame(kMsg333, kLen333)); 792 scoped_ptr<spdy::SpdyFrame> msg333(ConstructBodyFrame(kMsg333, kLen333));
793 MockRead reads[] = { 793 MockRead reads[] = {
794 CreateMockRead(*resp, 1, true), 794 CreateMockRead(*resp, 1, ASYNC),
795 CreateMockRead(*msg333, 2, true), 795 CreateMockRead(*msg333, 2, ASYNC),
796 MockRead(true, 0, 3), // EOF 796 MockRead(ASYNC, 0, 3), // EOF
797 }; 797 };
798 798
799 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 799 Initialize(reads, arraysize(reads), writes, arraysize(writes));
800 800
801 AssertConnectSucceeds(); 801 AssertConnectSucceeds();
802 802
803 Run(1); // SpdySession consumes the next read and sends it to 803 Run(1); // SpdySession consumes the next read and sends it to
804 // sock_ to be buffered. 804 // sock_ to be buffered.
805 // The payload from the single large data frame will be read across 805 // The payload from the single large data frame will be read across
806 // two different reads. 806 // two different reads.
807 AssertSyncReadEquals(kMsg33, kLen33); 807 AssertSyncReadEquals(kMsg33, kLen33);
808 808
809 // Now attempt to do a read of more data than remains buffered 809 // Now attempt to do a read of more data than remains buffered
810 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen33)); 810 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen33));
811 ASSERT_EQ(kLen3, sock_->Read(buf, kLen33, read_callback_.callback())); 811 ASSERT_EQ(kLen3, sock_->Read(buf, kLen33, read_callback_.callback()));
812 ASSERT_EQ(std::string(kMsg3, kLen3), std::string(buf->data(), kLen3)); 812 ASSERT_EQ(std::string(kMsg3, kLen3), std::string(buf->data(), kLen3));
813 ASSERT_TRUE(sock_->IsConnected()); 813 ASSERT_TRUE(sock_->IsConnected());
814 } 814 }
815 815
816 TEST_F(SpdyProxyClientSocketTest, ReadAuthResponseBody) { 816 TEST_F(SpdyProxyClientSocketTest, ReadAuthResponseBody) {
817 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 817 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
818 MockWrite writes[] = { 818 MockWrite writes[] = {
819 CreateMockWrite(*conn, 0, false), 819 CreateMockWrite(*conn, 0, SYNCHRONOUS),
820 }; 820 };
821 821
822 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectAuthReplyFrame()); 822 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectAuthReplyFrame());
823 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 823 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
824 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 824 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
825 MockRead reads[] = { 825 MockRead reads[] = {
826 CreateMockRead(*resp, 1, true), 826 CreateMockRead(*resp, 1, ASYNC),
827 CreateMockRead(*msg1, 2, true), 827 CreateMockRead(*msg1, 2, ASYNC),
828 CreateMockRead(*msg2, 3, true), 828 CreateMockRead(*msg2, 3, ASYNC),
829 MockRead(true, 0, 4), // EOF 829 MockRead(ASYNC, 0, 4), // EOF
830 }; 830 };
831 831
832 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 832 Initialize(reads, arraysize(reads), writes, arraysize(writes));
833 833
834 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED); 834 AssertConnectFails(ERR_TUNNEL_CONNECTION_FAILED);
835 835
836 Run(2); // SpdySession consumes the next two reads and sends then to 836 Run(2); // SpdySession consumes the next two reads and sends then to
837 // sock_ to be buffered. 837 // sock_ to be buffered.
838 AssertSyncReadEquals(kMsg1, kLen1); 838 AssertSyncReadEquals(kMsg1, kLen1);
839 AssertSyncReadEquals(kMsg2, kLen2); 839 AssertSyncReadEquals(kMsg2, kLen2);
840 } 840 }
841 841
842 TEST_F(SpdyProxyClientSocketTest, ReadErrorResponseBody) { 842 TEST_F(SpdyProxyClientSocketTest, ReadErrorResponseBody) {
843 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 843 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
844 MockWrite writes[] = { 844 MockWrite writes[] = {
845 CreateMockWrite(*conn, 0, false), 845 CreateMockWrite(*conn, 0, SYNCHRONOUS),
846 }; 846 };
847 847
848 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectErrorReplyFrame()); 848 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectErrorReplyFrame());
849 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 849 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
850 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 850 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
851 MockRead reads[] = { 851 MockRead reads[] = {
852 CreateMockRead(*resp, 1, true), 852 CreateMockRead(*resp, 1, ASYNC),
853 CreateMockRead(*msg1, 2, true), 853 CreateMockRead(*msg1, 2, ASYNC),
854 CreateMockRead(*msg2, 3, true), 854 CreateMockRead(*msg2, 3, ASYNC),
855 MockRead(true, 0, 4), // EOF 855 MockRead(ASYNC, 0, 4), // EOF
856 }; 856 };
857 857
858 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 858 Initialize(reads, arraysize(reads), writes, arraysize(writes));
859 859
860 AssertConnectFails(ERR_HTTPS_PROXY_TUNNEL_RESPONSE); 860 AssertConnectFails(ERR_HTTPS_PROXY_TUNNEL_RESPONSE);
861 861
862 Run(2); // SpdySession consumes the next two reads and sends then to 862 Run(2); // SpdySession consumes the next two reads and sends then to
863 // sock_ to be buffered. 863 // sock_ to be buffered.
864 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, 864 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED,
865 sock_->Read(NULL, 1, CompletionCallback())); 865 sock_->Read(NULL, 1, CompletionCallback()));
866 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1 + kLen2)); 866 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1 + kLen2));
867 scoped_ptr<HttpStream> stream(sock_->CreateConnectResponseStream()); 867 scoped_ptr<HttpStream> stream(sock_->CreateConnectResponseStream());
868 stream->ReadResponseBody(buf, kLen1 + kLen2, read_callback_.callback()); 868 stream->ReadResponseBody(buf, kLen1 + kLen2, read_callback_.callback());
869 } 869 }
870 870
871 // ----------- Reads and Writes 871 // ----------- Reads and Writes
872 872
873 TEST_F(SpdyProxyClientSocketTest, AsyncReadAroundWrite) { 873 TEST_F(SpdyProxyClientSocketTest, AsyncReadAroundWrite) {
874 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 874 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
875 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 875 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
876 MockWrite writes[] = { 876 MockWrite writes[] = {
877 CreateMockWrite(*conn, 0, false), 877 CreateMockWrite(*conn, 0, SYNCHRONOUS),
878 CreateMockWrite(*msg2, 3, false), 878 CreateMockWrite(*msg2, 3, SYNCHRONOUS),
879 }; 879 };
880 880
881 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 881 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
882 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 882 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
883 scoped_ptr<spdy::SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3)); 883 scoped_ptr<spdy::SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3));
884 MockRead reads[] = { 884 MockRead reads[] = {
885 CreateMockRead(*resp, 1, true), 885 CreateMockRead(*resp, 1, ASYNC),
886 CreateMockRead(*msg1, 2, true), // sync read 886 CreateMockRead(*msg1, 2, ASYNC), // sync read
887 CreateMockRead(*msg3, 4, true), // async read 887 CreateMockRead(*msg3, 4, ASYNC), // async read
888 MockRead(true, 0, 5), // EOF 888 MockRead(ASYNC, 0, 5), // EOF
889 }; 889 };
890 890
891 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 891 Initialize(reads, arraysize(reads), writes, arraysize(writes));
892 892
893 AssertConnectSucceeds(); 893 AssertConnectSucceeds();
894 894
895 Run(1); 895 Run(1);
896 AssertSyncReadEquals(kMsg1, kLen1); 896 AssertSyncReadEquals(kMsg1, kLen1);
897 897
898 AssertReadStarts(kMsg3, kLen3); 898 AssertReadStarts(kMsg3, kLen3);
899 // Read should block until after the write succeeds 899 // Read should block until after the write succeeds
900 900
901 AssertAsyncWriteSucceeds(kMsg2, kLen2); // Runs 1 step 901 AssertAsyncWriteSucceeds(kMsg2, kLen2); // Runs 1 step
902 902
903 ASSERT_FALSE(read_callback_.have_result()); 903 ASSERT_FALSE(read_callback_.have_result());
904 Run(1); 904 Run(1);
905 // Now the read will return 905 // Now the read will return
906 AssertReadReturns(kMsg3, kLen3); 906 AssertReadReturns(kMsg3, kLen3);
907 } 907 }
908 908
909 TEST_F(SpdyProxyClientSocketTest, AsyncWriteAroundReads) { 909 TEST_F(SpdyProxyClientSocketTest, AsyncWriteAroundReads) {
910 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 910 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
911 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2)); 911 scoped_ptr<spdy::SpdyFrame> msg2(ConstructBodyFrame(kMsg2, kLen2));
912 MockWrite writes[] = { 912 MockWrite writes[] = {
913 CreateMockWrite(*conn, 0, false), 913 CreateMockWrite(*conn, 0, SYNCHRONOUS),
914 CreateMockWrite(*msg2, 4, true), 914 CreateMockWrite(*msg2, 4, ASYNC),
915 }; 915 };
916 916
917 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 917 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
918 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 918 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
919 scoped_ptr<spdy::SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3)); 919 scoped_ptr<spdy::SpdyFrame> msg3(ConstructBodyFrame(kMsg3, kLen3));
920 MockRead reads[] = { 920 MockRead reads[] = {
921 CreateMockRead(*resp, 1, true), 921 CreateMockRead(*resp, 1, ASYNC),
922 CreateMockRead(*msg1, 2, true), 922 CreateMockRead(*msg1, 2, ASYNC),
923 CreateMockRead(*msg3, 3, true), 923 CreateMockRead(*msg3, 3, ASYNC),
924 MockRead(true, 0, 5), // EOF 924 MockRead(ASYNC, 0, 5), // EOF
925 }; 925 };
926 926
927 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 927 Initialize(reads, arraysize(reads), writes, arraysize(writes));
928 928
929 AssertConnectSucceeds(); 929 AssertConnectSucceeds();
930 930
931 Run(1); 931 Run(1);
932 AssertSyncReadEquals(kMsg1, kLen1); 932 AssertSyncReadEquals(kMsg1, kLen1);
933 // Write should block until the read completes 933 // Write should block until the read completes
934 AssertWriteReturns(kMsg2, kLen2, ERR_IO_PENDING); 934 AssertWriteReturns(kMsg2, kLen2, ERR_IO_PENDING);
935 935
936 AssertAsyncReadEquals(kMsg3, kLen3); 936 AssertAsyncReadEquals(kMsg3, kLen3);
937 937
938 ASSERT_FALSE(write_callback_.have_result()); 938 ASSERT_FALSE(write_callback_.have_result());
939 939
940 // Now the write will complete 940 // Now the write will complete
941 Run(1); 941 Run(1);
942 AssertWriteLength(kLen2); 942 AssertWriteLength(kLen2);
943 } 943 }
944 944
945 // ----------- Reading/Writing on Closed socket 945 // ----------- Reading/Writing on Closed socket
946 946
947 // Reading from an already closed socket should return 0 947 // Reading from an already closed socket should return 0
948 TEST_F(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsZero) { 948 TEST_F(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsZero) {
949 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 949 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
950 MockWrite writes[] = { 950 MockWrite writes[] = {
951 CreateMockWrite(*conn, 0, false), 951 CreateMockWrite(*conn, 0, SYNCHRONOUS),
952 }; 952 };
953 953
954 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 954 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
955 MockRead reads[] = { 955 MockRead reads[] = {
956 CreateMockRead(*resp, 1, true), 956 CreateMockRead(*resp, 1, ASYNC),
957 MockRead(true, 0, 2), // EOF 957 MockRead(ASYNC, 0, 2), // EOF
958 }; 958 };
959 959
960 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 960 Initialize(reads, arraysize(reads), writes, arraysize(writes));
961 961
962 AssertConnectSucceeds(); 962 AssertConnectSucceeds();
963 963
964 Run(1); 964 Run(1);
965 965
966 ASSERT_FALSE(sock_->IsConnected()); 966 ASSERT_FALSE(sock_->IsConnected());
967 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback())); 967 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
968 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback())); 968 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
969 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback())); 969 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
970 ASSERT_FALSE(sock_->IsConnectedAndIdle()); 970 ASSERT_FALSE(sock_->IsConnectedAndIdle());
971 } 971 }
972 972
973 // Read pending when socket is closed should return 0 973 // Read pending when socket is closed should return 0
974 TEST_F(SpdyProxyClientSocketTest, PendingReadOnCloseReturnsZero) { 974 TEST_F(SpdyProxyClientSocketTest, PendingReadOnCloseReturnsZero) {
975 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 975 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
976 MockWrite writes[] = { 976 MockWrite writes[] = {
977 CreateMockWrite(*conn, 0, false), 977 CreateMockWrite(*conn, 0, SYNCHRONOUS),
978 }; 978 };
979 979
980 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 980 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
981 MockRead reads[] = { 981 MockRead reads[] = {
982 CreateMockRead(*resp, 1, true), 982 CreateMockRead(*resp, 1, ASYNC),
983 MockRead(true, 0, 2), // EOF 983 MockRead(ASYNC, 0, 2), // EOF
984 }; 984 };
985 985
986 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 986 Initialize(reads, arraysize(reads), writes, arraysize(writes));
987 987
988 AssertConnectSucceeds(); 988 AssertConnectSucceeds();
989 989
990 AssertReadStarts(kMsg1, kLen1); 990 AssertReadStarts(kMsg1, kLen1);
991 991
992 Run(1); 992 Run(1);
993 993
994 ASSERT_EQ(0, read_callback_.WaitForResult()); 994 ASSERT_EQ(0, read_callback_.WaitForResult());
995 } 995 }
996 996
997 // Reading from a disconnected socket is an error 997 // Reading from a disconnected socket is an error
998 TEST_F(SpdyProxyClientSocketTest, ReadOnDisconnectSocketReturnsNotConnected) { 998 TEST_F(SpdyProxyClientSocketTest, ReadOnDisconnectSocketReturnsNotConnected) {
999 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 999 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1000 MockWrite writes[] = { 1000 MockWrite writes[] = {
1001 CreateMockWrite(*conn, 0, false), 1001 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1002 }; 1002 };
1003 1003
1004 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1004 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1005 MockRead reads[] = { 1005 MockRead reads[] = {
1006 CreateMockRead(*resp, 1, true), 1006 CreateMockRead(*resp, 1, ASYNC),
1007 MockRead(true, 0, 2), // EOF 1007 MockRead(ASYNC, 0, 2), // EOF
1008 }; 1008 };
1009 1009
1010 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1010 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1011 1011
1012 AssertConnectSucceeds(); 1012 AssertConnectSucceeds();
1013 1013
1014 sock_->Disconnect(); 1014 sock_->Disconnect();
1015 1015
1016 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED, 1016 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED,
1017 sock_->Read(NULL, 1, CompletionCallback())); 1017 sock_->Read(NULL, 1, CompletionCallback()));
1018 } 1018 }
1019 1019
1020 // Reading buffered data from an already closed socket should return 1020 // Reading buffered data from an already closed socket should return
1021 // buffered data, then 0. 1021 // buffered data, then 0.
1022 TEST_F(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsBufferedData) { 1022 TEST_F(SpdyProxyClientSocketTest, ReadOnClosedSocketReturnsBufferedData) {
1023 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1023 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1024 MockWrite writes[] = { 1024 MockWrite writes[] = {
1025 CreateMockWrite(*conn, 0, false), 1025 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1026 }; 1026 };
1027 1027
1028 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1028 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1029 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1029 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1030 MockRead reads[] = { 1030 MockRead reads[] = {
1031 CreateMockRead(*resp, 1, true), 1031 CreateMockRead(*resp, 1, ASYNC),
1032 CreateMockRead(*msg1, 2, true), 1032 CreateMockRead(*msg1, 2, ASYNC),
1033 MockRead(true, 0, 3), // EOF 1033 MockRead(ASYNC, 0, 3), // EOF
1034 }; 1034 };
1035 1035
1036 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1036 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1037 1037
1038 AssertConnectSucceeds(); 1038 AssertConnectSucceeds();
1039 1039
1040 Run(2); 1040 Run(2);
1041 1041
1042 ASSERT_FALSE(sock_->IsConnected()); 1042 ASSERT_FALSE(sock_->IsConnected());
1043 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1)); 1043 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1));
1044 ASSERT_EQ(kLen1, sock_->Read(buf, kLen1, CompletionCallback())); 1044 ASSERT_EQ(kLen1, sock_->Read(buf, kLen1, CompletionCallback()));
1045 ASSERT_EQ(std::string(kMsg1, kLen1), std::string(buf->data(), kLen1)); 1045 ASSERT_EQ(std::string(kMsg1, kLen1), std::string(buf->data(), kLen1));
1046 1046
1047 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback())); 1047 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
1048 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback())); 1048 ASSERT_EQ(0, sock_->Read(NULL, 1, CompletionCallback()));
1049 sock_->Disconnect(); 1049 sock_->Disconnect();
1050 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED, 1050 ASSERT_EQ(ERR_SOCKET_NOT_CONNECTED,
1051 sock_->Read(NULL, 1, CompletionCallback())); 1051 sock_->Read(NULL, 1, CompletionCallback()));
1052 } 1052 }
1053 1053
1054 // Calling Write() on a closed socket is an error 1054 // Calling Write() on a closed socket is an error
1055 TEST_F(SpdyProxyClientSocketTest, WriteOnClosedStream) { 1055 TEST_F(SpdyProxyClientSocketTest, WriteOnClosedStream) {
1056 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1056 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1057 MockWrite writes[] = { 1057 MockWrite writes[] = {
1058 CreateMockWrite(*conn, 0, false), 1058 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1059 }; 1059 };
1060 1060
1061 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1061 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1062 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1062 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1063 MockRead reads[] = { 1063 MockRead reads[] = {
1064 CreateMockRead(*resp, 1, true), 1064 CreateMockRead(*resp, 1, ASYNC),
1065 MockRead(true, 0, 2), // EOF 1065 MockRead(ASYNC, 0, 2), // EOF
1066 }; 1066 };
1067 1067
1068 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1068 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1069 1069
1070 AssertConnectSucceeds(); 1070 AssertConnectSucceeds();
1071 1071
1072 Run(1); // Read EOF which will close the stream 1072 Run(1); // Read EOF which will close the stream
1073 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1073 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1074 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, 1074 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED,
1075 sock_->Write(buf, buf->size(), CompletionCallback())); 1075 sock_->Write(buf, buf->size(), CompletionCallback()));
1076 } 1076 }
1077 1077
1078 // Calling Write() on a disconnected socket is an error 1078 // Calling Write() on a disconnected socket is an error
1079 TEST_F(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) { 1079 TEST_F(SpdyProxyClientSocketTest, WriteOnDisconnectedSocket) {
1080 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1080 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1081 MockWrite writes[] = { 1081 MockWrite writes[] = {
1082 CreateMockWrite(*conn, 0, false), 1082 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1083 }; 1083 };
1084 1084
1085 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1085 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1086 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1)); 1086 scoped_ptr<spdy::SpdyFrame> msg1(ConstructBodyFrame(kMsg1, kLen1));
1087 MockRead reads[] = { 1087 MockRead reads[] = {
1088 CreateMockRead(*resp, 1, true), 1088 CreateMockRead(*resp, 1, ASYNC),
1089 MockRead(true, 0, 2), // EOF 1089 MockRead(ASYNC, 0, 2), // EOF
1090 }; 1090 };
1091 1091
1092 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1092 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1093 1093
1094 AssertConnectSucceeds(); 1094 AssertConnectSucceeds();
1095 1095
1096 sock_->Disconnect(); 1096 sock_->Disconnect();
1097 1097
1098 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1098 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1099 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED, 1099 EXPECT_EQ(ERR_SOCKET_NOT_CONNECTED,
1100 sock_->Write(buf, buf->size(), CompletionCallback())); 1100 sock_->Write(buf, buf->size(), CompletionCallback()));
1101 } 1101 }
1102 1102
1103 // If the socket is closed with a pending Write(), the callback 1103 // If the socket is closed with a pending Write(), the callback
1104 // should be called with ERR_CONNECTION_CLOSED. 1104 // should be called with ERR_CONNECTION_CLOSED.
1105 TEST_F(SpdyProxyClientSocketTest, WritePendingOnClose) { 1105 TEST_F(SpdyProxyClientSocketTest, WritePendingOnClose) {
1106 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1106 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1107 MockWrite writes[] = { 1107 MockWrite writes[] = {
1108 CreateMockWrite(*conn, 0, false), 1108 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1109 MockWrite(true, ERR_IO_PENDING, 2), 1109 MockWrite(ASYNC, ERR_IO_PENDING, 2),
1110 }; 1110 };
1111 1111
1112 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1112 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1113 MockRead reads[] = { 1113 MockRead reads[] = {
1114 CreateMockRead(*resp, 1, true), 1114 CreateMockRead(*resp, 1, ASYNC),
1115 MockRead(true, 0, 3), // EOF 1115 MockRead(ASYNC, 0, 3), // EOF
1116 }; 1116 };
1117 1117
1118 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1118 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1119 1119
1120 AssertConnectSucceeds(); 1120 AssertConnectSucceeds();
1121 1121
1122 EXPECT_TRUE(sock_->IsConnected()); 1122 EXPECT_TRUE(sock_->IsConnected());
1123 1123
1124 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1124 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1125 EXPECT_EQ(ERR_IO_PENDING, 1125 EXPECT_EQ(ERR_IO_PENDING,
1126 sock_->Write(buf, buf->size(), write_callback_.callback())); 1126 sock_->Write(buf, buf->size(), write_callback_.callback()));
1127 1127
1128 Run(1); 1128 Run(1);
1129 1129
1130 EXPECT_EQ(ERR_CONNECTION_CLOSED, write_callback_.WaitForResult()); 1130 EXPECT_EQ(ERR_CONNECTION_CLOSED, write_callback_.WaitForResult());
1131 } 1131 }
1132 1132
1133 // If the socket is Disconnected with a pending Write(), the callback 1133 // If the socket is Disconnected with a pending Write(), the callback
1134 // should not be called. 1134 // should not be called.
1135 TEST_F(SpdyProxyClientSocketTest, DisconnectWithWritePending) { 1135 TEST_F(SpdyProxyClientSocketTest, DisconnectWithWritePending) {
1136 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1136 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1137 MockWrite writes[] = { 1137 MockWrite writes[] = {
1138 CreateMockWrite(*conn, 0, false), 1138 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1139 MockWrite(false, 0, 2), // EOF 1139 MockWrite(SYNCHRONOUS, 0, 2), // EOF
1140 }; 1140 };
1141 1141
1142 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1142 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1143 MockRead reads[] = { 1143 MockRead reads[] = {
1144 CreateMockRead(*resp, 1, true), 1144 CreateMockRead(*resp, 1, ASYNC),
1145 MockRead(true, 0, 3), // EOF 1145 MockRead(ASYNC, 0, 3), // EOF
1146 }; 1146 };
1147 1147
1148 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1148 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1149 1149
1150 AssertConnectSucceeds(); 1150 AssertConnectSucceeds();
1151 1151
1152 EXPECT_TRUE(sock_->IsConnected()); 1152 EXPECT_TRUE(sock_->IsConnected());
1153 1153
1154 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1)); 1154 scoped_refptr<IOBufferWithSize> buf(CreateBuffer(kMsg1, kLen1));
1155 EXPECT_EQ(ERR_IO_PENDING, 1155 EXPECT_EQ(ERR_IO_PENDING,
1156 sock_->Write(buf, buf->size(), write_callback_.callback())); 1156 sock_->Write(buf, buf->size(), write_callback_.callback()));
1157 1157
1158 sock_->Disconnect(); 1158 sock_->Disconnect();
1159 1159
1160 EXPECT_FALSE(sock_->IsConnected()); 1160 EXPECT_FALSE(sock_->IsConnected());
1161 EXPECT_FALSE(write_callback_.have_result()); 1161 EXPECT_FALSE(write_callback_.have_result());
1162 } 1162 }
1163 1163
1164 // If the socket is Disconnected with a pending Read(), the callback 1164 // If the socket is Disconnected with a pending Read(), the callback
1165 // should not be called. 1165 // should not be called.
1166 TEST_F(SpdyProxyClientSocketTest, DisconnectWithReadPending) { 1166 TEST_F(SpdyProxyClientSocketTest, DisconnectWithReadPending) {
1167 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1167 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1168 MockWrite writes[] = { 1168 MockWrite writes[] = {
1169 CreateMockWrite(*conn, 0, false), 1169 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1170 }; 1170 };
1171 1171
1172 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1172 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1173 MockRead reads[] = { 1173 MockRead reads[] = {
1174 CreateMockRead(*resp, 1, true), 1174 CreateMockRead(*resp, 1, ASYNC),
1175 MockRead(true, 0, 2), // EOF 1175 MockRead(ASYNC, 0, 2), // EOF
1176 }; 1176 };
1177 1177
1178 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1178 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1179 1179
1180 AssertConnectSucceeds(); 1180 AssertConnectSucceeds();
1181 1181
1182 EXPECT_TRUE(sock_->IsConnected()); 1182 EXPECT_TRUE(sock_->IsConnected());
1183 1183
1184 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1)); 1184 scoped_refptr<IOBuffer> buf(new IOBuffer(kLen1));
1185 ASSERT_EQ(ERR_IO_PENDING, 1185 ASSERT_EQ(ERR_IO_PENDING,
1186 sock_->Read(buf, kLen1, read_callback_.callback())); 1186 sock_->Read(buf, kLen1, read_callback_.callback()));
1187 1187
1188 sock_->Disconnect(); 1188 sock_->Disconnect();
1189 1189
1190 EXPECT_FALSE(sock_->IsConnected()); 1190 EXPECT_FALSE(sock_->IsConnected());
1191 EXPECT_FALSE(read_callback_.have_result()); 1191 EXPECT_FALSE(read_callback_.have_result());
1192 } 1192 }
1193 1193
1194 // If the socket is Reset when both a read and write are pending, 1194 // If the socket is Reset when both a read and write are pending,
1195 // both should be called back. 1195 // both should be called back.
1196 TEST_F(SpdyProxyClientSocketTest, RstWithReadAndWritePending) { 1196 TEST_F(SpdyProxyClientSocketTest, RstWithReadAndWritePending) {
1197 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1197 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1198 MockWrite writes[] = { 1198 MockWrite writes[] = {
1199 CreateMockWrite(*conn, 0, false), 1199 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1200 MockWrite(true, ERR_IO_PENDING, 2), 1200 MockWrite(ASYNC, ERR_IO_PENDING, 2),
1201 }; 1201 };
1202 1202
1203 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1203 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1204 scoped_ptr<spdy::SpdyFrame> rst(ConstructSpdyRstStream(1, spdy::CANCEL)); 1204 scoped_ptr<spdy::SpdyFrame> rst(ConstructSpdyRstStream(1, spdy::CANCEL));
1205 MockRead reads[] = { 1205 MockRead reads[] = {
1206 CreateMockRead(*resp, 1, true), 1206 CreateMockRead(*resp, 1, ASYNC),
1207 CreateMockRead(*rst, 3, true), 1207 CreateMockRead(*rst, 3, ASYNC),
1208 }; 1208 };
1209 1209
1210 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1210 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1211 1211
1212 AssertConnectSucceeds(); 1212 AssertConnectSucceeds();
1213 1213
1214 EXPECT_TRUE(sock_->IsConnected()); 1214 EXPECT_TRUE(sock_->IsConnected());
1215 1215
1216 scoped_refptr<IOBuffer> read_buf(new IOBuffer(kLen1)); 1216 scoped_refptr<IOBuffer> read_buf(new IOBuffer(kLen1));
1217 ASSERT_EQ(ERR_IO_PENDING, 1217 ASSERT_EQ(ERR_IO_PENDING,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1256 1256
1257 DISALLOW_COPY_AND_ASSIGN(DeleteSockCallback); 1257 DISALLOW_COPY_AND_ASSIGN(DeleteSockCallback);
1258 }; 1258 };
1259 1259
1260 // If the socket is Reset when both a read and write are pending, and the 1260 // If the socket is Reset when both a read and write are pending, and the
1261 // read callback causes the socket to be deleted, the write callback should 1261 // read callback causes the socket to be deleted, the write callback should
1262 // not be called. 1262 // not be called.
1263 TEST_F(SpdyProxyClientSocketTest, RstWithReadAndWritePendingDelete) { 1263 TEST_F(SpdyProxyClientSocketTest, RstWithReadAndWritePendingDelete) {
1264 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame()); 1264 scoped_ptr<spdy::SpdyFrame> conn(ConstructConnectRequestFrame());
1265 MockWrite writes[] = { 1265 MockWrite writes[] = {
1266 CreateMockWrite(*conn, 0, false), 1266 CreateMockWrite(*conn, 0, SYNCHRONOUS),
1267 MockWrite(true, ERR_IO_PENDING, 2), 1267 MockWrite(ASYNC, ERR_IO_PENDING, 2),
1268 }; 1268 };
1269 1269
1270 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame()); 1270 scoped_ptr<spdy::SpdyFrame> resp(ConstructConnectReplyFrame());
1271 scoped_ptr<spdy::SpdyFrame> rst(ConstructSpdyRstStream(1, spdy::CANCEL)); 1271 scoped_ptr<spdy::SpdyFrame> rst(ConstructSpdyRstStream(1, spdy::CANCEL));
1272 MockRead reads[] = { 1272 MockRead reads[] = {
1273 CreateMockRead(*resp, 1, true), 1273 CreateMockRead(*resp, 1, ASYNC),
1274 CreateMockRead(*rst, 3, true), 1274 CreateMockRead(*rst, 3, ASYNC),
1275 }; 1275 };
1276 1276
1277 Initialize(reads, arraysize(reads), writes, arraysize(writes)); 1277 Initialize(reads, arraysize(reads), writes, arraysize(writes));
1278 1278
1279 AssertConnectSucceeds(); 1279 AssertConnectSucceeds();
1280 1280
1281 EXPECT_TRUE(sock_->IsConnected()); 1281 EXPECT_TRUE(sock_->IsConnected());
1282 1282
1283 DeleteSockCallback read_callback(&sock_); 1283 DeleteSockCallback read_callback(&sock_);
1284 1284
1285 scoped_refptr<IOBuffer> read_buf(new IOBuffer(kLen1)); 1285 scoped_refptr<IOBuffer> read_buf(new IOBuffer(kLen1));
1286 ASSERT_EQ(ERR_IO_PENDING, 1286 ASSERT_EQ(ERR_IO_PENDING,
1287 sock_->Read(read_buf, kLen1, read_callback.callback())); 1287 sock_->Read(read_buf, kLen1, read_callback.callback()));
1288 1288
1289 scoped_refptr<IOBufferWithSize> write_buf(CreateBuffer(kMsg1, kLen1)); 1289 scoped_refptr<IOBufferWithSize> write_buf(CreateBuffer(kMsg1, kLen1));
1290 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(write_buf, write_buf->size(), 1290 EXPECT_EQ(ERR_IO_PENDING, sock_->Write(write_buf, write_buf->size(),
1291 write_callback_.callback())); 1291 write_callback_.callback()));
1292 1292
1293 Run(2); 1293 Run(2);
1294 1294
1295 EXPECT_FALSE(sock_.get()); 1295 EXPECT_FALSE(sock_.get());
1296 EXPECT_TRUE(read_callback.have_result()); 1296 EXPECT_TRUE(read_callback.have_result());
1297 EXPECT_FALSE(write_callback_.have_result()); 1297 EXPECT_FALSE(write_callback_.have_result());
1298 } 1298 }
1299 1299
1300 } // namespace net 1300 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_network_transaction_unittest.cc ('k') | net/spdy/spdy_session_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698