blob: fcae200772c4cbf4109e1415817db84cde48c455 [file] [log] [blame]
rjshadec86dbfa2015-11-12 20:16:251// Copyright (c) 2015 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 "net/quic/quic_multipath_transmissions_map.h"
6#include "testing/gtest/include/gtest/gtest.h"
7
8namespace net_quic {
9namespace test {
10namespace {
11
12TEST(QuicAcrossPathsTransmissionMapTest, OnPacketRetransmittedOnDifferentPath) {
13 QuicMultipathTransmissionsMap transmission_map;
14 // Packet0's original transmission sent on path 1 with packet number 1.
15 QuicPathIdPacketNumber packet0_0(1, 1);
16 // Packet0's retransmission sent on path 2 with packet number 1.
17 QuicPathIdPacketNumber packet0_1(2, 1);
18 // packet0's 2nd retransmission sent on path 3 with packet number 1.
19 QuicPathIdPacketNumber packet0_2(3, 1);
20
21 transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_0, packet0_1);
22 const QuicMultipathTransmissionsMap::MultipathTransmissionsList*
23 transmission_list1 =
24 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_0);
25 EXPECT_EQ(packet0_0, (*transmission_list1)[0]);
26 EXPECT_EQ(packet0_1, (*transmission_list1)[1]);
27
28 transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_1, packet0_2);
29 const QuicMultipathTransmissionsMap::MultipathTransmissionsList*
30 transmission_list2 =
31 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_0);
32 EXPECT_EQ(packet0_0, (*transmission_list2)[0]);
33 EXPECT_EQ(packet0_1, (*transmission_list2)[1]);
34 EXPECT_EQ(packet0_2, (*transmission_list2)[2]);
35 // Make sure there is no memory leakage.
36}
37
38TEST(QuicAcrossPathsTransmissionMapTest, MaybeGetTransmissionsOnOtherPaths) {
39 QuicMultipathTransmissionsMap transmission_map;
40 // Packet0's original transmission sent on path 1 with packet number 1.
41 QuicPathIdPacketNumber packet0_0(1, 1);
42 // Packet0's retransmission sent on path 2 with packet number 1.
43 QuicPathIdPacketNumber packet0_1(2, 1);
44 // packet0's 2nd retransmission sent on path 3 with packet number 1.
45 QuicPathIdPacketNumber packet0_2(3, 1);
46
47 transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_0, packet0_1);
48 transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_1, packet0_2);
49
50 const QuicMultipathTransmissionsMap::MultipathTransmissionsList*
51 transmission_list1 =
52 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_0);
53 const QuicMultipathTransmissionsMap::MultipathTransmissionsList*
54 transmission_list2 =
55 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_1);
56 const QuicMultipathTransmissionsMap::MultipathTransmissionsList*
57 transmission_list3 =
58 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_2);
59 // Make sure all three pointers point to the same list.
60 EXPECT_EQ(transmission_list1, transmission_list2);
61 EXPECT_EQ(transmission_list2, transmission_list3);
62 EXPECT_EQ(packet0_0, (*transmission_list1)[0]);
63 EXPECT_EQ(packet0_1, (*transmission_list1)[1]);
64 EXPECT_EQ(packet0_2, (*transmission_list1)[2]);
65
66 // Packet1 which is not transmitted across path.
67 QuicPathIdPacketNumber packet1_0(1, 2);
68 EXPECT_EQ(nullptr,
69 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet1_0));
70 // Make sure there is no memory leakage.
71}
72
73TEST(QuicAcrossPathsTransmissionMapTest, OnPacketHandled) {
74 QuicMultipathTransmissionsMap transmission_map;
75
76 // Packet's original transmission sent on path 1 with packet number 1.
77 QuicPathIdPacketNumber packet0_0(1, 1);
78 // Packet's retransmission sent on path 2 with packet number 1.
79 QuicPathIdPacketNumber packet0_1(2, 1);
80 // packet's 2nd retransmission sent on path 3 with packet number 1.
81 QuicPathIdPacketNumber packet0_2(3, 1);
82 transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_0, packet0_1);
83 transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_1, packet0_2);
84
85 // Packet1's original transmission sent on path 1 with packet number 2.
86 QuicPathIdPacketNumber packet1_0(1, 2);
87 // Packet1's retransmission sent on path 2 with packet number 2.
88 QuicPathIdPacketNumber packet1_1(2, 2);
89 transmission_map.OnPacketRetransmittedOnDifferentPath(packet1_0, packet1_1);
90
91 transmission_map.OnPacketHandled(packet0_0);
92 EXPECT_EQ(nullptr,
93 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_0));
94 EXPECT_EQ(nullptr,
95 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_1));
96 EXPECT_EQ(nullptr,
97 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_2));
98 const QuicMultipathTransmissionsMap::MultipathTransmissionsList*
99 transmission_list =
100 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet1_0);
101 EXPECT_EQ(packet1_0, (*transmission_list)[0]);
102 EXPECT_EQ(packet1_1, (*transmission_list)[1]);
103 // Packet 1 is received on path 2.
104 transmission_map.OnPacketHandled(packet1_1);
105 EXPECT_EQ(nullptr,
106 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet1_0));
107 EXPECT_EQ(nullptr,
108 transmission_map.MaybeGetTransmissionsOnOtherPaths(packet1_1));
109 // Make sure there is no memory leakage.
110}
111
112} // namespace
113} // namespace test
114} // namespace net_quic