Chromium Code Reviews

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

Issue 1579213005: [rtp_rtcp] rtcp::Xr moved into own file and renamed to ExtendedReports on the way (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 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 * This file includes unit tests for the RtcpPacket. 10 * This file includes unit tests for the RtcpPacket.
11 */ 11 */
12 12
13 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" 16 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h"
17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" 17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h"
18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" 18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h"
19 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" 19 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
20 #include "webrtc/test/rtcp_packet_parser.h" 20 #include "webrtc/test/rtcp_packet_parser.h"
21 21
22 using ::testing::ElementsAre; 22 using ::testing::ElementsAre;
23 23
24 using webrtc::rtcp::App; 24 using webrtc::rtcp::App;
25 using webrtc::rtcp::Bye; 25 using webrtc::rtcp::Bye;
26 using webrtc::rtcp::Dlrr;
27 using webrtc::rtcp::Fir; 26 using webrtc::rtcp::Fir;
28 using webrtc::rtcp::RawPacket; 27 using webrtc::rtcp::RawPacket;
29 using webrtc::rtcp::ReceiverReport; 28 using webrtc::rtcp::ReceiverReport;
30 using webrtc::rtcp::Remb; 29 using webrtc::rtcp::Remb;
31 using webrtc::rtcp::ReportBlock; 30 using webrtc::rtcp::ReportBlock;
32 using webrtc::rtcp::Rpsi; 31 using webrtc::rtcp::Rpsi;
33 using webrtc::rtcp::Rrtr;
34 using webrtc::rtcp::Sdes; 32 using webrtc::rtcp::Sdes;
35 using webrtc::rtcp::SenderReport; 33 using webrtc::rtcp::SenderReport;
36 using webrtc::rtcp::VoipMetric;
37 using webrtc::rtcp::Xr;
38 using webrtc::test::RtcpPacketParser; 34 using webrtc::test::RtcpPacketParser;
39 35
40 namespace webrtc { 36 namespace webrtc {
41 37
42 const uint32_t kSenderSsrc = 0x12345678; 38 const uint32_t kSenderSsrc = 0x12345678;
43 const uint32_t kRemoteSsrc = 0x23456789; 39 const uint32_t kRemoteSsrc = 0x23456789;
44 40
45 TEST(RtcpPacketTest, Sr) { 41 TEST(RtcpPacketTest, Sr) {
46 SenderReport sr; 42 SenderReport sr;
47 sr.From(kSenderSsrc); 43 sr.From(kSenderSsrc);
(...skipping 289 matching lines...)
337 parser.Parse(packet->Buffer(), packet->Length()); 333 parser.Parse(packet->Buffer(), packet->Length());
338 EXPECT_EQ(1, parser.psfb_app()->num_packets()); 334 EXPECT_EQ(1, parser.psfb_app()->num_packets());
339 EXPECT_EQ(kSenderSsrc, parser.psfb_app()->Ssrc()); 335 EXPECT_EQ(kSenderSsrc, parser.psfb_app()->Ssrc());
340 EXPECT_EQ(1, parser.remb_item()->num_packets()); 336 EXPECT_EQ(1, parser.remb_item()->num_packets());
341 EXPECT_EQ(261011, parser.remb_item()->last_bitrate_bps()); 337 EXPECT_EQ(261011, parser.remb_item()->last_bitrate_bps());
342 std::vector<uint32_t> ssrcs = parser.remb_item()->last_ssrc_list(); 338 std::vector<uint32_t> ssrcs = parser.remb_item()->last_ssrc_list();
343 EXPECT_EQ(kRemoteSsrc, ssrcs[0]); 339 EXPECT_EQ(kRemoteSsrc, ssrcs[0]);
344 EXPECT_EQ(kRemoteSsrc + 1, ssrcs[1]); 340 EXPECT_EQ(kRemoteSsrc + 1, ssrcs[1]);
345 EXPECT_EQ(kRemoteSsrc + 2, ssrcs[2]); 341 EXPECT_EQ(kRemoteSsrc + 2, ssrcs[2]);
346 } 342 }
347
348 TEST(RtcpPacketTest, XrWithNoReportBlocks) {
349 Xr xr;
350 xr.From(kSenderSsrc);
351
352 rtc::scoped_ptr<RawPacket> packet(xr.Build());
353 RtcpPacketParser parser;
354 parser.Parse(packet->Buffer(), packet->Length());
355 EXPECT_EQ(1, parser.xr_header()->num_packets());
356 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
357 }
358
359 TEST(RtcpPacketTest, XrWithRrtr) {
360 Rrtr rrtr;
361 rrtr.WithNtp(NtpTime(0x11111111, 0x22222222));
362 Xr xr;
363 xr.From(kSenderSsrc);
364 EXPECT_TRUE(xr.WithRrtr(&rrtr));
365
366 rtc::scoped_ptr<RawPacket> packet(xr.Build());
367 RtcpPacketParser parser;
368 parser.Parse(packet->Buffer(), packet->Length());
369 EXPECT_EQ(1, parser.xr_header()->num_packets());
370 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
371 EXPECT_EQ(1, parser.rrtr()->num_packets());
372 EXPECT_EQ(0x11111111U, parser.rrtr()->NtpSec());
373 EXPECT_EQ(0x22222222U, parser.rrtr()->NtpFrac());
374 }
375
376 TEST(RtcpPacketTest, XrWithTwoRrtrBlocks) {
377 Rrtr rrtr1;
378 rrtr1.WithNtp(NtpTime(0x11111111, 0x22222222));
379 Rrtr rrtr2;
380 rrtr2.WithNtp(NtpTime(0x33333333, 0x44444444));
381 Xr xr;
382 xr.From(kSenderSsrc);
383 EXPECT_TRUE(xr.WithRrtr(&rrtr1));
384 EXPECT_TRUE(xr.WithRrtr(&rrtr2));
385
386 rtc::scoped_ptr<RawPacket> packet(xr.Build());
387 RtcpPacketParser parser;
388 parser.Parse(packet->Buffer(), packet->Length());
389 EXPECT_EQ(1, parser.xr_header()->num_packets());
390 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
391 EXPECT_EQ(2, parser.rrtr()->num_packets());
392 EXPECT_EQ(0x33333333U, parser.rrtr()->NtpSec());
393 EXPECT_EQ(0x44444444U, parser.rrtr()->NtpFrac());
394 }
395
396 TEST(RtcpPacketTest, XrWithDlrrWithOneSubBlock) {
397 Dlrr dlrr;
398 EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333));
399 Xr xr;
400 xr.From(kSenderSsrc);
401 EXPECT_TRUE(xr.WithDlrr(&dlrr));
402
403 rtc::scoped_ptr<RawPacket> packet(xr.Build());
404 RtcpPacketParser parser;
405 parser.Parse(packet->Buffer(), packet->Length());
406 EXPECT_EQ(1, parser.xr_header()->num_packets());
407 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
408 EXPECT_EQ(1, parser.dlrr()->num_packets());
409 EXPECT_EQ(1, parser.dlrr_items()->num_packets());
410 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0));
411 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0));
412 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0));
413 }
414
415 TEST(RtcpPacketTest, XrWithDlrrWithTwoSubBlocks) {
416 Dlrr dlrr;
417 EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333));
418 EXPECT_TRUE(dlrr.WithDlrrItem(0x44444444, 0x55555555, 0x66666666));
419 Xr xr;
420 xr.From(kSenderSsrc);
421 EXPECT_TRUE(xr.WithDlrr(&dlrr));
422
423 rtc::scoped_ptr<RawPacket> packet(xr.Build());
424 RtcpPacketParser parser;
425 parser.Parse(packet->Buffer(), packet->Length());
426 EXPECT_EQ(1, parser.xr_header()->num_packets());
427 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
428 EXPECT_EQ(1, parser.dlrr()->num_packets());
429 EXPECT_EQ(2, parser.dlrr_items()->num_packets());
430 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0));
431 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0));
432 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0));
433 EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1));
434 EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1));
435 EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1));
436 }
437
438 TEST(RtcpPacketTest, DlrrWithTooManySubBlocks) {
439 const int kMaxItems = 100;
440 Dlrr dlrr;
441 for (int i = 0; i < kMaxItems; ++i)
442 EXPECT_TRUE(dlrr.WithDlrrItem(i, i, i));
443 EXPECT_FALSE(dlrr.WithDlrrItem(kMaxItems, kMaxItems, kMaxItems));
444 }
445
446 TEST(RtcpPacketTest, XrWithTwoDlrrBlocks) {
447 Dlrr dlrr1;
448 EXPECT_TRUE(dlrr1.WithDlrrItem(0x11111111, 0x22222222, 0x33333333));
449 Dlrr dlrr2;
450 EXPECT_TRUE(dlrr2.WithDlrrItem(0x44444444, 0x55555555, 0x66666666));
451 Xr xr;
452 xr.From(kSenderSsrc);
453 EXPECT_TRUE(xr.WithDlrr(&dlrr1));
454 EXPECT_TRUE(xr.WithDlrr(&dlrr2));
455
456 rtc::scoped_ptr<RawPacket> packet(xr.Build());
457 RtcpPacketParser parser;
458 parser.Parse(packet->Buffer(), packet->Length());
459 EXPECT_EQ(1, parser.xr_header()->num_packets());
460 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
461 EXPECT_EQ(2, parser.dlrr()->num_packets());
462 EXPECT_EQ(2, parser.dlrr_items()->num_packets());
463 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0));
464 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0));
465 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0));
466 EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1));
467 EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1));
468 EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1));
469 }
470
471 TEST(RtcpPacketTest, XrWithVoipMetric) {
472 RTCPVoIPMetric metric;
473 metric.lossRate = 1;
474 metric.discardRate = 2;
475 metric.burstDensity = 3;
476 metric.gapDensity = 4;
477 metric.burstDuration = 0x1111;
478 metric.gapDuration = 0x2222;
479 metric.roundTripDelay = 0x3333;
480 metric.endSystemDelay = 0x4444;
481 metric.signalLevel = 5;
482 metric.noiseLevel = 6;
483 metric.RERL = 7;
484 metric.Gmin = 8;
485 metric.Rfactor = 9;
486 metric.extRfactor = 10;
487 metric.MOSLQ = 11;
488 metric.MOSCQ = 12;
489 metric.RXconfig = 13;
490 metric.JBnominal = 0x5555;
491 metric.JBmax = 0x6666;
492 metric.JBabsMax = 0x7777;
493 VoipMetric metric_block;
494 metric_block.To(kRemoteSsrc);
495 metric_block.WithVoipMetric(metric);
496 Xr xr;
497 xr.From(kSenderSsrc);
498 EXPECT_TRUE(xr.WithVoipMetric(&metric_block));
499
500 rtc::scoped_ptr<RawPacket> packet(xr.Build());
501 RtcpPacketParser parser;
502 parser.Parse(packet->Buffer(), packet->Length());
503 EXPECT_EQ(1, parser.xr_header()->num_packets());
504 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
505 EXPECT_EQ(1, parser.voip_metric()->num_packets());
506 EXPECT_EQ(kRemoteSsrc, parser.voip_metric()->Ssrc());
507 EXPECT_EQ(1, parser.voip_metric()->LossRate());
508 EXPECT_EQ(2, parser.voip_metric()->DiscardRate());
509 EXPECT_EQ(3, parser.voip_metric()->BurstDensity());
510 EXPECT_EQ(4, parser.voip_metric()->GapDensity());
511 EXPECT_EQ(0x1111, parser.voip_metric()->BurstDuration());
512 EXPECT_EQ(0x2222, parser.voip_metric()->GapDuration());
513 EXPECT_EQ(0x3333, parser.voip_metric()->RoundTripDelay());
514 EXPECT_EQ(0x4444, parser.voip_metric()->EndSystemDelay());
515 EXPECT_EQ(5, parser.voip_metric()->SignalLevel());
516 EXPECT_EQ(6, parser.voip_metric()->NoiseLevel());
517 EXPECT_EQ(7, parser.voip_metric()->Rerl());
518 EXPECT_EQ(8, parser.voip_metric()->Gmin());
519 EXPECT_EQ(9, parser.voip_metric()->Rfactor());
520 EXPECT_EQ(10, parser.voip_metric()->ExtRfactor());
521 EXPECT_EQ(11, parser.voip_metric()->MosLq());
522 EXPECT_EQ(12, parser.voip_metric()->MosCq());
523 EXPECT_EQ(13, parser.voip_metric()->RxConfig());
524 EXPECT_EQ(0x5555, parser.voip_metric()->JbNominal());
525 EXPECT_EQ(0x6666, parser.voip_metric()->JbMax());
526 EXPECT_EQ(0x7777, parser.voip_metric()->JbAbsMax());
527 }
528
529 TEST(RtcpPacketTest, XrWithMultipleReportBlocks) {
530 Rrtr rrtr;
531 Dlrr dlrr;
532 EXPECT_TRUE(dlrr.WithDlrrItem(1, 2, 3));
533 VoipMetric metric;
534 Xr xr;
535 xr.From(kSenderSsrc);
536 EXPECT_TRUE(xr.WithRrtr(&rrtr));
537 EXPECT_TRUE(xr.WithDlrr(&dlrr));
538 EXPECT_TRUE(xr.WithVoipMetric(&metric));
539
540 rtc::scoped_ptr<RawPacket> packet(xr.Build());
541 RtcpPacketParser parser;
542 parser.Parse(packet->Buffer(), packet->Length());
543 EXPECT_EQ(1, parser.xr_header()->num_packets());
544 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
545 EXPECT_EQ(1, parser.rrtr()->num_packets());
546 EXPECT_EQ(1, parser.dlrr()->num_packets());
547 EXPECT_EQ(1, parser.dlrr_items()->num_packets());
548 EXPECT_EQ(1, parser.voip_metric()->num_packets());
549 }
550
551 TEST(RtcpPacketTest, DlrrWithoutItemNotIncludedInPacket) {
552 Rrtr rrtr;
553 Dlrr dlrr;
554 VoipMetric metric;
555 Xr xr;
556 xr.From(kSenderSsrc);
557 EXPECT_TRUE(xr.WithRrtr(&rrtr));
558 EXPECT_TRUE(xr.WithDlrr(&dlrr));
559 EXPECT_TRUE(xr.WithVoipMetric(&metric));
560
561 rtc::scoped_ptr<RawPacket> packet(xr.Build());
562 RtcpPacketParser parser;
563 parser.Parse(packet->Buffer(), packet->Length());
564 EXPECT_EQ(1, parser.xr_header()->num_packets());
565 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
566 EXPECT_EQ(1, parser.rrtr()->num_packets());
567 EXPECT_EQ(0, parser.dlrr()->num_packets());
568 EXPECT_EQ(1, parser.voip_metric()->num_packets());
569 }
570
571 TEST(RtcpPacketTest, XrWithTooManyBlocks) {
572 const int kMaxBlocks = 50;
573 Xr xr;
574
575 Rrtr rrtr;
576 for (int i = 0; i < kMaxBlocks; ++i)
577 EXPECT_TRUE(xr.WithRrtr(&rrtr));
578 EXPECT_FALSE(xr.WithRrtr(&rrtr));
579
580 Dlrr dlrr;
581 for (int i = 0; i < kMaxBlocks; ++i)
582 EXPECT_TRUE(xr.WithDlrr(&dlrr));
583 EXPECT_FALSE(xr.WithDlrr(&dlrr));
584
585 VoipMetric voip_metric;
586 for (int i = 0; i < kMaxBlocks; ++i)
587 EXPECT_TRUE(xr.WithVoipMetric(&voip_metric));
588 EXPECT_FALSE(xr.WithVoipMetric(&voip_metric));
589 }
590
591 } // namespace webrtc 343 } // namespace webrtc
OLDNEW

Powered by Google App Engine