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

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

Issue 1696203002: [rtp_rtcp] rtc::scoped_ptr<rtcp::RawPacket> replaced with rtc::Buffer (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 10 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 TEST_F(RtcpReceiverTest, BrokenPacketIsIgnored) { 153 TEST_F(RtcpReceiverTest, BrokenPacketIsIgnored) {
154 const uint8_t bad_packet[] = {0, 0, 0, 0}; 154 const uint8_t bad_packet[] = {0, 0, 0, 0};
155 EXPECT_EQ(0, InjectRtcpPacket(bad_packet, sizeof(bad_packet))); 155 EXPECT_EQ(0, InjectRtcpPacket(bad_packet, sizeof(bad_packet)));
156 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); 156 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags);
157 } 157 }
158 158
159 TEST_F(RtcpReceiverTest, InjectSrPacket) { 159 TEST_F(RtcpReceiverTest, InjectSrPacket) {
160 const uint32_t kSenderSsrc = 0x10203; 160 const uint32_t kSenderSsrc = 0x10203;
161 rtcp::SenderReport sr; 161 rtcp::SenderReport sr;
162 sr.From(kSenderSsrc); 162 sr.From(kSenderSsrc);
163 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); 163 rtc::Buffer packet = sr.Build();
164 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 164 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
165 // The parser will note the remote SSRC on a SR from other than his 165 // The parser will note the remote SSRC on a SR from other than his
166 // expected peer, but will not flag that he's gotten a packet. 166 // expected peer, but will not flag that he's gotten a packet.
167 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); 167 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC);
168 EXPECT_EQ(0U, 168 EXPECT_EQ(0U, kRtcpSr & rtcp_packet_info_.rtcpPacketTypeFlags);
169 kRtcpSr & rtcp_packet_info_.rtcpPacketTypeFlags);
170 } 169 }
171 170
172 TEST_F(RtcpReceiverTest, InjectSrPacketFromExpectedPeer) { 171 TEST_F(RtcpReceiverTest, InjectSrPacketFromExpectedPeer) {
173 const uint32_t kSenderSsrc = 0x10203; 172 const uint32_t kSenderSsrc = 0x10203;
174 rtcp_receiver_->SetRemoteSSRC(kSenderSsrc); 173 rtcp_receiver_->SetRemoteSSRC(kSenderSsrc);
175 rtcp::SenderReport sr; 174 rtcp::SenderReport sr;
176 sr.From(kSenderSsrc); 175 sr.From(kSenderSsrc);
177 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); 176 rtc::Buffer packet = sr.Build();
178 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 177 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
179 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); 178 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC);
180 EXPECT_EQ(kRtcpSr, rtcp_packet_info_.rtcpPacketTypeFlags); 179 EXPECT_EQ(kRtcpSr, rtcp_packet_info_.rtcpPacketTypeFlags);
181 } 180 }
182 181
183 TEST_F(RtcpReceiverTest, InjectRrPacket) { 182 TEST_F(RtcpReceiverTest, InjectRrPacket) {
184 const uint32_t kSenderSsrc = 0x10203; 183 const uint32_t kSenderSsrc = 0x10203;
185 rtcp::ReceiverReport rr; 184 rtcp::ReceiverReport rr;
186 rr.From(kSenderSsrc); 185 rr.From(kSenderSsrc);
187 rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); 186 rtc::Buffer packet = rr.Build();
188 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 187 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
189 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); 188 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC);
190 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); 189 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags);
191 ASSERT_EQ(0u, rtcp_packet_info_.report_blocks.size()); 190 ASSERT_EQ(0u, rtcp_packet_info_.report_blocks.size());
192 } 191 }
193 192
194 TEST_F(RtcpReceiverTest, InjectRrPacketWithReportBlockNotToUsIgnored) { 193 TEST_F(RtcpReceiverTest, InjectRrPacketWithReportBlockNotToUsIgnored) {
195 const uint32_t kSenderSsrc = 0x10203; 194 const uint32_t kSenderSsrc = 0x10203;
196 const uint32_t kSourceSsrc = 0x123456; 195 const uint32_t kSourceSsrc = 0x123456;
197 std::set<uint32_t> ssrcs; 196 std::set<uint32_t> ssrcs;
198 ssrcs.insert(kSourceSsrc); 197 ssrcs.insert(kSourceSsrc);
199 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 198 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
200 199
201 rtcp::ReportBlock rb; 200 rtcp::ReportBlock rb;
202 rb.To(kSourceSsrc + 1); 201 rb.To(kSourceSsrc + 1);
203 rtcp::ReceiverReport rr; 202 rtcp::ReceiverReport rr;
204 rr.From(kSenderSsrc); 203 rr.From(kSenderSsrc);
205 rr.WithReportBlock(rb); 204 rr.WithReportBlock(rb);
206 rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); 205 rtc::Buffer packet = rr.Build();
207 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 206 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
208 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); 207 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC);
209 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); 208 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags);
210 ASSERT_EQ(0u, rtcp_packet_info_.report_blocks.size()); 209 ASSERT_EQ(0u, rtcp_packet_info_.report_blocks.size());
211 210
212 std::vector<RTCPReportBlock> received_blocks; 211 std::vector<RTCPReportBlock> received_blocks;
213 rtcp_receiver_->StatisticsReceived(&received_blocks); 212 rtcp_receiver_->StatisticsReceived(&received_blocks);
214 EXPECT_TRUE(received_blocks.empty()); 213 EXPECT_TRUE(received_blocks.empty());
215 } 214 }
216 215
217 TEST_F(RtcpReceiverTest, InjectRrPacketWithOneReportBlock) { 216 TEST_F(RtcpReceiverTest, InjectRrPacketWithOneReportBlock) {
218 const uint32_t kSenderSsrc = 0x10203; 217 const uint32_t kSenderSsrc = 0x10203;
219 const uint32_t kSourceSsrc = 0x123456; 218 const uint32_t kSourceSsrc = 0x123456;
220 std::set<uint32_t> ssrcs; 219 std::set<uint32_t> ssrcs;
221 ssrcs.insert(kSourceSsrc); 220 ssrcs.insert(kSourceSsrc);
222 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 221 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
223 222
224 rtcp::ReportBlock rb; 223 rtcp::ReportBlock rb;
225 rb.To(kSourceSsrc); 224 rb.To(kSourceSsrc);
226 rtcp::ReceiverReport rr; 225 rtcp::ReceiverReport rr;
227 rr.From(kSenderSsrc); 226 rr.From(kSenderSsrc);
228 rr.WithReportBlock(rb); 227 rr.WithReportBlock(rb);
229 rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); 228 rtc::Buffer packet = rr.Build();
230 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 229 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
231 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); 230 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC);
232 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); 231 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags);
233 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); 232 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size());
234 233
235 std::vector<RTCPReportBlock> received_blocks; 234 std::vector<RTCPReportBlock> received_blocks;
236 rtcp_receiver_->StatisticsReceived(&received_blocks); 235 rtcp_receiver_->StatisticsReceived(&received_blocks);
237 EXPECT_EQ(1u, received_blocks.size()); 236 EXPECT_EQ(1u, received_blocks.size());
238 } 237 }
239 238
240 TEST_F(RtcpReceiverTest, InjectRrPacketWithTwoReportBlocks) { 239 TEST_F(RtcpReceiverTest, InjectRrPacketWithTwoReportBlocks) {
(...skipping 15 matching lines...) Expand all
256 255
257 rtcp::ReportBlock rb2; 256 rtcp::ReportBlock rb2;
258 rb2.To(kSourceSsrcs[1]); 257 rb2.To(kSourceSsrcs[1]);
259 rb2.WithExtHighestSeqNum(kSequenceNumbers[1]); 258 rb2.WithExtHighestSeqNum(kSequenceNumbers[1]);
260 259
261 rtcp::ReceiverReport rr1; 260 rtcp::ReceiverReport rr1;
262 rr1.From(kSenderSsrc); 261 rr1.From(kSenderSsrc);
263 rr1.WithReportBlock(rb1); 262 rr1.WithReportBlock(rb1);
264 rr1.WithReportBlock(rb2); 263 rr1.WithReportBlock(rb2);
265 264
266 rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); 265 rtc::Buffer p1 = rr1.Build();
267 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); 266 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size()));
268 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); 267 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size());
269 EXPECT_EQ(10, rtcp_packet_info_.report_blocks.front().fractionLost); 268 EXPECT_EQ(10, rtcp_packet_info_.report_blocks.front().fractionLost);
270 EXPECT_EQ(0, rtcp_packet_info_.report_blocks.back().fractionLost); 269 EXPECT_EQ(0, rtcp_packet_info_.report_blocks.back().fractionLost);
271 270
272 rtcp::ReportBlock rb3; 271 rtcp::ReportBlock rb3;
273 rb3.To(kSourceSsrcs[0]); 272 rb3.To(kSourceSsrcs[0]);
274 rb3.WithExtHighestSeqNum(kSequenceNumbers[0]); 273 rb3.WithExtHighestSeqNum(kSequenceNumbers[0]);
275 rb3.WithFractionLost(kFracLost[0]); 274 rb3.WithFractionLost(kFracLost[0]);
276 rb3.WithCumulativeLost(kCumLost[0]); 275 rb3.WithCumulativeLost(kCumLost[0]);
277 276
278 rtcp::ReportBlock rb4; 277 rtcp::ReportBlock rb4;
279 rb4.To(kSourceSsrcs[1]); 278 rb4.To(kSourceSsrcs[1]);
280 rb4.WithExtHighestSeqNum(kSequenceNumbers[1]); 279 rb4.WithExtHighestSeqNum(kSequenceNumbers[1]);
281 rb4.WithFractionLost(kFracLost[1]); 280 rb4.WithFractionLost(kFracLost[1]);
282 rb4.WithCumulativeLost(kCumLost[1]); 281 rb4.WithCumulativeLost(kCumLost[1]);
283 282
284 rtcp::ReceiverReport rr2; 283 rtcp::ReceiverReport rr2;
285 rr2.From(kSenderSsrc); 284 rr2.From(kSenderSsrc);
286 rr2.WithReportBlock(rb3); 285 rr2.WithReportBlock(rb3);
287 rr2.WithReportBlock(rb4); 286 rr2.WithReportBlock(rb4);
288 287
289 rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); 288 rtc::Buffer p2 = rr2.Build();
290 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); 289 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size()));
291 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); 290 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size());
292 EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost); 291 EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost);
293 EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.back().fractionLost); 292 EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.back().fractionLost);
294 293
295 std::vector<RTCPReportBlock> received_blocks; 294 std::vector<RTCPReportBlock> received_blocks;
296 rtcp_receiver_->StatisticsReceived(&received_blocks); 295 rtcp_receiver_->StatisticsReceived(&received_blocks);
297 EXPECT_EQ(2u, received_blocks.size()); 296 EXPECT_EQ(2u, received_blocks.size());
298 for (size_t i = 0; i < received_blocks.size(); ++i) { 297 for (size_t i = 0; i < received_blocks.size(); ++i) {
299 EXPECT_EQ(kSenderSsrc, received_blocks[i].remoteSSRC); 298 EXPECT_EQ(kSenderSsrc, received_blocks[i].remoteSSRC);
300 EXPECT_EQ(kSourceSsrcs[i], received_blocks[i].sourceSSRC); 299 EXPECT_EQ(kSourceSsrcs[i], received_blocks[i].sourceSSRC);
(...skipping 17 matching lines...) Expand all
318 317
319 rtcp::ReportBlock rb1; 318 rtcp::ReportBlock rb1;
320 rb1.To(kSourceSsrcs[0]); 319 rb1.To(kSourceSsrcs[0]);
321 rb1.WithExtHighestSeqNum(kSequenceNumbers[0]); 320 rb1.WithExtHighestSeqNum(kSequenceNumbers[0]);
322 rb1.WithFractionLost(kFracLost[0]); 321 rb1.WithFractionLost(kFracLost[0]);
323 rb1.WithCumulativeLost(kCumLost[0]); 322 rb1.WithCumulativeLost(kCumLost[0]);
324 rtcp::ReceiverReport rr1; 323 rtcp::ReceiverReport rr1;
325 rr1.From(kSenderSsrc1); 324 rr1.From(kSenderSsrc1);
326 rr1.WithReportBlock(rb1); 325 rr1.WithReportBlock(rb1);
327 326
328 rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); 327 rtc::Buffer p1 = rr1.Build();
329 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); 328 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size()));
330 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); 329 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size());
331 EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost); 330 EXPECT_EQ(kFracLost[0], rtcp_packet_info_.report_blocks.front().fractionLost);
332 331
333 std::vector<RTCPReportBlock> received_blocks; 332 std::vector<RTCPReportBlock> received_blocks;
334 rtcp_receiver_->StatisticsReceived(&received_blocks); 333 rtcp_receiver_->StatisticsReceived(&received_blocks);
335 EXPECT_EQ(1u, received_blocks.size()); 334 EXPECT_EQ(1u, received_blocks.size());
336 EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC); 335 EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC);
337 EXPECT_EQ(kSourceSsrcs[0], received_blocks[0].sourceSSRC); 336 EXPECT_EQ(kSourceSsrcs[0], received_blocks[0].sourceSSRC);
338 EXPECT_EQ(kFracLost[0], received_blocks[0].fractionLost); 337 EXPECT_EQ(kFracLost[0], received_blocks[0].fractionLost);
339 EXPECT_EQ(kCumLost[0], received_blocks[0].cumulativeLost); 338 EXPECT_EQ(kCumLost[0], received_blocks[0].cumulativeLost);
340 EXPECT_EQ(kSequenceNumbers[0], received_blocks[0].extendedHighSeqNum); 339 EXPECT_EQ(kSequenceNumbers[0], received_blocks[0].extendedHighSeqNum);
341 340
342 rtcp::ReportBlock rb2; 341 rtcp::ReportBlock rb2;
343 rb2.To(kSourceSsrcs[0]); 342 rb2.To(kSourceSsrcs[0]);
344 rb2.WithExtHighestSeqNum(kSequenceNumbers[1]); 343 rb2.WithExtHighestSeqNum(kSequenceNumbers[1]);
345 rb2.WithFractionLost(kFracLost[1]); 344 rb2.WithFractionLost(kFracLost[1]);
346 rb2.WithCumulativeLost(kCumLost[1]); 345 rb2.WithCumulativeLost(kCumLost[1]);
347 rtcp::ReceiverReport rr2; 346 rtcp::ReceiverReport rr2;
348 rr2.From(kSenderSsrc2); 347 rr2.From(kSenderSsrc2);
349 rr2.WithReportBlock(rb2); 348 rr2.WithReportBlock(rb2);
350 rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); 349 rtc::Buffer p2 = rr2.Build();
351 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); 350 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size()));
352 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size()); 351 ASSERT_EQ(1u, rtcp_packet_info_.report_blocks.size());
353 EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.front().fractionLost); 352 EXPECT_EQ(kFracLost[1], rtcp_packet_info_.report_blocks.front().fractionLost);
354 353
355 received_blocks.clear(); 354 received_blocks.clear();
356 rtcp_receiver_->StatisticsReceived(&received_blocks); 355 rtcp_receiver_->StatisticsReceived(&received_blocks);
357 ASSERT_EQ(2u, received_blocks.size()); 356 ASSERT_EQ(2u, received_blocks.size());
358 EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC); 357 EXPECT_EQ(kSenderSsrc1, received_blocks[0].remoteSSRC);
359 EXPECT_EQ(kSenderSsrc2, received_blocks[1].remoteSSRC); 358 EXPECT_EQ(kSenderSsrc2, received_blocks[1].remoteSSRC);
360 for (size_t i = 0; i < received_blocks.size(); ++i) { 359 for (size_t i = 0; i < received_blocks.size(); ++i) {
361 EXPECT_EQ(kSourceSsrcs[0], received_blocks[i].sourceSSRC); 360 EXPECT_EQ(kSourceSsrcs[0], received_blocks[i].sourceSSRC);
(...skipping 12 matching lines...) Expand all
374 373
375 // No report block received. 374 // No report block received.
376 EXPECT_EQ( 375 EXPECT_EQ(
377 -1, rtcp_receiver_->RTT(kSenderSsrc, nullptr, nullptr, nullptr, nullptr)); 376 -1, rtcp_receiver_->RTT(kSenderSsrc, nullptr, nullptr, nullptr, nullptr));
378 377
379 rtcp::ReportBlock rb; 378 rtcp::ReportBlock rb;
380 rb.To(kSourceSsrc); 379 rb.To(kSourceSsrc);
381 rtcp::ReceiverReport rr; 380 rtcp::ReceiverReport rr;
382 rr.From(kSenderSsrc); 381 rr.From(kSenderSsrc);
383 rr.WithReportBlock(rb); 382 rr.WithReportBlock(rb);
384 rtc::scoped_ptr<rtcp::RawPacket> packet(rr.Build()); 383 rtc::Buffer packet = rr.Build();
385 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 384 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
386 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC); 385 EXPECT_EQ(kSenderSsrc, rtcp_packet_info_.remoteSSRC);
387 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags); 386 EXPECT_EQ(kRtcpRr, rtcp_packet_info_.rtcpPacketTypeFlags);
388 EXPECT_EQ(1u, rtcp_packet_info_.report_blocks.size()); 387 EXPECT_EQ(1u, rtcp_packet_info_.report_blocks.size());
389 EXPECT_EQ( 388 EXPECT_EQ(
390 0, rtcp_receiver_->RTT(kSenderSsrc, nullptr, nullptr, nullptr, nullptr)); 389 0, rtcp_receiver_->RTT(kSenderSsrc, nullptr, nullptr, nullptr, nullptr));
391 390
392 // Report block not received. 391 // Report block not received.
393 EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc + 1, nullptr, nullptr, nullptr, 392 EXPECT_EQ(-1, rtcp_receiver_->RTT(kSenderSsrc + 1, nullptr, nullptr, nullptr,
394 nullptr)); 393 nullptr));
395 } 394 }
396 395
397 TEST_F(RtcpReceiverTest, InjectIjWithNoItem) { 396 TEST_F(RtcpReceiverTest, InjectIjWithNoItem) {
398 rtcp::ExtendedJitterReport ij; 397 rtcp::ExtendedJitterReport ij;
399 rtc::scoped_ptr<rtcp::RawPacket> packet(ij.Build()); 398 rtc::Buffer packet = ij.Build();
400 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 399 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
401 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); 400 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags);
402 } 401 }
403 402
404 TEST_F(RtcpReceiverTest, InjectIjWithOneItem) { 403 TEST_F(RtcpReceiverTest, InjectIjWithOneItem) {
405 rtcp::ExtendedJitterReport ij; 404 rtcp::ExtendedJitterReport ij;
406 ij.WithJitter(0x11213141); 405 ij.WithJitter(0x11213141);
407 406
408 rtc::scoped_ptr<rtcp::RawPacket> packet(ij.Build()); 407 rtc::Buffer packet = ij.Build();
409 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 408 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
410 EXPECT_EQ(kRtcpTransmissionTimeOffset, rtcp_packet_info_.rtcpPacketTypeFlags); 409 EXPECT_EQ(kRtcpTransmissionTimeOffset, rtcp_packet_info_.rtcpPacketTypeFlags);
411 EXPECT_EQ(0x11213141U, rtcp_packet_info_.interArrivalJitter); 410 EXPECT_EQ(0x11213141U, rtcp_packet_info_.interArrivalJitter);
412 } 411 }
413 412
414 TEST_F(RtcpReceiverTest, InjectAppWithNoData) { 413 TEST_F(RtcpReceiverTest, InjectAppWithNoData) {
415 rtcp::App app; 414 rtcp::App app;
416 app.WithSubType(30); 415 app.WithSubType(30);
417 uint32_t name = 'n' << 24; 416 uint32_t name = 'n' << 24;
418 name += 'a' << 16; 417 name += 'a' << 16;
419 name += 'm' << 8; 418 name += 'm' << 8;
420 name += 'e'; 419 name += 'e';
421 app.WithName(name); 420 app.WithName(name);
422 421
423 rtc::scoped_ptr<rtcp::RawPacket> packet(app.Build()); 422 rtc::Buffer packet = app.Build();
424 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 423 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
425 EXPECT_EQ(kRtcpApp, rtcp_packet_info_.rtcpPacketTypeFlags); 424 EXPECT_EQ(kRtcpApp, rtcp_packet_info_.rtcpPacketTypeFlags);
426 EXPECT_EQ(30, rtcp_packet_info_.applicationSubType); 425 EXPECT_EQ(30, rtcp_packet_info_.applicationSubType);
427 EXPECT_EQ(name, rtcp_packet_info_.applicationName); 426 EXPECT_EQ(name, rtcp_packet_info_.applicationName);
428 EXPECT_EQ(0, rtcp_packet_info_.applicationLength); 427 EXPECT_EQ(0, rtcp_packet_info_.applicationLength);
429 } 428 }
430 429
431 TEST_F(RtcpReceiverTest, InjectAppWithData) { 430 TEST_F(RtcpReceiverTest, InjectAppWithData) {
432 rtcp::App app; 431 rtcp::App app;
433 app.WithSubType(30); 432 app.WithSubType(30);
434 uint32_t name = 'n' << 24; 433 uint32_t name = 'n' << 24;
435 name += 'a' << 16; 434 name += 'a' << 16;
436 name += 'm' << 8; 435 name += 'm' << 8;
437 name += 'e'; 436 name += 'e';
438 app.WithName(name); 437 app.WithName(name);
439 const char kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'}; 438 const char kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'};
440 const size_t kDataLength = sizeof(kData) / sizeof(kData[0]); 439 const size_t kDataLength = sizeof(kData) / sizeof(kData[0]);
441 app.WithData((const uint8_t*)kData, kDataLength); 440 app.WithData((const uint8_t*)kData, kDataLength);
442 441
443 rtc::scoped_ptr<rtcp::RawPacket> packet(app.Build()); 442 rtc::Buffer packet = app.Build();
444 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 443 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
445 EXPECT_EQ(kRtcpApp, rtcp_packet_info_.rtcpPacketTypeFlags); 444 EXPECT_EQ(kRtcpApp, rtcp_packet_info_.rtcpPacketTypeFlags);
446 EXPECT_EQ(30, rtcp_packet_info_.applicationSubType); 445 EXPECT_EQ(30, rtcp_packet_info_.applicationSubType);
447 EXPECT_EQ(name, rtcp_packet_info_.applicationName); 446 EXPECT_EQ(name, rtcp_packet_info_.applicationName);
448 EXPECT_EQ(kDataLength, rtcp_packet_info_.applicationLength); 447 EXPECT_EQ(kDataLength, rtcp_packet_info_.applicationLength);
449 } 448 }
450 449
451 TEST_F(RtcpReceiverTest, InjectSdesWithOneChunk) { 450 TEST_F(RtcpReceiverTest, InjectSdesWithOneChunk) {
452 const uint32_t kSenderSsrc = 0x123456; 451 const uint32_t kSenderSsrc = 0x123456;
453 rtcp::Sdes sdes; 452 rtcp::Sdes sdes;
454 sdes.WithCName(kSenderSsrc, "alice@host"); 453 sdes.WithCName(kSenderSsrc, "alice@host");
455 454
456 rtc::scoped_ptr<rtcp::RawPacket> packet(sdes.Build()); 455 rtc::Buffer packet = sdes.Build();
457 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 456 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
458 char cName[RTCP_CNAME_SIZE]; 457 char cName[RTCP_CNAME_SIZE];
459 EXPECT_EQ(0, rtcp_receiver_->CNAME(kSenderSsrc, cName)); 458 EXPECT_EQ(0, rtcp_receiver_->CNAME(kSenderSsrc, cName));
460 EXPECT_EQ(0, strncmp(cName, "alice@host", RTCP_CNAME_SIZE)); 459 EXPECT_EQ(0, strncmp(cName, "alice@host", RTCP_CNAME_SIZE));
461 } 460 }
462 461
463 TEST_F(RtcpReceiverTest, InjectByePacket_RemovesCname) { 462 TEST_F(RtcpReceiverTest, InjectByePacket_RemovesCname) {
464 const uint32_t kSenderSsrc = 0x123456; 463 const uint32_t kSenderSsrc = 0x123456;
465 rtcp::Sdes sdes; 464 rtcp::Sdes sdes;
466 sdes.WithCName(kSenderSsrc, "alice@host"); 465 sdes.WithCName(kSenderSsrc, "alice@host");
467 466
468 rtc::scoped_ptr<rtcp::RawPacket> packet(sdes.Build()); 467 rtc::Buffer packet = sdes.Build();
469 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 468 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
470 char cName[RTCP_CNAME_SIZE]; 469 char cName[RTCP_CNAME_SIZE];
471 EXPECT_EQ(0, rtcp_receiver_->CNAME(kSenderSsrc, cName)); 470 EXPECT_EQ(0, rtcp_receiver_->CNAME(kSenderSsrc, cName));
472 471
473 // Verify that BYE removes the CNAME. 472 // Verify that BYE removes the CNAME.
474 rtcp::Bye bye; 473 rtcp::Bye bye;
475 bye.From(kSenderSsrc); 474 bye.From(kSenderSsrc);
476 rtc::scoped_ptr<rtcp::RawPacket> p2(bye.Build()); 475 rtc::Buffer p2 = bye.Build();
477 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); 476 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size()));
478 EXPECT_EQ(-1, rtcp_receiver_->CNAME(kSenderSsrc, cName)); 477 EXPECT_EQ(-1, rtcp_receiver_->CNAME(kSenderSsrc, cName));
479 } 478 }
480 479
481 TEST_F(RtcpReceiverTest, InjectByePacket_RemovesReportBlocks) { 480 TEST_F(RtcpReceiverTest, InjectByePacket_RemovesReportBlocks) {
482 const uint32_t kSenderSsrc = 0x10203; 481 const uint32_t kSenderSsrc = 0x10203;
483 const uint32_t kSourceSsrcs[] = {0x40506, 0x50607}; 482 const uint32_t kSourceSsrcs[] = {0x40506, 0x50607};
484 const int kNumSsrcs = sizeof(kSourceSsrcs) / sizeof(kSourceSsrcs[0]); 483 const int kNumSsrcs = sizeof(kSourceSsrcs) / sizeof(kSourceSsrcs[0]);
485 484
486 std::set<uint32_t> ssrcs(kSourceSsrcs, kSourceSsrcs + kNumSsrcs); 485 std::set<uint32_t> ssrcs(kSourceSsrcs, kSourceSsrcs + kNumSsrcs);
487 rtcp_receiver_->SetSsrcs(kSourceSsrcs[0], ssrcs); 486 rtcp_receiver_->SetSsrcs(kSourceSsrcs[0], ssrcs);
488 487
489 rtcp::ReportBlock rb1; 488 rtcp::ReportBlock rb1;
490 rb1.To(kSourceSsrcs[0]); 489 rb1.To(kSourceSsrcs[0]);
491 rtcp::ReportBlock rb2; 490 rtcp::ReportBlock rb2;
492 rb2.To(kSourceSsrcs[1]); 491 rb2.To(kSourceSsrcs[1]);
493 rtcp::ReceiverReport rr; 492 rtcp::ReceiverReport rr;
494 rr.From(kSenderSsrc); 493 rr.From(kSenderSsrc);
495 rr.WithReportBlock(rb1); 494 rr.WithReportBlock(rb1);
496 rr.WithReportBlock(rb2); 495 rr.WithReportBlock(rb2);
497 496
498 rtc::scoped_ptr<rtcp::RawPacket> p1(rr.Build()); 497 rtc::Buffer p1 = rr.Build();
499 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); 498 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size()));
500 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); 499 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size());
501 std::vector<RTCPReportBlock> received_blocks; 500 std::vector<RTCPReportBlock> received_blocks;
502 rtcp_receiver_->StatisticsReceived(&received_blocks); 501 rtcp_receiver_->StatisticsReceived(&received_blocks);
503 EXPECT_EQ(2u, received_blocks.size()); 502 EXPECT_EQ(2u, received_blocks.size());
504 503
505 // Verify that BYE removes the report blocks. 504 // Verify that BYE removes the report blocks.
506 rtcp::Bye bye; 505 rtcp::Bye bye;
507 bye.From(kSenderSsrc); 506 bye.From(kSenderSsrc);
508 rtc::scoped_ptr<rtcp::RawPacket> p2(bye.Build()); 507 rtc::Buffer p2 = bye.Build();
509 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); 508 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size()));
510 received_blocks.clear(); 509 received_blocks.clear();
511 rtcp_receiver_->StatisticsReceived(&received_blocks); 510 rtcp_receiver_->StatisticsReceived(&received_blocks);
512 EXPECT_TRUE(received_blocks.empty()); 511 EXPECT_TRUE(received_blocks.empty());
513 512
514 // Inject packet. 513 // Inject packet.
515 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); 514 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size()));
516 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size()); 515 ASSERT_EQ(2u, rtcp_packet_info_.report_blocks.size());
517 received_blocks.clear(); 516 received_blocks.clear();
518 rtcp_receiver_->StatisticsReceived(&received_blocks); 517 rtcp_receiver_->StatisticsReceived(&received_blocks);
519 EXPECT_EQ(2u, received_blocks.size()); 518 EXPECT_EQ(2u, received_blocks.size());
520 } 519 }
521 520
522 TEST_F(RtcpReceiverTest, InjectPliPacket) { 521 TEST_F(RtcpReceiverTest, InjectPliPacket) {
523 const uint32_t kSourceSsrc = 0x123456; 522 const uint32_t kSourceSsrc = 0x123456;
524 std::set<uint32_t> ssrcs; 523 std::set<uint32_t> ssrcs;
525 ssrcs.insert(kSourceSsrc); 524 ssrcs.insert(kSourceSsrc);
526 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 525 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
527 526
528 rtcp::Pli pli; 527 rtcp::Pli pli;
529 pli.To(kSourceSsrc); 528 pli.To(kSourceSsrc);
530 rtc::scoped_ptr<rtcp::RawPacket> packet(pli.Build()); 529 rtc::Buffer packet = pli.Build();
531 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 530 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
532 EXPECT_EQ(kRtcpPli, rtcp_packet_info_.rtcpPacketTypeFlags); 531 EXPECT_EQ(kRtcpPli, rtcp_packet_info_.rtcpPacketTypeFlags);
533 } 532 }
534 533
535 TEST_F(RtcpReceiverTest, PliPacketNotToUsIgnored) { 534 TEST_F(RtcpReceiverTest, PliPacketNotToUsIgnored) {
536 const uint32_t kSourceSsrc = 0x123456; 535 const uint32_t kSourceSsrc = 0x123456;
537 std::set<uint32_t> ssrcs; 536 std::set<uint32_t> ssrcs;
538 ssrcs.insert(kSourceSsrc); 537 ssrcs.insert(kSourceSsrc);
539 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 538 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
540 539
541 rtcp::Pli pli; 540 rtcp::Pli pli;
542 pli.To(kSourceSsrc + 1); 541 pli.To(kSourceSsrc + 1);
543 rtc::scoped_ptr<rtcp::RawPacket> packet(pli.Build()); 542 rtc::Buffer packet = pli.Build();
544 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 543 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
545 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); 544 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags);
546 } 545 }
547 546
548 TEST_F(RtcpReceiverTest, InjectFirPacket) { 547 TEST_F(RtcpReceiverTest, InjectFirPacket) {
549 const uint32_t kSourceSsrc = 0x123456; 548 const uint32_t kSourceSsrc = 0x123456;
550 std::set<uint32_t> ssrcs; 549 std::set<uint32_t> ssrcs;
551 ssrcs.insert(kSourceSsrc); 550 ssrcs.insert(kSourceSsrc);
552 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 551 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
553 552
554 rtcp::Fir fir; 553 rtcp::Fir fir;
555 fir.WithRequestTo(kSourceSsrc, 13); 554 fir.WithRequestTo(kSourceSsrc, 13);
556 rtc::scoped_ptr<rtcp::RawPacket> packet(fir.Build()); 555 rtc::Buffer packet = fir.Build();
557 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 556 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
558 EXPECT_EQ(kRtcpFir, rtcp_packet_info_.rtcpPacketTypeFlags); 557 EXPECT_EQ(kRtcpFir, rtcp_packet_info_.rtcpPacketTypeFlags);
559 } 558 }
560 559
561 TEST_F(RtcpReceiverTest, FirPacketNotToUsIgnored) { 560 TEST_F(RtcpReceiverTest, FirPacketNotToUsIgnored) {
562 const uint32_t kSourceSsrc = 0x123456; 561 const uint32_t kSourceSsrc = 0x123456;
563 std::set<uint32_t> ssrcs; 562 std::set<uint32_t> ssrcs;
564 ssrcs.insert(kSourceSsrc); 563 ssrcs.insert(kSourceSsrc);
565 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 564 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
566 565
567 rtcp::Fir fir; 566 rtcp::Fir fir;
568 fir.WithRequestTo(kSourceSsrc + 1, 13); 567 fir.WithRequestTo(kSourceSsrc + 1, 13);
569 rtc::scoped_ptr<rtcp::RawPacket> packet(fir.Build()); 568 rtc::Buffer packet = fir.Build();
570 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 569 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
571 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); 570 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags);
572 } 571 }
573 572
574 TEST_F(RtcpReceiverTest, InjectSliPacket) { 573 TEST_F(RtcpReceiverTest, InjectSliPacket) {
575 rtcp::Sli sli; 574 rtcp::Sli sli;
576 sli.WithPictureId(40); 575 sli.WithPictureId(40);
577 rtc::scoped_ptr<rtcp::RawPacket> packet(sli.Build()); 576 rtc::Buffer packet = sli.Build();
578 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 577 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
579 EXPECT_EQ(kRtcpSli, rtcp_packet_info_.rtcpPacketTypeFlags); 578 EXPECT_EQ(kRtcpSli, rtcp_packet_info_.rtcpPacketTypeFlags);
580 EXPECT_EQ(40, rtcp_packet_info_.sliPictureId); 579 EXPECT_EQ(40, rtcp_packet_info_.sliPictureId);
581 } 580 }
582 581
583 TEST_F(RtcpReceiverTest, ExtendedReportsPacketWithZeroReportBlocksIgnored) { 582 TEST_F(RtcpReceiverTest, ExtendedReportsPacketWithZeroReportBlocksIgnored) {
584 rtcp::ExtendedReports xr; 583 rtcp::ExtendedReports xr;
585 xr.From(0x2345); 584 xr.From(0x2345);
586 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); 585 rtc::Buffer packet = xr.Build();
587 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 586 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
588 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); 587 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags);
589 } 588 }
590 589
591 TEST_F(RtcpReceiverTest, InjectExtendedReportsVoipPacket) { 590 TEST_F(RtcpReceiverTest, InjectExtendedReportsVoipPacket) {
592 const uint32_t kSourceSsrc = 0x123456; 591 const uint32_t kSourceSsrc = 0x123456;
593 std::set<uint32_t> ssrcs; 592 std::set<uint32_t> ssrcs;
594 ssrcs.insert(kSourceSsrc); 593 ssrcs.insert(kSourceSsrc);
595 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 594 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
596 595
597 const uint8_t kLossRate = 123; 596 const uint8_t kLossRate = 123;
598 rtcp::VoipMetric voip_metric; 597 rtcp::VoipMetric voip_metric;
599 voip_metric.To(kSourceSsrc); 598 voip_metric.To(kSourceSsrc);
600 RTCPVoIPMetric metric; 599 RTCPVoIPMetric metric;
601 metric.lossRate = kLossRate; 600 metric.lossRate = kLossRate;
602 voip_metric.WithVoipMetric(metric); 601 voip_metric.WithVoipMetric(metric);
603 rtcp::ExtendedReports xr; 602 rtcp::ExtendedReports xr;
604 xr.From(0x2345); 603 xr.From(0x2345);
605 xr.WithVoipMetric(voip_metric); 604 xr.WithVoipMetric(voip_metric);
606 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); 605 rtc::Buffer packet = xr.Build();
607 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 606 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
608 ASSERT_TRUE(rtcp_packet_info_.VoIPMetric != nullptr); 607 ASSERT_TRUE(rtcp_packet_info_.VoIPMetric != nullptr);
609 EXPECT_EQ(kLossRate, rtcp_packet_info_.VoIPMetric->lossRate); 608 EXPECT_EQ(kLossRate, rtcp_packet_info_.VoIPMetric->lossRate);
610 EXPECT_EQ(kRtcpXrVoipMetric, rtcp_packet_info_.rtcpPacketTypeFlags); 609 EXPECT_EQ(kRtcpXrVoipMetric, rtcp_packet_info_.rtcpPacketTypeFlags);
611 } 610 }
612 611
613 TEST_F(RtcpReceiverTest, ExtendedReportsVoipPacketNotToUsIgnored) { 612 TEST_F(RtcpReceiverTest, ExtendedReportsVoipPacketNotToUsIgnored) {
614 const uint32_t kSourceSsrc = 0x123456; 613 const uint32_t kSourceSsrc = 0x123456;
615 std::set<uint32_t> ssrcs; 614 std::set<uint32_t> ssrcs;
616 ssrcs.insert(kSourceSsrc); 615 ssrcs.insert(kSourceSsrc);
617 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 616 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
618 617
619 rtcp::VoipMetric voip_metric; 618 rtcp::VoipMetric voip_metric;
620 voip_metric.To(kSourceSsrc + 1); 619 voip_metric.To(kSourceSsrc + 1);
621 rtcp::ExtendedReports xr; 620 rtcp::ExtendedReports xr;
622 xr.From(0x2345); 621 xr.From(0x2345);
623 xr.WithVoipMetric(voip_metric); 622 xr.WithVoipMetric(voip_metric);
624 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); 623 rtc::Buffer packet = xr.Build();
625 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 624 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
626 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); 625 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags);
627 } 626 }
628 627
629 TEST_F(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) { 628 TEST_F(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) {
630 rtcp::Rrtr rrtr; 629 rtcp::Rrtr rrtr;
631 rrtr.WithNtp(NtpTime(0x10203, 0x40506)); 630 rrtr.WithNtp(NtpTime(0x10203, 0x40506));
632 rtcp::ExtendedReports xr; 631 rtcp::ExtendedReports xr;
633 xr.From(0x2345); 632 xr.From(0x2345);
634 xr.WithRrtr(rrtr); 633 xr.WithRrtr(rrtr);
635 634
636 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); 635 rtc::Buffer packet = xr.Build();
637 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 636 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
638 EXPECT_EQ(kRtcpXrReceiverReferenceTime, 637 EXPECT_EQ(kRtcpXrReceiverReferenceTime,
639 rtcp_packet_info_.rtcpPacketTypeFlags); 638 rtcp_packet_info_.rtcpPacketTypeFlags);
640 } 639 }
641 640
642 TEST_F(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) { 641 TEST_F(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) {
643 const uint32_t kSourceSsrc = 0x123456; 642 const uint32_t kSourceSsrc = 0x123456;
644 std::set<uint32_t> ssrcs; 643 std::set<uint32_t> ssrcs;
645 ssrcs.insert(kSourceSsrc); 644 ssrcs.insert(kSourceSsrc);
646 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 645 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
647 646
648 rtcp::Dlrr dlrr; 647 rtcp::Dlrr dlrr;
649 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); 648 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890);
650 rtcp::ExtendedReports xr; 649 rtcp::ExtendedReports xr;
651 xr.From(0x2345); 650 xr.From(0x2345);
652 xr.WithDlrr(dlrr); 651 xr.WithDlrr(dlrr);
653 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); 652 rtc::Buffer packet = xr.Build();
654 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 653 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
655 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); 654 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags);
656 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); 655 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item);
657 } 656 }
658 657
659 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) { 658 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) {
660 const uint32_t kSourceSsrc = 0x123456; 659 const uint32_t kSourceSsrc = 0x123456;
661 std::set<uint32_t> ssrcs; 660 std::set<uint32_t> ssrcs;
662 ssrcs.insert(kSourceSsrc); 661 ssrcs.insert(kSourceSsrc);
663 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 662 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
664 663
665 rtcp::Dlrr dlrr; 664 rtcp::Dlrr dlrr;
666 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); 665 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890);
667 rtcp::ExtendedReports xr; 666 rtcp::ExtendedReports xr;
668 xr.From(0x2345); 667 xr.From(0x2345);
669 xr.WithDlrr(dlrr); 668 xr.WithDlrr(dlrr);
670 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); 669 rtc::Buffer packet = xr.Build();
671 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 670 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
672 // The parser should note the DLRR report block item, but not flag the packet 671 // The parser should note the DLRR report block item, but not flag the packet
673 // since the RTT is not estimated. 672 // since the RTT is not estimated.
674 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); 673 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item);
675 } 674 }
676 675
677 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) { 676 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) {
678 const uint32_t kSourceSsrc = 0x123456; 677 const uint32_t kSourceSsrc = 0x123456;
679 std::set<uint32_t> ssrcs; 678 std::set<uint32_t> ssrcs;
680 ssrcs.insert(kSourceSsrc); 679 ssrcs.insert(kSourceSsrc);
681 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 680 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
682 681
683 rtcp::Dlrr dlrr; 682 rtcp::Dlrr dlrr;
684 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); 683 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890);
685 dlrr.WithDlrrItem(kSourceSsrc + 2, 0x12345, 0x67890); 684 dlrr.WithDlrrItem(kSourceSsrc + 2, 0x12345, 0x67890);
686 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); 685 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890);
687 rtcp::ExtendedReports xr; 686 rtcp::ExtendedReports xr;
688 xr.From(0x2345); 687 xr.From(0x2345);
689 xr.WithDlrr(dlrr); 688 xr.WithDlrr(dlrr);
690 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); 689 rtc::Buffer packet = xr.Build();
691 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 690 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
692 // The parser should note the DLRR report block item, but not flag the packet 691 // The parser should note the DLRR report block item, but not flag the packet
693 // since the RTT is not estimated. 692 // since the RTT is not estimated.
694 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); 693 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item);
695 } 694 }
696 695
697 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) { 696 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) {
698 const uint32_t kSourceSsrc = 0x123456; 697 const uint32_t kSourceSsrc = 0x123456;
699 std::set<uint32_t> ssrcs; 698 std::set<uint32_t> ssrcs;
700 ssrcs.insert(kSourceSsrc); 699 ssrcs.insert(kSourceSsrc);
701 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 700 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
702 701
703 rtcp::Rrtr rrtr; 702 rtcp::Rrtr rrtr;
704 rtcp::Dlrr dlrr; 703 rtcp::Dlrr dlrr;
705 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); 704 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890);
706 rtcp::VoipMetric metric; 705 rtcp::VoipMetric metric;
707 metric.To(kSourceSsrc); 706 metric.To(kSourceSsrc);
708 rtcp::ExtendedReports xr; 707 rtcp::ExtendedReports xr;
709 xr.From(0x2345); 708 xr.From(0x2345);
710 xr.WithRrtr(rrtr); 709 xr.WithRrtr(rrtr);
711 xr.WithDlrr(dlrr); 710 xr.WithDlrr(dlrr);
712 xr.WithVoipMetric(metric); 711 xr.WithVoipMetric(metric);
713 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); 712 rtc::Buffer packet = xr.Build();
714 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 713 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
715 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + 714 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime +
716 kRtcpXrVoipMetric), 715 kRtcpXrVoipMetric),
717 rtcp_packet_info_.rtcpPacketTypeFlags); 716 rtcp_packet_info_.rtcpPacketTypeFlags);
718 // The parser should note the DLRR report block item, but not flag the packet 717 // The parser should note the DLRR report block item, but not flag the packet
719 // since the RTT is not estimated. 718 // since the RTT is not estimated.
720 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); 719 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item);
721 } 720 }
722 721
723 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) { 722 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) {
724 const uint32_t kSourceSsrc = 0x123456; 723 const uint32_t kSourceSsrc = 0x123456;
725 std::set<uint32_t> ssrcs; 724 std::set<uint32_t> ssrcs;
726 ssrcs.insert(kSourceSsrc); 725 ssrcs.insert(kSourceSsrc);
727 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 726 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
728 std::vector<uint32_t> remote_ssrcs; 727 std::vector<uint32_t> remote_ssrcs;
729 remote_ssrcs.push_back(kSourceSsrc); 728 remote_ssrcs.push_back(kSourceSsrc);
730 729
731 rtcp::Rrtr rrtr; 730 rtcp::Rrtr rrtr;
732 rtcp::Dlrr dlrr; 731 rtcp::Dlrr dlrr;
733 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); 732 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890);
734 rtcp::VoipMetric metric; 733 rtcp::VoipMetric metric;
735 metric.To(kSourceSsrc); 734 metric.To(kSourceSsrc);
736 rtcp::ExtendedReports xr; 735 rtcp::ExtendedReports xr;
737 xr.From(0x2345); 736 xr.From(0x2345);
738 xr.WithRrtr(rrtr); 737 xr.WithRrtr(rrtr);
739 xr.WithDlrr(dlrr); 738 xr.WithDlrr(dlrr);
740 xr.WithVoipMetric(metric); 739 xr.WithVoipMetric(metric);
741 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); 740 rtc::Buffer packet = xr.Build();
742 // Modify the DLRR block to have an unsupported block type, from 5 to 6. 741 // Modify the DLRR block to have an unsupported block type, from 5 to 6.
743 uint8_t* buffer = const_cast<uint8_t*>(packet->Buffer()); 742 uint8_t* buffer = packet.data();
744 EXPECT_EQ(5, buffer[20]); 743 EXPECT_EQ(5, buffer[20]);
745 buffer[20] = 6; 744 buffer[20] = 6;
746 745
747 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 746 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
748 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + 747 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime +
749 kRtcpXrVoipMetric), 748 kRtcpXrVoipMetric),
750 rtcp_packet_info_.rtcpPacketTypeFlags); 749 rtcp_packet_info_.rtcpPacketTypeFlags);
751 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); 750 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item);
752 } 751 }
753 752
754 TEST_F(RtcpReceiverTest, TestXrRrRttInitiallyFalse) { 753 TEST_F(RtcpReceiverTest, TestXrRrRttInitiallyFalse) {
755 int64_t rtt_ms; 754 int64_t rtt_ms;
756 EXPECT_FALSE(rtcp_receiver_->GetAndResetXrRrRtt(&rtt_ms)); 755 EXPECT_FALSE(rtcp_receiver_->GetAndResetXrRrRtt(&rtt_ms));
757 } 756 }
758 757
759 TEST_F(RtcpReceiverTest, LastReceivedXrReferenceTimeInfoInitiallyFalse) { 758 TEST_F(RtcpReceiverTest, LastReceivedXrReferenceTimeInfoInitiallyFalse) {
760 RtcpReceiveTimeInfo info; 759 RtcpReceiveTimeInfo info;
761 EXPECT_FALSE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); 760 EXPECT_FALSE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info));
762 } 761 }
763 762
764 TEST_F(RtcpReceiverTest, GetLastReceivedExtendedReportsReferenceTimeInfo) { 763 TEST_F(RtcpReceiverTest, GetLastReceivedExtendedReportsReferenceTimeInfo) {
765 const uint32_t kSenderSsrc = 0x123456; 764 const uint32_t kSenderSsrc = 0x123456;
766 const NtpTime kNtp(0x10203, 0x40506); 765 const NtpTime kNtp(0x10203, 0x40506);
767 const uint32_t kNtpMid = 766 const uint32_t kNtpMid =
768 RTCPUtility::MidNtp(kNtp.seconds(), kNtp.fractions()); 767 RTCPUtility::MidNtp(kNtp.seconds(), kNtp.fractions());
769 768
770 rtcp::Rrtr rrtr; 769 rtcp::Rrtr rrtr;
771 rrtr.WithNtp(kNtp); 770 rrtr.WithNtp(kNtp);
772 rtcp::ExtendedReports xr; 771 rtcp::ExtendedReports xr;
773 xr.From(kSenderSsrc); 772 xr.From(kSenderSsrc);
774 xr.WithRrtr(rrtr); 773 xr.WithRrtr(rrtr);
775 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); 774 rtc::Buffer packet = xr.Build();
776 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 775 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
777 EXPECT_EQ(kRtcpXrReceiverReferenceTime, 776 EXPECT_EQ(kRtcpXrReceiverReferenceTime,
778 rtcp_packet_info_.rtcpPacketTypeFlags); 777 rtcp_packet_info_.rtcpPacketTypeFlags);
779 778
780 RtcpReceiveTimeInfo info; 779 RtcpReceiveTimeInfo info;
781 EXPECT_TRUE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); 780 EXPECT_TRUE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info));
782 EXPECT_EQ(kSenderSsrc, info.sourceSSRC); 781 EXPECT_EQ(kSenderSsrc, info.sourceSSRC);
783 EXPECT_EQ(kNtpMid, info.lastRR); 782 EXPECT_EQ(kNtpMid, info.lastRR);
784 EXPECT_EQ(0U, info.delaySinceLastRR); 783 EXPECT_EQ(0U, info.delaySinceLastRR);
785 784
786 system_clock_.AdvanceTimeMilliseconds(1000); 785 system_clock_.AdvanceTimeMilliseconds(1000);
(...skipping 17 matching lines...) Expand all
804 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); 803 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs));
805 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); 804 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs));
806 805
807 // Add a RR and advance the clock just enough to not trigger a timeout. 806 // Add a RR and advance the clock just enough to not trigger a timeout.
808 rtcp::ReportBlock rb1; 807 rtcp::ReportBlock rb1;
809 rb1.To(kSourceSsrc); 808 rb1.To(kSourceSsrc);
810 rb1.WithExtHighestSeqNum(kSequenceNumber); 809 rb1.WithExtHighestSeqNum(kSequenceNumber);
811 rtcp::ReceiverReport rr1; 810 rtcp::ReceiverReport rr1;
812 rr1.From(kSenderSsrc); 811 rr1.From(kSenderSsrc);
813 rr1.WithReportBlock(rb1); 812 rr1.WithReportBlock(rb1);
814 rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); 813 rtc::Buffer p1 = rr1.Build();
815 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); 814 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size()));
816 system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs - 1); 815 system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs - 1);
817 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); 816 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs));
818 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); 817 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs));
819 818
820 // Add a RR with the same extended max as the previous RR to trigger a 819 // Add a RR with the same extended max as the previous RR to trigger a
821 // sequence number timeout, but not a RR timeout. 820 // sequence number timeout, but not a RR timeout.
822 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); 821 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size()));
823 system_clock_.AdvanceTimeMilliseconds(2); 822 system_clock_.AdvanceTimeMilliseconds(2);
824 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); 823 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs));
825 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); 824 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs));
826 825
827 // Advance clock enough to trigger an RR timeout too. 826 // Advance clock enough to trigger an RR timeout too.
828 system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs); 827 system_clock_.AdvanceTimeMilliseconds(3 * kRtcpIntervalMs);
829 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); 828 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs));
830 829
831 // We should only get one timeout even though we still haven't received a new 830 // We should only get one timeout even though we still haven't received a new
832 // RR. 831 // RR.
833 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); 832 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs));
834 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); 833 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs));
835 834
836 // Add a new RR with increase sequence number to reset timers. 835 // Add a new RR with increase sequence number to reset timers.
837 rtcp::ReportBlock rb2; 836 rtcp::ReportBlock rb2;
838 rb2.To(kSourceSsrc); 837 rb2.To(kSourceSsrc);
839 rb2.WithExtHighestSeqNum(kSequenceNumber + 1); 838 rb2.WithExtHighestSeqNum(kSequenceNumber + 1);
840 rtcp::ReceiverReport rr2; 839 rtcp::ReceiverReport rr2;
841 rr2.From(kSenderSsrc); 840 rr2.From(kSenderSsrc);
842 rr2.WithReportBlock(rb2); 841 rr2.WithReportBlock(rb2);
843 rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); 842 rtc::Buffer p2 = rr2.Build();
844 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); 843 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size()));
845 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); 844 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs));
846 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); 845 EXPECT_FALSE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs));
847 846
848 // Verify we can get a timeout again once we've received new RR. 847 // Verify we can get a timeout again once we've received new RR.
849 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); 848 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs);
850 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); 849 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size()));
851 system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1); 850 system_clock_.AdvanceTimeMilliseconds(kRtcpIntervalMs + 1);
852 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); 851 EXPECT_FALSE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs));
853 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs)); 852 EXPECT_TRUE(rtcp_receiver_->RtcpRrSequenceNumberTimeout(kRtcpIntervalMs));
854 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs); 853 system_clock_.AdvanceTimeMilliseconds(2 * kRtcpIntervalMs);
855 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs)); 854 EXPECT_TRUE(rtcp_receiver_->RtcpRrTimeout(kRtcpIntervalMs));
856 } 855 }
857 856
858 TEST_F(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) { 857 TEST_F(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) {
859 // This call is expected to fail because no data has arrived. 858 // This call is expected to fail because no data has arrived.
860 EXPECT_EQ(-1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 859 EXPECT_EQ(-1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr));
861 } 860 }
862 861
863 TEST_F(RtcpReceiverTest, TmmbrPacketAccepted) { 862 TEST_F(RtcpReceiverTest, TmmbrPacketAccepted) {
864 const uint32_t kMediaFlowSsrc = 0x2040608; 863 const uint32_t kMediaFlowSsrc = 0x2040608;
865 const uint32_t kSenderSsrc = 0x10203; 864 const uint32_t kSenderSsrc = 0x10203;
866 std::set<uint32_t> ssrcs; 865 std::set<uint32_t> ssrcs;
867 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. 866 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above.
868 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 867 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
869 868
870 rtcp::Tmmbr tmmbr; 869 rtcp::Tmmbr tmmbr;
871 tmmbr.From(kSenderSsrc); 870 tmmbr.From(kSenderSsrc);
872 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); 871 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0));
873 872
874 rtcp::SenderReport sr; 873 rtcp::SenderReport sr;
875 sr.From(kSenderSsrc); 874 sr.From(kSenderSsrc);
876 sr.Append(&tmmbr); 875 sr.Append(&tmmbr);
877 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); 876 rtc::Buffer packet = sr.Build();
878 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 877 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
879 878
880 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 879 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(0, 0, nullptr));
881 TMMBRSet candidate_set; 880 TMMBRSet candidate_set;
882 candidate_set.VerifyAndAllocateSet(1); 881 candidate_set.VerifyAndAllocateSet(1);
883 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(1, 0, &candidate_set)); 882 EXPECT_EQ(1, rtcp_receiver_->TMMBRReceived(1, 0, &candidate_set));
884 EXPECT_LT(0U, candidate_set.Tmmbr(0)); 883 EXPECT_LT(0U, candidate_set.Tmmbr(0));
885 EXPECT_EQ(kSenderSsrc, candidate_set.Ssrc(0)); 884 EXPECT_EQ(kSenderSsrc, candidate_set.Ssrc(0));
886 } 885 }
887 886
888 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) { 887 TEST_F(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) {
889 const uint32_t kMediaFlowSsrc = 0x2040608; 888 const uint32_t kMediaFlowSsrc = 0x2040608;
890 const uint32_t kSenderSsrc = 0x10203; 889 const uint32_t kSenderSsrc = 0x10203;
891 890
892 rtcp::Tmmbr tmmbr; 891 rtcp::Tmmbr tmmbr;
893 tmmbr.From(kSenderSsrc); 892 tmmbr.From(kSenderSsrc);
894 // This SSRC is not what we are sending. 893 // This SSRC is not what we are sending.
895 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc + 1, 30000, 0)); 894 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc + 1, 30000, 0));
896 895
897 rtcp::SenderReport sr; 896 rtcp::SenderReport sr;
898 sr.From(kSenderSsrc); 897 sr.From(kSenderSsrc);
899 sr.Append(&tmmbr); 898 sr.Append(&tmmbr);
900 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); 899 rtc::Buffer packet = sr.Build();
901 900
902 std::set<uint32_t> ssrcs; 901 std::set<uint32_t> ssrcs;
903 ssrcs.insert(kMediaFlowSsrc); 902 ssrcs.insert(kMediaFlowSsrc);
904 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 903 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
905 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 904 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
906 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 905 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr));
907 } 906 }
908 907
909 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) { 908 TEST_F(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) {
910 const uint32_t kMediaFlowSsrc = 0x2040608; 909 const uint32_t kMediaFlowSsrc = 0x2040608;
911 const uint32_t kSenderSsrc = 0x10203; 910 const uint32_t kSenderSsrc = 0x10203;
912 std::set<uint32_t> ssrcs; 911 std::set<uint32_t> ssrcs;
913 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. 912 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above.
914 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 913 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
915 914
916 rtcp::Tmmbr tmmbr; 915 rtcp::Tmmbr tmmbr;
917 tmmbr.From(kSenderSsrc); 916 tmmbr.From(kSenderSsrc);
918 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 0, 0)); 917 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 0, 0));
919 918
920 rtcp::SenderReport sr; 919 rtcp::SenderReport sr;
921 sr.From(kSenderSsrc); 920 sr.From(kSenderSsrc);
922 sr.Append(&tmmbr); 921 sr.Append(&tmmbr);
923 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); 922 rtc::Buffer packet = sr.Build();
924 923
925 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 924 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
926 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 925 EXPECT_EQ(0, rtcp_receiver_->TMMBRReceived(0, 0, nullptr));
927 } 926 }
928 927
929 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) { 928 TEST_F(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) {
930 const uint32_t kMediaFlowSsrc = 0x2040608; 929 const uint32_t kMediaFlowSsrc = 0x2040608;
931 const uint32_t kSenderSsrc = 0x10203; 930 const uint32_t kSenderSsrc = 0x10203;
932 std::set<uint32_t> ssrcs; 931 std::set<uint32_t> ssrcs;
933 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above. 932 ssrcs.insert(kMediaFlowSsrc); // Matches "media source" above.
934 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs); 933 rtcp_receiver_->SetSsrcs(kMediaFlowSsrc, ssrcs);
935 934
936 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2. 935 // Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2.
937 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10. 936 // The times of arrival are starttime + 0, starttime + 5 and starttime + 10.
938 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) { 937 for (uint32_t ssrc = kSenderSsrc; ssrc < kSenderSsrc + 3; ++ssrc) {
939 rtcp::Tmmbr tmmbr; 938 rtcp::Tmmbr tmmbr;
940 tmmbr.From(ssrc); 939 tmmbr.From(ssrc);
941 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0)); 940 tmmbr.WithTmmbr(rtcp::TmmbItem(kMediaFlowSsrc, 30000, 0));
942 941
943 rtcp::SenderReport sr; 942 rtcp::SenderReport sr;
944 sr.From(ssrc); 943 sr.From(ssrc);
945 sr.Append(&tmmbr); 944 sr.Append(&tmmbr);
946 rtc::scoped_ptr<rtcp::RawPacket> packet(sr.Build()); 945 rtc::Buffer packet = sr.Build();
947 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); 946 EXPECT_EQ(0, InjectRtcpPacket(packet.data(), packet.size()));
948 // 5 seconds between each packet. 947 // 5 seconds between each packet.
949 system_clock_.AdvanceTimeMilliseconds(5000); 948 system_clock_.AdvanceTimeMilliseconds(5000);
950 } 949 }
951 // It is now starttime + 15. 950 // It is now starttime + 15.
952 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr)); 951 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(0, 0, nullptr));
953 TMMBRSet candidate_set; 952 TMMBRSet candidate_set;
954 candidate_set.VerifyAndAllocateSet(3); 953 candidate_set.VerifyAndAllocateSet(3);
955 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set)); 954 EXPECT_EQ(3, rtcp_receiver_->TMMBRReceived(3, 0, &candidate_set));
956 EXPECT_LT(0U, candidate_set.Tmmbr(0)); 955 EXPECT_LT(0U, candidate_set.Tmmbr(0));
957 // We expect the timeout to be 25 seconds. Advance the clock by 12 956 // We expect the timeout to be 25 seconds. Advance the clock by 12
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1007 rtcp::ReportBlock rb1; 1006 rtcp::ReportBlock rb1;
1008 rb1.To(kSourceSsrc); 1007 rb1.To(kSourceSsrc);
1009 rb1.WithExtHighestSeqNum(kSequenceNumber); 1008 rb1.WithExtHighestSeqNum(kSequenceNumber);
1010 rb1.WithFractionLost(kFractionLoss); 1009 rb1.WithFractionLost(kFractionLoss);
1011 rb1.WithCumulativeLost(kCumulativeLoss); 1010 rb1.WithCumulativeLost(kCumulativeLoss);
1012 rb1.WithJitter(kJitter); 1011 rb1.WithJitter(kJitter);
1013 1012
1014 rtcp::ReceiverReport rr1; 1013 rtcp::ReceiverReport rr1;
1015 rr1.From(kSenderSsrc); 1014 rr1.From(kSenderSsrc);
1016 rr1.WithReportBlock(rb1); 1015 rr1.WithReportBlock(rb1);
1017 rtc::scoped_ptr<rtcp::RawPacket> p1(rr1.Build()); 1016 rtc::Buffer p1 = rr1.Build();
1018 EXPECT_EQ(0, InjectRtcpPacket(p1->Buffer(), p1->Length())); 1017 EXPECT_EQ(0, InjectRtcpPacket(p1.data(), p1.size()));
1019 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, 1018 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss,
1020 kCumulativeLoss, kJitter)); 1019 kCumulativeLoss, kJitter));
1021 1020
1022 rtcp_receiver_->RegisterRtcpStatisticsCallback(nullptr); 1021 rtcp_receiver_->RegisterRtcpStatisticsCallback(nullptr);
1023 1022
1024 // Add arbitrary numbers, callback should not be called (retain old values). 1023 // Add arbitrary numbers, callback should not be called (retain old values).
1025 rtcp::ReportBlock rb2; 1024 rtcp::ReportBlock rb2;
1026 rb2.To(kSourceSsrc); 1025 rb2.To(kSourceSsrc);
1027 rb2.WithExtHighestSeqNum(kSequenceNumber + 1); 1026 rb2.WithExtHighestSeqNum(kSequenceNumber + 1);
1028 rb2.WithFractionLost(42); 1027 rb2.WithFractionLost(42);
1029 rb2.WithCumulativeLost(137); 1028 rb2.WithCumulativeLost(137);
1030 rb2.WithJitter(4711); 1029 rb2.WithJitter(4711);
1031 1030
1032 rtcp::ReceiverReport rr2; 1031 rtcp::ReceiverReport rr2;
1033 rr2.From(kSenderSsrc); 1032 rr2.From(kSenderSsrc);
1034 rr2.WithReportBlock(rb2); 1033 rr2.WithReportBlock(rb2);
1035 rtc::scoped_ptr<rtcp::RawPacket> p2(rr2.Build()); 1034 rtc::Buffer p2 = rr2.Build();
1036 EXPECT_EQ(0, InjectRtcpPacket(p2->Buffer(), p2->Length())); 1035 EXPECT_EQ(0, InjectRtcpPacket(p2.data(), p2.size()));
1037 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss, 1036 EXPECT_TRUE(callback.Matches(kSourceSsrc, kSequenceNumber, kFractionLoss,
1038 kCumulativeLoss, kJitter)); 1037 kCumulativeLoss, kJitter));
1039 } 1038 }
1040 1039
1041 TEST_F(RtcpReceiverTest, ReceivesTransportFeedback) { 1040 TEST_F(RtcpReceiverTest, ReceivesTransportFeedback) {
1042 const uint32_t kSenderSsrc = 0x10203; 1041 const uint32_t kSenderSsrc = 0x10203;
1043 const uint32_t kSourceSsrc = 0x123456; 1042 const uint32_t kSourceSsrc = 0x123456;
1044 1043
1045 std::set<uint32_t> ssrcs; 1044 std::set<uint32_t> ssrcs;
1046 ssrcs.insert(kSourceSsrc); 1045 ssrcs.insert(kSourceSsrc);
1047 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 1046 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
1048 1047
1049 rtcp::TransportFeedback packet; 1048 rtcp::TransportFeedback packet;
1050 packet.WithMediaSourceSsrc(kSourceSsrc); 1049 packet.WithMediaSourceSsrc(kSourceSsrc);
1051 packet.WithPacketSenderSsrc(kSenderSsrc); 1050 packet.WithPacketSenderSsrc(kSenderSsrc);
1052 packet.WithBase(1, 1000); 1051 packet.WithBase(1, 1000);
1053 packet.WithReceivedPacket(1, 1000); 1052 packet.WithReceivedPacket(1, 1000);
1054 1053
1055 rtc::scoped_ptr<rtcp::RawPacket> built_packet = packet.Build(); 1054 rtc::Buffer built_packet = packet.Build();
1056 ASSERT_TRUE(built_packet.get() != nullptr);
1057 1055
1058 EXPECT_EQ(0, 1056 EXPECT_EQ(0, InjectRtcpPacket(built_packet.data(), built_packet.size()));
1059 InjectRtcpPacket(built_packet->Buffer(), built_packet->Length()));
1060 1057
1061 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); 1058 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback);
1062 EXPECT_TRUE(rtcp_packet_info_.transport_feedback_.get() != nullptr); 1059 EXPECT_TRUE(rtcp_packet_info_.transport_feedback_.get() != nullptr);
1063 } 1060 }
1064 1061
1065 TEST_F(RtcpReceiverTest, HandlesInvalidTransportFeedback) { 1062 TEST_F(RtcpReceiverTest, HandlesInvalidTransportFeedback) {
1066 const uint32_t kSenderSsrc = 0x10203; 1063 const uint32_t kSenderSsrc = 0x10203;
1067 const uint32_t kSourceSsrc = 0x123456; 1064 const uint32_t kSourceSsrc = 0x123456;
1068 1065
1069 std::set<uint32_t> ssrcs; 1066 std::set<uint32_t> ssrcs;
1070 ssrcs.insert(kSourceSsrc); 1067 ssrcs.insert(kSourceSsrc);
1071 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); 1068 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs);
1072 1069
1073 // Send a compound packet with a TransportFeedback followed by something else. 1070 // Send a compound packet with a TransportFeedback followed by something else.
1074 rtcp::TransportFeedback packet; 1071 rtcp::TransportFeedback packet;
1075 packet.WithMediaSourceSsrc(kSourceSsrc); 1072 packet.WithMediaSourceSsrc(kSourceSsrc);
1076 packet.WithPacketSenderSsrc(kSenderSsrc); 1073 packet.WithPacketSenderSsrc(kSenderSsrc);
1077 packet.WithBase(1, 1000); 1074 packet.WithBase(1, 1000);
1078 packet.WithReceivedPacket(1, 1000); 1075 packet.WithReceivedPacket(1, 1000);
1079 1076
1080 static uint32_t kBitrateBps = 50000; 1077 static uint32_t kBitrateBps = 50000;
1081 rtcp::Remb remb; 1078 rtcp::Remb remb;
1082 remb.From(kSourceSsrc); 1079 remb.From(kSourceSsrc);
1083 remb.WithBitrateBps(kBitrateBps); 1080 remb.WithBitrateBps(kBitrateBps);
1084 packet.Append(&remb); 1081 packet.Append(&remb);
1085 1082
1086 rtc::scoped_ptr<rtcp::RawPacket> built_packet = packet.Build(); 1083 rtc::Buffer built_packet = packet.Build();
1087 ASSERT_TRUE(built_packet.get() != nullptr);
1088 1084
1089 // Modify the TransportFeedback packet so that it is invalid. 1085 // Modify the TransportFeedback packet so that it is invalid.
1090 const size_t kStatusCountOffset = 14; 1086 const size_t kStatusCountOffset = 14;
1091 ByteWriter<uint16_t>::WriteBigEndian( 1087 ByteWriter<uint16_t>::WriteBigEndian(
1092 &built_packet->MutableBuffer()[kStatusCountOffset], 42); 1088 &built_packet.data()[kStatusCountOffset], 42);
1093 1089
1094 EXPECT_EQ(0, 1090 EXPECT_EQ(0, InjectRtcpPacket(built_packet.data(), built_packet.size()));
1095 InjectRtcpPacket(built_packet->Buffer(), built_packet->Length()));
1096 1091
1097 // Transport feedback should be ignored, but next packet should work. 1092 // Transport feedback should be ignored, but next packet should work.
1098 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); 1093 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback);
1099 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); 1094 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb);
1100 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); 1095 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate);
1101 } 1096 }
1102 1097
1103 } // Anonymous namespace 1098 } // Anonymous namespace
1104 1099
1105 } // namespace webrtc 1100 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698