From 95aaf287bbd40801afc4cbaa6e8863b7140a6376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Spr=C3=A5ng?= Date: Sat, 15 May 2021 14:35:17 +0200 Subject: [PATCH] Refactors yet more rtp_sender_unitttests into rtp_sender_egress_unittest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:11340 Change-Id: I537c0efd5f0c4576fb43f193e4345618d59035ed Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/218604 Commit-Queue: Erik Språng Reviewed-by: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#34014} --- .../source/rtp_sender_egress_unittest.cc | 47 ++++++ .../rtp_rtcp/source/rtp_sender_unittest.cc | 149 ------------------ 2 files changed, 47 insertions(+), 149 deletions(-) diff --git a/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc index 63f013a79b..a2217e7ed3 100644 --- a/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc +++ b/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc @@ -42,6 +42,7 @@ constexpr uint32_t kSsrc = 725242; constexpr uint32_t kRtxSsrc = 12345; enum : int { kTransportSequenceNumberExtensionId = 1, + kVideoTimingExtensionExtensionId, }; struct TestConfig { @@ -329,6 +330,52 @@ TEST_P(RtpSenderEgressTest, OnSendSideDelayUpdated) { PacedPacketInfo()); } +TEST_P(RtpSenderEgressTest, WritesPacerExitToTimingExtension) { + std::unique_ptr sender = CreateRtpSenderEgress(); + header_extensions_.RegisterByUri(kVideoTimingExtensionExtensionId, + VideoTimingExtension::kUri); + + std::unique_ptr packet = BuildRtpPacket(); + packet->SetExtension(VideoSendTiming{}); + + const int kStoredTimeInMs = 100; + time_controller_.AdvanceTime(TimeDelta::Millis(kStoredTimeInMs)); + sender->SendPacket(packet.get(), PacedPacketInfo()); + ASSERT_TRUE(transport_.last_packet().has_value()); + + VideoSendTiming video_timing; + EXPECT_TRUE( + transport_.last_packet()->packet.GetExtension( + &video_timing)); + EXPECT_EQ(video_timing.pacer_exit_delta_ms, kStoredTimeInMs); +} + +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, + VideoTimingExtension::kUri); + + const uint16_t kPacerExitMs = 1234u; + std::unique_ptr packet = BuildRtpPacket(); + VideoSendTiming send_timing = {}; + send_timing.pacer_exit_delta_ms = kPacerExitMs; + packet->SetExtension(send_timing); + + const int kStoredTimeInMs = 100; + time_controller_.AdvanceTime(TimeDelta::Millis(kStoredTimeInMs)); + sender->SendPacket(packet.get(), PacedPacketInfo()); + ASSERT_TRUE(transport_.last_packet().has_value()); + + VideoSendTiming video_timing; + EXPECT_TRUE( + transport_.last_packet()->packet.GetExtension( + &video_timing)); + EXPECT_EQ(video_timing.network2_timestamp_delta_ms, kStoredTimeInMs); + EXPECT_EQ(video_timing.pacer_exit_delta_ms, kPacerExitMs); +} + 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 8b8ef1e48d..fa4dd65845 100644 --- a/modules/rtp_rtcp/source/rtp_sender_unittest.cc +++ b/modules/rtp_rtcp/source/rtp_sender_unittest.cc @@ -545,155 +545,6 @@ TEST_P(RtpSenderTest, PaddingAlwaysAllowedOnAudio) { EXPECT_EQ(kMinPaddingSize, GenerateAndSendPadding(kMinPaddingSize - 5)); } -TEST_P(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { - RtpRtcpInterface::Configuration config; - config.clock = clock_; - config.outgoing_transport = &transport_; - config.paced_sender = &mock_paced_sender_; - config.local_media_ssrc = kSsrc; - config.transport_feedback_callback = &feedback_observer_; - config.event_log = &mock_rtc_event_log_; - config.send_packet_observer = &send_packet_observer_; - config.retransmission_rate_limiter = &retransmission_rate_limiter_; - rtp_sender_context_ = - std::make_unique(config, &time_controller_); - - rtp_sender()->SetSequenceNumber(kSeqNum); - rtp_sender_context_->packet_history_.SetStorePacketsStatus( - RtpPacketHistory::StorageMode::kStoreAndCull, 10); - EXPECT_TRUE(rtp_sender()->RegisterRtpHeaderExtension( - TransportSequenceNumber::kUri, kTransportSequenceNumberExtensionId)); - - EXPECT_CALL(send_packet_observer_, - OnSendPacket(kTransportSequenceNumber, _, _)) - .Times(1); - EXPECT_CALL(feedback_observer_, - OnAddPacket(AllOf( - Field(&RtpPacketSendInfo::ssrc, rtp_sender()->SSRC()), - Field(&RtpPacketSendInfo::transport_sequence_number, - kTransportSequenceNumber), - Field(&RtpPacketSendInfo::rtp_sequence_number, - rtp_sender()->SequenceNumber()), - Field(&RtpPacketSendInfo::pacing_info, PacedPacketInfo())))) - .Times(1); - - EXPECT_CALL( - mock_paced_sender_, - EnqueuePackets(Contains(AllOf( - Pointee(Property(&RtpPacketToSend::Ssrc, kSsrc)), - Pointee(Property(&RtpPacketToSend::SequenceNumber, kSeqNum)))))); - auto packet = SendGenericPacket(); - packet->set_packet_type(RtpPacketMediaType::kVideo); - // Transport sequence number is set by PacketRouter, before SendPacket(). - packet->SetExtension(kTransportSequenceNumber); - rtp_sender_context_->InjectPacket(std::move(packet), PacedPacketInfo()); - - uint16_t transport_seq_no; - EXPECT_TRUE( - transport_.last_sent_packet().GetExtension( - &transport_seq_no)); - EXPECT_EQ(kTransportSequenceNumber, transport_seq_no); - EXPECT_EQ(transport_.last_options_.packet_id, transport_seq_no); -} - -TEST_P(RtpSenderTest, WritesPacerExitToTimingExtension) { - rtp_sender_context_->packet_history_.SetStorePacketsStatus( - RtpPacketHistory::StorageMode::kStoreAndCull, 10); - EXPECT_TRUE(rtp_sender()->RegisterRtpHeaderExtension( - VideoTimingExtension::kUri, kVideoTimingExtensionId)); - int64_t capture_time_ms = clock_->TimeInMilliseconds(); - auto packet = rtp_sender()->AllocatePacket(); - packet->SetPayloadType(kPayload); - packet->SetMarker(true); - packet->SetTimestamp(kTimestamp); - packet->set_capture_time_ms(capture_time_ms); - const VideoSendTiming kVideoTiming = {0u, 0u, 0u, 0u, 0u, 0u, true}; - packet->SetExtension(kVideoTiming); - EXPECT_TRUE(rtp_sender()->AssignSequenceNumber(packet.get())); - size_t packet_size = packet->size(); - - const int kStoredTimeInMs = 100; - packet->set_packet_type(RtpPacketMediaType::kVideo); - packet->set_allow_retransmission(true); - EXPECT_CALL(mock_paced_sender_, EnqueuePackets(Contains(Pointee(Property( - &RtpPacketToSend::Ssrc, kSsrc))))); - EXPECT_TRUE( - rtp_sender()->SendToNetwork(std::make_unique(*packet))); - time_controller_.AdvanceTime(TimeDelta::Millis(kStoredTimeInMs)); - rtp_sender_context_->InjectPacket(std::move(packet), PacedPacketInfo()); - EXPECT_EQ(1, transport_.packets_sent()); - EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); - - VideoSendTiming video_timing; - EXPECT_TRUE(transport_.last_sent_packet().GetExtension( - &video_timing)); - EXPECT_EQ(kStoredTimeInMs, video_timing.pacer_exit_delta_ms); -} - -TEST_P(RtpSenderTest, WritesNetwork2ToTimingExtensionWithPacer) { - SetUpRtpSender(/*pacer=*/true, /*populate_network2=*/true, false); - rtp_sender_context_->packet_history_.SetStorePacketsStatus( - RtpPacketHistory::StorageMode::kStoreAndCull, 10); - EXPECT_TRUE(rtp_sender()->RegisterRtpHeaderExtension( - VideoTimingExtension::kUri, kVideoTimingExtensionId)); - int64_t capture_time_ms = clock_->TimeInMilliseconds(); - auto packet = rtp_sender()->AllocatePacket(); - packet->SetPayloadType(kPayload); - packet->SetMarker(true); - packet->SetTimestamp(kTimestamp); - packet->set_capture_time_ms(capture_time_ms); - const uint16_t kPacerExitMs = 1234u; - const VideoSendTiming kVideoTiming = {0u, 0u, 0u, kPacerExitMs, 0u, 0u, true}; - packet->SetExtension(kVideoTiming); - EXPECT_TRUE(rtp_sender()->AssignSequenceNumber(packet.get())); - size_t packet_size = packet->size(); - - const int kStoredTimeInMs = 100; - - packet->set_packet_type(RtpPacketMediaType::kVideo); - packet->set_allow_retransmission(true); - EXPECT_CALL(mock_paced_sender_, EnqueuePackets(Contains(Pointee(Property( - &RtpPacketToSend::Ssrc, kSsrc))))); - EXPECT_TRUE( - rtp_sender()->SendToNetwork(std::make_unique(*packet))); - time_controller_.AdvanceTime(TimeDelta::Millis(kStoredTimeInMs)); - rtp_sender_context_->InjectPacket(std::move(packet), PacedPacketInfo()); - - EXPECT_EQ(1, transport_.packets_sent()); - EXPECT_EQ(packet_size, transport_.last_sent_packet().size()); - - VideoSendTiming video_timing; - EXPECT_TRUE(transport_.last_sent_packet().GetExtension( - &video_timing)); - EXPECT_EQ(kStoredTimeInMs, video_timing.network2_timestamp_delta_ms); - EXPECT_EQ(kPacerExitMs, video_timing.pacer_exit_delta_ms); -} - -TEST_P(RtpSenderTest, WritesNetwork2ToTimingExtensionWithoutPacer) { - SetUpRtpSender(/*pacer=*/false, /*populate_network2=*/true, false); - EXPECT_TRUE(rtp_sender()->RegisterRtpHeaderExtension( - VideoTimingExtension::kUri, kVideoTimingExtensionId)); - auto packet = rtp_sender()->AllocatePacket(); - packet->SetMarker(true); - packet->set_capture_time_ms(clock_->TimeInMilliseconds()); - const VideoSendTiming kVideoTiming = {0u, 0u, 0u, 0u, 0u, 0u, true}; - packet->SetExtension(kVideoTiming); - packet->set_allow_retransmission(true); - EXPECT_TRUE(rtp_sender()->AssignSequenceNumber(packet.get())); - packet->set_packet_type(RtpPacketMediaType::kVideo); - - const int kPropagateTimeMs = 10; - time_controller_.AdvanceTime(TimeDelta::Millis(kPropagateTimeMs)); - - EXPECT_TRUE(rtp_sender()->SendToNetwork(std::move(packet))); - - EXPECT_EQ(1, transport_.packets_sent()); - absl::optional video_timing = - transport_.last_sent_packet().GetExtension(); - ASSERT_TRUE(video_timing); - EXPECT_EQ(kPropagateTimeMs, video_timing->network2_timestamp_delta_ms); -} - TEST_P(RtpSenderTest, TrafficSmoothingWithExtensions) { EXPECT_CALL(mock_rtc_event_log_, LogProxy(SameRtcEventTypeAs(RtcEvent::Type::RtpPacketOutgoing)));