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 |