| Index: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| index d6796e788008971b6015f1e0a24759f4a3ea3dca..cdac7a72101fe79339f6383990d8b0fdd0e2e2a5 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
|
| @@ -42,6 +42,7 @@ const int kPayload = 100;
|
| const int kRtxPayload = 98;
|
| const uint32_t kTimestamp = 10;
|
| const uint16_t kSeqNum = 33;
|
| +const uint32_t kSsrc = 725242;
|
| const int kMaxPacketLength = 1500;
|
| const uint8_t kAudioLevel = 0x5a;
|
| const uint16_t kTransportSequenceNumber = 0xaabbu;
|
| @@ -150,9 +151,10 @@ class RtpSenderTest : public ::testing::Test {
|
| nullptr, &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr,
|
| &mock_rtc_event_log_, &send_packet_observer_,
|
| &retransmission_rate_limiter_));
|
| - rtp_sender_->SetSequenceNumber(kSeqNum);
|
| rtp_sender_->SetSendPayloadType(kPayload);
|
| + rtp_sender_->SetSequenceNumber(kSeqNum);
|
| rtp_sender_->SetTimestampOffset(0);
|
| + rtp_sender_->SetSSRC(kSsrc);
|
| }
|
|
|
| SimulatedClock fake_clock_;
|
| @@ -490,14 +492,14 @@ TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) {
|
| nullptr, &seq_num_allocator_, &feedback_observer_, nullptr,
|
| nullptr, nullptr, &mock_rtc_event_log_,
|
| &send_packet_observer_, &retransmission_rate_limiter_));
|
| + rtp_sender_->SetSequenceNumber(kSeqNum);
|
| + rtp_sender_->SetSSRC(kSsrc);
|
| rtp_sender_->SetStorePacketsStatus(true, 10);
|
| EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| kRtpExtensionTransportSequenceNumber,
|
| kTransportSequenceNumberExtensionId));
|
|
|
| - uint16_t seq_num = 0;
|
| - EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
|
| - .Times(1).WillRepeatedly(testing::SaveArg<2>(&seq_num));
|
| + EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _));
|
| EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
|
| .WillOnce(testing::Return(kTransportSequenceNumber));
|
| EXPECT_CALL(send_packet_observer_,
|
| @@ -511,8 +513,8 @@ TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) {
|
| .Times(1);
|
|
|
| SendGenericPayload();
|
| - rtp_sender_->TimeToSendPacket(seq_num, fake_clock_.TimeInMilliseconds(),
|
| - false, kProbeClusterId);
|
| + rtp_sender_->TimeToSendPacket(
|
| + kSsrc, kSeqNum, fake_clock_.TimeInMilliseconds(), false, kProbeClusterId);
|
|
|
| const auto& packet = transport_.last_sent_packet();
|
| uint16_t transport_seq_no;
|
| @@ -523,7 +525,7 @@ TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) {
|
|
|
| TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
| EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
|
| - _, kSeqNum, _, _, _));
|
| + kSsrc, kSeqNum, _, _, _));
|
| EXPECT_CALL(mock_rtc_event_log_,
|
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
|
|
|
| @@ -549,7 +551,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
| const int kStoredTimeInMs = 100;
|
| fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
|
|
|
| - rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
|
| + rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false,
|
| PacketInfo::kNotAProbe);
|
|
|
| // Process send bucket. Packet should now be sent.
|
| @@ -568,7 +570,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
|
|
|
| TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
| EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
|
| - _, kSeqNum, _, _, _));
|
| + kSsrc, kSeqNum, _, _, _));
|
| EXPECT_CALL(mock_rtc_event_log_,
|
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
|
|
|
| @@ -592,7 +594,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
| EXPECT_EQ(0, transport_.packets_sent());
|
|
|
| EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
|
| - _, kSeqNum, _, _, _));
|
| + kSsrc, kSeqNum, _, _, _));
|
|
|
| const int kStoredTimeInMs = 100;
|
| fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
|
| @@ -600,7 +602,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
| EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum));
|
| EXPECT_EQ(0, transport_.packets_sent());
|
|
|
| - rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
|
| + rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum, capture_time_ms, false,
|
| PacketInfo::kNotAProbe);
|
|
|
| // Process send bucket. Packet should now be sent.
|
| @@ -622,7 +624,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
|
| TEST_F(RtpSenderTest, SendPadding) {
|
| // Make all (non-padding) packets go to send queue.
|
| EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
|
| - _, kSeqNum, _, _, _));
|
| + kSsrc, kSeqNum, _, _, _));
|
| EXPECT_CALL(mock_rtc_event_log_,
|
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
|
| .Times(1 + 4 + 1);
|
| @@ -659,7 +661,7 @@ TEST_F(RtpSenderTest, SendPadding) {
|
|
|
| const int kStoredTimeInMs = 100;
|
| fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
|
| - rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false,
|
| + rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false,
|
| PacketInfo::kNotAProbe);
|
| // Packet should now be sent. This test doesn't verify the regular video
|
| // packet, since it is tested in another test.
|
| @@ -702,15 +704,15 @@ TEST_F(RtpSenderTest, SendPadding) {
|
| packet = BuildRtpPacket(kPayload, kMarkerBit, timestamp, capture_time_ms);
|
| packet_size = packet->size();
|
|
|
| - EXPECT_CALL(mock_paced_sender_,
|
| - InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _));
|
| + EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
|
| + kSsrc, seq_num, _, _, _));
|
|
|
| // Packet should be stored in a send bucket.
|
| EXPECT_TRUE(rtp_sender_->SendToNetwork(std::move(packet),
|
| kAllowRetransmission,
|
| RtpPacketSender::kNormalPriority));
|
|
|
| - rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false,
|
| + rtp_sender_->TimeToSendPacket(kSsrc, seq_num, capture_time_ms, false,
|
| PacketInfo::kNotAProbe);
|
| // Process send bucket.
|
| EXPECT_EQ(++total_packets_sent, transport_.packets_sent());
|
| @@ -738,12 +740,14 @@ TEST_F(RtpSenderTest, OnSendPacketUpdated) {
|
| .Times(1);
|
| EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
|
| .WillOnce(testing::Return(kTransportSequenceNumber));
|
| - EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
|
| + EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _))
|
| + .Times(1);
|
|
|
| SendGenericPayload(); // Packet passed to pacer.
|
| const bool kIsRetransmit = false;
|
| - rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
|
| - kIsRetransmit, PacketInfo::kNotAProbe);
|
| + rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum,
|
| + fake_clock_.TimeInMilliseconds(), kIsRetransmit,
|
| + PacketInfo::kNotAProbe);
|
| EXPECT_EQ(1, transport_.packets_sent());
|
| }
|
|
|
| @@ -756,12 +760,14 @@ TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) {
|
| EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
|
| EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
|
| .WillOnce(testing::Return(kTransportSequenceNumber));
|
| - EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
|
| + EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _))
|
| + .Times(1);
|
|
|
| SendGenericPayload(); // Packet passed to pacer.
|
| const bool kIsRetransmit = true;
|
| - rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
|
| - kIsRetransmit, PacketInfo::kNotAProbe);
|
| + rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum,
|
| + fake_clock_.TimeInMilliseconds(), kIsRetransmit,
|
| + PacketInfo::kNotAProbe);
|
| EXPECT_EQ(1, transport_.packets_sent());
|
| }
|
|
|
| @@ -770,6 +776,8 @@ TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) {
|
| false, &fake_clock_, &transport_, &mock_paced_sender_, nullptr,
|
| nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr,
|
| nullptr, nullptr, &send_packet_observer_, &retransmission_rate_limiter_));
|
| + rtp_sender_->SetSequenceNumber(kSeqNum);
|
| + rtp_sender_->SetSSRC(kSsrc);
|
| EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension(
|
| kRtpExtensionTransportSequenceNumber,
|
| kTransportSequenceNumberExtensionId));
|
| @@ -777,12 +785,14 @@ TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) {
|
| rtp_sender_->SetStorePacketsStatus(true, 10);
|
|
|
| EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
|
| - EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
|
| + EXPECT_CALL(mock_paced_sender_, InsertPacket(_, kSsrc, kSeqNum, _, _, _))
|
| + .Times(1);
|
|
|
| SendGenericPayload(); // Packet passed to pacer.
|
| const bool kIsRetransmit = false;
|
| - rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
|
| - kIsRetransmit, PacketInfo::kNotAProbe);
|
| + rtp_sender_->TimeToSendPacket(kSsrc, kSeqNum,
|
| + fake_clock_.TimeInMilliseconds(), kIsRetransmit,
|
| + PacketInfo::kNotAProbe);
|
| EXPECT_EQ(1, transport_.packets_sent());
|
| }
|
|
|
| @@ -792,8 +802,8 @@ TEST_F(RtpSenderTest, SendRedundantPayloads) {
|
| false, &fake_clock_, &transport, &mock_paced_sender_, nullptr, nullptr,
|
| nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_, nullptr,
|
| &retransmission_rate_limiter_));
|
| -
|
| rtp_sender_->SetSequenceNumber(kSeqNum);
|
| + rtp_sender_->SetSSRC(kSsrc);
|
| rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
|
|
|
| uint16_t seq_num = kSeqNum;
|
| @@ -813,7 +823,7 @@ TEST_F(RtpSenderTest, SendRedundantPayloads) {
|
| 750, 800, 850, 900, 950};
|
| // Expect all packets go through the pacer.
|
| EXPECT_CALL(mock_paced_sender_,
|
| - InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _))
|
| + InsertPacket(RtpPacketSender::kNormalPriority, kSsrc, _, _, _, _))
|
| .Times(kNumPayloadSizes);
|
| EXPECT_CALL(mock_rtc_event_log_,
|
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
|
| @@ -824,7 +834,7 @@ TEST_F(RtpSenderTest, SendRedundantPayloads) {
|
| int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
|
| EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true));
|
| SendPacket(capture_time_ms, kPayloadSizes[i]);
|
| - rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false,
|
| + rtp_sender_->TimeToSendPacket(kSsrc, seq_num++, capture_time_ms, false,
|
| PacketInfo::kNotAProbe);
|
| fake_clock_.AdvanceTimeMilliseconds(33);
|
| }
|
| @@ -926,25 +936,31 @@ TEST_F(RtpSenderTest, SendFlexfecPackets) {
|
| params.fec_mask_type = kFecMaskRandom;
|
| rtp_sender_->SetFecParameters(params, params);
|
|
|
| - uint16_t media_seq_num;
|
| - EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority,
|
| - kMediaSsrc, _, _, _, false))
|
| - .WillOnce(testing::SaveArg<2>(&media_seq_num));
|
| + EXPECT_CALL(mock_paced_sender_,
|
| + InsertPacket(RtpPacketSender::kLowPriority, kMediaSsrc, kSeqNum,
|
| + _, _, false));
|
| + uint16_t flexfec_seq_num;
|
| EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority,
|
| - kFlexfecSsrc, _, _, _, false));
|
| + kFlexfecSsrc, _, _, _, false))
|
| + .WillOnce(testing::SaveArg<2>(&flexfec_seq_num));
|
| SendGenericPayload();
|
| - // TODO(brandtr): Make these tests stricter when the FlexFEC packets are no
|
| - // longer lost between PacedSender and RTPSender.
|
| EXPECT_CALL(mock_rtc_event_log_,
|
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
|
| - .Times(testing::AtLeast(1));
|
| + .Times(2);
|
| EXPECT_TRUE(rtp_sender_->TimeToSendPacket(
|
| - media_seq_num, fake_clock_.TimeInMilliseconds(), false, 0));
|
| - EXPECT_LE(1, transport_.packets_sent());
|
| + kMediaSsrc, kSeqNum, fake_clock_.TimeInMilliseconds(), false, 0));
|
| + EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kFlexfecSsrc, flexfec_seq_num,
|
| + fake_clock_.TimeInMilliseconds(),
|
| + false, 0));
|
| + ASSERT_EQ(2, transport_.packets_sent());
|
| const RtpPacketReceived& media_packet = transport_.sent_packets_[0];
|
| EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType());
|
| - EXPECT_EQ(media_seq_num, media_packet.SequenceNumber());
|
| + EXPECT_EQ(kSeqNum, media_packet.SequenceNumber());
|
| EXPECT_EQ(kMediaSsrc, media_packet.Ssrc());
|
| + const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1];
|
| + EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType());
|
| + EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber());
|
| + EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc());
|
| }
|
|
|
| TEST_F(RtpSenderTestWithoutPacer, SendFlexfecPackets) {
|
|
|