1// Copyright (c) 2013 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.
4
5#include "base/logging.h"
6#include "net/quic/congestion_control/inter_arrival_receiver.h"
7#include "net/quic/test_tools/mock_clock.h"
8#include "testing/gtest/include/gtest/gtest.h"
9
10namespace net {
11namespace test {
12
13class InterArrivalReceiverTest : public ::testing::Test {
14 protected:
15  InterArrivalReceiver receiver_;
16  MockClock clock_;
17};
18
19TEST_F(InterArrivalReceiverTest, 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, false);
25
26  QuicCongestionFeedbackFrame feedback;
27  ASSERT_FALSE(receiver_.GenerateCongestionFeedback(&feedback));
28
29  clock_.AdvanceTime(received_delta);
30  receive_timestamp = clock_.ApproximateNow();
31  // Packet not received; but rather revived by FEC.
32  receiver_.RecordIncomingPacket(1, 2, receive_timestamp, true);
33  clock_.AdvanceTime(received_delta);
34  receive_timestamp = clock_.ApproximateNow();
35  receiver_.RecordIncomingPacket(1, 3, receive_timestamp, false);
36
37  ASSERT_TRUE(receiver_.GenerateCongestionFeedback(&feedback));
38
39  EXPECT_EQ(kInterArrival, feedback.type);
40  EXPECT_EQ(1, feedback.inter_arrival.accumulated_number_of_lost_packets);
41  EXPECT_EQ(3u, feedback.inter_arrival.received_packet_times.size());
42  TimeMap::iterator it = feedback.inter_arrival.received_packet_times.begin();
43  EXPECT_EQ(1u, it->first);
44  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(10), it->second.Subtract(start));
45  it = feedback.inter_arrival.received_packet_times.begin();
46  it++;
47  EXPECT_EQ(2u, it->first);
48  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(20), it->second.Subtract(start));
49  it++;
50  EXPECT_EQ(3u, it->first);
51  EXPECT_EQ(QuicTime::Delta::FromMilliseconds(30), it->second.Subtract(start));
52}
53
54}  // namespace test
55}  // namespace net
56