From 4fbc3fc59e75615a17722cb93ae0d18caff5ee2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Spr=C3=A5ng?= Date: Tue, 25 May 2021 17:00:26 +0200 Subject: [PATCH] Move SendPacketUpdates* tests to rtp_sender_egress_unittest. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These should be the last of the testis from rtp_sender_unittest.cc that should be moved and refactored to just test RtpSenderEgress. Bug: webrtc:11340 Change-Id: Id09d7bbade608dd7194dcd8843d4f2887842a372 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/220140 Commit-Queue: Erik Språng Reviewed-by: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#34118} --- .../source/rtp_sender_egress_unittest.cc | 131 +++++++++++++++++- .../rtp_rtcp/source/rtp_sender_unittest.cc | 125 ----------------- 2 files changed, 128 insertions(+), 128 deletions(-) diff --git a/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc index c31e5c14a4..663638fab5 100644 --- a/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc +++ b/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc @@ -18,6 +18,7 @@ #include "api/units/data_size.h" #include "api/units/timestamp.h" #include "logging/rtc_event_log/mock/mock_rtc_event_log.h" +#include "modules/rtp_rtcp/include/flexfec_sender.h" #include "modules/rtp_rtcp/include/rtp_rtcp.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/source/rtp_header_extensions.h" @@ -39,12 +40,16 @@ using ::testing::StrictMock; constexpr Timestamp kStartTime = Timestamp::Millis(123456789); constexpr int kDefaultPayloadType = 100; +constexpr int kFlexfectPayloadType = 110; constexpr uint16_t kStartSequenceNumber = 33; constexpr uint32_t kSsrc = 725242; constexpr uint32_t kRtxSsrc = 12345; +constexpr uint32_t kFlexFecSsrc = 23456; enum : int { kTransportSequenceNumberExtensionId = 1, - kVideoTimingExtensionExtensionId, + kAbsoluteSendTimeExtensionId, + kTransmissionOffsetExtensionId, + kVideoTimingExtensionId, }; struct TestConfig { @@ -334,7 +339,7 @@ TEST_P(RtpSenderEgressTest, OnSendSideDelayUpdated) { TEST_P(RtpSenderEgressTest, WritesPacerExitToTimingExtension) { std::unique_ptr sender = CreateRtpSenderEgress(); - header_extensions_.RegisterByUri(kVideoTimingExtensionExtensionId, + header_extensions_.RegisterByUri(kVideoTimingExtensionId, VideoTimingExtension::kUri); std::unique_ptr packet = BuildRtpPacket(); @@ -356,7 +361,7 @@ TEST_P(RtpSenderEgressTest, WritesNetwork2ToTimingExtension) { RtpRtcpInterface::Configuration rtp_config = DefaultConfig(); rtp_config.populate_network2_timestamp = true; auto sender = std::make_unique(rtp_config, &packet_history_); - header_extensions_.RegisterByUri(kVideoTimingExtensionExtensionId, + header_extensions_.RegisterByUri(kVideoTimingExtensionId, VideoTimingExtension::kUri); const uint16_t kPacerExitMs = 1234u; @@ -729,6 +734,126 @@ TEST_P(RtpSenderEgressTest, UpdatesDataCounters) { EXPECT_EQ(rtx_stats.fec, kEmptyCounter); } +TEST_P(RtpSenderEgressTest, SendPacketUpdatesExtensions) { + header_extensions_.RegisterByUri(kVideoTimingExtensionId, + VideoTimingExtension::kUri); + header_extensions_.RegisterByUri(kAbsoluteSendTimeExtensionId, + AbsoluteSendTime::kUri); + header_extensions_.RegisterByUri(kTransmissionOffsetExtensionId, + TransmissionOffset::kUri); + std::unique_ptr sender = CreateRtpSenderEgress(); + + std::unique_ptr packet = BuildRtpPacket(); + packet->set_packetization_finish_time_ms(clock_->TimeInMilliseconds()); + + const int32_t kDiffMs = 10; + time_controller_.AdvanceTime(TimeDelta::Millis(kDiffMs)); + + sender->SendPacket(packet.get(), PacedPacketInfo()); + + RtpPacketReceived received_packet = transport_.last_packet()->packet; + + EXPECT_EQ(received_packet.GetExtension(), kDiffMs * 90); + + EXPECT_EQ(received_packet.GetExtension(), + AbsoluteSendTime::MsTo24Bits(clock_->TimeInMilliseconds())); + + VideoSendTiming timing; + EXPECT_TRUE(received_packet.GetExtension(&timing)); + EXPECT_EQ(timing.pacer_exit_delta_ms, kDiffMs); +} + +TEST_P(RtpSenderEgressTest, SendPacketSetsPacketOptions) { + const uint16_t kPacketId = 42; + std::unique_ptr sender = CreateRtpSenderEgress(); + header_extensions_.RegisterByUri(kTransportSequenceNumberExtensionId, + TransportSequenceNumber::kUri); + + std::unique_ptr packet = BuildRtpPacket(); + packet->SetExtension(kPacketId); + EXPECT_CALL(send_packet_observer_, OnSendPacket); + sender->SendPacket(packet.get(), PacedPacketInfo()); + + PacketOptions packet_options = transport_.last_packet()->options; + + EXPECT_EQ(packet_options.packet_id, kPacketId); + EXPECT_TRUE(packet_options.included_in_allocation); + EXPECT_TRUE(packet_options.included_in_feedback); + EXPECT_FALSE(packet_options.is_retransmit); + + // Send another packet as retransmission, verify options are populated. + std::unique_ptr retransmission = BuildRtpPacket(); + retransmission->SetExtension(kPacketId + 1); + retransmission->set_packet_type(RtpPacketMediaType::kRetransmission); + sender->SendPacket(retransmission.get(), PacedPacketInfo()); + EXPECT_TRUE(transport_.last_packet()->options.is_retransmit); +} + +TEST_P(RtpSenderEgressTest, SendPacketUpdatesStats) { + const size_t kPayloadSize = 1000; + StrictMock send_side_delay_observer; + + const rtc::ArrayView kNoRtpHeaderExtensionSizes; + FlexfecSender flexfec(kFlexfectPayloadType, kFlexFecSsrc, kSsrc, /*mid=*/"", + /*header_extensions=*/{}, kNoRtpHeaderExtensionSizes, + /*rtp_state=*/nullptr, time_controller_.GetClock()); + RtpRtcpInterface::Configuration config = DefaultConfig(); + config.fec_generator = &flexfec; + config.send_side_delay_observer = &send_side_delay_observer; + auto sender = std::make_unique(config, &packet_history_); + + header_extensions_.RegisterByUri(kTransportSequenceNumberExtensionId, + TransportSequenceNumber::kUri); + + const int64_t capture_time_ms = clock_->TimeInMilliseconds(); + + std::unique_ptr video_packet = BuildRtpPacket(); + video_packet->set_packet_type(RtpPacketMediaType::kVideo); + video_packet->SetPayloadSize(kPayloadSize); + video_packet->SetExtension(1); + + std::unique_ptr rtx_packet = BuildRtpPacket(); + rtx_packet->SetSsrc(kRtxSsrc); + rtx_packet->set_packet_type(RtpPacketMediaType::kRetransmission); + rtx_packet->SetPayloadSize(kPayloadSize); + rtx_packet->SetExtension(2); + + std::unique_ptr fec_packet = BuildRtpPacket(); + fec_packet->SetSsrc(kFlexFecSsrc); + fec_packet->set_packet_type(RtpPacketMediaType::kForwardErrorCorrection); + fec_packet->SetPayloadSize(kPayloadSize); + fec_packet->SetExtension(3); + + const int64_t kDiffMs = 25; + time_controller_.AdvanceTime(TimeDelta::Millis(kDiffMs)); + + EXPECT_CALL(send_side_delay_observer, + SendSideDelayUpdated(kDiffMs, kDiffMs, kDiffMs, kSsrc)); + EXPECT_CALL( + send_side_delay_observer, + SendSideDelayUpdated(kDiffMs, kDiffMs, 2 * kDiffMs, kFlexFecSsrc)); + + EXPECT_CALL(send_packet_observer_, OnSendPacket(1, capture_time_ms, kSsrc)); + + sender->SendPacket(video_packet.get(), PacedPacketInfo()); + + // Send packet observer not called for padding/retransmissions. + EXPECT_CALL(send_packet_observer_, OnSendPacket(2, _, _)).Times(0); + sender->SendPacket(rtx_packet.get(), PacedPacketInfo()); + + EXPECT_CALL(send_packet_observer_, + OnSendPacket(3, capture_time_ms, kFlexFecSsrc)); + sender->SendPacket(fec_packet.get(), PacedPacketInfo()); + + time_controller_.AdvanceTime(TimeDelta::Zero()); + StreamDataCounters rtp_stats; + StreamDataCounters rtx_stats; + sender->GetDataCounters(&rtp_stats, &rtx_stats); + EXPECT_EQ(rtp_stats.transmitted.packets, 2u); + EXPECT_EQ(rtp_stats.fec.packets, 1u); + EXPECT_EQ(rtx_stats.retransmitted.packets, 1u); +} + INSTANTIATE_TEST_SUITE_P(WithAndWithoutOverhead, RtpSenderEgressTest, ::testing::Values(TestConfig(false), diff --git a/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_unittest.cc index d7a7b53367..0e3ecd4506 100644 --- a/modules/rtp_rtcp/source/rtp_sender_unittest.cc +++ b/modules/rtp_rtcp/source/rtp_sender_unittest.cc @@ -1157,131 +1157,6 @@ TEST_P(RtpSenderTest, MarksRetransmittedPackets) { EXPECT_THAT(rtp_sender()->ReSendPacket(media_sequence_number), Gt(0)); } -TEST_P(RtpSenderTest, SendPacketUpdatesExtensions) { - ASSERT_TRUE(rtp_sender()->RegisterRtpHeaderExtension( - TransmissionOffset::kUri, kTransmissionTimeOffsetExtensionId)); - ASSERT_TRUE(rtp_sender()->RegisterRtpHeaderExtension( - AbsoluteSendTime::kUri, kAbsoluteSendTimeExtensionId)); - ASSERT_TRUE(rtp_sender()->RegisterRtpHeaderExtension( - VideoTimingExtension::kUri, kVideoTimingExtensionId)); - - std::unique_ptr packet = - BuildRtpPacket(kPayload, true, 0, clock_->TimeInMilliseconds()); - packet->set_packetization_finish_time_ms(clock_->TimeInMilliseconds()); - - const int32_t kDiffMs = 10; - time_controller_.AdvanceTime(TimeDelta::Millis(kDiffMs)); - - packet->set_packet_type(RtpPacketMediaType::kVideo); - rtp_sender_context_->InjectPacket(std::move(packet), PacedPacketInfo()); - - const RtpPacketReceived& received_packet = transport_.last_sent_packet(); - - EXPECT_EQ(received_packet.GetExtension(), kDiffMs * 90); - - EXPECT_EQ(received_packet.GetExtension(), - AbsoluteSendTime::MsTo24Bits(clock_->TimeInMilliseconds())); - - VideoSendTiming timing; - EXPECT_TRUE(received_packet.GetExtension(&timing)); - EXPECT_EQ(timing.pacer_exit_delta_ms, kDiffMs); -} - -TEST_P(RtpSenderTest, SendPacketSetsPacketOptions) { - const uint16_t kPacketId = 42; - ASSERT_TRUE(rtp_sender()->RegisterRtpHeaderExtension( - TransportSequenceNumber::kUri, kTransportSequenceNumberExtensionId)); - std::unique_ptr packet = - BuildRtpPacket(kPayload, true, 0, clock_->TimeInMilliseconds()); - packet->SetExtension(kPacketId); - - packet->set_packet_type(RtpPacketMediaType::kVideo); - EXPECT_CALL(send_packet_observer_, OnSendPacket); - rtp_sender_context_->InjectPacket(std::move(packet), PacedPacketInfo()); - - EXPECT_EQ(transport_.last_options_.packet_id, kPacketId); - EXPECT_TRUE(transport_.last_options_.included_in_allocation); - EXPECT_TRUE(transport_.last_options_.included_in_feedback); - EXPECT_FALSE(transport_.last_options_.is_retransmit); - - // Send another packet as retransmission, verify options are populated. - packet = BuildRtpPacket(kPayload, true, 0, clock_->TimeInMilliseconds()); - packet->SetExtension(kPacketId + 1); - packet->set_packet_type(RtpPacketMediaType::kRetransmission); - rtp_sender_context_->InjectPacket(std::move(packet), PacedPacketInfo()); - EXPECT_TRUE(transport_.last_options_.is_retransmit); -} - -TEST_P(RtpSenderTest, SendPacketUpdatesStats) { - const size_t kPayloadSize = 1000; - - StrictMock send_side_delay_observer; - - RtpRtcpInterface::Configuration config; - config.clock = clock_; - config.outgoing_transport = &transport_; - config.local_media_ssrc = kSsrc; - config.rtx_send_ssrc = kRtxSsrc; - config.fec_generator = &flexfec_sender_; - config.send_side_delay_observer = &send_side_delay_observer; - config.event_log = &mock_rtc_event_log_; - config.send_packet_observer = &send_packet_observer_; - rtp_sender_context_ = - std::make_unique(config, &time_controller_); - ASSERT_TRUE(rtp_sender()->RegisterRtpHeaderExtension( - TransportSequenceNumber::kUri, kTransportSequenceNumberExtensionId)); - - const int64_t capture_time_ms = clock_->TimeInMilliseconds(); - - std::unique_ptr video_packet = - BuildRtpPacket(kPayload, true, 0, clock_->TimeInMilliseconds()); - video_packet->set_packet_type(RtpPacketMediaType::kVideo); - video_packet->SetPayloadSize(kPayloadSize); - video_packet->SetExtension(1); - - std::unique_ptr rtx_packet = - BuildRtpPacket(kPayload, true, 0, clock_->TimeInMilliseconds()); - rtx_packet->SetSsrc(kRtxSsrc); - rtx_packet->set_packet_type(RtpPacketMediaType::kRetransmission); - rtx_packet->SetPayloadSize(kPayloadSize); - rtx_packet->SetExtension(2); - - std::unique_ptr fec_packet = - BuildRtpPacket(kPayload, true, 0, clock_->TimeInMilliseconds()); - fec_packet->SetSsrc(kFlexFecSsrc); - fec_packet->set_packet_type(RtpPacketMediaType::kForwardErrorCorrection); - fec_packet->SetPayloadSize(kPayloadSize); - fec_packet->SetExtension(3); - - const int64_t kDiffMs = 25; - time_controller_.AdvanceTime(TimeDelta::Millis(kDiffMs)); - - EXPECT_CALL(send_side_delay_observer, - SendSideDelayUpdated(kDiffMs, kDiffMs, kDiffMs, kSsrc)); - EXPECT_CALL( - send_side_delay_observer, - SendSideDelayUpdated(kDiffMs, kDiffMs, 2 * kDiffMs, kFlexFecSsrc)); - - EXPECT_CALL(send_packet_observer_, OnSendPacket(1, capture_time_ms, kSsrc)); - - rtp_sender_context_->InjectPacket(std::move(video_packet), PacedPacketInfo()); - - // Send packet observer not called for padding/retransmissions. - EXPECT_CALL(send_packet_observer_, OnSendPacket(2, _, _)).Times(0); - rtp_sender_context_->InjectPacket(std::move(rtx_packet), PacedPacketInfo()); - - EXPECT_CALL(send_packet_observer_, - OnSendPacket(3, capture_time_ms, kFlexFecSsrc)); - rtp_sender_context_->InjectPacket(std::move(fec_packet), PacedPacketInfo()); - - StreamDataCounters rtp_stats; - StreamDataCounters rtx_stats; - rtp_egress()->GetDataCounters(&rtp_stats, &rtx_stats); - EXPECT_EQ(rtp_stats.transmitted.packets, 2u); - EXPECT_EQ(rtp_stats.fec.packets, 1u); - EXPECT_EQ(rtx_stats.retransmitted.packets, 1u); -} - TEST_P(RtpSenderTest, GeneratedPaddingHasBweExtensions) { // Min requested size in order to use RTX payload. const size_t kMinPaddingSize = 50;