1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/logging.h"
6 #include "net/quic/congestion_control/timestamp_receiver.h"
7 #include "net/quic/test_tools/mock_clock.h"
8 #include "testing/gtest/include/gtest/gtest.h"
13 class TimestampReceiverTest : public ::testing::Test {
15 TimestampReceiver receiver_;
19 TEST_F(TimestampReceiverTest, SimpleReceiver) {
20 QuicTime start = clock_.ApproximateNow();
21 QuicTime::Delta received_delta = QuicTime::Delta::FromMilliseconds(10);
22 clock_.AdvanceTime(received_delta);
23 QuicTime receive_timestamp = clock_.ApproximateNow();
24 receiver_.RecordIncomingPacket(1, 1, receive_timestamp);
26 QuicCongestionFeedbackFrame feedback;
27 // Do not generate a congestion feedback frame because it has only one packet.
28 ASSERT_FALSE(receiver_.GenerateCongestionFeedback(&feedback));
30 clock_.AdvanceTime(received_delta);
31 receive_timestamp = clock_.ApproximateNow();
32 // Packet not received; but rather revived by FEC.
33 receiver_.RecordIncomingPacket(1, 2, receive_timestamp);
34 clock_.AdvanceTime(received_delta);
35 receive_timestamp = clock_.ApproximateNow();
36 receiver_.RecordIncomingPacket(1, 3, receive_timestamp);
38 ASSERT_TRUE(receiver_.GenerateCongestionFeedback(&feedback));
40 EXPECT_EQ(kTimestamp, feedback.type);
41 EXPECT_EQ(3u, feedback.timestamp.received_packet_times.size());
42 TimeMap::iterator it = feedback.timestamp.received_packet_times.begin();
43 EXPECT_EQ(1u, it->first);
44 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), it->second.Subtract(start));
45 it = feedback.timestamp.received_packet_times.begin();
47 EXPECT_EQ(2u, it->first);
48 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(20), it->second.Subtract(start));
50 EXPECT_EQ(3u, it->first);
51 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(30), it->second.Subtract(start));