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

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

Issue 2070673002: Test RtcpParser rewritten to use rtcp packet classes (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Resolve name conflict Created 4 years, 3 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 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 public NullRtpData { 201 public NullRtpData {
202 public: 202 public:
203 TestTransport() {} 203 TestTransport() {}
204 204
205 bool SendRtp(const uint8_t* /*data*/, 205 bool SendRtp(const uint8_t* /*data*/,
206 size_t /*len*/, 206 size_t /*len*/,
207 const PacketOptions& options) override { 207 const PacketOptions& options) override {
208 return false; 208 return false;
209 } 209 }
210 bool SendRtcp(const uint8_t* data, size_t len) override { 210 bool SendRtcp(const uint8_t* data, size_t len) override {
211 parser_.Parse(static_cast<const uint8_t*>(data), len); 211 parser_.Parse(data, len);
212 return true; 212 return true;
213 } 213 }
214 int OnReceivedPayloadData(const uint8_t* payload_data, 214 int OnReceivedPayloadData(const uint8_t* payload_data,
215 const size_t payload_size, 215 const size_t payload_size,
216 const WebRtcRTPHeader* rtp_header) override { 216 const WebRtcRTPHeader* rtp_header) override {
217 return 0; 217 return 0;
218 } 218 }
219 test::RtcpPacketParser parser_; 219 test::RtcpPacketParser parser_;
220 }; 220 };
221 221
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 294 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
295 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState(); 295 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState();
296 rtcp_sender_->SetSendingStatus(feedback_state, true); 296 rtcp_sender_->SetSendingStatus(feedback_state, true);
297 feedback_state.packets_sent = kPacketCount; 297 feedback_state.packets_sent = kPacketCount;
298 feedback_state.media_bytes_sent = kOctetCount; 298 feedback_state.media_bytes_sent = kOctetCount;
299 uint32_t ntp_secs; 299 uint32_t ntp_secs;
300 uint32_t ntp_frac; 300 uint32_t ntp_frac;
301 clock_.CurrentNtp(ntp_secs, ntp_frac); 301 clock_.CurrentNtp(ntp_secs, ntp_frac);
302 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpSr)); 302 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpSr));
303 EXPECT_EQ(1, parser()->sender_report()->num_packets()); 303 EXPECT_EQ(1, parser()->sender_report()->num_packets());
304 EXPECT_EQ(kSenderSsrc, parser()->sender_report()->Ssrc()); 304 EXPECT_EQ(kSenderSsrc, parser()->sender_report()->sender_ssrc());
305 EXPECT_EQ(ntp_secs, parser()->sender_report()->NtpSec()); 305 EXPECT_EQ(ntp_secs, parser()->sender_report()->ntp().seconds());
306 EXPECT_EQ(ntp_frac, parser()->sender_report()->NtpFrac()); 306 EXPECT_EQ(ntp_frac, parser()->sender_report()->ntp().fractions());
307 EXPECT_EQ(kPacketCount, parser()->sender_report()->PacketCount()); 307 EXPECT_EQ(kPacketCount, parser()->sender_report()->sender_packet_count());
308 EXPECT_EQ(kOctetCount, parser()->sender_report()->OctetCount()); 308 EXPECT_EQ(kOctetCount, parser()->sender_report()->sender_octet_count());
309 EXPECT_EQ(kStartRtpTimestamp + kRtpTimestamp, 309 EXPECT_EQ(kStartRtpTimestamp + kRtpTimestamp,
310 parser()->sender_report()->RtpTimestamp()); 310 parser()->sender_report()->rtp_timestamp());
311 EXPECT_EQ(0, parser()->report_block()->num_packets()); 311 EXPECT_EQ(0U, parser()->sender_report()->report_blocks().size());
312 } 312 }
313 313
314 TEST_F(RtcpSenderTest, DoNotSendSrBeforeRtp) { 314 TEST_F(RtcpSenderTest, DoNotSendSrBeforeRtp) {
315 rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), 315 rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(),
316 nullptr, nullptr, &test_transport_)); 316 nullptr, nullptr, &test_transport_));
317 rtcp_sender_->SetSSRC(kSenderSsrc); 317 rtcp_sender_->SetSSRC(kSenderSsrc);
318 rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); 318 rtcp_sender_->SetRemoteSSRC(kRemoteSsrc);
319 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 319 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
320 rtcp_sender_->SetSendingStatus(feedback_state(), true); 320 rtcp_sender_->SetSendingStatus(feedback_state(), true);
321 321
(...skipping 18 matching lines...) Expand all
340 // In compound mode no packets are allowed (e.g. Pli) because compound mode 340 // In compound mode no packets are allowed (e.g. Pli) because compound mode
341 // should start with Sender Report. 341 // should start with Sender Report.
342 EXPECT_EQ(-1, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); 342 EXPECT_EQ(-1, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli));
343 EXPECT_EQ(0, parser()->pli()->num_packets()); 343 EXPECT_EQ(0, parser()->pli()->num_packets());
344 } 344 }
345 345
346 TEST_F(RtcpSenderTest, SendRr) { 346 TEST_F(RtcpSenderTest, SendRr) {
347 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 347 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
348 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr)); 348 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr));
349 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); 349 EXPECT_EQ(1, parser()->receiver_report()->num_packets());
350 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->Ssrc()); 350 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->sender_ssrc());
351 EXPECT_EQ(0, parser()->report_block()->num_packets()); 351 EXPECT_EQ(0U, parser()->receiver_report()->report_blocks().size());
352 } 352 }
353 353
354 TEST_F(RtcpSenderTest, SendRrWithOneReportBlock) { 354 TEST_F(RtcpSenderTest, SendRrWithOneReportBlock) {
355 const uint16_t kSeqNum = 11111; 355 const uint16_t kSeqNum = 11111;
356 InsertIncomingPacket(kRemoteSsrc, kSeqNum); 356 InsertIncomingPacket(kRemoteSsrc, kSeqNum);
357 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 357 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
358 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr)); 358 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr));
359 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); 359 EXPECT_EQ(1, parser()->receiver_report()->num_packets());
360 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->Ssrc()); 360 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->sender_ssrc());
361 EXPECT_EQ(1, parser()->report_block()->num_packets()); 361 ASSERT_EQ(1U, parser()->receiver_report()->report_blocks().size());
362 EXPECT_EQ(kRemoteSsrc, parser()->report_block()->Ssrc()); 362 const rtcp::ReportBlock& rb = parser()->receiver_report()->report_blocks()[0];
363 EXPECT_EQ(0U, parser()->report_block()->FractionLost()); 363 EXPECT_EQ(kRemoteSsrc, rb.source_ssrc());
364 EXPECT_EQ(0U, parser()->report_block()->CumPacketLost()); 364 EXPECT_EQ(0U, rb.fraction_lost());
365 EXPECT_EQ(kSeqNum, parser()->report_block()->ExtHighestSeqNum()); 365 EXPECT_EQ(0U, rb.cumulative_lost());
366 EXPECT_EQ(kSeqNum, rb.extended_high_seq_num());
366 } 367 }
367 368
368 TEST_F(RtcpSenderTest, SendRrWithTwoReportBlocks) { 369 TEST_F(RtcpSenderTest, SendRrWithTwoReportBlocks) {
369 const uint16_t kSeqNum = 11111; 370 const uint16_t kSeqNum = 11111;
370 InsertIncomingPacket(kRemoteSsrc, kSeqNum); 371 InsertIncomingPacket(kRemoteSsrc, kSeqNum);
371 InsertIncomingPacket(kRemoteSsrc + 1, kSeqNum + 1); 372 InsertIncomingPacket(kRemoteSsrc + 1, kSeqNum + 1);
372 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 373 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
373 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr)); 374 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRr));
374 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); 375 EXPECT_EQ(1, parser()->receiver_report()->num_packets());
375 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->Ssrc()); 376 EXPECT_EQ(kSenderSsrc, parser()->receiver_report()->sender_ssrc());
376 EXPECT_EQ(2, parser()->report_block()->num_packets()); 377 EXPECT_EQ(2U, parser()->receiver_report()->report_blocks().size());
377 EXPECT_EQ(1, parser()->report_blocks_per_ssrc(kRemoteSsrc)); 378 EXPECT_EQ(kRemoteSsrc,
378 EXPECT_EQ(1, parser()->report_blocks_per_ssrc(kRemoteSsrc + 1)); 379 parser()->receiver_report()->report_blocks()[0].source_ssrc());
380 EXPECT_EQ(kRemoteSsrc + 1,
381 parser()->receiver_report()->report_blocks()[1].source_ssrc());
379 } 382 }
380 383
381 TEST_F(RtcpSenderTest, SendSdes) { 384 TEST_F(RtcpSenderTest, SendSdes) {
382 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 385 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
383 EXPECT_EQ(0, rtcp_sender_->SetCNAME("alice@host")); 386 EXPECT_EQ(0, rtcp_sender_->SetCNAME("alice@host"));
384 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSdes)); 387 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSdes));
385 EXPECT_EQ(1, parser()->sdes()->num_packets()); 388 EXPECT_EQ(1, parser()->sdes()->num_packets());
386 EXPECT_EQ(1, parser()->sdes_chunk()->num_packets()); 389 EXPECT_EQ(1U, parser()->sdes()->chunks().size());
387 EXPECT_EQ(kSenderSsrc, parser()->sdes_chunk()->Ssrc()); 390 EXPECT_EQ(kSenderSsrc, parser()->sdes()->chunks()[0].ssrc);
388 EXPECT_EQ("alice@host", parser()->sdes_chunk()->Cname()); 391 EXPECT_EQ("alice@host", parser()->sdes()->chunks()[0].cname);
389 } 392 }
390 393
391 TEST_F(RtcpSenderTest, SdesIncludedInCompoundPacket) { 394 TEST_F(RtcpSenderTest, SdesIncludedInCompoundPacket) {
392 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 395 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
393 EXPECT_EQ(0, rtcp_sender_->SetCNAME("alice@host")); 396 EXPECT_EQ(0, rtcp_sender_->SetCNAME("alice@host"));
394 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); 397 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport));
395 EXPECT_EQ(1, parser()->receiver_report()->num_packets()); 398 EXPECT_EQ(1, parser()->receiver_report()->num_packets());
396 EXPECT_EQ(1, parser()->sdes()->num_packets()); 399 EXPECT_EQ(1, parser()->sdes()->num_packets());
397 EXPECT_EQ(1, parser()->sdes_chunk()->num_packets()); 400 EXPECT_EQ(1U, parser()->sdes()->chunks().size());
398 } 401 }
399 402
400 TEST_F(RtcpSenderTest, SendBye) { 403 TEST_F(RtcpSenderTest, SendBye) {
401 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 404 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
402 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpBye)); 405 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpBye));
403 EXPECT_EQ(1, parser()->bye()->num_packets()); 406 EXPECT_EQ(1, parser()->bye()->num_packets());
404 EXPECT_EQ(kSenderSsrc, parser()->bye()->Ssrc()); 407 EXPECT_EQ(kSenderSsrc, parser()->bye()->sender_ssrc());
405 } 408 }
406 409
407 TEST_F(RtcpSenderTest, StopSendingTriggersBye) { 410 TEST_F(RtcpSenderTest, StopSendingTriggersBye) {
408 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 411 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
409 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), true)); 412 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), true));
410 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false)); 413 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false));
411 EXPECT_EQ(1, parser()->bye()->num_packets()); 414 EXPECT_EQ(1, parser()->bye()->num_packets());
412 EXPECT_EQ(kSenderSsrc, parser()->bye()->Ssrc()); 415 EXPECT_EQ(kSenderSsrc, parser()->bye()->sender_ssrc());
413 } 416 }
414 417
415 TEST_F(RtcpSenderTest, SendApp) { 418 TEST_F(RtcpSenderTest, SendApp) {
416 const uint8_t kSubType = 30; 419 const uint8_t kSubType = 30;
417 uint32_t name = 'n' << 24; 420 uint32_t name = 'n' << 24;
418 name += 'a' << 16; 421 name += 'a' << 16;
419 name += 'm' << 8; 422 name += 'm' << 8;
420 name += 'e'; 423 name += 'e';
421 const uint8_t kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'}; 424 const uint8_t kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'};
422 const uint16_t kDataLength = sizeof(kData) / sizeof(kData[0]);
423 EXPECT_EQ(0, rtcp_sender_->SetApplicationSpecificData(kSubType, name, kData, 425 EXPECT_EQ(0, rtcp_sender_->SetApplicationSpecificData(kSubType, name, kData,
424 kDataLength)); 426 sizeof(kData)));
425 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 427 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
426 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpApp)); 428 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpApp));
427 EXPECT_EQ(1, parser()->app()->num_packets()); 429 EXPECT_EQ(1, parser()->app()->num_packets());
428 EXPECT_EQ(kSubType, parser()->app()->SubType()); 430 EXPECT_EQ(kSubType, parser()->app()->sub_type());
429 EXPECT_EQ(name, parser()->app()->Name()); 431 EXPECT_EQ(name, parser()->app()->name());
430 EXPECT_EQ(1, parser()->app_item()->num_packets()); 432 EXPECT_EQ(sizeof(kData), parser()->app()->data_size());
431 EXPECT_EQ(kDataLength, parser()->app_item()->DataLength()); 433 EXPECT_EQ(0, memcmp(kData, parser()->app()->data(), sizeof(kData)));
432 EXPECT_EQ(0, strncmp(reinterpret_cast<const char*>(kData),
433 reinterpret_cast<const char*>(parser()->app_item()->Data()),
434 parser()->app_item()->DataLength()));
435 } 434 }
436 435
437 TEST_F(RtcpSenderTest, SendEmptyApp) { 436 TEST_F(RtcpSenderTest, SendEmptyApp) {
438 const uint8_t kSubType = 30; 437 const uint8_t kSubType = 30;
439 const uint32_t kName = 0x6E616D65; 438 const uint32_t kName = 0x6E616D65;
440 439
441 EXPECT_EQ( 440 EXPECT_EQ(
442 0, rtcp_sender_->SetApplicationSpecificData(kSubType, kName, nullptr, 0)); 441 0, rtcp_sender_->SetApplicationSpecificData(kSubType, kName, nullptr, 0));
443 442
444 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 443 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
445 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpApp)); 444 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpApp));
446 EXPECT_EQ(1, parser()->app()->num_packets()); 445 EXPECT_EQ(1, parser()->app()->num_packets());
447 EXPECT_EQ(kSubType, parser()->app()->SubType()); 446 EXPECT_EQ(kSubType, parser()->app()->sub_type());
448 EXPECT_EQ(kName, parser()->app()->Name()); 447 EXPECT_EQ(kName, parser()->app()->name());
449 EXPECT_EQ(0, parser()->app_item()->num_packets()); 448 EXPECT_EQ(0U, parser()->app()->data_size());
450 } 449 }
451 450
452 TEST_F(RtcpSenderTest, SetInvalidApplicationSpecificData) { 451 TEST_F(RtcpSenderTest, SetInvalidApplicationSpecificData) {
453 const uint8_t kData[] = {'t', 'e', 's', 't', 'd', 'a', 't'}; 452 const uint8_t kData[] = {'t', 'e', 's', 't', 'd', 'a', 't'};
454 const uint16_t kInvalidDataLength = sizeof(kData) / sizeof(kData[0]); 453 const uint16_t kInvalidDataLength = sizeof(kData) / sizeof(kData[0]);
455 EXPECT_EQ(-1, rtcp_sender_->SetApplicationSpecificData( 454 EXPECT_EQ(-1, rtcp_sender_->SetApplicationSpecificData(
456 0, 0, kData, kInvalidDataLength)); // Should by multiple of 4. 455 0, 0, kData, kInvalidDataLength)); // Should by multiple of 4.
457 } 456 }
458 457
459 TEST_F(RtcpSenderTest, SendFirNonRepeat) { 458 TEST_F(RtcpSenderTest, SendFirNonRepeat) {
460 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 459 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
461 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir)); 460 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir));
462 EXPECT_EQ(1, parser()->fir()->num_packets()); 461 EXPECT_EQ(1, parser()->fir()->num_packets());
463 EXPECT_EQ(kSenderSsrc, parser()->fir()->Ssrc()); 462 EXPECT_EQ(kSenderSsrc, parser()->fir()->sender_ssrc());
464 EXPECT_EQ(1, parser()->fir_item()->num_packets()); 463 EXPECT_EQ(1U, parser()->fir()->requests().size());
465 EXPECT_EQ(kRemoteSsrc, parser()->fir_item()->Ssrc()); 464 EXPECT_EQ(kRemoteSsrc, parser()->fir()->requests()[0].ssrc);
466 uint8_t seq = parser()->fir_item()->SeqNum(); 465 uint8_t seq = parser()->fir()->requests()[0].seq_nr;
467 // Sends non-repeat FIR as default. 466 // Sends non-repeat FIR as default.
468 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir)); 467 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir));
469 EXPECT_EQ(2, parser()->fir()->num_packets()); 468 EXPECT_EQ(2, parser()->fir()->num_packets());
470 EXPECT_EQ(2, parser()->fir_item()->num_packets()); 469 EXPECT_EQ(seq + 1, parser()->fir()->requests()[0].seq_nr);
471 EXPECT_EQ(seq + 1, parser()->fir_item()->SeqNum());
472 } 470 }
473 471
474 TEST_F(RtcpSenderTest, SendFirRepeat) { 472 TEST_F(RtcpSenderTest, SendFirRepeat) {
475 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 473 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
476 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir)); 474 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir));
477 EXPECT_EQ(1, parser()->fir()->num_packets()); 475 EXPECT_EQ(1, parser()->fir()->num_packets());
478 EXPECT_EQ(1, parser()->fir_item()->num_packets()); 476 EXPECT_EQ(1U, parser()->fir()->requests().size());
479 uint8_t seq = parser()->fir_item()->SeqNum(); 477 uint8_t seq = parser()->fir()->requests()[0].seq_nr;
480 const bool kRepeat = true; 478 const bool kRepeat = true;
481 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir, 0, nullptr, 479 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpFir, 0, nullptr,
482 kRepeat)); 480 kRepeat));
483 EXPECT_EQ(2, parser()->fir()->num_packets()); 481 EXPECT_EQ(2, parser()->fir()->num_packets());
484 EXPECT_EQ(2, parser()->fir_item()->num_packets()); 482 EXPECT_EQ(seq, parser()->fir()->requests()[0].seq_nr);
485 EXPECT_EQ(seq, parser()->fir_item()->SeqNum());
486 } 483 }
487 484
488 TEST_F(RtcpSenderTest, SendPli) { 485 TEST_F(RtcpSenderTest, SendPli) {
489 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 486 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
490 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); 487 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli));
491 EXPECT_EQ(1, parser()->pli()->num_packets()); 488 EXPECT_EQ(1, parser()->pli()->num_packets());
492 EXPECT_EQ(kSenderSsrc, parser()->pli()->Ssrc()); 489 EXPECT_EQ(kSenderSsrc, parser()->pli()->sender_ssrc());
493 EXPECT_EQ(kRemoteSsrc, parser()->pli()->MediaSsrc()); 490 EXPECT_EQ(kRemoteSsrc, parser()->pli()->media_ssrc());
494 } 491 }
495 492
496 TEST_F(RtcpSenderTest, SendRpsi) { 493 TEST_F(RtcpSenderTest, SendRpsi) {
497 const uint64_t kPictureId = 0x41; 494 const uint64_t kPictureId = 0x41;
498 const int8_t kPayloadType = 100; 495 const int8_t kPayloadType = 100;
499 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 496 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
500 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState(); 497 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState();
501 feedback_state.send_payload_type = kPayloadType; 498 feedback_state.send_payload_type = kPayloadType;
502 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpRpsi, 0, nullptr, 499 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpRpsi, 0, nullptr,
503 false, kPictureId)); 500 false, kPictureId));
504 EXPECT_EQ(1, parser()->rpsi()->num_packets()); 501 EXPECT_EQ(1, parser()->rpsi()->num_packets());
505 EXPECT_EQ(kPayloadType, parser()->rpsi()->PayloadType()); 502 EXPECT_EQ(kPayloadType, parser()->rpsi()->payload_type());
506 EXPECT_EQ(kPictureId, parser()->rpsi()->PictureId()); 503 EXPECT_EQ(kPictureId, parser()->rpsi()->picture_id());
507 } 504 }
508 505
509 TEST_F(RtcpSenderTest, SendSli) { 506 TEST_F(RtcpSenderTest, SendSli) {
510 const uint16_t kFirstMb = 0; 507 const uint16_t kFirstMb = 0;
511 const uint16_t kNumberOfMb = 0x1FFF; 508 const uint16_t kNumberOfMb = 0x1FFF;
512 const uint8_t kPictureId = 60; 509 const uint8_t kPictureId = 60;
513 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 510 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
514 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSli, 0, nullptr, 511 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSli, 0, nullptr,
515 false, kPictureId)); 512 false, kPictureId));
516 EXPECT_EQ(1, parser()->sli()->num_packets()); 513 EXPECT_EQ(1, parser()->sli()->num_packets());
517 EXPECT_EQ(kSenderSsrc, parser()->sli()->Ssrc()); 514 EXPECT_EQ(kSenderSsrc, parser()->sli()->sender_ssrc());
518 EXPECT_EQ(kRemoteSsrc, parser()->sli()->MediaSsrc()); 515 EXPECT_EQ(kRemoteSsrc, parser()->sli()->media_ssrc());
519 EXPECT_EQ(1, parser()->sli_item()->num_packets()); 516 EXPECT_EQ(1U, parser()->sli()->macroblocks().size());
520 EXPECT_EQ(kFirstMb, parser()->sli_item()->FirstMb()); 517 EXPECT_EQ(kFirstMb, parser()->sli()->macroblocks()[0].first());
521 EXPECT_EQ(kNumberOfMb, parser()->sli_item()->NumberOfMb()); 518 EXPECT_EQ(kNumberOfMb, parser()->sli()->macroblocks()[0].number());
522 EXPECT_EQ(kPictureId, parser()->sli_item()->PictureId()); 519 EXPECT_EQ(kPictureId, parser()->sli()->macroblocks()[0].picture_id());
523 } 520 }
524 521
525 TEST_F(RtcpSenderTest, SendNack) { 522 TEST_F(RtcpSenderTest, SendNack) {
526 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 523 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
527 const uint16_t kList[] = {0, 1, 16}; 524 const uint16_t kList[] = {0, 1, 16};
528 const int32_t kListLength = sizeof(kList) / sizeof(kList[0]); 525 const int32_t kListLength = sizeof(kList) / sizeof(kList[0]);
529 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpNack, kListLength, 526 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpNack, kListLength,
530 kList)); 527 kList));
531 EXPECT_EQ(1, parser()->nack()->num_packets()); 528 EXPECT_EQ(1, parser()->nack()->num_packets());
532 EXPECT_EQ(kSenderSsrc, parser()->nack()->Ssrc()); 529 EXPECT_EQ(kSenderSsrc, parser()->nack()->sender_ssrc());
533 EXPECT_EQ(kRemoteSsrc, parser()->nack()->MediaSsrc()); 530 EXPECT_EQ(kRemoteSsrc, parser()->nack()->media_ssrc());
534 EXPECT_EQ(1, parser()->nack_item()->num_packets()); 531 EXPECT_THAT(parser()->nack()->packet_ids(), ElementsAre(0, 1, 16));
535 EXPECT_THAT(parser()->nack_item()->last_nack_list(), ElementsAre(0, 1, 16));
536 } 532 }
537 533
538 TEST_F(RtcpSenderTest, SendRemb) { 534 TEST_F(RtcpSenderTest, SendRemb) {
539 const int kBitrate = 261011; 535 const uint64_t kBitrate = 261011;
540 std::vector<uint32_t> ssrcs; 536 std::vector<uint32_t> ssrcs;
541 ssrcs.push_back(kRemoteSsrc); 537 ssrcs.push_back(kRemoteSsrc);
542 ssrcs.push_back(kRemoteSsrc + 1); 538 ssrcs.push_back(kRemoteSsrc + 1);
543 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 539 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
544 rtcp_sender_->SetREMBData(kBitrate, ssrcs); 540 rtcp_sender_->SetREMBData(kBitrate, ssrcs);
545 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRemb)); 541 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpRemb));
546 EXPECT_EQ(1, parser()->psfb_app()->num_packets()); 542 EXPECT_EQ(1, parser()->remb()->num_packets());
547 EXPECT_EQ(kSenderSsrc, parser()->psfb_app()->Ssrc()); 543 EXPECT_EQ(kSenderSsrc, parser()->remb()->sender_ssrc());
548 EXPECT_EQ(1, parser()->remb_item()->num_packets()); 544 EXPECT_EQ(kBitrate, parser()->remb()->bitrate_bps());
549 EXPECT_EQ(kBitrate, parser()->remb_item()->last_bitrate_bps()); 545 EXPECT_THAT(parser()->remb()->ssrcs(),
550 EXPECT_THAT(parser()->remb_item()->last_ssrc_list(),
551 ElementsAre(kRemoteSsrc, kRemoteSsrc + 1)); 546 ElementsAre(kRemoteSsrc, kRemoteSsrc + 1));
552 } 547 }
553 548
554 TEST_F(RtcpSenderTest, RembIncludedInCompoundPacketIfEnabled) { 549 TEST_F(RtcpSenderTest, RembIncludedInCompoundPacketIfEnabled) {
555 const int kBitrate = 261011; 550 const int kBitrate = 261011;
556 std::vector<uint32_t> ssrcs; 551 std::vector<uint32_t> ssrcs;
557 ssrcs.push_back(kRemoteSsrc); 552 ssrcs.push_back(kRemoteSsrc);
558 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 553 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
559 rtcp_sender_->SetREMBStatus(true); 554 rtcp_sender_->SetREMBStatus(true);
560 EXPECT_TRUE(rtcp_sender_->REMB()); 555 EXPECT_TRUE(rtcp_sender_->REMB());
561 rtcp_sender_->SetREMBData(kBitrate, ssrcs); 556 rtcp_sender_->SetREMBData(kBitrate, ssrcs);
562 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); 557 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport));
563 EXPECT_EQ(1, parser()->psfb_app()->num_packets()); 558 EXPECT_EQ(1, parser()->remb()->num_packets());
564 EXPECT_EQ(1, parser()->remb_item()->num_packets());
565 // REMB should be included in each compound packet. 559 // REMB should be included in each compound packet.
566 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); 560 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport));
567 EXPECT_EQ(2, parser()->psfb_app()->num_packets()); 561 EXPECT_EQ(2, parser()->remb()->num_packets());
568 EXPECT_EQ(2, parser()->remb_item()->num_packets());
569 } 562 }
570 563
571 TEST_F(RtcpSenderTest, RembNotIncludedInCompoundPacketIfNotEnabled) { 564 TEST_F(RtcpSenderTest, RembNotIncludedInCompoundPacketIfNotEnabled) {
572 const int kBitrate = 261011; 565 const int kBitrate = 261011;
573 std::vector<uint32_t> ssrcs; 566 std::vector<uint32_t> ssrcs;
574 ssrcs.push_back(kRemoteSsrc); 567 ssrcs.push_back(kRemoteSsrc);
575 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 568 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
576 rtcp_sender_->SetREMBData(kBitrate, ssrcs); 569 rtcp_sender_->SetREMBData(kBitrate, ssrcs);
577 EXPECT_FALSE(rtcp_sender_->REMB()); 570 EXPECT_FALSE(rtcp_sender_->REMB());
578 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); 571 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport));
579 EXPECT_EQ(0, parser()->psfb_app()->num_packets()); 572 EXPECT_EQ(0, parser()->remb()->num_packets());
580 } 573 }
581 574
582 TEST_F(RtcpSenderTest, SendXrWithVoipMetric) { 575 TEST_F(RtcpSenderTest, SendXrWithVoipMetric) {
583 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 576 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
584 RTCPVoIPMetric metric; 577 RTCPVoIPMetric metric;
585 metric.lossRate = 1; 578 metric.lossRate = 1;
586 metric.discardRate = 2; 579 metric.discardRate = 2;
587 metric.burstDensity = 3; 580 metric.burstDensity = 3;
588 metric.gapDensity = 4; 581 metric.gapDensity = 4;
589 metric.burstDuration = 0x1111; 582 metric.burstDuration = 0x1111;
590 metric.gapDuration = 0x2222; 583 metric.gapDuration = 0x2222;
591 metric.roundTripDelay = 0x3333; 584 metric.roundTripDelay = 0x3333;
592 metric.endSystemDelay = 0x4444; 585 metric.endSystemDelay = 0x4444;
593 metric.signalLevel = 5; 586 metric.signalLevel = 5;
594 metric.noiseLevel = 6; 587 metric.noiseLevel = 6;
595 metric.RERL = 7; 588 metric.RERL = 7;
596 metric.Gmin = 8; 589 metric.Gmin = 8;
597 metric.Rfactor = 9; 590 metric.Rfactor = 9;
598 metric.extRfactor = 10; 591 metric.extRfactor = 10;
599 metric.MOSLQ = 11; 592 metric.MOSLQ = 11;
600 metric.MOSCQ = 12; 593 metric.MOSCQ = 12;
601 metric.RXconfig = 13; 594 metric.RXconfig = 13;
602 metric.JBnominal = 0x5555; 595 metric.JBnominal = 0x5555;
603 metric.JBmax = 0x6666; 596 metric.JBmax = 0x6666;
604 metric.JBabsMax = 0x7777; 597 metric.JBabsMax = 0x7777;
605 EXPECT_EQ(0, rtcp_sender_->SetRTCPVoIPMetrics(&metric)); 598 EXPECT_EQ(0, rtcp_sender_->SetRTCPVoIPMetrics(&metric));
606 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpXrVoipMetric)); 599 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpXrVoipMetric));
607 EXPECT_EQ(1, parser()->xr_header()->num_packets()); 600 EXPECT_EQ(1, parser()->xr()->num_packets());
608 EXPECT_EQ(kSenderSsrc, parser()->xr_header()->Ssrc()); 601 EXPECT_EQ(kSenderSsrc, parser()->xr()->sender_ssrc());
609 EXPECT_EQ(1, parser()->voip_metric()->num_packets()); 602 EXPECT_EQ(1U, parser()->xr()->voip_metrics().size());
610 EXPECT_EQ(kRemoteSsrc, parser()->voip_metric()->Ssrc()); 603 EXPECT_EQ(kRemoteSsrc, parser()->xr()->voip_metrics()[0].ssrc());
611 EXPECT_EQ(metric.lossRate, parser()->voip_metric()->LossRate()); 604 EXPECT_EQ(metric.lossRate, parser()->voip_metric()->lossRate);
612 EXPECT_EQ(metric.discardRate, parser()->voip_metric()->DiscardRate()); 605 EXPECT_EQ(metric.discardRate, parser()->voip_metric()->discardRate);
613 EXPECT_EQ(metric.burstDensity, parser()->voip_metric()->BurstDensity()); 606 EXPECT_EQ(metric.burstDensity, parser()->voip_metric()->burstDensity);
614 EXPECT_EQ(metric.gapDensity, parser()->voip_metric()->GapDensity()); 607 EXPECT_EQ(metric.gapDensity, parser()->voip_metric()->gapDensity);
615 EXPECT_EQ(metric.burstDuration, parser()->voip_metric()->BurstDuration()); 608 EXPECT_EQ(metric.burstDuration, parser()->voip_metric()->burstDuration);
616 EXPECT_EQ(metric.gapDuration, parser()->voip_metric()->GapDuration()); 609 EXPECT_EQ(metric.gapDuration, parser()->voip_metric()->gapDuration);
617 EXPECT_EQ(metric.roundTripDelay, parser()->voip_metric()->RoundTripDelay()); 610 EXPECT_EQ(metric.roundTripDelay, parser()->voip_metric()->roundTripDelay);
618 EXPECT_EQ(metric.endSystemDelay, parser()->voip_metric()->EndSystemDelay()); 611 EXPECT_EQ(metric.endSystemDelay, parser()->voip_metric()->endSystemDelay);
619 EXPECT_EQ(metric.signalLevel, parser()->voip_metric()->SignalLevel()); 612 EXPECT_EQ(metric.signalLevel, parser()->voip_metric()->signalLevel);
620 EXPECT_EQ(metric.noiseLevel, parser()->voip_metric()->NoiseLevel()); 613 EXPECT_EQ(metric.noiseLevel, parser()->voip_metric()->noiseLevel);
621 EXPECT_EQ(metric.RERL, parser()->voip_metric()->Rerl()); 614 EXPECT_EQ(metric.RERL, parser()->voip_metric()->RERL);
622 EXPECT_EQ(metric.Gmin, parser()->voip_metric()->Gmin()); 615 EXPECT_EQ(metric.Gmin, parser()->voip_metric()->Gmin);
623 EXPECT_EQ(metric.Rfactor, parser()->voip_metric()->Rfactor()); 616 EXPECT_EQ(metric.Rfactor, parser()->voip_metric()->Rfactor);
624 EXPECT_EQ(metric.extRfactor, parser()->voip_metric()->ExtRfactor()); 617 EXPECT_EQ(metric.extRfactor, parser()->voip_metric()->extRfactor);
625 EXPECT_EQ(metric.MOSLQ, parser()->voip_metric()->MosLq()); 618 EXPECT_EQ(metric.MOSLQ, parser()->voip_metric()->MOSLQ);
626 EXPECT_EQ(metric.MOSCQ, parser()->voip_metric()->MosCq()); 619 EXPECT_EQ(metric.MOSCQ, parser()->voip_metric()->MOSCQ);
627 EXPECT_EQ(metric.RXconfig, parser()->voip_metric()->RxConfig()); 620 EXPECT_EQ(metric.RXconfig, parser()->voip_metric()->RXconfig);
628 EXPECT_EQ(metric.JBnominal, parser()->voip_metric()->JbNominal()); 621 EXPECT_EQ(metric.JBnominal, parser()->voip_metric()->JBnominal);
629 EXPECT_EQ(metric.JBmax, parser()->voip_metric()->JbMax()); 622 EXPECT_EQ(metric.JBmax, parser()->voip_metric()->JBmax);
630 EXPECT_EQ(metric.JBabsMax, parser()->voip_metric()->JbAbsMax()); 623 EXPECT_EQ(metric.JBabsMax, parser()->voip_metric()->JBabsMax);
631 } 624 }
632 625
633 TEST_F(RtcpSenderTest, SendXrWithDlrr) { 626 TEST_F(RtcpSenderTest, SendXrWithDlrr) {
634 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 627 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
635 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState(); 628 RTCPSender::FeedbackState feedback_state = rtp_rtcp_impl_->GetFeedbackState();
636 feedback_state.has_last_xr_rr = true; 629 feedback_state.has_last_xr_rr = true;
637 RtcpReceiveTimeInfo last_xr_rr; 630 RtcpReceiveTimeInfo last_xr_rr;
638 last_xr_rr.sourceSSRC = 0x11111111; 631 last_xr_rr.sourceSSRC = 0x11111111;
639 last_xr_rr.lastRR = 0x22222222; 632 last_xr_rr.lastRR = 0x22222222;
640 last_xr_rr.delaySinceLastRR = 0x33333333; 633 last_xr_rr.delaySinceLastRR = 0x33333333;
641 feedback_state.last_xr_rr = last_xr_rr; 634 feedback_state.last_xr_rr = last_xr_rr;
642 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpReport)); 635 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state, kRtcpReport));
643 EXPECT_EQ(1, parser()->xr_header()->num_packets()); 636 EXPECT_EQ(1, parser()->xr()->num_packets());
644 EXPECT_EQ(kSenderSsrc, parser()->xr_header()->Ssrc()); 637 EXPECT_EQ(kSenderSsrc, parser()->xr()->sender_ssrc());
645 EXPECT_EQ(1, parser()->dlrr()->num_packets()); 638 EXPECT_EQ(1U, parser()->xr()->dlrrs().size());
646 EXPECT_EQ(1, parser()->dlrr_items()->num_packets()); 639 EXPECT_EQ(1U, parser()->xr()->dlrrs()[0].sub_blocks().size());
647 EXPECT_EQ(last_xr_rr.sourceSSRC, parser()->dlrr_items()->Ssrc(0)); 640 EXPECT_EQ(last_xr_rr.sourceSSRC,
648 EXPECT_EQ(last_xr_rr.lastRR, parser()->dlrr_items()->LastRr(0)); 641 parser()->xr()->dlrrs()[0].sub_blocks()[0].ssrc);
642 EXPECT_EQ(last_xr_rr.lastRR,
643 parser()->xr()->dlrrs()[0].sub_blocks()[0].last_rr);
649 EXPECT_EQ(last_xr_rr.delaySinceLastRR, 644 EXPECT_EQ(last_xr_rr.delaySinceLastRR,
650 parser()->dlrr_items()->DelayLastRr(0)); 645 parser()->xr()->dlrrs()[0].sub_blocks()[0].delay_since_last_rr);
651 } 646 }
652 647
653 TEST_F(RtcpSenderTest, SendXrWithRrtr) { 648 TEST_F(RtcpSenderTest, SendXrWithRrtr) {
654 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 649 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
655 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false)); 650 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false));
656 rtcp_sender_->SendRtcpXrReceiverReferenceTime(true); 651 rtcp_sender_->SendRtcpXrReceiverReferenceTime(true);
657 uint32_t ntp_secs; 652 uint32_t ntp_secs;
658 uint32_t ntp_frac; 653 uint32_t ntp_frac;
659 clock_.CurrentNtp(ntp_secs, ntp_frac); 654 clock_.CurrentNtp(ntp_secs, ntp_frac);
660 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); 655 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport));
661 EXPECT_EQ(1, parser()->xr_header()->num_packets()); 656 EXPECT_EQ(1, parser()->xr()->num_packets());
662 EXPECT_EQ(kSenderSsrc, parser()->xr_header()->Ssrc()); 657 EXPECT_EQ(kSenderSsrc, parser()->xr()->sender_ssrc());
663 EXPECT_EQ(0, parser()->dlrr()->num_packets()); 658 EXPECT_EQ(0U, parser()->xr()->dlrrs().size());
664 EXPECT_EQ(1, parser()->rrtr()->num_packets()); 659 EXPECT_EQ(1U, parser()->xr()->rrtrs().size());
665 EXPECT_EQ(ntp_secs, parser()->rrtr()->NtpSec()); 660 EXPECT_EQ(ntp_secs, parser()->xr()->rrtrs()[0].ntp().seconds());
666 EXPECT_EQ(ntp_frac, parser()->rrtr()->NtpFrac()); 661 EXPECT_EQ(ntp_frac, parser()->xr()->rrtrs()[0].ntp().fractions());
667 } 662 }
668 663
669 TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfSending) { 664 TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfSending) {
670 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 665 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
671 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), true)); 666 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), true));
672 rtcp_sender_->SendRtcpXrReceiverReferenceTime(true); 667 rtcp_sender_->SendRtcpXrReceiverReferenceTime(true);
673 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); 668 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport));
674 EXPECT_EQ(0, parser()->xr_header()->num_packets()); 669 EXPECT_EQ(0, parser()->xr()->num_packets());
675 EXPECT_EQ(0, parser()->rrtr()->num_packets());
676 } 670 }
677 671
678 TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfNotEnabled) { 672 TEST_F(RtcpSenderTest, TestNoXrRrtrSentIfNotEnabled) {
679 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 673 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
680 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false)); 674 EXPECT_EQ(0, rtcp_sender_->SetSendingStatus(feedback_state(), false));
681 rtcp_sender_->SendRtcpXrReceiverReferenceTime(false); 675 rtcp_sender_->SendRtcpXrReceiverReferenceTime(false);
682 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); 676 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport));
683 EXPECT_EQ(0, parser()->xr_header()->num_packets()); 677 EXPECT_EQ(0, parser()->xr()->num_packets());
684 EXPECT_EQ(0, parser()->rrtr()->num_packets());
685 } 678 }
686 679
687 TEST_F(RtcpSenderTest, TestRegisterRtcpPacketTypeObserver) { 680 TEST_F(RtcpSenderTest, TestRegisterRtcpPacketTypeObserver) {
688 RtcpPacketTypeCounterObserverImpl observer; 681 RtcpPacketTypeCounterObserverImpl observer;
689 rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(), 682 rtcp_sender_.reset(new RTCPSender(false, &clock_, receive_statistics_.get(),
690 &observer, nullptr, &test_transport_)); 683 &observer, nullptr, &test_transport_));
691 rtcp_sender_->SetRemoteSSRC(kRemoteSsrc); 684 rtcp_sender_->SetRemoteSSRC(kRemoteSsrc);
692 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 685 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
693 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli)); 686 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpPli));
694 EXPECT_EQ(1, parser()->pli()->num_packets()); 687 EXPECT_EQ(1, parser()->pli()->num_packets());
695 EXPECT_EQ(kRemoteSsrc, observer.ssrc_); 688 EXPECT_EQ(kRemoteSsrc, observer.ssrc_);
696 EXPECT_EQ(1U, observer.counter_.pli_packets); 689 EXPECT_EQ(1U, observer.counter_.pli_packets);
697 EXPECT_EQ(clock_.TimeInMilliseconds(), 690 EXPECT_EQ(clock_.TimeInMilliseconds(),
698 observer.counter_.first_packet_time_ms); 691 observer.counter_.first_packet_time_ms);
699 } 692 }
700 693
701 TEST_F(RtcpSenderTest, SendTmmbr) { 694 TEST_F(RtcpSenderTest, SendTmmbr) {
702 const unsigned int kBitrateBps = 312000; 695 const unsigned int kBitrateBps = 312000;
703 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize); 696 rtcp_sender_->SetRTCPStatus(RtcpMode::kReducedSize);
704 rtcp_sender_->SetTargetBitrate(kBitrateBps); 697 rtcp_sender_->SetTargetBitrate(kBitrateBps);
705 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpTmmbr)); 698 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpTmmbr));
706 EXPECT_EQ(1, parser()->tmmbr()->num_packets()); 699 EXPECT_EQ(1, parser()->tmmbr()->num_packets());
707 EXPECT_EQ(kSenderSsrc, parser()->tmmbr()->Ssrc()); 700 EXPECT_EQ(kSenderSsrc, parser()->tmmbr()->sender_ssrc());
708 EXPECT_EQ(1, parser()->tmmbr_item()->num_packets()); 701 EXPECT_EQ(1U, parser()->tmmbr()->requests().size());
709 EXPECT_EQ(kBitrateBps / 1000, parser()->tmmbr_item()->BitrateKbps()); 702 EXPECT_EQ(kBitrateBps, parser()->tmmbr()->requests()[0].bitrate_bps());
710 // TODO(asapersson): tmmbr_item()->Overhead() looks broken, always zero. 703 // TODO(asapersson): tmmbr_item()->Overhead() looks broken, always zero.
711 } 704 }
712 705
713 TEST_F(RtcpSenderTest, TmmbrIncludedInCompoundPacketIfEnabled) { 706 TEST_F(RtcpSenderTest, TmmbrIncludedInCompoundPacketIfEnabled) {
714 const unsigned int kBitrateBps = 312000; 707 const unsigned int kBitrateBps = 312000;
715 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 708 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
716 EXPECT_FALSE(rtcp_sender_->TMMBR()); 709 EXPECT_FALSE(rtcp_sender_->TMMBR());
717 rtcp_sender_->SetTMMBRStatus(true); 710 rtcp_sender_->SetTMMBRStatus(true);
718 EXPECT_TRUE(rtcp_sender_->TMMBR()); 711 EXPECT_TRUE(rtcp_sender_->TMMBR());
719 rtcp_sender_->SetTargetBitrate(kBitrateBps); 712 rtcp_sender_->SetTargetBitrate(kBitrateBps);
720 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); 713 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport));
721 EXPECT_EQ(1, parser()->tmmbr()->num_packets()); 714 EXPECT_EQ(1, parser()->tmmbr()->num_packets());
722 EXPECT_EQ(1, parser()->tmmbr_item()->num_packets()); 715 EXPECT_EQ(1U, parser()->tmmbr()->requests().size());
723 // TMMBR should be included in each compound packet. 716 // TMMBR should be included in each compound packet.
724 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport)); 717 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpReport));
725 EXPECT_EQ(2, parser()->tmmbr()->num_packets()); 718 EXPECT_EQ(2, parser()->tmmbr()->num_packets());
726 EXPECT_EQ(2, parser()->tmmbr_item()->num_packets());
727 719
728 rtcp_sender_->SetTMMBRStatus(false); 720 rtcp_sender_->SetTMMBRStatus(false);
729 EXPECT_FALSE(rtcp_sender_->TMMBR()); 721 EXPECT_FALSE(rtcp_sender_->TMMBR());
730 } 722 }
731 723
732 TEST_F(RtcpSenderTest, SendTmmbn) { 724 TEST_F(RtcpSenderTest, SendTmmbn) {
733 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 725 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
734 rtcp_sender_->SetSendingStatus(feedback_state(), true); 726 rtcp_sender_->SetSendingStatus(feedback_state(), true);
735 std::vector<rtcp::TmmbItem> bounding_set; 727 std::vector<rtcp::TmmbItem> bounding_set;
736 const uint32_t kBitrateKbps = 32768; 728 const uint32_t kBitrateBps = 32768000;
737 const uint32_t kPacketOh = 40; 729 const uint32_t kPacketOh = 40;
738 const uint32_t kSourceSsrc = 12345; 730 const uint32_t kSourceSsrc = 12345;
739 const rtcp::TmmbItem tmmbn(kSourceSsrc, kBitrateKbps * 1000, kPacketOh); 731 const rtcp::TmmbItem tmmbn(kSourceSsrc, kBitrateBps, kPacketOh);
740 bounding_set.push_back(tmmbn); 732 bounding_set.push_back(tmmbn);
741 rtcp_sender_->SetTmmbn(bounding_set); 733 rtcp_sender_->SetTmmbn(bounding_set);
742 734
743 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSr)); 735 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSr));
744 EXPECT_EQ(1, parser()->sender_report()->num_packets()); 736 EXPECT_EQ(1, parser()->sender_report()->num_packets());
745 EXPECT_EQ(1, parser()->tmmbn()->num_packets()); 737 EXPECT_EQ(1, parser()->tmmbn()->num_packets());
746 EXPECT_EQ(kSenderSsrc, parser()->tmmbn()->Ssrc()); 738 EXPECT_EQ(kSenderSsrc, parser()->tmmbn()->sender_ssrc());
747 EXPECT_EQ(1, parser()->tmmbn_items()->num_packets()); 739 EXPECT_EQ(1U, parser()->tmmbn()->items().size());
748 EXPECT_EQ(kBitrateKbps, parser()->tmmbn_items()->BitrateKbps(0)); 740 EXPECT_EQ(kBitrateBps, parser()->tmmbn()->items()[0].bitrate_bps());
749 EXPECT_EQ(kPacketOh, parser()->tmmbn_items()->Overhead(0)); 741 EXPECT_EQ(kPacketOh, parser()->tmmbn()->items()[0].packet_overhead());
750 EXPECT_EQ(kSourceSsrc, parser()->tmmbn_items()->Ssrc(0)); 742 EXPECT_EQ(kSourceSsrc, parser()->tmmbn()->items()[0].ssrc());
751 } 743 }
752 744
753 // This test is written to verify actual behaviour. It does not seem 745 // This test is written to verify actual behaviour. It does not seem
754 // to make much sense to send an empty TMMBN, since there is no place 746 // to make much sense to send an empty TMMBN, since there is no place
755 // to put an actual limit here. It's just information that no limit 747 // to put an actual limit here. It's just information that no limit
756 // is set, which is kind of the starting assumption. 748 // is set, which is kind of the starting assumption.
757 // See http://code.google.com/p/webrtc/issues/detail?id=468 for one 749 // See http://code.google.com/p/webrtc/issues/detail?id=468 for one
758 // situation where this caused confusion. 750 // situation where this caused confusion.
759 TEST_F(RtcpSenderTest, SendsTmmbnIfSetAndEmpty) { 751 TEST_F(RtcpSenderTest, SendsTmmbnIfSetAndEmpty) {
760 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 752 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
761 rtcp_sender_->SetSendingStatus(feedback_state(), true); 753 rtcp_sender_->SetSendingStatus(feedback_state(), true);
762 std::vector<rtcp::TmmbItem> bounding_set; 754 std::vector<rtcp::TmmbItem> bounding_set;
763 rtcp_sender_->SetTmmbn(bounding_set); 755 rtcp_sender_->SetTmmbn(bounding_set);
764 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSr)); 756 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpSr));
765 EXPECT_EQ(1, parser()->sender_report()->num_packets()); 757 EXPECT_EQ(1, parser()->sender_report()->num_packets());
766 EXPECT_EQ(1, parser()->tmmbn()->num_packets()); 758 EXPECT_EQ(1, parser()->tmmbn()->num_packets());
767 EXPECT_EQ(kSenderSsrc, parser()->tmmbn()->Ssrc()); 759 EXPECT_EQ(kSenderSsrc, parser()->tmmbn()->sender_ssrc());
768 EXPECT_EQ(0, parser()->tmmbn_items()->num_packets()); 760 EXPECT_EQ(0U, parser()->tmmbn()->items().size());
769 } 761 }
770 762
771 TEST_F(RtcpSenderTest, SendCompoundPliRemb) { 763 TEST_F(RtcpSenderTest, SendCompoundPliRemb) {
772 const int kBitrate = 261011; 764 const int kBitrate = 261011;
773 std::vector<uint32_t> ssrcs; 765 std::vector<uint32_t> ssrcs;
774 ssrcs.push_back(kRemoteSsrc); 766 ssrcs.push_back(kRemoteSsrc);
775 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 767 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
776 rtcp_sender_->SetREMBData(kBitrate, ssrcs); 768 rtcp_sender_->SetREMBData(kBitrate, ssrcs);
777 std::set<RTCPPacketType> packet_types; 769 std::set<RTCPPacketType> packet_types;
778 packet_types.insert(kRtcpRemb); 770 packet_types.insert(kRtcpRemb);
779 packet_types.insert(kRtcpPli); 771 packet_types.insert(kRtcpPli);
780 EXPECT_EQ(0, rtcp_sender_->SendCompoundRTCP(feedback_state(), packet_types)); 772 EXPECT_EQ(0, rtcp_sender_->SendCompoundRTCP(feedback_state(), packet_types));
781 EXPECT_EQ(1, parser()->remb_item()->num_packets()); 773 EXPECT_EQ(1, parser()->remb()->num_packets());
782 EXPECT_EQ(1, parser()->pli()->num_packets()); 774 EXPECT_EQ(1, parser()->pli()->num_packets());
783 } 775 }
784 776
785 777
786 // This test is written to verify that BYE is always the last packet 778 // This test is written to verify that BYE is always the last packet
787 // type in a RTCP compoud packet. The rtcp_sender_ is recreated with 779 // type in a RTCP compoud packet. The rtcp_sender_ is recreated with
788 // mock_transport, which is used to check for whether BYE at the end 780 // mock_transport, which is used to check for whether BYE at the end
789 // of a RTCP compound packet. 781 // of a RTCP compound packet.
790 TEST_F(RtcpSenderTest, ByeMustBeLast) { 782 TEST_F(RtcpSenderTest, ByeMustBeLast) {
791 MockTransport mock_transport; 783 MockTransport mock_transport;
(...skipping 25 matching lines...) Expand all
817 rtcp_sender_->SetLastRtpTime(kRtpTimestamp, clock_.TimeInMilliseconds()); 809 rtcp_sender_->SetLastRtpTime(kRtpTimestamp, clock_.TimeInMilliseconds());
818 810
819 // Set up XR VoIP metric to be included with BYE 811 // Set up XR VoIP metric to be included with BYE
820 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound); 812 rtcp_sender_->SetRTCPStatus(RtcpMode::kCompound);
821 RTCPVoIPMetric metric; 813 RTCPVoIPMetric metric;
822 EXPECT_EQ(0, rtcp_sender_->SetRTCPVoIPMetrics(&metric)); 814 EXPECT_EQ(0, rtcp_sender_->SetRTCPVoIPMetrics(&metric));
823 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpBye)); 815 EXPECT_EQ(0, rtcp_sender_->SendRTCP(feedback_state(), kRtcpBye));
824 } 816 }
825 817
826 } // namespace webrtc 818 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698