| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 void SetUpRtpSender(bool pacer) { | 145 void SetUpRtpSender(bool pacer) { |
| 146 rtp_sender_.reset(new RTPSender( | 146 rtp_sender_.reset(new RTPSender( |
| 147 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, | 147 false, &fake_clock_, &transport_, pacer ? &mock_paced_sender_ : nullptr, |
| 148 &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, | 148 &seq_num_allocator_, nullptr, nullptr, nullptr, nullptr, |
| 149 &mock_rtc_event_log_, &send_packet_observer_, | 149 &mock_rtc_event_log_, &send_packet_observer_, |
| 150 &retransmission_rate_limiter_)); | 150 &retransmission_rate_limiter_)); |
| 151 rtp_sender_->SetSequenceNumber(kSeqNum); | 151 rtp_sender_->SetSequenceNumber(kSeqNum); |
| 152 } | 152 } |
| 153 | 153 |
| 154 SimulatedClock fake_clock_; | 154 SimulatedClock fake_clock_; |
| 155 MockRtcEventLog mock_rtc_event_log_; | 155 testing::NiceMock<MockRtcEventLog> mock_rtc_event_log_; |
| 156 MockRtpPacketSender mock_paced_sender_; | 156 MockRtpPacketSender mock_paced_sender_; |
| 157 MockTransportSequenceNumberAllocator seq_num_allocator_; | 157 testing::StrictMock<MockTransportSequenceNumberAllocator> seq_num_allocator_; |
| 158 MockSendPacketObserver send_packet_observer_; | 158 testing::StrictMock<MockSendPacketObserver> send_packet_observer_; |
| 159 RateLimiter retransmission_rate_limiter_; | 159 RateLimiter retransmission_rate_limiter_; |
| 160 std::unique_ptr<RTPSender> rtp_sender_; | 160 std::unique_ptr<RTPSender> rtp_sender_; |
| 161 int payload_; | 161 int payload_; |
| 162 LoopbackTransportTest transport_; | 162 LoopbackTransportTest transport_; |
| 163 const bool kMarkerBit; | 163 const bool kMarkerBit; |
| 164 uint8_t packet_[kMaxPacketLength]; | 164 uint8_t packet_[kMaxPacketLength]; |
| 165 | 165 |
| 166 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { | 166 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { |
| 167 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); | 167 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); |
| 168 } | 168 } |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr); | 484 const bool valid_rtp_header2 = rtp_parser.Parse(&rtp_header2, nullptr); |
| 485 | 485 |
| 486 ASSERT_TRUE(valid_rtp_header2); | 486 ASSERT_TRUE(valid_rtp_header2); |
| 487 VerifyRTPHeaderCommon(rtp_header2); | 487 VerifyRTPHeaderCommon(rtp_header2); |
| 488 EXPECT_EQ(length, rtp_header2.headerLength); | 488 EXPECT_EQ(length, rtp_header2.headerLength); |
| 489 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime); | 489 EXPECT_FALSE(rtp_header2.extension.hasAbsoluteSendTime); |
| 490 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime); | 490 EXPECT_EQ(0u, rtp_header2.extension.absoluteSendTime); |
| 491 } | 491 } |
| 492 | 492 |
| 493 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { | 493 TEST_F(RtpSenderTestWithoutPacer, SendsPacketsWithTransportSequenceNumber) { |
| 494 // Ignore rtc event calls. | |
| 495 EXPECT_CALL(mock_rtc_event_log_, | |
| 496 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | |
| 497 | |
| 498 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( | 494 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 499 kRtpExtensionTransportSequenceNumber, | 495 kRtpExtensionTransportSequenceNumber, |
| 500 kTransportSequenceNumberExtensionId)); | 496 kTransportSequenceNumberExtensionId)); |
| 501 | 497 |
| 502 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 498 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 503 .WillOnce(testing::Return(kTransportSequenceNumber)); | 499 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 504 EXPECT_CALL(send_packet_observer_, | 500 EXPECT_CALL(send_packet_observer_, |
| 505 OnSendPacket(kTransportSequenceNumber, _, _)) | 501 OnSendPacket(kTransportSequenceNumber, _, _)) |
| 506 .Times(1); | 502 .Times(1); |
| 507 | 503 |
| 508 SendGenericPayload(); | 504 SendGenericPayload(); |
| 509 | 505 |
| 510 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, | 506 RtpUtility::RtpHeaderParser rtp_parser(transport_.last_sent_packet_, |
| 511 transport_.last_sent_packet_len_); | 507 transport_.last_sent_packet_len_); |
| 512 webrtc::RTPHeader rtp_header; | 508 webrtc::RTPHeader rtp_header; |
| 513 RtpHeaderExtensionMap map; | 509 RtpHeaderExtensionMap map; |
| 514 map.Register(kRtpExtensionTransportSequenceNumber, | 510 map.Register(kRtpExtensionTransportSequenceNumber, |
| 515 kTransportSequenceNumberExtensionId); | 511 kTransportSequenceNumberExtensionId); |
| 516 EXPECT_TRUE(rtp_parser.Parse(&rtp_header, &map)); | 512 EXPECT_TRUE(rtp_parser.Parse(&rtp_header, &map)); |
| 517 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber); | 513 EXPECT_TRUE(rtp_header.extension.hasTransportSequenceNumber); |
| 518 EXPECT_EQ(kTransportSequenceNumber, | 514 EXPECT_EQ(kTransportSequenceNumber, |
| 519 rtp_header.extension.transportSequenceNumber); | 515 rtp_header.extension.transportSequenceNumber); |
| 520 EXPECT_EQ(transport_.last_packet_id_, | 516 EXPECT_EQ(transport_.last_packet_id_, |
| 521 rtp_header.extension.transportSequenceNumber); | 517 rtp_header.extension.transportSequenceNumber); |
| 522 } | 518 } |
| 523 | 519 |
| 520 TEST_F(RtpSenderTestWithoutPacer, NoAllocationIfNotRegistered) { |
| 521 SendGenericPayload(); |
| 522 } |
| 523 |
| 524 TEST_F(RtpSenderTestWithoutPacer, OnSendPacketUpdated) { | 524 TEST_F(RtpSenderTestWithoutPacer, OnSendPacketUpdated) { |
| 525 EXPECT_CALL(mock_rtc_event_log_, // Ignore rtc event calls. | 525 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 526 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 526 kRtpExtensionTransportSequenceNumber, |
| 527 | 527 kTransportSequenceNumberExtensionId)); |
| 528 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 528 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 529 .WillOnce(testing::Return(kTransportSequenceNumber)); | 529 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 530 EXPECT_CALL(send_packet_observer_, | 530 EXPECT_CALL(send_packet_observer_, |
| 531 OnSendPacket(kTransportSequenceNumber, _, _)) | 531 OnSendPacket(kTransportSequenceNumber, _, _)) |
| 532 .Times(1); | 532 .Times(1); |
| 533 | 533 |
| 534 SendGenericPayload(); | 534 SendGenericPayload(); |
| 535 } | 535 } |
| 536 | 536 |
| 537 // Test CVO header extension is only set when marker bit is true. | 537 // Test CVO header extension is only set when marker bit is true. |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 965 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); | 965 EXPECT_EQ(seq_num, rtp_header.sequenceNumber); |
| 966 EXPECT_EQ(timestamp, rtp_header.timestamp); | 966 EXPECT_EQ(timestamp, rtp_header.timestamp); |
| 967 // Verify transmission time offset. This packet is sent without delay. | 967 // Verify transmission time offset. This packet is sent without delay. |
| 968 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); | 968 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); |
| 969 uint64_t expected_send_time = | 969 uint64_t expected_send_time = |
| 970 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); | 970 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); |
| 971 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); | 971 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); |
| 972 } | 972 } |
| 973 | 973 |
| 974 TEST_F(RtpSenderTest, OnSendPacketUpdated) { | 974 TEST_F(RtpSenderTest, OnSendPacketUpdated) { |
| 975 EXPECT_CALL(mock_rtc_event_log_, // Ignore rtc event calls. | 975 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 976 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 976 kRtpExtensionTransportSequenceNumber, |
| 977 kTransportSequenceNumberExtensionId)); |
| 977 rtp_sender_->SetStorePacketsStatus(true, 10); | 978 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 978 | 979 |
| 979 EXPECT_CALL(send_packet_observer_, | 980 EXPECT_CALL(send_packet_observer_, |
| 980 OnSendPacket(kTransportSequenceNumber, _, _)) | 981 OnSendPacket(kTransportSequenceNumber, _, _)) |
| 981 .Times(1); | 982 .Times(1); |
| 982 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 983 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 983 .WillOnce(testing::Return(kTransportSequenceNumber)); | 984 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 984 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); | 985 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); |
| 985 | 986 |
| 986 SendGenericPayload(); // Packet passed to pacer. | 987 SendGenericPayload(); // Packet passed to pacer. |
| 987 const bool kIsRetransmit = false; | 988 const bool kIsRetransmit = false; |
| 988 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), | 989 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
| 989 kIsRetransmit, PacketInfo::kNotAProbe); | 990 kIsRetransmit, PacketInfo::kNotAProbe); |
| 990 EXPECT_EQ(1, transport_.packets_sent_); | 991 EXPECT_EQ(1, transport_.packets_sent_); |
| 991 } | 992 } |
| 992 | 993 |
| 993 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { | 994 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) { |
| 994 EXPECT_CALL(mock_rtc_event_log_, // Ignore rtc event calls. | 995 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 995 LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _)); | 996 kRtpExtensionTransportSequenceNumber, |
| 997 kTransportSequenceNumberExtensionId)); |
| 996 rtp_sender_->SetStorePacketsStatus(true, 10); | 998 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 997 | 999 |
| 998 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 1000 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
| 999 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) | 1001 EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber()) |
| 1000 .WillOnce(testing::Return(kTransportSequenceNumber)); | 1002 .WillOnce(testing::Return(kTransportSequenceNumber)); |
| 1001 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); | 1003 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); |
| 1002 | 1004 |
| 1003 SendGenericPayload(); // Packet passed to pacer. | 1005 SendGenericPayload(); // Packet passed to pacer. |
| 1004 const bool kIsRetransmit = true; | 1006 const bool kIsRetransmit = true; |
| 1005 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), | 1007 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
| 1006 kIsRetransmit, PacketInfo::kNotAProbe); | 1008 kIsRetransmit, PacketInfo::kNotAProbe); |
| 1007 EXPECT_EQ(1, transport_.packets_sent_); | 1009 EXPECT_EQ(1, transport_.packets_sent_); |
| 1008 } | 1010 } |
| 1009 | 1011 |
| 1010 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { | 1012 TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) { |
| 1011 rtp_sender_.reset(new RTPSender( | 1013 rtp_sender_.reset(new RTPSender( |
| 1012 false, &fake_clock_, &transport_, &mock_paced_sender_, | 1014 false, &fake_clock_, &transport_, &mock_paced_sender_, |
| 1013 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, | 1015 nullptr /* TransportSequenceNumberAllocator */, nullptr, nullptr, nullptr, |
| 1014 nullptr, nullptr, &send_packet_observer_, nullptr)); | 1016 nullptr, nullptr, &send_packet_observer_, nullptr)); |
| 1017 EXPECT_EQ(0, rtp_sender_->RegisterRtpHeaderExtension( |
| 1018 kRtpExtensionTransportSequenceNumber, |
| 1019 kTransportSequenceNumberExtensionId)); |
| 1015 rtp_sender_->SetSequenceNumber(kSeqNum); | 1020 rtp_sender_->SetSequenceNumber(kSeqNum); |
| 1016 rtp_sender_->SetStorePacketsStatus(true, 10); | 1021 rtp_sender_->SetStorePacketsStatus(true, 10); |
| 1017 | 1022 |
| 1018 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); | 1023 EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0); |
| 1019 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); | 1024 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1); |
| 1020 | 1025 |
| 1021 SendGenericPayload(); // Packet passed to pacer. | 1026 SendGenericPayload(); // Packet passed to pacer. |
| 1022 const bool kIsRetransmit = false; | 1027 const bool kIsRetransmit = false; |
| 1023 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), | 1028 rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(), |
| 1024 kIsRetransmit, PacketInfo::kNotAProbe); | 1029 kIsRetransmit, PacketInfo::kNotAProbe); |
| (...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1614 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), | 1619 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), |
| 1615 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); | 1620 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); |
| 1616 | 1621 |
| 1617 // Verify that this packet does have CVO byte. | 1622 // Verify that this packet does have CVO byte. |
| 1618 VerifyCVOPacket( | 1623 VerifyCVOPacket( |
| 1619 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), | 1624 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), |
| 1620 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, | 1625 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, |
| 1621 hdr.rotation); | 1626 hdr.rotation); |
| 1622 } | 1627 } |
| 1623 } // namespace webrtc | 1628 } // namespace webrtc |
| OLD | NEW |