Move SendPacketUpdates* tests to rtp_sender_egress_unittest.
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 <sprang@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34118}
diff --git a/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_egress_unittest.cc
index c31e5c1..663638f 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 @@
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, WritesPacerExitToTimingExtension) {
std::unique_ptr<RtpSenderEgress> sender = CreateRtpSenderEgress();
- header_extensions_.RegisterByUri(kVideoTimingExtensionExtensionId,
+ header_extensions_.RegisterByUri(kVideoTimingExtensionId,
VideoTimingExtension::kUri);
std::unique_ptr<RtpPacketToSend> packet = BuildRtpPacket();
@@ -356,7 +361,7 @@
RtpRtcpInterface::Configuration rtp_config = DefaultConfig();
rtp_config.populate_network2_timestamp = true;
auto sender = std::make_unique<RtpSenderEgress>(rtp_config, &packet_history_);
- header_extensions_.RegisterByUri(kVideoTimingExtensionExtensionId,
+ header_extensions_.RegisterByUri(kVideoTimingExtensionId,
VideoTimingExtension::kUri);
const uint16_t kPacerExitMs = 1234u;
@@ -729,6 +734,126 @@
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<RtpSenderEgress> sender = CreateRtpSenderEgress();
+
+ std::unique_ptr<RtpPacketToSend> 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<TransmissionOffset>(), kDiffMs * 90);
+
+ EXPECT_EQ(received_packet.GetExtension<AbsoluteSendTime>(),
+ AbsoluteSendTime::MsTo24Bits(clock_->TimeInMilliseconds()));
+
+ VideoSendTiming timing;
+ EXPECT_TRUE(received_packet.GetExtension<VideoTimingExtension>(&timing));
+ EXPECT_EQ(timing.pacer_exit_delta_ms, kDiffMs);
+}
+
+TEST_P(RtpSenderEgressTest, SendPacketSetsPacketOptions) {
+ const uint16_t kPacketId = 42;
+ std::unique_ptr<RtpSenderEgress> sender = CreateRtpSenderEgress();
+ header_extensions_.RegisterByUri(kTransportSequenceNumberExtensionId,
+ TransportSequenceNumber::kUri);
+
+ std::unique_ptr<RtpPacketToSend> packet = BuildRtpPacket();
+ packet->SetExtension<TransportSequenceNumber>(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<RtpPacketToSend> retransmission = BuildRtpPacket();
+ retransmission->SetExtension<TransportSequenceNumber>(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<MockSendSideDelayObserver> send_side_delay_observer;
+
+ const rtc::ArrayView<const RtpExtensionSize> 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<RtpSenderEgress>(config, &packet_history_);
+
+ header_extensions_.RegisterByUri(kTransportSequenceNumberExtensionId,
+ TransportSequenceNumber::kUri);
+
+ const int64_t capture_time_ms = clock_->TimeInMilliseconds();
+
+ std::unique_ptr<RtpPacketToSend> video_packet = BuildRtpPacket();
+ video_packet->set_packet_type(RtpPacketMediaType::kVideo);
+ video_packet->SetPayloadSize(kPayloadSize);
+ video_packet->SetExtension<TransportSequenceNumber>(1);
+
+ std::unique_ptr<RtpPacketToSend> rtx_packet = BuildRtpPacket();
+ rtx_packet->SetSsrc(kRtxSsrc);
+ rtx_packet->set_packet_type(RtpPacketMediaType::kRetransmission);
+ rtx_packet->SetPayloadSize(kPayloadSize);
+ rtx_packet->SetExtension<TransportSequenceNumber>(2);
+
+ std::unique_ptr<RtpPacketToSend> fec_packet = BuildRtpPacket();
+ fec_packet->SetSsrc(kFlexFecSsrc);
+ fec_packet->set_packet_type(RtpPacketMediaType::kForwardErrorCorrection);
+ fec_packet->SetPayloadSize(kPayloadSize);
+ fec_packet->SetExtension<TransportSequenceNumber>(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 d7a7b53..0e3ecd4 100644
--- a/modules/rtp_rtcp/source/rtp_sender_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_sender_unittest.cc
@@ -1157,131 +1157,6 @@
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<RtpPacketToSend> 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<TransmissionOffset>(), kDiffMs * 90);
-
- EXPECT_EQ(received_packet.GetExtension<AbsoluteSendTime>(),
- AbsoluteSendTime::MsTo24Bits(clock_->TimeInMilliseconds()));
-
- VideoSendTiming timing;
- EXPECT_TRUE(received_packet.GetExtension<VideoTimingExtension>(&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<RtpPacketToSend> packet =
- BuildRtpPacket(kPayload, true, 0, clock_->TimeInMilliseconds());
- packet->SetExtension<TransportSequenceNumber>(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<TransportSequenceNumber>(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<MockSendSideDelayObserver> 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<RtpSenderContext>(config, &time_controller_);
- ASSERT_TRUE(rtp_sender()->RegisterRtpHeaderExtension(
- TransportSequenceNumber::kUri, kTransportSequenceNumberExtensionId));
-
- const int64_t capture_time_ms = clock_->TimeInMilliseconds();
-
- std::unique_ptr<RtpPacketToSend> video_packet =
- BuildRtpPacket(kPayload, true, 0, clock_->TimeInMilliseconds());
- video_packet->set_packet_type(RtpPacketMediaType::kVideo);
- video_packet->SetPayloadSize(kPayloadSize);
- video_packet->SetExtension<TransportSequenceNumber>(1);
-
- std::unique_ptr<RtpPacketToSend> 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<TransportSequenceNumber>(2);
-
- std::unique_ptr<RtpPacketToSend> 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<TransportSequenceNumber>(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;