Chromium Code Reviews| 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..6d2e0600931dd4ec8ea578324b0a72ec4b856091 100644 |
| --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
| @@ -495,9 +495,16 @@ TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { |
| kRtpExtensionTransportSequenceNumber, |
| kTransportSequenceNumberExtensionId)); |
| + uint32_t ssrc = 0; |
|
danilchap
2016/11/10 16:15:13
may be rather than complicating test with extracti
brandtr
2016/11/11 10:28:16
Done. Also made some EXPECT_CALLs a bit more speci
|
| uint16_t seq_num = 0; |
| EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
| - .Times(1).WillRepeatedly(testing::SaveArg<2>(&seq_num)); |
| + .Times(1) |
| + .WillOnce(testing::Invoke([&ssrc, &seq_num]( |
| + RtpPacketSender::Priority arg0, uint32_t arg1, uint16_t arg2, |
| + int64_t arg3, size_t arg4, bool arg5) { |
| + ssrc = arg1; |
| + seq_num = arg2; |
| + })); |
| EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| .WillOnce(testing::Return(kTransportSequenceNumber)); |
| EXPECT_CALL(send_packet_observer_, |
| @@ -511,7 +518,7 @@ TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { |
| .Times(1); |
| SendGenericPayload(); |
| - rtp_sender_->TimeToSendPacket(seq_num, fake_clock_.TimeInMilliseconds(), |
| + rtp_sender_->TimeToSendPacket(ssrc, seq_num, fake_clock_.TimeInMilliseconds(), |
| false, kProbeClusterId); |
| const auto& packet = transport_.last_sent_packet(); |
| @@ -522,8 +529,10 @@ TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) { |
| } |
| TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { |
| + uint32_t ssrc; |
| EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
| - _, kSeqNum, _, _, _)); |
| + _, kSeqNum, _, _, _)) |
| + .WillOnce(testing::SaveArg<1>(&ssrc)); |
| EXPECT_CALL(mock_rtc_event_log_, |
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
| @@ -549,7 +558,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { |
| const int kStoredTimeInMs = 100; |
| fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs); |
| - rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false, |
| + rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, capture_time_ms, false, |
| PacketInfo::kNotAProbe); |
| // Process send bucket. Packet should now be sent. |
| @@ -567,8 +576,10 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) { |
| } |
| TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { |
| + uint32_t ssrc; |
| EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
| - _, kSeqNum, _, _, _)); |
| + _, kSeqNum, _, _, _)) |
| + .WillOnce(testing::SaveArg<1>(&ssrc)); |
| EXPECT_CALL(mock_rtc_event_log_, |
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); |
| @@ -600,7 +611,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(ssrc, kSeqNum, capture_time_ms, false, |
| PacketInfo::kNotAProbe); |
| // Process send bucket. Packet should now be sent. |
| @@ -620,9 +631,11 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { |
| // This test sends 1 regular video packet, then 4 padding packets, and then |
| // 1 more regular packet. |
| TEST_F(RtpSenderTest, SendPadding) { |
| + uint32_t ssrc; |
| // Make all (non-padding) packets go to send queue. |
| EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
| - _, kSeqNum, _, _, _)); |
| + _, kSeqNum, _, _, _)) |
| + .WillOnce(testing::SaveArg<1>(&ssrc)); |
| EXPECT_CALL(mock_rtc_event_log_, |
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) |
| .Times(1 + 4 + 1); |
| @@ -659,7 +672,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(ssrc, 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. |
| @@ -710,7 +723,7 @@ TEST_F(RtpSenderTest, SendPadding) { |
| kAllowRetransmission, |
| RtpPacketSender::kNormalPriority)); |
| - rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false, |
| + rtp_sender_->TimeToSendPacket(ssrc, seq_num, capture_time_ms, false, |
| PacketInfo::kNotAProbe); |
| // Process send bucket. |
| EXPECT_EQ(++total_packets_sent, transport_.packets_sent()); |
| @@ -738,11 +751,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); |
| + uint32_t ssrc; |
| + EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
| + .Times(1) |
| + .WillOnce(testing::SaveArg<1>(&ssrc)); |
| SendGenericPayload(); // Packet passed to pacer. |
| const bool kIsRetransmit = false; |
| - rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
| + rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(), |
| kIsRetransmit, PacketInfo::kNotAProbe); |
| EXPECT_EQ(1, transport_.packets_sent()); |
| } |
| @@ -756,11 +772,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); |
| + uint32_t ssrc; |
| + EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
| + .Times(1) |
| + .WillOnce(testing::SaveArg<1>(&ssrc)); |
| SendGenericPayload(); // Packet passed to pacer. |
| const bool kIsRetransmit = true; |
| - rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
| + rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(), |
| kIsRetransmit, PacketInfo::kNotAProbe); |
| EXPECT_EQ(1, transport_.packets_sent()); |
| } |
| @@ -777,11 +796,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); |
| + uint32_t ssrc; |
| + EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) |
| + .Times(1) |
| + .WillOnce(testing::SaveArg<1>(&ssrc)); |
| SendGenericPayload(); // Packet passed to pacer. |
| const bool kIsRetransmit = false; |
| - rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
| + rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(), |
| kIsRetransmit, PacketInfo::kNotAProbe); |
| EXPECT_EQ(1, transport_.packets_sent()); |
| } |
| @@ -812,9 +834,11 @@ TEST_F(RtpSenderTest, SendRedundantPayloads) { |
| const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700, |
| 750, 800, 850, 900, 950}; |
| // Expect all packets go through the pacer. |
| + uint32_t ssrc; |
| EXPECT_CALL(mock_paced_sender_, |
| InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _)) |
| - .Times(kNumPayloadSizes); |
| + .Times(kNumPayloadSizes) |
| + .WillOnce(testing::SaveArg<1>(&ssrc)); |
| EXPECT_CALL(mock_rtc_event_log_, |
| LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)) |
| .Times(kNumPayloadSizes); |
| @@ -824,7 +848,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(ssrc, seq_num++, capture_time_ms, false, |
| PacketInfo::kNotAProbe); |
| fake_clock_.AdvanceTimeMilliseconds(33); |
| } |
| @@ -926,25 +950,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) { |