blob: a264b0d75c94234aa11201b4d9f7d7f546d91602 [file] [log] [blame]
// Copyright (c) 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/quic/core/quic_multipath_transmissions_map.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
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