| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_connection.h" | 5 #include "net/quic/quic_connection.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
| (...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 QuicPacketCreatorPeer::SetIsServer( | 513 QuicPacketCreatorPeer::SetIsServer( |
| 514 QuicConnectionPeer::GetPacketCreator(this), is_server); | 514 QuicConnectionPeer::GetPacketCreator(this), is_server); |
| 515 QuicConnectionPeer::SetIsServer(this, is_server); | 515 QuicConnectionPeer::SetIsServer(this, is_server); |
| 516 } | 516 } |
| 517 | 517 |
| 518 TestConnectionHelper::TestAlarm* GetAckAlarm() { | 518 TestConnectionHelper::TestAlarm* GetAckAlarm() { |
| 519 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( | 519 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
| 520 QuicConnectionPeer::GetAckAlarm(this)); | 520 QuicConnectionPeer::GetAckAlarm(this)); |
| 521 } | 521 } |
| 522 | 522 |
| 523 TestConnectionHelper::TestAlarm* GetPingAlarm() { |
| 524 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
| 525 QuicConnectionPeer::GetPingAlarm(this)); |
| 526 } |
| 527 |
| 528 TestConnectionHelper::TestAlarm* GetResumeWritesAlarm() { |
| 529 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
| 530 QuicConnectionPeer::GetResumeWritesAlarm(this)); |
| 531 } |
| 532 |
| 523 TestConnectionHelper::TestAlarm* GetRetransmissionAlarm() { | 533 TestConnectionHelper::TestAlarm* GetRetransmissionAlarm() { |
| 524 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( | 534 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
| 525 QuicConnectionPeer::GetRetransmissionAlarm(this)); | 535 QuicConnectionPeer::GetRetransmissionAlarm(this)); |
| 526 } | 536 } |
| 527 | 537 |
| 528 TestConnectionHelper::TestAlarm* GetSendAlarm() { | 538 TestConnectionHelper::TestAlarm* GetSendAlarm() { |
| 529 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( | 539 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
| 530 QuicConnectionPeer::GetSendAlarm(this)); | 540 QuicConnectionPeer::GetSendAlarm(this)); |
| 531 } | 541 } |
| 532 | 542 |
| 533 TestConnectionHelper::TestAlarm* GetResumeWritesAlarm() { | |
| 534 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( | |
| 535 QuicConnectionPeer::GetResumeWritesAlarm(this)); | |
| 536 } | |
| 537 | |
| 538 TestConnectionHelper::TestAlarm* GetTimeoutAlarm() { | 543 TestConnectionHelper::TestAlarm* GetTimeoutAlarm() { |
| 539 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( | 544 return reinterpret_cast<TestConnectionHelper::TestAlarm*>( |
| 540 QuicConnectionPeer::GetTimeoutAlarm(this)); | 545 QuicConnectionPeer::GetTimeoutAlarm(this)); |
| 541 } | 546 } |
| 542 | 547 |
| 543 using QuicConnection::SelectMutualVersion; | 548 using QuicConnection::SelectMutualVersion; |
| 544 | 549 |
| 545 private: | 550 private: |
| 546 TestPacketWriter* writer_; | 551 TestPacketWriter* writer_; |
| 547 | 552 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 .Times(AnyNumber()); | 604 .Times(AnyNumber()); |
| 600 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( | 605 EXPECT_CALL(*send_algorithm_, RetransmissionDelay()).WillRepeatedly( |
| 601 Return(QuicTime::Delta::Zero())); | 606 Return(QuicTime::Delta::Zero())); |
| 602 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( | 607 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( |
| 603 Return(kMaxPacketSize)); | 608 Return(kMaxPacketSize)); |
| 604 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _)) | 609 ON_CALL(*send_algorithm_, OnPacketSent(_, _, _, _)) |
| 605 .WillByDefault(Return(true)); | 610 .WillByDefault(Return(true)); |
| 606 EXPECT_CALL(visitor_, HasPendingWrites()).Times(AnyNumber()); | 611 EXPECT_CALL(visitor_, HasPendingWrites()).Times(AnyNumber()); |
| 607 EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber()); | 612 EXPECT_CALL(visitor_, HasPendingHandshake()).Times(AnyNumber()); |
| 608 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber()); | 613 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber()); |
| 614 EXPECT_CALL(visitor_, HasOpenDataStreams()).WillRepeatedly(Return(false)); |
| 609 | 615 |
| 610 EXPECT_CALL(*loss_algorithm_, GetLossTimeout()) | 616 EXPECT_CALL(*loss_algorithm_, GetLossTimeout()) |
| 611 .WillRepeatedly(Return(QuicTime::Zero())); | 617 .WillRepeatedly(Return(QuicTime::Zero())); |
| 612 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) | 618 EXPECT_CALL(*loss_algorithm_, DetectLostPackets(_, _, _, _)) |
| 613 .WillRepeatedly(Return(SequenceNumberSet())); | 619 .WillRepeatedly(Return(SequenceNumberSet())); |
| 614 } | 620 } |
| 615 | 621 |
| 616 QuicVersion version() { | 622 QuicVersion version() { |
| 617 return GetParam(); | 623 return GetParam(); |
| 618 } | 624 } |
| (...skipping 2017 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2636 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); | 2642 EXPECT_EQ(default_timeout, connection_.GetTimeoutAlarm()->deadline()); |
| 2637 | 2643 |
| 2638 // Simulate the timeout alarm firing. | 2644 // Simulate the timeout alarm firing. |
| 2639 clock_.AdvanceTime( | 2645 clock_.AdvanceTime( |
| 2640 QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)); | 2646 QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)); |
| 2641 connection_.GetTimeoutAlarm()->Fire(); | 2647 connection_.GetTimeoutAlarm()->Fire(); |
| 2642 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 2648 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 2643 EXPECT_FALSE(connection_.connected()); | 2649 EXPECT_FALSE(connection_.connected()); |
| 2644 | 2650 |
| 2645 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); | 2651 EXPECT_FALSE(connection_.GetAckAlarm()->IsSet()); |
| 2652 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
| 2646 EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); | 2653 EXPECT_FALSE(connection_.GetResumeWritesAlarm()->IsSet()); |
| 2647 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); | 2654 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); |
| 2648 EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); | 2655 EXPECT_FALSE(connection_.GetSendAlarm()->IsSet()); |
| 2649 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); | 2656 EXPECT_FALSE(connection_.GetTimeoutAlarm()->IsSet()); |
| 2650 } | 2657 } |
| 2651 | 2658 |
| 2659 TEST_P(QuicConnectionTest, PingAfterSend) { |
| 2660 EXPECT_TRUE(connection_.connected()); |
| 2661 EXPECT_CALL(visitor_, HasOpenDataStreams()).WillRepeatedly(Return(true)); |
| 2662 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
| 2663 |
| 2664 // Advance to 5ms, and send a packet to the peer, which will set |
| 2665 // the ping alarm. |
| 2666 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
| 2667 EXPECT_FALSE(connection_.GetRetransmissionAlarm()->IsSet()); |
| 2668 SendStreamDataToPeer(1, "GET /", 0, kFin, NULL); |
| 2669 EXPECT_TRUE(connection_.GetPingAlarm()->IsSet()); |
| 2670 EXPECT_EQ(clock_.ApproximateNow().Add(QuicTime::Delta::FromSeconds(15)), |
| 2671 connection_.GetPingAlarm()->deadline()); |
| 2672 |
| 2673 // Now recevie and ACK of the previous packet, which will move the |
| 2674 // ping alarm forward. |
| 2675 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
| 2676 QuicAckFrame frame = InitAckFrame(1, 0); |
| 2677 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
| 2678 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 2679 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
| 2680 ProcessAckPacket(&frame); |
| 2681 EXPECT_TRUE(connection_.GetPingAlarm()->IsSet()); |
| 2682 EXPECT_EQ(clock_.ApproximateNow().Add(QuicTime::Delta::FromSeconds(15)), |
| 2683 connection_.GetPingAlarm()->deadline()); |
| 2684 |
| 2685 writer_->Reset(); |
| 2686 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(15)); |
| 2687 connection_.GetPingAlarm()->Fire(); |
| 2688 EXPECT_EQ(1u, writer_->frame_count()); |
| 2689 ASSERT_EQ(1u, writer_->stream_frames().size()); |
| 2690 EXPECT_EQ(kCryptoStreamId, writer_->stream_frames()[0].stream_id); |
| 2691 EXPECT_EQ(0u, writer_->stream_frames()[0].offset); |
| 2692 writer_->Reset(); |
| 2693 |
| 2694 EXPECT_CALL(visitor_, HasOpenDataStreams()).WillRepeatedly(Return(false)); |
| 2695 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
| 2696 SendAckPacketToPeer(); |
| 2697 |
| 2698 EXPECT_FALSE(connection_.GetPingAlarm()->IsSet()); |
| 2699 } |
| 2700 |
| 2652 TEST_P(QuicConnectionTest, TimeoutAfterSend) { | 2701 TEST_P(QuicConnectionTest, TimeoutAfterSend) { |
| 2653 EXPECT_TRUE(connection_.connected()); | 2702 EXPECT_TRUE(connection_.connected()); |
| 2654 | 2703 |
| 2655 QuicTime default_timeout = clock_.ApproximateNow().Add( | 2704 QuicTime default_timeout = clock_.ApproximateNow().Add( |
| 2656 QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)); | 2705 QuicTime::Delta::FromSeconds(kDefaultInitialTimeoutSecs)); |
| 2657 | 2706 |
| 2658 // When we send a packet, the timeout will change to 5000 + | 2707 // When we send a packet, the timeout will change to 5000 + |
| 2659 // kDefaultInitialTimeoutSecs. | 2708 // kDefaultInitialTimeoutSecs. |
| 2660 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); | 2709 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(5)); |
| 2661 | 2710 |
| (...skipping 1357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4019 TestConnection connection(connection_id_, IPEndPoint(), helper_.get(), | 4068 TestConnection connection(connection_id_, IPEndPoint(), helper_.get(), |
| 4020 writer_.get(), true, version(), | 4069 writer_.get(), true, version(), |
| 4021 kSmallerFlowControlWindow); | 4070 kSmallerFlowControlWindow); |
| 4022 EXPECT_EQ(kDefaultFlowControlSendWindow, | 4071 EXPECT_EQ(kDefaultFlowControlSendWindow, |
| 4023 connection.max_flow_control_receive_window_bytes()); | 4072 connection.max_flow_control_receive_window_bytes()); |
| 4024 } | 4073 } |
| 4025 | 4074 |
| 4026 } // namespace | 4075 } // namespace |
| 4027 } // namespace test | 4076 } // namespace test |
| 4028 } // namespace net | 4077 } // namespace net |
| OLD | NEW |