Index: net/quic/quic_multipath_transmissions_map_test.cc |
diff --git a/net/quic/quic_multipath_transmissions_map_test.cc b/net/quic/quic_multipath_transmissions_map_test.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..679be4a50b47ed8f1f8af83a8531339d1fd7dbee |
--- /dev/null |
+++ b/net/quic/quic_multipath_transmissions_map_test.cc |
@@ -0,0 +1,110 @@ |
+#include "net/quic/quic_multipath_transmissions_map.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace net_quic { |
+namespace test { |
+namespace { |
+ |
+TEST(QuicAcrossPathsTransmissionMapTest, OnPacketRetransmittedOnDifferentPath) { |
+ QuicMultipathTransmissionsMap transmission_map; |
+ // Packet0's original transmission sent on path 1 with packet number 1. |
+ QuicPathIdPacketNumber packet0_0(1, 1); |
+ // Packet0's retransmission sent on path 2 with packet number 1. |
+ QuicPathIdPacketNumber packet0_1(2, 1); |
+ // packet0's 2nd retransmission sent on path 3 with packet number 1. |
+ QuicPathIdPacketNumber packet0_2(3, 1); |
+ |
+ transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_0, packet0_1); |
+ const QuicMultipathTransmissionsMap::MultipathTransmissionsList* |
+ transmission_list1 = |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_0); |
+ EXPECT_EQ(packet0_0, (*transmission_list1)[0]); |
+ EXPECT_EQ(packet0_1, (*transmission_list1)[1]); |
+ |
+ transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_1, packet0_2); |
+ const QuicMultipathTransmissionsMap::MultipathTransmissionsList* |
+ transmission_list2 = |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_0); |
+ EXPECT_EQ(packet0_0, (*transmission_list2)[0]); |
+ EXPECT_EQ(packet0_1, (*transmission_list2)[1]); |
+ EXPECT_EQ(packet0_2, (*transmission_list2)[2]); |
+ // Make sure there is no memory leakage. |
+} |
+ |
+TEST(QuicAcrossPathsTransmissionMapTest, MaybeGetTransmissionsOnOtherPaths) { |
+ QuicMultipathTransmissionsMap transmission_map; |
+ // Packet0's original transmission sent on path 1 with packet number 1. |
+ QuicPathIdPacketNumber packet0_0(1, 1); |
+ // Packet0's retransmission sent on path 2 with packet number 1. |
+ QuicPathIdPacketNumber packet0_1(2, 1); |
+ // packet0's 2nd retransmission sent on path 3 with packet number 1. |
+ QuicPathIdPacketNumber packet0_2(3, 1); |
+ |
+ transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_0, packet0_1); |
+ transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_1, packet0_2); |
+ |
+ const QuicMultipathTransmissionsMap::MultipathTransmissionsList* |
+ transmission_list1 = |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_0); |
+ const QuicMultipathTransmissionsMap::MultipathTransmissionsList* |
+ transmission_list2 = |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_1); |
+ const QuicMultipathTransmissionsMap::MultipathTransmissionsList* |
+ transmission_list3 = |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_2); |
+ // Make sure all three pointers point to the same list. |
+ EXPECT_EQ(transmission_list1, transmission_list2); |
+ EXPECT_EQ(transmission_list2, transmission_list3); |
+ EXPECT_EQ(packet0_0, (*transmission_list1)[0]); |
+ EXPECT_EQ(packet0_1, (*transmission_list1)[1]); |
+ EXPECT_EQ(packet0_2, (*transmission_list1)[2]); |
+ |
+ // Packet1 which is not transmitted across path. |
+ QuicPathIdPacketNumber packet1_0(1, 2); |
+ EXPECT_EQ(nullptr, |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet1_0)); |
+ // Make sure there is no memory leakage. |
+} |
+ |
+TEST(QuicAcrossPathsTransmissionMapTest, OnPacketHandled) { |
+ QuicMultipathTransmissionsMap transmission_map; |
+ |
+ // Packet's original transmission sent on path 1 with packet number 1. |
+ QuicPathIdPacketNumber packet0_0(1, 1); |
+ // Packet's retransmission sent on path 2 with packet number 1. |
+ QuicPathIdPacketNumber packet0_1(2, 1); |
+ // packet's 2nd retransmission sent on path 3 with packet number 1. |
+ QuicPathIdPacketNumber packet0_2(3, 1); |
+ transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_0, packet0_1); |
+ transmission_map.OnPacketRetransmittedOnDifferentPath(packet0_1, packet0_2); |
+ |
+ // Packet1's original transmission sent on path 1 with packet number 2. |
+ QuicPathIdPacketNumber packet1_0(1, 2); |
+ // Packet1's retransmission sent on path 2 with packet number 2. |
+ QuicPathIdPacketNumber packet1_1(2, 2); |
+ transmission_map.OnPacketRetransmittedOnDifferentPath(packet1_0, packet1_1); |
+ |
+ transmission_map.OnPacketHandled(packet0_0); |
+ EXPECT_EQ(nullptr, |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_0)); |
+ EXPECT_EQ(nullptr, |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_1)); |
+ EXPECT_EQ(nullptr, |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet0_2)); |
+ const QuicMultipathTransmissionsMap::MultipathTransmissionsList* |
+ transmission_list = |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet1_0); |
+ EXPECT_EQ(packet1_0, (*transmission_list)[0]); |
+ EXPECT_EQ(packet1_1, (*transmission_list)[1]); |
+ // Packet 1 is received on path 2. |
+ transmission_map.OnPacketHandled(packet1_1); |
+ EXPECT_EQ(nullptr, |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet1_0)); |
+ EXPECT_EQ(nullptr, |
+ transmission_map.MaybeGetTransmissionsOnOtherPaths(packet1_1)); |
+ // Make sure there is no memory leakage. |
+} |
+ |
+} // namespace |
+} // namespace test |
+} // namespace net_quic |