Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(315)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc

Issue 2190913002: Fix bug where transport sequence numbers are allocated for packets without the header extension reg… (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Comments addressed. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | webrtc/video/end_to_end_tests.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtp_sender.cc ('k') | webrtc/video/end_to_end_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698