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}
This commit is contained in:
parent
fade919bb1
commit
4fbc3fc59e
@ -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<RtpSenderEgress> sender = CreateRtpSenderEgress();
|
||||
header_extensions_.RegisterByUri(kVideoTimingExtensionExtensionId,
|
||||
header_extensions_.RegisterByUri(kVideoTimingExtensionId,
|
||||
VideoTimingExtension::kUri);
|
||||
|
||||
std::unique_ptr<RtpPacketToSend> 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<RtpSenderEgress>(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<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),
|
||||
|
||||
@ -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<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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user