| OLD | NEW |
| 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 |
| 11 | 11 |
| 12 /* | 12 /* |
| 13 * This file includes unit tests for the RTCPReceiver. | 13 * This file includes unit tests for the RTCPReceiver. |
| 14 */ | 14 */ |
| 15 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 17 |
| 18 #include "webrtc/common_types.h" | 18 #include "webrtc/common_types.h" |
| 19 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra
te_observer.h" | 19 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra
te_observer.h" |
| 20 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_singl
e_stream.h" | 20 #include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_singl
e_stream.h" |
| 21 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 21 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
| 22 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" | 22 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" |
| 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" | 23 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" |
| 24 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" | 24 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" |
| 25 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h" | 25 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h" |
| 26 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h" |
| 26 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h" | 27 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h" |
| 27 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" | 28 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" |
| 28 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h" | 29 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h" |
| 29 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h" | 30 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h" |
| 30 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" | 31 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" |
| 31 #include "webrtc/modules/rtp_rtcp/source/rtcp_receiver.h" | 32 #include "webrtc/modules/rtp_rtcp/source/rtcp_receiver.h" |
| 32 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" | 33 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" |
| 33 #include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h" | 34 #include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h" |
| 34 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" | 35 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" |
| 35 | 36 |
| (...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 568 | 569 |
| 569 TEST_F(RtcpReceiverTest, InjectSliPacket) { | 570 TEST_F(RtcpReceiverTest, InjectSliPacket) { |
| 570 rtcp::Sli sli; | 571 rtcp::Sli sli; |
| 571 sli.WithPictureId(40); | 572 sli.WithPictureId(40); |
| 572 rtc::scoped_ptr<rtcp::RawPacket> packet(sli.Build()); | 573 rtc::scoped_ptr<rtcp::RawPacket> packet(sli.Build()); |
| 573 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 574 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 574 EXPECT_EQ(kRtcpSli, rtcp_packet_info_.rtcpPacketTypeFlags); | 575 EXPECT_EQ(kRtcpSli, rtcp_packet_info_.rtcpPacketTypeFlags); |
| 575 EXPECT_EQ(40, rtcp_packet_info_.sliPictureId); | 576 EXPECT_EQ(40, rtcp_packet_info_.sliPictureId); |
| 576 } | 577 } |
| 577 | 578 |
| 578 TEST_F(RtcpReceiverTest, XrPacketWithZeroReportBlocksIgnored) { | 579 TEST_F(RtcpReceiverTest, ExtendedReportsPacketWithZeroReportBlocksIgnored) { |
| 579 rtcp::Xr xr; | 580 rtcp::ExtendedReports xr; |
| 580 xr.From(0x2345); | 581 xr.From(0x2345); |
| 581 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 582 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 582 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 583 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 583 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 584 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
| 584 } | 585 } |
| 585 | 586 |
| 586 TEST_F(RtcpReceiverTest, InjectXrVoipPacket) { | 587 TEST_F(RtcpReceiverTest, InjectExtendedReportsVoipPacket) { |
| 587 const uint32_t kSourceSsrc = 0x123456; | 588 const uint32_t kSourceSsrc = 0x123456; |
| 588 std::set<uint32_t> ssrcs; | 589 std::set<uint32_t> ssrcs; |
| 589 ssrcs.insert(kSourceSsrc); | 590 ssrcs.insert(kSourceSsrc); |
| 590 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 591 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
| 591 | 592 |
| 592 const uint8_t kLossRate = 123; | 593 const uint8_t kLossRate = 123; |
| 593 rtcp::VoipMetric voip_metric; | 594 rtcp::VoipMetric voip_metric; |
| 594 voip_metric.To(kSourceSsrc); | 595 voip_metric.To(kSourceSsrc); |
| 595 RTCPVoIPMetric metric; | 596 RTCPVoIPMetric metric; |
| 596 metric.lossRate = kLossRate; | 597 metric.lossRate = kLossRate; |
| 597 voip_metric.WithVoipMetric(metric); | 598 voip_metric.WithVoipMetric(metric); |
| 598 rtcp::Xr xr; | 599 rtcp::ExtendedReports xr; |
| 599 xr.From(0x2345); | 600 xr.From(0x2345); |
| 600 xr.WithVoipMetric(&voip_metric); | 601 xr.WithVoipMetric(&voip_metric); |
| 601 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 602 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 602 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 603 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 603 ASSERT_TRUE(rtcp_packet_info_.VoIPMetric != nullptr); | 604 ASSERT_TRUE(rtcp_packet_info_.VoIPMetric != nullptr); |
| 604 EXPECT_EQ(kLossRate, rtcp_packet_info_.VoIPMetric->lossRate); | 605 EXPECT_EQ(kLossRate, rtcp_packet_info_.VoIPMetric->lossRate); |
| 605 EXPECT_EQ(kRtcpXrVoipMetric, rtcp_packet_info_.rtcpPacketTypeFlags); | 606 EXPECT_EQ(kRtcpXrVoipMetric, rtcp_packet_info_.rtcpPacketTypeFlags); |
| 606 } | 607 } |
| 607 | 608 |
| 608 TEST_F(RtcpReceiverTest, XrVoipPacketNotToUsIgnored) { | 609 TEST_F(RtcpReceiverTest, ExtendedReportsVoipPacketNotToUsIgnored) { |
| 609 const uint32_t kSourceSsrc = 0x123456; | 610 const uint32_t kSourceSsrc = 0x123456; |
| 610 std::set<uint32_t> ssrcs; | 611 std::set<uint32_t> ssrcs; |
| 611 ssrcs.insert(kSourceSsrc); | 612 ssrcs.insert(kSourceSsrc); |
| 612 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 613 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
| 613 | 614 |
| 614 rtcp::VoipMetric voip_metric; | 615 rtcp::VoipMetric voip_metric; |
| 615 voip_metric.To(kSourceSsrc + 1); | 616 voip_metric.To(kSourceSsrc + 1); |
| 616 rtcp::Xr xr; | 617 rtcp::ExtendedReports xr; |
| 617 xr.From(0x2345); | 618 xr.From(0x2345); |
| 618 xr.WithVoipMetric(&voip_metric); | 619 xr.WithVoipMetric(&voip_metric); |
| 619 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 620 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 620 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 621 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 621 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 622 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
| 622 } | 623 } |
| 623 | 624 |
| 624 TEST_F(RtcpReceiverTest, InjectXrReceiverReferenceTimePacket) { | 625 TEST_F(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) { |
| 625 rtcp::Rrtr rrtr; | 626 rtcp::Rrtr rrtr; |
| 626 rrtr.WithNtp(NtpTime(0x10203, 0x40506)); | 627 rrtr.WithNtp(NtpTime(0x10203, 0x40506)); |
| 627 rtcp::Xr xr; | 628 rtcp::ExtendedReports xr; |
| 628 xr.From(0x2345); | 629 xr.From(0x2345); |
| 629 xr.WithRrtr(&rrtr); | 630 xr.WithRrtr(&rrtr); |
| 630 | 631 |
| 631 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 632 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 632 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 633 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 633 EXPECT_EQ(kRtcpXrReceiverReferenceTime, | 634 EXPECT_EQ(kRtcpXrReceiverReferenceTime, |
| 634 rtcp_packet_info_.rtcpPacketTypeFlags); | 635 rtcp_packet_info_.rtcpPacketTypeFlags); |
| 635 } | 636 } |
| 636 | 637 |
| 637 TEST_F(RtcpReceiverTest, XrDlrrPacketNotToUsIgnored) { | 638 TEST_F(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) { |
| 638 const uint32_t kSourceSsrc = 0x123456; | 639 const uint32_t kSourceSsrc = 0x123456; |
| 639 std::set<uint32_t> ssrcs; | 640 std::set<uint32_t> ssrcs; |
| 640 ssrcs.insert(kSourceSsrc); | 641 ssrcs.insert(kSourceSsrc); |
| 641 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 642 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
| 642 | 643 |
| 643 rtcp::Dlrr dlrr; | 644 rtcp::Dlrr dlrr; |
| 644 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); | 645 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); |
| 645 rtcp::Xr xr; | 646 rtcp::ExtendedReports xr; |
| 646 xr.From(0x2345); | 647 xr.From(0x2345); |
| 647 xr.WithDlrr(&dlrr); | 648 xr.WithDlrr(&dlrr); |
| 648 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 649 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 649 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 650 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 650 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); | 651 EXPECT_EQ(0U, rtcp_packet_info_.rtcpPacketTypeFlags); |
| 651 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); | 652 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); |
| 652 } | 653 } |
| 653 | 654 |
| 654 TEST_F(RtcpReceiverTest, InjectXrDlrrPacketWithSubBlock) { | 655 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) { |
| 655 const uint32_t kSourceSsrc = 0x123456; | 656 const uint32_t kSourceSsrc = 0x123456; |
| 656 std::set<uint32_t> ssrcs; | 657 std::set<uint32_t> ssrcs; |
| 657 ssrcs.insert(kSourceSsrc); | 658 ssrcs.insert(kSourceSsrc); |
| 658 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 659 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
| 659 | 660 |
| 660 rtcp::Dlrr dlrr; | 661 rtcp::Dlrr dlrr; |
| 661 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 662 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
| 662 rtcp::Xr xr; | 663 rtcp::ExtendedReports xr; |
| 663 xr.From(0x2345); | 664 xr.From(0x2345); |
| 664 xr.WithDlrr(&dlrr); | 665 xr.WithDlrr(&dlrr); |
| 665 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 666 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 666 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 667 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 667 // The parser should note the DLRR report block item, but not flag the packet | 668 // The parser should note the DLRR report block item, but not flag the packet |
| 668 // since the RTT is not estimated. | 669 // since the RTT is not estimated. |
| 669 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); | 670 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); |
| 670 } | 671 } |
| 671 | 672 |
| 672 TEST_F(RtcpReceiverTest, InjectXrDlrrPacketWithMultipleSubBlocks) { | 673 TEST_F(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) { |
| 673 const uint32_t kSourceSsrc = 0x123456; | 674 const uint32_t kSourceSsrc = 0x123456; |
| 674 std::set<uint32_t> ssrcs; | 675 std::set<uint32_t> ssrcs; |
| 675 ssrcs.insert(kSourceSsrc); | 676 ssrcs.insert(kSourceSsrc); |
| 676 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 677 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
| 677 | 678 |
| 678 rtcp::Dlrr dlrr; | 679 rtcp::Dlrr dlrr; |
| 679 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); | 680 dlrr.WithDlrrItem(kSourceSsrc + 1, 0x12345, 0x67890); |
| 680 dlrr.WithDlrrItem(kSourceSsrc + 2, 0x12345, 0x67890); | 681 dlrr.WithDlrrItem(kSourceSsrc + 2, 0x12345, 0x67890); |
| 681 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 682 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
| 682 rtcp::Xr xr; | 683 rtcp::ExtendedReports xr; |
| 683 xr.From(0x2345); | 684 xr.From(0x2345); |
| 684 xr.WithDlrr(&dlrr); | 685 xr.WithDlrr(&dlrr); |
| 685 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 686 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 686 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 687 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 687 // The parser should note the DLRR report block item, but not flag the packet | 688 // The parser should note the DLRR report block item, but not flag the packet |
| 688 // since the RTT is not estimated. | 689 // since the RTT is not estimated. |
| 689 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); | 690 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); |
| 690 } | 691 } |
| 691 | 692 |
| 692 TEST_F(RtcpReceiverTest, InjectXrPacketWithMultipleReportBlocks) { | 693 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) { |
| 693 const uint32_t kSourceSsrc = 0x123456; | 694 const uint32_t kSourceSsrc = 0x123456; |
| 694 std::set<uint32_t> ssrcs; | 695 std::set<uint32_t> ssrcs; |
| 695 ssrcs.insert(kSourceSsrc); | 696 ssrcs.insert(kSourceSsrc); |
| 696 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 697 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
| 697 | 698 |
| 698 rtcp::Rrtr rrtr; | 699 rtcp::Rrtr rrtr; |
| 699 rtcp::Dlrr dlrr; | 700 rtcp::Dlrr dlrr; |
| 700 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 701 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
| 701 rtcp::VoipMetric metric; | 702 rtcp::VoipMetric metric; |
| 702 metric.To(kSourceSsrc); | 703 metric.To(kSourceSsrc); |
| 703 rtcp::Xr xr; | 704 rtcp::ExtendedReports xr; |
| 704 xr.From(0x2345); | 705 xr.From(0x2345); |
| 705 xr.WithRrtr(&rrtr); | 706 xr.WithRrtr(&rrtr); |
| 706 xr.WithDlrr(&dlrr); | 707 xr.WithDlrr(&dlrr); |
| 707 xr.WithVoipMetric(&metric); | 708 xr.WithVoipMetric(&metric); |
| 708 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 709 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 709 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 710 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 710 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + | 711 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + |
| 711 kRtcpXrVoipMetric), | 712 kRtcpXrVoipMetric), |
| 712 rtcp_packet_info_.rtcpPacketTypeFlags); | 713 rtcp_packet_info_.rtcpPacketTypeFlags); |
| 713 // The parser should note the DLRR report block item, but not flag the packet | 714 // The parser should note the DLRR report block item, but not flag the packet |
| 714 // since the RTT is not estimated. | 715 // since the RTT is not estimated. |
| 715 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); | 716 EXPECT_TRUE(rtcp_packet_info_.xr_dlrr_item); |
| 716 } | 717 } |
| 717 | 718 |
| 718 TEST_F(RtcpReceiverTest, InjectXrPacketWithUnknownReportBlock) { | 719 TEST_F(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) { |
| 719 const uint32_t kSourceSsrc = 0x123456; | 720 const uint32_t kSourceSsrc = 0x123456; |
| 720 std::set<uint32_t> ssrcs; | 721 std::set<uint32_t> ssrcs; |
| 721 ssrcs.insert(kSourceSsrc); | 722 ssrcs.insert(kSourceSsrc); |
| 722 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); | 723 rtcp_receiver_->SetSsrcs(kSourceSsrc, ssrcs); |
| 723 std::vector<uint32_t> remote_ssrcs; | 724 std::vector<uint32_t> remote_ssrcs; |
| 724 remote_ssrcs.push_back(kSourceSsrc); | 725 remote_ssrcs.push_back(kSourceSsrc); |
| 725 | 726 |
| 726 rtcp::Rrtr rrtr; | 727 rtcp::Rrtr rrtr; |
| 727 rtcp::Dlrr dlrr; | 728 rtcp::Dlrr dlrr; |
| 728 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); | 729 dlrr.WithDlrrItem(kSourceSsrc, 0x12345, 0x67890); |
| 729 rtcp::VoipMetric metric; | 730 rtcp::VoipMetric metric; |
| 730 metric.To(kSourceSsrc); | 731 metric.To(kSourceSsrc); |
| 731 rtcp::Xr xr; | 732 rtcp::ExtendedReports xr; |
| 732 xr.From(0x2345); | 733 xr.From(0x2345); |
| 733 xr.WithRrtr(&rrtr); | 734 xr.WithRrtr(&rrtr); |
| 734 xr.WithDlrr(&dlrr); | 735 xr.WithDlrr(&dlrr); |
| 735 xr.WithVoipMetric(&metric); | 736 xr.WithVoipMetric(&metric); |
| 736 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 737 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 737 // Modify the DLRR block to have an unsupported block type, from 5 to 6. | 738 // Modify the DLRR block to have an unsupported block type, from 5 to 6. |
| 738 uint8_t* buffer = const_cast<uint8_t*>(packet->Buffer()); | 739 uint8_t* buffer = const_cast<uint8_t*>(packet->Buffer()); |
| 739 EXPECT_EQ(5, buffer[20]); | 740 EXPECT_EQ(5, buffer[20]); |
| 740 buffer[20] = 6; | 741 buffer[20] = 6; |
| 741 | 742 |
| 742 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 743 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 743 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + | 744 EXPECT_EQ(static_cast<unsigned int>(kRtcpXrReceiverReferenceTime + |
| 744 kRtcpXrVoipMetric), | 745 kRtcpXrVoipMetric), |
| 745 rtcp_packet_info_.rtcpPacketTypeFlags); | 746 rtcp_packet_info_.rtcpPacketTypeFlags); |
| 746 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); | 747 EXPECT_FALSE(rtcp_packet_info_.xr_dlrr_item); |
| 747 } | 748 } |
| 748 | 749 |
| 749 TEST_F(RtcpReceiverTest, TestXrRrRttInitiallyFalse) { | 750 TEST_F(RtcpReceiverTest, TestXrRrRttInitiallyFalse) { |
| 750 int64_t rtt_ms; | 751 int64_t rtt_ms; |
| 751 EXPECT_FALSE(rtcp_receiver_->GetAndResetXrRrRtt(&rtt_ms)); | 752 EXPECT_FALSE(rtcp_receiver_->GetAndResetXrRrRtt(&rtt_ms)); |
| 752 } | 753 } |
| 753 | 754 |
| 754 TEST_F(RtcpReceiverTest, LastReceivedXrReferenceTimeInfoInitiallyFalse) { | 755 TEST_F(RtcpReceiverTest, LastReceivedXrReferenceTimeInfoInitiallyFalse) { |
| 755 RtcpReceiveTimeInfo info; | 756 RtcpReceiveTimeInfo info; |
| 756 EXPECT_FALSE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); | 757 EXPECT_FALSE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); |
| 757 } | 758 } |
| 758 | 759 |
| 759 TEST_F(RtcpReceiverTest, GetLastReceivedXrReferenceTimeInfo) { | 760 TEST_F(RtcpReceiverTest, GetLastReceivedExtendedReportsReferenceTimeInfo) { |
| 760 const uint32_t kSenderSsrc = 0x123456; | 761 const uint32_t kSenderSsrc = 0x123456; |
| 761 const NtpTime kNtp(0x10203, 0x40506); | 762 const NtpTime kNtp(0x10203, 0x40506); |
| 762 const uint32_t kNtpMid = | 763 const uint32_t kNtpMid = |
| 763 RTCPUtility::MidNtp(kNtp.seconds(), kNtp.fractions()); | 764 RTCPUtility::MidNtp(kNtp.seconds(), kNtp.fractions()); |
| 764 | 765 |
| 765 rtcp::Rrtr rrtr; | 766 rtcp::Rrtr rrtr; |
| 766 rrtr.WithNtp(kNtp); | 767 rrtr.WithNtp(kNtp); |
| 767 rtcp::Xr xr; | 768 rtcp::ExtendedReports xr; |
| 768 xr.From(kSenderSsrc); | 769 xr.From(kSenderSsrc); |
| 769 xr.WithRrtr(&rrtr); | 770 xr.WithRrtr(&rrtr); |
| 770 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); | 771 rtc::scoped_ptr<rtcp::RawPacket> packet(xr.Build()); |
| 771 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); | 772 EXPECT_EQ(0, InjectRtcpPacket(packet->Buffer(), packet->Length())); |
| 772 EXPECT_EQ(kRtcpXrReceiverReferenceTime, | 773 EXPECT_EQ(kRtcpXrReceiverReferenceTime, |
| 773 rtcp_packet_info_.rtcpPacketTypeFlags); | 774 rtcp_packet_info_.rtcpPacketTypeFlags); |
| 774 | 775 |
| 775 RtcpReceiveTimeInfo info; | 776 RtcpReceiveTimeInfo info; |
| 776 EXPECT_TRUE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); | 777 EXPECT_TRUE(rtcp_receiver_->LastReceivedXrReferenceTimeInfo(&info)); |
| 777 EXPECT_EQ(kSenderSsrc, info.sourceSSRC); | 778 EXPECT_EQ(kSenderSsrc, info.sourceSSRC); |
| (...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1094 | 1095 |
| 1095 // Transport feedback should be ignored, but next packet should work. | 1096 // Transport feedback should be ignored, but next packet should work. |
| 1096 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); | 1097 EXPECT_EQ(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpTransportFeedback); |
| 1097 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); | 1098 EXPECT_NE(0u, rtcp_packet_info_.rtcpPacketTypeFlags & kRtcpRemb); |
| 1098 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); | 1099 EXPECT_EQ(kBitrateBps, rtcp_packet_info_.receiverEstimatedMaxBitrate); |
| 1099 } | 1100 } |
| 1100 | 1101 |
| 1101 } // Anonymous namespace | 1102 } // Anonymous namespace |
| 1102 | 1103 |
| 1103 } // namespace webrtc | 1104 } // namespace webrtc |
| OLD | NEW |