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

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

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

Powered by Google App Engine
This is Rietveld 408576698