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

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

Issue 1623543002: Refactor RtpSender and SSRCDatabase a bit. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Remove thread checker due to voe::ChannelOwner Created 4 years, 11 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
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 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 transport_(), 128 transport_(),
129 kMarkerBit(true) { 129 kMarkerBit(true) {
130 } 130 }
131 131
132 void SetUp() override { SetUpRtpSender(true); } 132 void SetUp() override { SetUpRtpSender(true); }
133 133
134 void SetUpRtpSender(bool pacer) { 134 void SetUpRtpSender(bool pacer) {
135 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, 135 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr,
136 pacer ? &mock_paced_sender_ : nullptr, 136 pacer ? &mock_paced_sender_ : nullptr,
137 nullptr, nullptr, nullptr, nullptr, nullptr, 137 nullptr, nullptr, nullptr, nullptr, nullptr,
138 &mock_rtc_event_log_)); 138 &mock_rtc_event_log_, &ssrc_database_));
139 rtp_sender_->SetSequenceNumber(kSeqNum); 139 rtp_sender_->SetSequenceNumber(kSeqNum);
140 } 140 }
141 141
142 SimulatedClock fake_clock_;
143 MockRtcEventLog mock_rtc_event_log_;
144 MockRtpPacketSender mock_paced_sender_;
145 rtc::scoped_ptr<RTPSender> rtp_sender_;
146 int payload_;
147 LoopbackTransportTest transport_;
148 const bool kMarkerBit;
149 uint8_t packet_[kMaxPacketLength];
150
151 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) { 142 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header) {
152 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0); 143 VerifyRTPHeaderCommon(rtp_header, kMarkerBit, 0);
153 } 144 }
154 145
155 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) { 146 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, bool marker_bit) {
156 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0); 147 VerifyRTPHeaderCommon(rtp_header, marker_bit, 0);
157 } 148 }
158 149
159 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header, 150 void VerifyRTPHeaderCommon(const RTPHeader& rtp_header,
160 bool marker_bit, 151 bool marker_bit,
(...skipping 11 matching lines...) Expand all
172 uint32_t timestamp = capture_time_ms * 90; 163 uint32_t timestamp = capture_time_ms * 90;
173 int32_t rtp_length = rtp_sender_->BuildRTPheader( 164 int32_t rtp_length = rtp_sender_->BuildRTPheader(
174 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms); 165 packet_, kPayload, kMarkerBit, timestamp, capture_time_ms);
175 ASSERT_GE(rtp_length, 0); 166 ASSERT_GE(rtp_length, 0);
176 167
177 // Packet should be stored in a send bucket. 168 // Packet should be stored in a send bucket.
178 EXPECT_EQ(0, rtp_sender_->SendToNetwork( 169 EXPECT_EQ(0, rtp_sender_->SendToNetwork(
179 packet_, payload_length, rtp_length, capture_time_ms, 170 packet_, payload_length, rtp_length, capture_time_ms,
180 kAllowRetransmission, RtpPacketSender::kNormalPriority)); 171 kAllowRetransmission, RtpPacketSender::kNormalPriority));
181 } 172 }
173
174 SSRCDatabase ssrc_database_;
175 SimulatedClock fake_clock_;
176 MockRtcEventLog mock_rtc_event_log_;
177 MockRtpPacketSender mock_paced_sender_;
178 rtc::scoped_ptr<RTPSender> rtp_sender_;
179 int payload_;
180 LoopbackTransportTest transport_;
181 const bool kMarkerBit;
182 uint8_t packet_[kMaxPacketLength];
182 }; 183 };
183 184
184 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our 185 // TODO(pbos): Move tests over from WithoutPacer to RtpSenderTest as this is our
185 // default code path. 186 // default code path.
186 class RtpSenderTestWithoutPacer : public RtpSenderTest { 187 class RtpSenderTestWithoutPacer : public RtpSenderTest {
187 public: 188 public:
188 void SetUp() override { SetUpRtpSender(false); } 189 void SetUp() override { SetUpRtpSender(false); }
189 }; 190 };
190 191
191 class RtpSenderVideoTest : public RtpSenderTest { 192 class RtpSenderVideoTest : public RtpSenderTest {
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 EXPECT_EQ(timestamp, rtp_header.timestamp); 898 EXPECT_EQ(timestamp, rtp_header.timestamp);
898 // Verify transmission time offset. This packet is sent without delay. 899 // Verify transmission time offset. This packet is sent without delay.
899 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset); 900 EXPECT_EQ(0, rtp_header.extension.transmissionTimeOffset);
900 uint64_t expected_send_time = 901 uint64_t expected_send_time =
901 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds()); 902 ConvertMsToAbsSendTime(fake_clock_.TimeInMilliseconds());
902 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime); 903 EXPECT_EQ(expected_send_time, rtp_header.extension.absoluteSendTime);
903 } 904 }
904 905
905 TEST_F(RtpSenderTest, SendRedundantPayloads) { 906 TEST_F(RtpSenderTest, SendRedundantPayloads) {
906 MockTransport transport; 907 MockTransport transport;
907 rtp_sender_.reset(new RTPSender( 908 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport, nullptr,
908 false, &fake_clock_, &transport, nullptr, &mock_paced_sender_, nullptr, 909 &mock_paced_sender_, nullptr, nullptr,
909 nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_)); 910 nullptr, nullptr, nullptr,
911 &mock_rtc_event_log_, &ssrc_database_));
910 rtp_sender_->SetSequenceNumber(kSeqNum); 912 rtp_sender_->SetSequenceNumber(kSeqNum);
911 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload); 913 rtp_sender_->SetRtxPayloadType(kRtxPayload, kPayload);
912 914
913 uint16_t seq_num = kSeqNum; 915 uint16_t seq_num = kSeqNum;
914 rtp_sender_->SetStorePacketsStatus(true, 10); 916 rtp_sender_->SetStorePacketsStatus(true, 10);
915 int32_t rtp_header_len = kRtpHeaderSize; 917 int32_t rtp_header_len = kRtpHeaderSize;
916 EXPECT_EQ( 918 EXPECT_EQ(
917 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime, 919 0, rtp_sender_->RegisterRtpHeaderExtension(kRtpExtensionAbsoluteSendTime,
918 kAbsoluteSendTimeExtensionId)); 920 kAbsoluteSendTimeExtensionId));
919 rtp_header_len += 4; // 4 bytes extension. 921 rtp_header_len += 4; // 4 bytes extension.
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 ++num_calls_; 1042 ++num_calls_;
1041 ssrc_ = ssrc; 1043 ssrc_ = ssrc;
1042 frame_counts_ = frame_counts; 1044 frame_counts_ = frame_counts;
1043 } 1045 }
1044 1046
1045 uint32_t num_calls_; 1047 uint32_t num_calls_;
1046 uint32_t ssrc_; 1048 uint32_t ssrc_;
1047 FrameCounts frame_counts_; 1049 FrameCounts frame_counts_;
1048 } callback; 1050 } callback;
1049 1051
1050 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, 1052 rtp_sender_.reset(new RTPSender(
1051 &mock_paced_sender_, nullptr, nullptr, 1053 false, &fake_clock_, &transport_, nullptr, &mock_paced_sender_, nullptr,
1052 nullptr, &callback, nullptr, nullptr)); 1054 nullptr, nullptr, &callback, nullptr, nullptr, &ssrc_database_));
1053 1055
1054 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 1056 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
1055 const uint8_t payload_type = 127; 1057 const uint8_t payload_type = 127;
1056 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 1058 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
1057 0, 1500)); 1059 0, 1500));
1058 uint8_t payload[] = {47, 11, 32, 93, 89}; 1060 uint8_t payload[] = {47, 11, 32, 93, 89};
1059 rtp_sender_->SetStorePacketsStatus(true, 1); 1061 rtp_sender_->SetStorePacketsStatus(true, 1);
1060 uint32_t ssrc = rtp_sender_->SSRC(); 1062 uint32_t ssrc = rtp_sender_->SSRC();
1061 1063
1062 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)) 1064 EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1098 retransmit_stats_ = retransmit_stats; 1100 retransmit_stats_ = retransmit_stats;
1099 } 1101 }
1100 1102
1101 uint32_t num_calls_; 1103 uint32_t num_calls_;
1102 uint32_t ssrc_; 1104 uint32_t ssrc_;
1103 BitrateStatistics total_stats_; 1105 BitrateStatistics total_stats_;
1104 BitrateStatistics retransmit_stats_; 1106 BitrateStatistics retransmit_stats_;
1105 } callback; 1107 } callback;
1106 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, 1108 rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr,
1107 nullptr, nullptr, nullptr, &callback, nullptr, 1109 nullptr, nullptr, nullptr, &callback, nullptr,
1108 nullptr, nullptr)); 1110 nullptr, nullptr, &ssrc_database_));
1109 1111
1110 // Simulate kNumPackets sent with kPacketInterval ms intervals. 1112 // Simulate kNumPackets sent with kPacketInterval ms intervals.
1111 const uint32_t kNumPackets = 15; 1113 const uint32_t kNumPackets = 15;
1112 const uint32_t kPacketInterval = 20; 1114 const uint32_t kPacketInterval = 20;
1113 // Overhead = 12 bytes RTP header + 1 byte generic header. 1115 // Overhead = 12 bytes RTP header + 1 byte generic header.
1114 const uint32_t kPacketOverhead = 13; 1116 const uint32_t kPacketOverhead = 13;
1115 1117
1116 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC"; 1118 char payload_name[RTP_PAYLOAD_NAME_SIZE] = "GENERIC";
1117 const uint8_t payload_type = 127; 1119 const uint8_t payload_type = 127;
1118 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000, 1120 ASSERT_EQ(0, rtp_sender_->RegisterPayload(payload_name, payload_type, 90000,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1151 } 1153 }
1152 1154
1153 class RtpSenderAudioTest : public RtpSenderTest { 1155 class RtpSenderAudioTest : public RtpSenderTest {
1154 protected: 1156 protected:
1155 RtpSenderAudioTest() {} 1157 RtpSenderAudioTest() {}
1156 1158
1157 void SetUp() override { 1159 void SetUp() override {
1158 payload_ = kAudioPayload; 1160 payload_ = kAudioPayload;
1159 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr, 1161 rtp_sender_.reset(new RTPSender(true, &fake_clock_, &transport_, nullptr,
1160 nullptr, nullptr, nullptr, nullptr, nullptr, 1162 nullptr, nullptr, nullptr, nullptr, nullptr,
1161 nullptr, nullptr)); 1163 nullptr, nullptr, &ssrc_database_));
1162 rtp_sender_->SetSequenceNumber(kSeqNum); 1164 rtp_sender_->SetSequenceNumber(kSeqNum);
1163 } 1165 }
1164 }; 1166 };
1165 1167
1166 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) { 1168 TEST_F(RtpSenderTestWithoutPacer, StreamDataCountersCallbacks) {
1167 class TestCallback : public StreamDataCountersCallback { 1169 class TestCallback : public StreamDataCountersCallback {
1168 public: 1170 public:
1169 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {} 1171 TestCallback() : StreamDataCountersCallback(), ssrc_(0), counters_() {}
1170 virtual ~TestCallback() {} 1172 virtual ~TestCallback() {}
1171 1173
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
1477 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()), 1479 reinterpret_cast<uint8_t*>(transport_.sent_packets_[0]->data()),
1478 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation); 1480 transport_.sent_packets_[0]->size(), true, &map, kSeqNum, hdr.rotation);
1479 1481
1480 // Verify that this packet does have CVO byte. 1482 // Verify that this packet does have CVO byte.
1481 VerifyCVOPacket( 1483 VerifyCVOPacket(
1482 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()), 1484 reinterpret_cast<uint8_t*>(transport_.sent_packets_[1]->data()),
1483 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1, 1485 transport_.sent_packets_[1]->size(), true, &map, kSeqNum + 1,
1484 hdr.rotation); 1486 hdr.rotation);
1485 } 1487 }
1486 } // namespace webrtc 1488 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698