10f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org/* 20f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 30f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org * 40f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org * Use of this source code is governed by a BSD-style license 50f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org * that can be found in the LICENSE file in the root of the source 60f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org * tree. An additional intellectual property rights grant can be found 70f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org * in the file PATENTS. All contributing project authors may 80f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org * be found in the AUTHORS file in the root of the source tree. 90f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org * 100f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org * This file includes unit tests for the RtcpPacket. 110f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org */ 120f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 13c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng#include "testing/gmock/include/gmock/gmock.h" 140f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 150f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 160f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org#include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" 170219c9b4bfcbb778137756210eb95f40d936cc66danilchap#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" 1850c5136cb2ad11eb9ba3df1a1d54d527c8a0dc77danilchap#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" 1997f7e13c23ddb26543f33bce944d501e58d1dd9bDanil Chapovalov#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" 200f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org#include "webrtc/test/rtcp_packet_parser.h" 210f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 22c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språngusing ::testing::ElementsAre; 23c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng 244b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::App; 250f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::Bye; 263b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::Dlrr; 270f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::Fir; 280f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::RawPacket; 290f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::ReceiverReport; 303b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::Remb; 310f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::ReportBlock; 32a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgusing webrtc::rtcp::Rpsi; 333b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::Rrtr; 3497f7e13c23ddb26543f33bce944d501e58d1dd9bDanil Chapovalovusing webrtc::rtcp::Sdes; 353b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::SenderReport; 363b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::VoipMetric; 373b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::Xr; 380f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::test::RtcpPacketParser; 390f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 400f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgnamespace webrtc { 410f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 420f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgconst uint32_t kSenderSsrc = 0x12345678; 430f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgconst uint32_t kRemoteSsrc = 0x23456789; 440f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 450f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, Sr) { 460f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 470f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.From(kSenderSsrc); 480f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithNtpSec(0x11111111); 490f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithNtpFrac(0x22222222); 500f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithRtpTimestamp(0x33333333); 510f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithPacketCount(0x44444444); 520f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithOctetCount(0x55555555); 530f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 54c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(sr.Build()); 550f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 56c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 570f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 580f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 590f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sender_report()->Ssrc()); 600f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.sender_report()->NtpSec()); 610f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.sender_report()->NtpFrac()); 620f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.sender_report()->RtpTimestamp()); 630f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.sender_report()->PacketCount()); 640f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x55555555U, parser.sender_report()->OctetCount()); 650f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.report_block()->num_packets()); 660f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 670f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 680f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, SrWithOneReportBlock) { 690f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 700f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.To(kRemoteSsrc); 710f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 720f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 730f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.From(kSenderSsrc); 74bdc0b0d869e9a14bbfafcbb84e294a13383e6fa6Erik Språng EXPECT_TRUE(sr.WithReportBlock(rb)); 750f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 76c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(sr.Build()); 770f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 78c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 790f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 800f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sender_report()->Ssrc()); 810f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 820f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.report_block()->Ssrc()); 830f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 840f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 850f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, SrWithTwoReportBlocks) { 860f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb1; 870f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb1.To(kRemoteSsrc); 880f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb2; 890f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb2.To(kRemoteSsrc + 1); 900f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 910f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 920f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.From(kSenderSsrc); 93bdc0b0d869e9a14bbfafcbb84e294a13383e6fa6Erik Språng EXPECT_TRUE(sr.WithReportBlock(rb1)); 94bdc0b0d869e9a14bbfafcbb84e294a13383e6fa6Erik Språng EXPECT_TRUE(sr.WithReportBlock(rb2)); 950f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 96c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(sr.Build()); 970f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 98c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 990f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 1000f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sender_report()->Ssrc()); 1010f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(2, parser.report_block()->num_packets()); 1020f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_blocks_per_ssrc(kRemoteSsrc)); 1030f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_blocks_per_ssrc(kRemoteSsrc + 1)); 1040f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 1050f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 106c1b9d4e686c184e4b1779d442d447128477d3b8bErik SprångTEST(RtcpPacketTest, SrWithTooManyReportBlocks) { 107c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng SenderReport sr; 108c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng sr.From(kSenderSsrc); 109c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng const int kMaxReportBlocks = (1 << 5) - 1; 110c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng ReportBlock rb; 111c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng for (int i = 0; i < kMaxReportBlocks; ++i) { 112c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rb.To(kRemoteSsrc + i); 113bdc0b0d869e9a14bbfafcbb84e294a13383e6fa6Erik Språng EXPECT_TRUE(sr.WithReportBlock(rb)); 114c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng } 115c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rb.To(kRemoteSsrc + kMaxReportBlocks); 116bdc0b0d869e9a14bbfafcbb84e294a13383e6fa6Erik Språng EXPECT_FALSE(sr.WithReportBlock(rb)); 117c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng} 118c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng 1194b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, AppWithNoData) { 1204b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org App app; 1214b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithSubType(30); 1224b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org uint32_t name = 'n' << 24; 1234b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'a' << 16; 1244b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'm' << 8; 1254b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'e'; 1264b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithName(name); 1274b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 128c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(app.Build()); 1294b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 130c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 1314b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.app()->num_packets()); 1324b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(30U, parser.app()->SubType()); 1334b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(name, parser.app()->Name()); 1344b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0, parser.app_item()->num_packets()); 1354b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 1364b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1374b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, App) { 1384b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org App app; 1394b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.From(kSenderSsrc); 1404b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithSubType(30); 1414b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org uint32_t name = 'n' << 24; 1424b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'a' << 16; 1434b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'm' << 8; 1444b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'e'; 1454b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithName(name); 1464b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const char kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'}; 1474b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kDataLength = sizeof(kData) / sizeof(kData[0]); 1484b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithData((const uint8_t*)kData, kDataLength); 1494b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 150c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(app.Build()); 1514b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 152c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 1534b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.app()->num_packets()); 1544b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(30U, parser.app()->SubType()); 1554b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(name, parser.app()->Name()); 1564b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.app_item()->num_packets()); 1574b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kDataLength, parser.app_item()->DataLength()); 1584b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0, strncmp(kData, (const char*)parser.app_item()->Data(), 1594b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.app_item()->DataLength())); 1604b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 1614b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1624b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, SdesWithOneChunk) { 1634b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sdes sdes; 164c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(sdes.WithCName(kSenderSsrc, "alice@host")); 1654b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 166c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(sdes.Build()); 1674b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 168c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 1694b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes()->num_packets()); 1704b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes_chunk()->num_packets()); 1714b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sdes_chunk()->Ssrc()); 1724b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ("alice@host", parser.sdes_chunk()->Cname()); 1734b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 1744b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1754b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, SdesWithMultipleChunks) { 1764b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sdes sdes; 177c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(sdes.WithCName(kSenderSsrc, "a")); 178c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(sdes.WithCName(kSenderSsrc + 1, "ab")); 179c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(sdes.WithCName(kSenderSsrc + 2, "abc")); 180c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(sdes.WithCName(kSenderSsrc + 3, "abcd")); 181c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(sdes.WithCName(kSenderSsrc + 4, "abcde")); 182c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(sdes.WithCName(kSenderSsrc + 5, "abcdef")); 183c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng 184c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(sdes.Build()); 1854b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 186c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 1874b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes()->num_packets()); 1884b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(6, parser.sdes_chunk()->num_packets()); 1894b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc + 5, parser.sdes_chunk()->Ssrc()); 1904b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ("abcdef", parser.sdes_chunk()->Cname()); 1914b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 1924b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 193c1b9d4e686c184e4b1779d442d447128477d3b8bErik SprångTEST(RtcpPacketTest, SdesWithTooManyChunks) { 194c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng Sdes sdes; 195c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng const int kMaxChunks = (1 << 5) - 1; 196c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng for (int i = 0; i < kMaxChunks; ++i) { 197c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng uint32_t ssrc = kSenderSsrc + i; 198c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng std::ostringstream oss; 199c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng oss << "cname" << i; 200c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(sdes.WithCName(ssrc, oss.str())); 201c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng } 202c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_FALSE(sdes.WithCName(kSenderSsrc + kMaxChunks, "foo")); 203c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng} 204c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng 2054b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, CnameItemWithEmptyString) { 2064b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sdes sdes; 207c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(sdes.WithCName(kSenderSsrc, "")); 2084b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 209c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(sdes.Build()); 2104b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 211c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 2124b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes()->num_packets()); 2134b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes_chunk()->num_packets()); 2144b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sdes_chunk()->Ssrc()); 2154b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ("", parser.sdes_chunk()->Cname()); 2164b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2174b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 218a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, Rpsi) { 219a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 220a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 1000001 (7 bits = 1 byte in native string). 221a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x41; 222a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 1; 223a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPayloadType(100); 224a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 225a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 226c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); 227a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 228c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 229a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(100, parser.rpsi()->PayloadType()); 230a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 231a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 232a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 233a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 234a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithTwoByteNativeString) { 235a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 236a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // |1 0000001 (7 bits = 1 byte in native string). 237a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x81; 238a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 2; 239a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 240a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 241c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); 242a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 243c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 244a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 245a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 246a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 247a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 248a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithThreeByteNativeString) { 249a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 250a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 10000|00 100000|0 1000000 (7 bits = 1 byte in native string). 251a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x102040; 252a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 3; 253a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 254a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 255c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); 256a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 257c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 258a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 259a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 260a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 261a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 262a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithFourByteNativeString) { 263a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 264a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 1000|001 00001|01 100001|1 1000010 (7 bits = 1 byte in native string). 265a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x84161C2; 266a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 4; 267a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 268a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 269c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); 270a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 271c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 272a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 273a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 274a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 275a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 276a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithMaxPictureId) { 277a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 278a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 1 1111111| 1111111 1|111111 11|11111 111|1111 1111|111 11111| 279a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 11 111111|1 1111111 (7 bits = 1 byte in native string). 280a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0xffffffffffffffff; 281a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 10; 282a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 283a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 284c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); 285a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 286c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 287a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 288a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 289a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 290a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 2910f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, Fir) { 2920f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 2930f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org fir.From(kSenderSsrc); 2940f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org fir.To(kRemoteSsrc); 2950f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org fir.WithCommandSeqNum(123); 2960f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 297c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(fir.Build()); 2980f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 299c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 3000f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 3010f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.fir()->Ssrc()); 3020f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir_item()->num_packets()); 3030f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.fir_item()->Ssrc()); 3040f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(123U, parser.fir_item()->SeqNum()); 3050f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 3060f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 3070f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, BuildWithTooSmallBuffer) { 3080f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 3090f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 3100f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 311bdc0b0d869e9a14bbfafcbb84e294a13383e6fa6Erik Språng EXPECT_TRUE(rr.WithReportBlock(rb)); 3120f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 3134b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kRrLength = 8; 3144b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kReportBlockLength = 24; 3150f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 3160f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org // No packet. 317c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng class Verifier : public rtcp::RtcpPacket::PacketReadyCallback { 318c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng void OnPacketReady(uint8_t* data, size_t length) override { 319c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng ADD_FAILURE() << "Packet should not fit within max size."; 320c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng } 321c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng } verifier; 322c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng const size_t kBufferSize = kRrLength + kReportBlockLength - 1; 323c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng uint8_t buffer[kBufferSize]; 324c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_FALSE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier)); 3250f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 3260f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 3273b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, Remb) { 3283b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Remb remb; 3293b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org remb.From(kSenderSsrc); 3303b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org remb.AppliesTo(kRemoteSsrc); 3313b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org remb.AppliesTo(kRemoteSsrc + 1); 3323b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org remb.AppliesTo(kRemoteSsrc + 2); 3333b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org remb.WithBitrateBps(261011); 3343b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 335c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(remb.Build()); 3363b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 337c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 3383b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.psfb_app()->num_packets()); 3393b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.psfb_app()->Ssrc()); 3403b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.remb_item()->num_packets()); 3413b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(261011, parser.remb_item()->last_bitrate_bps()); 3423b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org std::vector<uint32_t> ssrcs = parser.remb_item()->last_ssrc_list(); 3433b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, ssrcs[0]); 3443b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc + 1, ssrcs[1]); 3453b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc + 2, ssrcs[2]); 3463b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 3473b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 3483b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithNoReportBlocks) { 3493b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 3503b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 3513b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 352c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(xr.Build()); 3533b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 354c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 3553b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 3563b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 3573b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 3583b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 3593b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithRrtr) { 3603b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Rrtr rrtr; 361fc47ed6c0524d7ee0bc7947f0ad65fcefda34a29Danil Chapovalov rrtr.WithNtp(NtpTime(0x11111111, 0x22222222)); 3623b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 3633b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 364c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithRrtr(&rrtr)); 3653b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 366c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(xr.Build()); 3673b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 368c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 3693b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 3703b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 3713b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.rrtr()->num_packets()); 3723b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.rrtr()->NtpSec()); 3733b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.rrtr()->NtpFrac()); 3743b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 3753b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 3763b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithTwoRrtrBlocks) { 3773b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Rrtr rrtr1; 378fc47ed6c0524d7ee0bc7947f0ad65fcefda34a29Danil Chapovalov rrtr1.WithNtp(NtpTime(0x11111111, 0x22222222)); 3793b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Rrtr rrtr2; 380fc47ed6c0524d7ee0bc7947f0ad65fcefda34a29Danil Chapovalov rrtr2.WithNtp(NtpTime(0x33333333, 0x44444444)); 3813b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 3823b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 383c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithRrtr(&rrtr1)); 384c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithRrtr(&rrtr2)); 3853b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 386c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(xr.Build()); 3873b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 388c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 3893b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 3903b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 3913b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.rrtr()->num_packets()); 3923b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.rrtr()->NtpSec()); 3933b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.rrtr()->NtpFrac()); 3943b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 3953b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 3963b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithDlrrWithOneSubBlock) { 3973b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr; 398c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); 3993b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 4003b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 401c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithDlrr(&dlrr)); 4023b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 403c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(xr.Build()); 4043b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 405c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 4063b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 4073b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 4083b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.dlrr()->num_packets()); 4093b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.dlrr_items()->num_packets()); 4103b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); 4113b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); 4123b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); 4133b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 4143b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 4153b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithDlrrWithTwoSubBlocks) { 4163b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr; 417c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); 418c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(dlrr.WithDlrrItem(0x44444444, 0x55555555, 0x66666666)); 4193b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 4203b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 421c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithDlrr(&dlrr)); 4223b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 423c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(xr.Build()); 4243b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 425c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 4263b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 4273b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 4283b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.dlrr()->num_packets()); 4293b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.dlrr_items()->num_packets()); 4303b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); 4313b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); 4323b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); 4333b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1)); 4343b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1)); 4353b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1)); 4363b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 4373b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 438c1b9d4e686c184e4b1779d442d447128477d3b8bErik SprångTEST(RtcpPacketTest, DlrrWithTooManySubBlocks) { 439c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng const int kMaxItems = 100; 440c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng Dlrr dlrr; 441c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng for (int i = 0; i < kMaxItems; ++i) 442c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(dlrr.WithDlrrItem(i, i, i)); 443c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_FALSE(dlrr.WithDlrrItem(kMaxItems, kMaxItems, kMaxItems)); 444c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng} 445c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng 4463b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithTwoDlrrBlocks) { 4473b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr1; 448c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(dlrr1.WithDlrrItem(0x11111111, 0x22222222, 0x33333333)); 4493b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr2; 450c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(dlrr2.WithDlrrItem(0x44444444, 0x55555555, 0x66666666)); 4513b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 4523b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 453c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithDlrr(&dlrr1)); 454c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithDlrr(&dlrr2)); 4553b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 456c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(xr.Build()); 4573b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 458c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 4593b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 4603b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 4613b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.dlrr()->num_packets()); 4623b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.dlrr_items()->num_packets()); 4633b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); 4643b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); 4653b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); 4663b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1)); 4673b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1)); 4683b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1)); 4693b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 4703b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 4713b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithVoipMetric) { 47291941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap RTCPVoIPMetric metric; 47391941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.lossRate = 1; 47491941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.discardRate = 2; 47591941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.burstDensity = 3; 47691941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.gapDensity = 4; 47791941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.burstDuration = 0x1111; 47891941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.gapDuration = 0x2222; 47991941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.roundTripDelay = 0x3333; 48091941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.endSystemDelay = 0x4444; 48191941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.signalLevel = 5; 48291941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.noiseLevel = 6; 48391941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.RERL = 7; 48491941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.Gmin = 8; 48591941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.Rfactor = 9; 48691941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.extRfactor = 10; 48791941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.MOSLQ = 11; 48891941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.MOSCQ = 12; 48991941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.RXconfig = 13; 49091941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.JBnominal = 0x5555; 49191941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.JBmax = 0x6666; 49291941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric.JBabsMax = 0x7777; 49391941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap VoipMetric metric_block; 49491941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric_block.To(kRemoteSsrc); 49591941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap metric_block.WithVoipMetric(metric); 4963b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 4973b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 49891941ae493cb37a4e1250c7d3aad1c7394b5850edanilchap EXPECT_TRUE(xr.WithVoipMetric(&metric_block)); 4993b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 500c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(xr.Build()); 5013b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 502c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 5033b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 5043b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 5053b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.voip_metric()->num_packets()); 5063b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.voip_metric()->Ssrc()); 5073b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.voip_metric()->LossRate()); 5083b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.voip_metric()->DiscardRate()); 5093b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(3, parser.voip_metric()->BurstDensity()); 5103b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(4, parser.voip_metric()->GapDensity()); 5113b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x1111, parser.voip_metric()->BurstDuration()); 5123b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x2222, parser.voip_metric()->GapDuration()); 5133b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x3333, parser.voip_metric()->RoundTripDelay()); 5143b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x4444, parser.voip_metric()->EndSystemDelay()); 5153b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(5, parser.voip_metric()->SignalLevel()); 5163b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(6, parser.voip_metric()->NoiseLevel()); 5173b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(7, parser.voip_metric()->Rerl()); 5183b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(8, parser.voip_metric()->Gmin()); 5193b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(9, parser.voip_metric()->Rfactor()); 5203b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(10, parser.voip_metric()->ExtRfactor()); 5213b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(11, parser.voip_metric()->MosLq()); 5223b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(12, parser.voip_metric()->MosCq()); 5233b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(13, parser.voip_metric()->RxConfig()); 5243b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x5555, parser.voip_metric()->JbNominal()); 5253b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x6666, parser.voip_metric()->JbMax()); 5263b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x7777, parser.voip_metric()->JbAbsMax()); 5273b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 5283b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 5293b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithMultipleReportBlocks) { 5303b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Rrtr rrtr; 5313b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr; 532c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(dlrr.WithDlrrItem(1, 2, 3)); 5333b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org VoipMetric metric; 5343b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 5353b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 536c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithRrtr(&rrtr)); 537c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithDlrr(&dlrr)); 538c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithVoipMetric(&metric)); 5393b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 540c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(xr.Build()); 5413b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 542c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 5433b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 5443b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 5453b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.rrtr()->num_packets()); 5463b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.dlrr()->num_packets()); 5473b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.dlrr_items()->num_packets()); 5483b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.voip_metric()->num_packets()); 5493b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 5503b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 5513b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, DlrrWithoutItemNotIncludedInPacket) { 5523b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Rrtr rrtr; 5533b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr; 5543b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org VoipMetric metric; 5553b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 5563b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 557c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithRrtr(&rrtr)); 558c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithDlrr(&dlrr)); 559c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithVoipMetric(&metric)); 5603b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 561c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng rtc::scoped_ptr<RawPacket> packet(xr.Build()); 5623b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 563c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng parser.Parse(packet->Buffer(), packet->Length()); 5643b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 5653b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 5663b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.rrtr()->num_packets()); 5673b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0, parser.dlrr()->num_packets()); 5683b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.voip_metric()->num_packets()); 5693b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 570c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng 571c1b9d4e686c184e4b1779d442d447128477d3b8bErik SprångTEST(RtcpPacketTest, XrWithTooManyBlocks) { 572c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng const int kMaxBlocks = 50; 573c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng Xr xr; 574c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng 575c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng Rrtr rrtr; 576c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng for (int i = 0; i < kMaxBlocks; ++i) 577c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithRrtr(&rrtr)); 578c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_FALSE(xr.WithRrtr(&rrtr)); 579c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng 580c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng Dlrr dlrr; 581c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng for (int i = 0; i < kMaxBlocks; ++i) 582c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithDlrr(&dlrr)); 583c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_FALSE(xr.WithDlrr(&dlrr)); 584c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng 585c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng VoipMetric voip_metric; 586c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng for (int i = 0; i < kMaxBlocks; ++i) 587c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_TRUE(xr.WithVoipMetric(&voip_metric)); 588c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng EXPECT_FALSE(xr.WithVoipMetric(&voip_metric)); 589c1b9d4e686c184e4b1779d442d447128477d3b8bErik Språng} 590a3b8769860bdb0a45dbff6d1e0092486fa59aaa4Erik Språng 5910f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} // namespace webrtc 592