Refactors yet more rtp_sender_unitttests into rtp_sender_egress_unittest
Bug: webrtc:11340 Change-Id: I537c0efd5f0c4576fb43f193e4345618d59035ed Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/218604 Commit-Queue: Erik Språng <sprang@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34014}
This commit is contained in:
parent
f01c2c96f2
commit
95aaf287bb
@ -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<RtpSenderEgress> sender = CreateRtpSenderEgress();
|
||||
header_extensions_.RegisterByUri(kVideoTimingExtensionExtensionId,
|
||||
VideoTimingExtension::kUri);
|
||||
|
||||
std::unique_ptr<RtpPacketToSend> packet = BuildRtpPacket();
|
||||
packet->SetExtension<VideoTimingExtension>(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<VideoTimingExtension>(
|
||||
&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<RtpSenderEgress>(rtp_config, &packet_history_);
|
||||
header_extensions_.RegisterByUri(kVideoTimingExtensionExtensionId,
|
||||
VideoTimingExtension::kUri);
|
||||
|
||||
const uint16_t kPacerExitMs = 1234u;
|
||||
std::unique_ptr<RtpPacketToSend> packet = BuildRtpPacket();
|
||||
VideoSendTiming send_timing = {};
|
||||
send_timing.pacer_exit_delta_ms = kPacerExitMs;
|
||||
packet->SetExtension<VideoTimingExtension>(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<VideoTimingExtension>(
|
||||
&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),
|
||||
|
||||
@ -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<RtpSenderContext>(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<TransportSequenceNumber>(kTransportSequenceNumber);
|
||||
rtp_sender_context_->InjectPacket(std::move(packet), PacedPacketInfo());
|
||||
|
||||
uint16_t transport_seq_no;
|
||||
EXPECT_TRUE(
|
||||
transport_.last_sent_packet().GetExtension<TransportSequenceNumber>(
|
||||
&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<VideoTimingExtension>(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<RtpPacketToSend>(*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<VideoTimingExtension>(
|
||||
&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<VideoTimingExtension>(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<RtpPacketToSend>(*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<VideoTimingExtension>(
|
||||
&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<VideoTimingExtension>(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<VideoSendTiming> video_timing =
|
||||
transport_.last_sent_packet().GetExtension<VideoTimingExtension>();
|
||||
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)));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user