| 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_helper.h" | 5 #include "net/quic/quic_connection_helper.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 void SendAck() { | 47 void SendAck() { |
| 48 QuicConnectionPeer::SendAck(this); | 48 QuicConnectionPeer::SendAck(this); |
| 49 } | 49 } |
| 50 | 50 |
| 51 void SetScheduler(QuicSendScheduler* scheduler) { | 51 void SetScheduler(QuicSendScheduler* scheduler) { |
| 52 QuicConnectionPeer::SetScheduler(this, scheduler); | 52 QuicConnectionPeer::SetScheduler(this, scheduler); |
| 53 } | 53 } |
| 54 | 54 |
| 55 bool SendPacket(QuicPacketSequenceNumber sequence_number, | 55 bool SendPacket(QuicPacketSequenceNumber sequence_number, |
| 56 QuicPacket* packet, | 56 QuicPacket* packet, |
| 57 bool resend, | 57 bool should_resend, |
| 58 bool force) { | 58 bool force, |
| 59 return QuicConnection::SendPacket(sequence_number, packet, resend, force); | 59 bool is_retransmit) { |
| 60 return QuicConnection::SendPacket( |
| 61 sequence_number, packet, should_resend, force, is_retransmit); |
| 60 } | 62 } |
| 61 }; | 63 }; |
| 62 | 64 |
| 63 class TestConnectionHelper : public QuicConnectionHelper { | 65 class TestConnectionHelper : public QuicConnectionHelper { |
| 64 public: | 66 public: |
| 65 TestConnectionHelper(base::TaskRunner* runner, | 67 TestConnectionHelper(base::TaskRunner* runner, |
| 66 QuicClock* clock, | 68 QuicClock* clock, |
| 67 MockUDPClientSocket* socket) | 69 MockUDPClientSocket* socket) |
| 68 : QuicConnectionHelper(runner, clock, socket) { | 70 : QuicConnectionHelper(runner, clock, socket) { |
| 69 } | 71 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 frame1_(1, false, 0, data1) { | 106 frame1_(1, false, 0, data1) { |
| 105 connection_.set_visitor(&visitor_); | 107 connection_.set_visitor(&visitor_); |
| 106 connection_.SetScheduler(scheduler_); | 108 connection_.SetScheduler(scheduler_); |
| 107 } | 109 } |
| 108 | 110 |
| 109 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number, | 111 QuicPacket* ConstructDataPacket(QuicPacketSequenceNumber number, |
| 110 QuicFecGroupNumber fec_group) { | 112 QuicFecGroupNumber fec_group) { |
| 111 header_.guid = guid_; | 113 header_.guid = guid_; |
| 112 header_.packet_sequence_number = number; | 114 header_.packet_sequence_number = number; |
| 113 header_.transmission_time = 0; | 115 header_.transmission_time = 0; |
| 114 header_.retransmission_count = 0; | |
| 115 header_.flags = PACKET_FLAGS_NONE; | 116 header_.flags = PACKET_FLAGS_NONE; |
| 116 header_.fec_group = fec_group; | 117 header_.fec_group = fec_group; |
| 117 | 118 |
| 118 QuicFrames frames; | 119 QuicFrames frames; |
| 119 QuicFrame frame(&frame1_); | 120 QuicFrame frame(&frame1_); |
| 120 frames.push_back(frame); | 121 frames.push_back(frame); |
| 121 QuicPacket* packet; | 122 QuicPacket* packet; |
| 122 framer_.ConstructFragementDataPacket(header_, frames, &packet); | 123 framer_.ConstructFrameDataPacket(header_, frames, &packet); |
| 123 return packet; | 124 return packet; |
| 124 } | 125 } |
| 125 | 126 |
| 126 QuicGuid guid_; | 127 QuicGuid guid_; |
| 127 QuicFramer framer_; | 128 QuicFramer framer_; |
| 128 QuicPacketCreator creator_; | 129 QuicPacketCreator creator_; |
| 129 QuicPacketHeader header_; | 130 QuicPacketHeader header_; |
| 130 | 131 |
| 131 BoundNetLog net_log_; | 132 BoundNetLog net_log_; |
| 132 StaticSocketDataProvider empty_data_; | 133 StaticSocketDataProvider empty_data_; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 158 helper_->SetSendAlarm(0); | 159 helper_->SetSendAlarm(0); |
| 159 helper_->UnregisterSendAlarmIfRegistered() ; | 160 helper_->UnregisterSendAlarmIfRegistered() ; |
| 160 EXPECT_FALSE(helper_->IsSendAlarmSet()); | 161 EXPECT_FALSE(helper_->IsSendAlarmSet()); |
| 161 } | 162 } |
| 162 | 163 |
| 163 TEST_F(QuicConnectionHelperTest, TestResend) { | 164 TEST_F(QuicConnectionHelperTest, TestResend) { |
| 164 //FLAGS_fake_packet_loss_percentage = 100; | 165 //FLAGS_fake_packet_loss_percentage = 100; |
| 165 const uint64 kDefaultResendTimeMs = 500; | 166 const uint64 kDefaultResendTimeMs = 500; |
| 166 | 167 |
| 167 connection_.SendStreamData(1, "foo", 0, false, NULL); | 168 connection_.SendStreamData(1, "foo", 0, false, NULL); |
| 168 EXPECT_EQ(0u, helper_->header()->retransmission_count); | |
| 169 EXPECT_EQ(0u, helper_->header()->transmission_time); | 169 EXPECT_EQ(0u, helper_->header()->transmission_time); |
| 170 | 170 |
| 171 runner_->RunNextTask(); | 171 runner_->RunNextTask(); |
| 172 | 172 EXPECT_EQ(2u, helper_->header()->packet_sequence_number); |
| 173 EXPECT_EQ(1u, helper_->header()->retransmission_count); | |
| 174 EXPECT_EQ(kDefaultResendTimeMs * 1000, | 173 EXPECT_EQ(kDefaultResendTimeMs * 1000, |
| 175 helper_->header()->transmission_time); | 174 helper_->header()->transmission_time); |
| 176 } | 175 } |
| 177 | 176 |
| 178 TEST_F(QuicConnectionHelperTest, InitialTimeout) { | 177 TEST_F(QuicConnectionHelperTest, InitialTimeout) { |
| 179 // Verify that a single task was posted. | 178 // Verify that a single task was posted. |
| 180 EXPECT_EQ(1u, runner_->tasks()->size()); | 179 EXPECT_EQ(1u, runner_->tasks()->size()); |
| 181 EXPECT_EQ(base::TimeDelta::FromMicroseconds(kDefaultTimeout), | 180 EXPECT_EQ(base::TimeDelta::FromMicroseconds(kDefaultTimeout), |
| 182 runner_->GetTask(0).delta); | 181 runner_->GetTask(0).delta); |
| 183 | 182 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 210 EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, false)); | 209 EXPECT_CALL(visitor_, ConnectionClose(QUIC_CONNECTION_TIMED_OUT, false)); |
| 211 runner_->RunNextTask(); | 210 runner_->RunNextTask(); |
| 212 EXPECT_EQ(kDefaultTimeout + 5000, clock_.NowInUsec()); | 211 EXPECT_EQ(kDefaultTimeout + 5000, clock_.NowInUsec()); |
| 213 EXPECT_FALSE(connection_.connected()); | 212 EXPECT_FALSE(connection_.connected()); |
| 214 } | 213 } |
| 215 | 214 |
| 216 TEST_F(QuicConnectionHelperTest, SendSchedulerDelayThenSend) { | 215 TEST_F(QuicConnectionHelperTest, SendSchedulerDelayThenSend) { |
| 217 // Test that if we send a packet with a delay, it ends up queued. | 216 // Test that if we send a packet with a delay, it ends up queued. |
| 218 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); | 217 scoped_ptr<QuicPacket> packet(ConstructDataPacket(1, 0)); |
| 219 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(1)); | 218 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(1)); |
| 220 bool resend = true; | 219 |
| 220 bool should_resend = true; |
| 221 bool force = false; | 221 bool force = false; |
| 222 connection_.SendPacket(1, packet.get(), resend, force); | 222 bool is_retransmit = false; |
| 223 connection_.SendPacket(1, packet.get(), should_resend, force, is_retransmit); |
| 223 EXPECT_EQ(1u, connection_.NumQueuedPackets()); | 224 EXPECT_EQ(1u, connection_.NumQueuedPackets()); |
| 224 | 225 |
| 225 // Advance the clock to fire the alarm, and configure the scheduler | 226 // Advance the clock to fire the alarm, and configure the scheduler |
| 226 // to permit the packet to be sent. | 227 // to permit the packet to be sent. |
| 227 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(0)); | 228 EXPECT_CALL(*scheduler_, TimeUntilSend(true)).WillOnce(testing::Return(0)); |
| 228 runner_->RunNextTask(); | 229 runner_->RunNextTask(); |
| 229 EXPECT_EQ(0u, connection_.NumQueuedPackets()); | 230 EXPECT_EQ(0u, connection_.NumQueuedPackets()); |
| 230 } | 231 } |
| 231 | 232 |
| 232 } // namespace test | 233 } // namespace test |
| 233 | 234 |
| 234 } // namespace net | 235 } // namespace net |
| OLD | NEW |