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

Side by Side Diff: net/quic/congestion_control/fix_rate_test.cc

Issue 12806002: Land Recent QUIC Changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor comment fix Created 7 years, 9 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
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 // Test for FixRate sender and receiver.
6
5 #include "base/logging.h" 7 #include "base/logging.h"
6 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
7 #include "net/quic/congestion_control/fix_rate_receiver.h" 9 #include "net/quic/congestion_control/fix_rate_receiver.h"
8 #include "net/quic/congestion_control/fix_rate_sender.h" 10 #include "net/quic/congestion_control/fix_rate_sender.h"
9 #include "net/quic/test_tools/mock_clock.h" 11 #include "net/quic/test_tools/mock_clock.h"
10 #include "net/quic/quic_protocol.h" 12 #include "net/quic/quic_protocol.h"
11 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
13 15
14 namespace net { 16 namespace net {
15 namespace test { 17 namespace test {
16 18
17 class FixRateReceiverPeer : public FixRateReceiver { 19 class FixRateReceiverPeer : public FixRateReceiver {
18 public: 20 public:
19 FixRateReceiverPeer() 21 FixRateReceiverPeer()
20 : FixRateReceiver() { 22 : FixRateReceiver() {
21 } 23 }
22 void SetBitrate(QuicBandwidth fix_rate) { 24 void SetBitrate(QuicBandwidth fix_rate) {
23 FixRateReceiver::configured_rate_ = fix_rate; 25 FixRateReceiver::configured_rate_ = fix_rate;
24 } 26 }
25 }; 27 };
26 28
27 const bool kHasRetransmittableData = true;
28 class FixRateTest : public ::testing::Test { 29 class FixRateTest : public ::testing::Test {
29 protected: 30 protected:
30 FixRateTest() 31 FixRateTest()
31 : rtt_(QuicTime::Delta::FromMilliseconds(30)), 32 : rtt_(QuicTime::Delta::FromMilliseconds(30)),
32 unused_bandwidth_(QuicBandwidth::Zero()), 33 unused_bandwidth_(QuicBandwidth::Zero()),
33 sender_(new FixRateSender(&clock_)), 34 sender_(new FixRateSender(&clock_)),
34 receiver_(new FixRateReceiverPeer()) { 35 receiver_(new FixRateReceiverPeer()) {
35 // Make sure clock does not start at 0. 36 // Make sure clock does not start at 0.
36 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); 37 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2));
37 } 38 }
(...skipping 15 matching lines...) Expand all
53 EXPECT_EQ(300000u, feedback.fix_rate.bitrate.ToBytesPerSecond()); 54 EXPECT_EQ(300000u, feedback.fix_rate.bitrate.ToBytesPerSecond());
54 } 55 }
55 56
56 TEST_F(FixRateTest, SenderAPI) { 57 TEST_F(FixRateTest, SenderAPI) {
57 QuicCongestionFeedbackFrame feedback; 58 QuicCongestionFeedbackFrame feedback;
58 feedback.type = kFixRate; 59 feedback.type = kFixRate;
59 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(300); 60 feedback.fix_rate.bitrate = QuicBandwidth::FromKBytesPerSecond(300);
60 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), 61 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(),
61 unused_bandwidth_, unused_packet_map_); 62 unused_bandwidth_, unused_packet_map_);
62 EXPECT_EQ(300000, sender_->BandwidthEstimate().ToBytesPerSecond()); 63 EXPECT_EQ(300000, sender_->BandwidthEstimate().ToBytesPerSecond());
63 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false).IsZero()); 64 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false, true).IsZero());
64 sender_->SentPacket(clock_.Now(), 1, kMaxPacketSize, false, 65 sender_->SentPacket(clock_.Now(), 1, kMaxPacketSize, false);
65 kHasRetransmittableData); 66 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false, true).IsZero());
66 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false).IsZero()); 67 sender_->SentPacket(clock_.Now(), 2, kMaxPacketSize, false);
67 sender_->SentPacket(clock_.Now(), 2, kMaxPacketSize, false, 68 sender_->SentPacket(clock_.Now(), 3, 600, false);
68 kHasRetransmittableData);
69 sender_->SentPacket(clock_.Now(), 3, 600, false,
70 kHasRetransmittableData);
71 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), 69 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10),
72 sender_->TimeUntilSend(clock_.Now(), false)); 70 sender_->TimeUntilSend(clock_.Now(), false, true));
73 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2)); 71 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(2));
74 EXPECT_EQ(QuicTime::Delta::Infinite(), 72 EXPECT_EQ(QuicTime::Delta::Infinite(),
75 sender_->TimeUntilSend(clock_.Now(), false)); 73 sender_->TimeUntilSend(clock_.Now(), false, true));
76 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8)); 74 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(8));
77 sender_->OnIncomingAck(1, kMaxPacketSize, rtt_); 75 sender_->OnIncomingAck(1, kMaxPacketSize, rtt_);
78 sender_->OnIncomingAck(2, kMaxPacketSize, rtt_); 76 sender_->OnIncomingAck(2, kMaxPacketSize, rtt_);
79 sender_->OnIncomingAck(3, 600, rtt_); 77 sender_->OnIncomingAck(3, 600, rtt_);
80 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false).IsZero()); 78 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false, true).IsZero());
81 } 79 }
82 80
83 TEST_F(FixRateTest, FixRatePacing) { 81 TEST_F(FixRateTest, FixRatePacing) {
84 const QuicByteCount packet_size = 1200; 82 const QuicByteCount packet_size = 1200;
85 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240); 83 const QuicBandwidth bitrate = QuicBandwidth::FromKBytesPerSecond(240);
86 const int64 num_packets = 200; 84 const int64 num_packets = 200;
87 QuicCongestionFeedbackFrame feedback; 85 QuicCongestionFeedbackFrame feedback;
88 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240)); 86 receiver_->SetBitrate(QuicBandwidth::FromKBytesPerSecond(240));
89 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback)); 87 ASSERT_TRUE(receiver_->GenerateCongestionFeedback(&feedback));
90 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(), 88 sender_->OnIncomingQuicCongestionFeedbackFrame(feedback, clock_.Now(),
91 unused_bandwidth_, unused_packet_map_); 89 unused_bandwidth_, unused_packet_map_);
92 QuicTime acc_advance_time(QuicTime::Zero()); 90 QuicTime acc_advance_time(QuicTime::Zero());
93 QuicPacketSequenceNumber sequence_number = 0; 91 QuicPacketSequenceNumber sequence_number = 0;
94 for (int i = 0; i < num_packets; i += 2) { 92 for (int i = 0; i < num_packets; i += 2) {
95 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false).IsZero()); 93 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false, true).IsZero());
96 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, false, 94 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, false);
97 kHasRetransmittableData); 95 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false, true).IsZero());
98 EXPECT_TRUE(sender_->TimeUntilSend(clock_.Now(), false).IsZero()); 96 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, false);
99 sender_->SentPacket(clock_.Now(), sequence_number++, packet_size, false, 97 QuicTime::Delta advance_time = sender_->TimeUntilSend(clock_.Now(), false,
100 kHasRetransmittableData); 98 true);
101 QuicTime::Delta advance_time = sender_->TimeUntilSend(clock_.Now(), false);
102 clock_.AdvanceTime(advance_time); 99 clock_.AdvanceTime(advance_time);
103 sender_->OnIncomingAck(sequence_number - 1, packet_size, rtt_); 100 sender_->OnIncomingAck(sequence_number - 1, packet_size, rtt_);
104 sender_->OnIncomingAck(sequence_number - 2, packet_size, rtt_); 101 sender_->OnIncomingAck(sequence_number - 2, packet_size, rtt_);
105 acc_advance_time = acc_advance_time.Add(advance_time); 102 acc_advance_time = acc_advance_time.Add(advance_time);
106 } 103 }
107 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(), 104 EXPECT_EQ(num_packets * packet_size * 1000000 / bitrate.ToBytesPerSecond(),
108 static_cast<uint64>(acc_advance_time.ToMicroseconds())); 105 static_cast<uint64>(acc_advance_time.ToMicroseconds()));
109 } 106 }
110 107
111 } // namespace test 108 } // namespace test
112 } // namespace net 109 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/fix_rate_sender.cc ('k') | net/quic/congestion_control/hybrid_slow_start.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698