| Index: webrtc/modules/rtp_rtcp/source/ulpfec_receiver_unittest.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc b/webrtc/modules/rtp_rtcp/source/ulpfec_receiver_unittest.cc
|
| similarity index 73%
|
| rename from webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc
|
| rename to webrtc/modules/rtp_rtcp/source/ulpfec_receiver_unittest.cc
|
| index 0c4b4861cf803b3929a5fe15e0f24fa001529c3d..89e91c4af7cf5404edf1c377186f316aa2acbf81 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/fec_receiver_unittest.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/ulpfec_receiver_unittest.cc
|
| @@ -13,8 +13,8 @@
|
| #include <list>
|
| #include <memory>
|
|
|
| -#include "webrtc/modules/rtp_rtcp/include/fec_receiver.h"
|
| #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h"
|
| +#include "webrtc/modules/rtp_rtcp/include/ulpfec_receiver.h"
|
| #include "webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h"
|
| #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
| #include "webrtc/modules/rtp_rtcp/source/fec_test_helper.h"
|
| @@ -38,11 +38,11 @@ constexpr int kFecPayloadType = 96;
|
| constexpr uint32_t kMediaSsrc = 835424;
|
| } // namespace
|
|
|
| -class ReceiverFecTest : public ::testing::Test {
|
| +class UlpfecReceiverTest : public ::testing::Test {
|
| protected:
|
| - ReceiverFecTest()
|
| + UlpfecReceiverTest()
|
| : fec_(ForwardErrorCorrection::CreateUlpfec()),
|
| - receiver_fec_(FecReceiver::Create(&rtp_data_callback_)),
|
| + receiver_fec_(UlpfecReceiver::Create(&rtp_data_callback_)),
|
| packet_generator_(kMediaSsrc) {}
|
|
|
| // Generates |num_fec_packets| FEC packets, given |media_packets|.
|
| @@ -77,11 +77,11 @@ class ReceiverFecTest : public ::testing::Test {
|
|
|
| MockRtpData rtp_data_callback_;
|
| std::unique_ptr<ForwardErrorCorrection> fec_;
|
| - std::unique_ptr<FecReceiver> receiver_fec_;
|
| + std::unique_ptr<UlpfecReceiver> receiver_fec_;
|
| UlpfecPacketGenerator packet_generator_;
|
| };
|
|
|
| -void ReceiverFecTest::EncodeFec(
|
| +void UlpfecReceiverTest::EncodeFec(
|
| const ForwardErrorCorrection::PacketList& media_packets,
|
| size_t num_fec_packets,
|
| std::list<ForwardErrorCorrection::Packet*>* fec_packets) {
|
| @@ -98,7 +98,7 @@ void ReceiverFecTest::EncodeFec(
|
| ASSERT_EQ(num_fec_packets, fec_packets->size());
|
| }
|
|
|
| -void ReceiverFecTest::PacketizeFrame(
|
| +void UlpfecReceiverTest::PacketizeFrame(
|
| size_t num_media_packets,
|
| size_t frame_offset,
|
| std::list<AugmentedPacket*>* augmented_packets,
|
| @@ -112,7 +112,7 @@ void ReceiverFecTest::PacketizeFrame(
|
| }
|
| }
|
|
|
| -void ReceiverFecTest::BuildAndAddRedMediaPacket(AugmentedPacket* packet) {
|
| +void UlpfecReceiverTest::BuildAndAddRedMediaPacket(AugmentedPacket* packet) {
|
| std::unique_ptr<AugmentedPacket> red_packet(
|
| packet_generator_.BuildMediaRedPacket(*packet));
|
| EXPECT_EQ(0, receiver_fec_->AddReceivedRedPacket(
|
| @@ -120,7 +120,7 @@ void ReceiverFecTest::BuildAndAddRedMediaPacket(AugmentedPacket* packet) {
|
| red_packet->length, kFecPayloadType));
|
| }
|
|
|
| -void ReceiverFecTest::BuildAndAddRedFecPacket(Packet* packet) {
|
| +void UlpfecReceiverTest::BuildAndAddRedFecPacket(Packet* packet) {
|
| std::unique_ptr<AugmentedPacket> red_packet(
|
| packet_generator_.BuildUlpfecRedPacket(*packet));
|
| EXPECT_EQ(0, receiver_fec_->AddReceivedRedPacket(
|
| @@ -128,7 +128,7 @@ void ReceiverFecTest::BuildAndAddRedFecPacket(Packet* packet) {
|
| red_packet->length, kFecPayloadType));
|
| }
|
|
|
| -void ReceiverFecTest::VerifyReconstructedMediaPacket(
|
| +void UlpfecReceiverTest::VerifyReconstructedMediaPacket(
|
| const AugmentedPacket& packet,
|
| size_t times) {
|
| // Verify that the content of the reconstructed packet is equal to the
|
| @@ -140,7 +140,7 @@ void ReceiverFecTest::VerifyReconstructedMediaPacket(
|
| .WillRepeatedly(Return(true));
|
| }
|
|
|
| -void ReceiverFecTest::InjectGarbagePacketLength(size_t fec_garbage_offset) {
|
| +void UlpfecReceiverTest::InjectGarbagePacketLength(size_t fec_garbage_offset) {
|
| EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| .WillRepeatedly(Return(true));
|
|
|
| @@ -165,22 +165,21 @@ void ReceiverFecTest::InjectGarbagePacketLength(size_t fec_garbage_offset) {
|
| EXPECT_EQ(0U, counter.num_recovered_packets);
|
| }
|
|
|
| -void ReceiverFecTest::SurvivesMaliciousPacket(const uint8_t* data,
|
| - size_t length,
|
| - uint8_t ulpfec_payload_type) {
|
| - webrtc::RTPHeader header;
|
| - std::unique_ptr<webrtc::RtpHeaderParser> parser(
|
| - webrtc::RtpHeaderParser::Create());
|
| +void UlpfecReceiverTest::SurvivesMaliciousPacket(const uint8_t* data,
|
| + size_t length,
|
| + uint8_t ulpfec_payload_type) {
|
| + RTPHeader header;
|
| + std::unique_ptr<RtpHeaderParser> parser(RtpHeaderParser::Create());
|
| ASSERT_TRUE(parser->Parse(data, length, &header));
|
|
|
| - webrtc::NullRtpData null_callback;
|
| - std::unique_ptr<webrtc::FecReceiver> receiver_fec(
|
| - webrtc::FecReceiver::Create(&null_callback));
|
| + NullRtpData null_callback;
|
| + std::unique_ptr<UlpfecReceiver> receiver_fec(
|
| + UlpfecReceiver::Create(&null_callback));
|
|
|
| receiver_fec->AddReceivedRedPacket(header, data, length, ulpfec_payload_type);
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, TwoMediaOneFec) {
|
| +TEST_F(UlpfecReceiverTest, TwoMediaOneFec) {
|
| constexpr size_t kNumFecPackets = 1u;
|
| std::list<AugmentedPacket*> augmented_media_packets;
|
| ForwardErrorCorrection::PacketList media_packets;
|
| @@ -206,18 +205,18 @@ TEST_F(ReceiverFecTest, TwoMediaOneFec) {
|
| EXPECT_EQ(1u, counter.num_recovered_packets);
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, InjectGarbageFecHeaderLengthRecovery) {
|
| +TEST_F(UlpfecReceiverTest, InjectGarbageFecHeaderLengthRecovery) {
|
| // Byte offset 8 is the 'length recovery' field of the FEC header.
|
| InjectGarbagePacketLength(8);
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, InjectGarbageFecLevelHeaderProtectionLength) {
|
| +TEST_F(UlpfecReceiverTest, InjectGarbageFecLevelHeaderProtectionLength) {
|
| // Byte offset 10 is the 'protection length' field in the first FEC level
|
| // header.
|
| InjectGarbagePacketLength(10);
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, TwoMediaTwoFec) {
|
| +TEST_F(UlpfecReceiverTest, TwoMediaTwoFec) {
|
| const size_t kNumFecPackets = 2;
|
| std::list<AugmentedPacket*> augmented_media_packets;
|
| ForwardErrorCorrection::PacketList media_packets;
|
| @@ -239,7 +238,7 @@ TEST_F(ReceiverFecTest, TwoMediaTwoFec) {
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, TwoFramesOneFec) {
|
| +TEST_F(UlpfecReceiverTest, TwoFramesOneFec) {
|
| const size_t kNumFecPackets = 1;
|
| std::list<AugmentedPacket*> augmented_media_packets;
|
| ForwardErrorCorrection::PacketList media_packets;
|
| @@ -260,7 +259,7 @@ TEST_F(ReceiverFecTest, TwoFramesOneFec) {
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, OneCompleteOneUnrecoverableFrame) {
|
| +TEST_F(UlpfecReceiverTest, OneCompleteOneUnrecoverableFrame) {
|
| const size_t kNumFecPackets = 1;
|
| std::list<AugmentedPacket*> augmented_media_packets;
|
| ForwardErrorCorrection::PacketList media_packets;
|
| @@ -281,7 +280,7 @@ TEST_F(ReceiverFecTest, OneCompleteOneUnrecoverableFrame) {
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, MaxFramesOneFec) {
|
| +TEST_F(UlpfecReceiverTest, MaxFramesOneFec) {
|
| const size_t kNumFecPackets = 1;
|
| const size_t kNumMediaPackets = 48;
|
| std::list<AugmentedPacket*> augmented_media_packets;
|
| @@ -306,7 +305,7 @@ TEST_F(ReceiverFecTest, MaxFramesOneFec) {
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, TooManyFrames) {
|
| +TEST_F(UlpfecReceiverTest, TooManyFrames) {
|
| const size_t kNumFecPackets = 1;
|
| const size_t kNumMediaPackets = 49;
|
| std::list<AugmentedPacket*> augmented_media_packets;
|
| @@ -320,7 +319,7 @@ TEST_F(ReceiverFecTest, TooManyFrames) {
|
| false, kFecMaskBursty, &fec_packets));
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, PacketNotDroppedTooEarly) {
|
| +TEST_F(UlpfecReceiverTest, PacketNotDroppedTooEarly) {
|
| // 1 frame with 2 media packets and one FEC packet. One media packet missing.
|
| // Delay the FEC packet.
|
| Packet* delayed_fec = nullptr;
|
| @@ -335,7 +334,8 @@ TEST_F(ReceiverFecTest, PacketNotDroppedTooEarly) {
|
|
|
| BuildAndAddRedMediaPacket(augmented_media_packets_batch1.front());
|
| EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| - .Times(1).WillRepeatedly(Return(true));
|
| + .Times(1)
|
| + .WillRepeatedly(Return(true));
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| delayed_fec = fec_packets.front();
|
|
|
| @@ -351,18 +351,20 @@ TEST_F(ReceiverFecTest, PacketNotDroppedTooEarly) {
|
| it != augmented_media_packets_batch2.end(); ++it) {
|
| BuildAndAddRedMediaPacket(*it);
|
| EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| - .Times(1).WillRepeatedly(Return(true));
|
| + .Times(1)
|
| + .WillRepeatedly(Return(true));
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
|
|
| // Add the delayed FEC packet. One packet should be reconstructed.
|
| BuildAndAddRedFecPacket(delayed_fec);
|
| EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| - .Times(1).WillRepeatedly(Return(true));
|
| + .Times(1)
|
| + .WillRepeatedly(Return(true));
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, PacketDroppedWhenTooOld) {
|
| +TEST_F(UlpfecReceiverTest, PacketDroppedWhenTooOld) {
|
| // 1 frame with 2 media packets and one FEC packet. One media packet missing.
|
| // Delay the FEC packet.
|
| Packet* delayed_fec = nullptr;
|
| @@ -377,7 +379,8 @@ TEST_F(ReceiverFecTest, PacketDroppedWhenTooOld) {
|
|
|
| BuildAndAddRedMediaPacket(augmented_media_packets_batch1.front());
|
| EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| - .Times(1).WillRepeatedly(Return(true));
|
| + .Times(1)
|
| + .WillRepeatedly(Return(true));
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| delayed_fec = fec_packets.front();
|
|
|
| @@ -393,19 +396,19 @@ TEST_F(ReceiverFecTest, PacketDroppedWhenTooOld) {
|
| it != augmented_media_packets_batch2.end(); ++it) {
|
| BuildAndAddRedMediaPacket(*it);
|
| EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| - .Times(1).WillRepeatedly(Return(true));
|
| + .Times(1)
|
| + .WillRepeatedly(Return(true));
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
|
|
| // Add the delayed FEC packet. No packet should be reconstructed since the
|
| // first media packet of that frame has been dropped due to being too old.
|
| BuildAndAddRedFecPacket(delayed_fec);
|
| - EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| - .Times(0);
|
| + EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)).Times(0);
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, OldFecPacketDropped) {
|
| +TEST_F(UlpfecReceiverTest, OldFecPacketDropped) {
|
| // 49 frames with 2 media packets and one FEC packet. All media packets
|
| // missing.
|
| const size_t kNumMediaPackets = 49 * 2;
|
| @@ -420,8 +423,7 @@ TEST_F(ReceiverFecTest, OldFecPacketDropped) {
|
| for (auto it = fec_packets.begin(); it != fec_packets.end(); ++it) {
|
| // Only FEC packets inserted. No packets recoverable at this time.
|
| BuildAndAddRedFecPacket(*it);
|
| - EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| - .Times(0);
|
| + EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _)).Times(0);
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
| // Move unique_ptr's to media_packets for lifetime management.
|
| @@ -437,120 +439,34 @@ TEST_F(ReceiverFecTest, OldFecPacketDropped) {
|
| // returned.
|
| BuildAndAddRedMediaPacket(augmented_media_packets.front());
|
| EXPECT_CALL(rtp_data_callback_, OnRecoveredPacket(_, _))
|
| - .Times(1).WillRepeatedly(Return(true));
|
| + .Times(1)
|
| + .WillRepeatedly(Return(true));
|
| EXPECT_EQ(0, receiver_fec_->ProcessReceivedFec());
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, TruncatedPacketWithFBitSet) {
|
| - const uint8_t kTruncatedPacket[] = {0x80,
|
| - 0x2a,
|
| - 0x68,
|
| - 0x71,
|
| - 0x29,
|
| - 0xa1,
|
| - 0x27,
|
| - 0x3a,
|
| - 0x29,
|
| - 0x12,
|
| - 0x2a,
|
| - 0x98,
|
| - 0xe0,
|
| - 0x29};
|
| +TEST_F(UlpfecReceiverTest, TruncatedPacketWithFBitSet) {
|
| + const uint8_t kTruncatedPacket[] = {0x80, 0x2a, 0x68, 0x71, 0x29, 0xa1, 0x27,
|
| + 0x3a, 0x29, 0x12, 0x2a, 0x98, 0xe0, 0x29};
|
|
|
| SurvivesMaliciousPacket(kTruncatedPacket, sizeof(kTruncatedPacket), 100);
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, TruncatedPacketWithFBitSetEndingAfterFirstRedHeader) {
|
| - const uint8_t kPacket[] = {0x89,
|
| - 0x27,
|
| - 0x3a,
|
| - 0x83,
|
| - 0x27,
|
| - 0x3a,
|
| - 0x3a,
|
| - 0xf3,
|
| - 0x67,
|
| - 0xbe,
|
| - 0x2a,
|
| - 0xa9,
|
| - 0x27,
|
| - 0x54,
|
| - 0x3a,
|
| - 0x3a,
|
| - 0x2a,
|
| - 0x67,
|
| - 0x3a,
|
| - 0xf3,
|
| - 0x67,
|
| - 0xbe,
|
| - 0x2a,
|
| - 0x27,
|
| - 0xe6,
|
| - 0xf6,
|
| - 0x03,
|
| - 0x3e,
|
| - 0x29,
|
| - 0x27,
|
| - 0x21,
|
| - 0x27,
|
| - 0x2a,
|
| - 0x29,
|
| - 0x21,
|
| - 0x4b,
|
| - 0x29,
|
| - 0x3a,
|
| - 0x28,
|
| - 0x29,
|
| - 0xbf,
|
| - 0x29,
|
| - 0x2a,
|
| - 0x26,
|
| - 0x29,
|
| - 0xae,
|
| - 0x27,
|
| - 0xa6,
|
| - 0xf6,
|
| - 0x00,
|
| - 0x03,
|
| - 0x3e};
|
| +TEST_F(UlpfecReceiverTest,
|
| + TruncatedPacketWithFBitSetEndingAfterFirstRedHeader) {
|
| + const uint8_t kPacket[] = {
|
| + 0x89, 0x27, 0x3a, 0x83, 0x27, 0x3a, 0x3a, 0xf3, 0x67, 0xbe, 0x2a,
|
| + 0xa9, 0x27, 0x54, 0x3a, 0x3a, 0x2a, 0x67, 0x3a, 0xf3, 0x67, 0xbe,
|
| + 0x2a, 0x27, 0xe6, 0xf6, 0x03, 0x3e, 0x29, 0x27, 0x21, 0x27, 0x2a,
|
| + 0x29, 0x21, 0x4b, 0x29, 0x3a, 0x28, 0x29, 0xbf, 0x29, 0x2a, 0x26,
|
| + 0x29, 0xae, 0x27, 0xa6, 0xf6, 0x00, 0x03, 0x3e};
|
| SurvivesMaliciousPacket(kPacket, sizeof(kPacket), 100);
|
| }
|
|
|
| -TEST_F(ReceiverFecTest, TruncatedPacketWithoutDataPastFirstBlock) {
|
| - const uint8_t kPacket[] = {0x82,
|
| - 0x38,
|
| - 0x92,
|
| - 0x38,
|
| - 0x92,
|
| - 0x38,
|
| - 0xde,
|
| - 0x2a,
|
| - 0x11,
|
| - 0xc8,
|
| - 0xa3,
|
| - 0xc4,
|
| - 0x82,
|
| - 0x38,
|
| - 0x2a,
|
| - 0x21,
|
| - 0x2a,
|
| - 0x28,
|
| - 0x92,
|
| - 0x38,
|
| - 0x92,
|
| - 0x00,
|
| - 0x00,
|
| - 0x0a,
|
| - 0x3a,
|
| - 0xc8,
|
| - 0xa3,
|
| - 0x3a,
|
| - 0x27,
|
| - 0xc4,
|
| - 0x2a,
|
| - 0x21,
|
| - 0x2a,
|
| - 0x28};
|
| +TEST_F(UlpfecReceiverTest, TruncatedPacketWithoutDataPastFirstBlock) {
|
| + const uint8_t kPacket[] = {
|
| + 0x82, 0x38, 0x92, 0x38, 0x92, 0x38, 0xde, 0x2a, 0x11, 0xc8, 0xa3, 0xc4,
|
| + 0x82, 0x38, 0x2a, 0x21, 0x2a, 0x28, 0x92, 0x38, 0x92, 0x00, 0x00, 0x0a,
|
| + 0x3a, 0xc8, 0xa3, 0x3a, 0x27, 0xc4, 0x2a, 0x21, 0x2a, 0x28};
|
| SurvivesMaliciousPacket(kPacket, sizeof(kPacket), 100);
|
| }
|
|
|
|
|