rtcp_packet_unittest.cc revision 3b84b3a58cf4093204749fa7ba782f49b8934246
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 130f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 140f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 150f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org#include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" 160f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org#include "webrtc/test/rtcp_packet_parser.h" 170f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 184b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::App; 190f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::Bye; 203b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::Dlrr; 210f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::Empty; 220f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::Fir; 234b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::Ij; 24a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgusing webrtc::rtcp::Nack; 254b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::Pli; 264b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::Sdes; 274b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::SenderReport; 284b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::Sli; 290f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::RawPacket; 300f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::ReceiverReport; 313b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::Remb; 320f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::ReportBlock; 33a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgusing webrtc::rtcp::Rpsi; 343b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::Rrtr; 353b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::SenderReport; 363b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::Tmmbn; 373b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::Tmmbr; 383b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::VoipMetric; 393b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgusing webrtc::rtcp::Xr; 400f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::test::RtcpPacketParser; 410f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 420f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgnamespace webrtc { 430f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 440f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgconst uint32_t kSenderSsrc = 0x12345678; 450f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgconst uint32_t kRemoteSsrc = 0x23456789; 460f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 470f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, Rr) { 480f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 490f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 500f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 510f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = rr.Build(); 520f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 530f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 540f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 550f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); 560f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.report_block()->num_packets()); 570f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 580f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 590f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, RrWithOneReportBlock) { 600f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 610f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.To(kRemoteSsrc); 620f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.WithFractionLost(55); 634b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org rb.WithCumulativeLost(0x111111); 640f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.WithExtHighestSeqNum(0x22222222); 650f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.WithJitter(0x33333333); 660f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.WithLastSr(0x44444444); 670f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.WithDelayLastSr(0x55555555); 680f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 690f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 700f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 710f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 720f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 730f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = rr.Build(); 740f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 750f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 760f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 770f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); 780f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 790f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.report_block()->Ssrc()); 800f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(55U, parser.report_block()->FractionLost()); 810f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x111111U, parser.report_block()->CumPacketLost()); 820f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.report_block()->ExtHighestSeqNum()); 830f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.report_block()->Jitter()); 840f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.report_block()->LastSr()); 850f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x55555555U, parser.report_block()->DelayLastSr()); 860f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 870f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 880f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, RrWithTwoReportBlocks) { 890f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb1; 900f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb1.To(kRemoteSsrc); 910f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb2; 920f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb2.To(kRemoteSsrc + 1); 930f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 940f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 950f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 960f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb1); 970f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb2); 980f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 990f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = rr.Build(); 1000f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 1010f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1020f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 1030f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); 1040f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(2, parser.report_block()->num_packets()); 1050f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_blocks_per_ssrc(kRemoteSsrc)); 1060f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_blocks_per_ssrc(kRemoteSsrc + 1)); 1070f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 1080f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1090f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, Sr) { 1100f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 1110f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.From(kSenderSsrc); 1120f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithNtpSec(0x11111111); 1130f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithNtpFrac(0x22222222); 1140f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithRtpTimestamp(0x33333333); 1150f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithPacketCount(0x44444444); 1160f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithOctetCount(0x55555555); 1170f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1180f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = sr.Build(); 1190f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 1200f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1210f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1220f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 1230f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sender_report()->Ssrc()); 1240f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.sender_report()->NtpSec()); 1250f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.sender_report()->NtpFrac()); 1260f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.sender_report()->RtpTimestamp()); 1270f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.sender_report()->PacketCount()); 1280f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x55555555U, parser.sender_report()->OctetCount()); 1290f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.report_block()->num_packets()); 1300f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 1310f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1320f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, SrWithOneReportBlock) { 1330f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 1340f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.To(kRemoteSsrc); 1350f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1360f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 1370f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.From(kSenderSsrc); 1380f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithReportBlock(&rb); 1390f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1400f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = sr.Build(); 1410f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 1420f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1430f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 1440f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sender_report()->Ssrc()); 1450f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 1460f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.report_block()->Ssrc()); 1470f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 1480f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1490f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, SrWithTwoReportBlocks) { 1500f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb1; 1510f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb1.To(kRemoteSsrc); 1520f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb2; 1530f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb2.To(kRemoteSsrc + 1); 1540f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1550f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 1560f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.From(kSenderSsrc); 1570f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithReportBlock(&rb1); 1580f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithReportBlock(&rb2); 1590f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1600f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = sr.Build(); 1610f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 1620f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1630f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 1640f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sender_report()->Ssrc()); 1650f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(2, parser.report_block()->num_packets()); 1660f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_blocks_per_ssrc(kRemoteSsrc)); 1670f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_blocks_per_ssrc(kRemoteSsrc + 1)); 1680f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 1690f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1704b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, IjNoItem) { 1714b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Ij ij; 1724b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1734b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = ij.Build(); 1744b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 1754b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1764b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.ij()->num_packets()); 1774b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0, parser.ij_item()->num_packets()); 1784b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 1794b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1804b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, IjOneItem) { 1814b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Ij ij; 1824b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org ij.WithJitterItem(0x11111111); 1834b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1844b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = ij.Build(); 1854b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 1864b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1874b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.ij()->num_packets()); 1884b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.ij_item()->num_packets()); 1894b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.ij_item()->Jitter()); 1904b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 1914b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1924b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, IjTwoItems) { 1934b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Ij ij; 1944b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org ij.WithJitterItem(0x11111111); 1954b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org ij.WithJitterItem(0x22222222); 1964b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1974b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = ij.Build(); 1984b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 1994b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2004b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.ij()->num_packets()); 2014b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(2, parser.ij_item()->num_packets()); 2024b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.ij_item()->Jitter()); 2034b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2044b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2054b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, AppWithNoData) { 2064b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org App app; 2074b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithSubType(30); 2084b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org uint32_t name = 'n' << 24; 2094b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'a' << 16; 2104b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'm' << 8; 2114b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'e'; 2124b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithName(name); 2134b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2144b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = app.Build(); 2154b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2164b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2174b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.app()->num_packets()); 2184b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(30U, parser.app()->SubType()); 2194b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(name, parser.app()->Name()); 2204b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0, parser.app_item()->num_packets()); 2214b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2224b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2234b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, App) { 2244b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org App app; 2254b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.From(kSenderSsrc); 2264b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithSubType(30); 2274b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org uint32_t name = 'n' << 24; 2284b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'a' << 16; 2294b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'm' << 8; 2304b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'e'; 2314b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithName(name); 2324b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const char kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'}; 2334b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kDataLength = sizeof(kData) / sizeof(kData[0]); 2344b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithData((const uint8_t*)kData, kDataLength); 2354b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2364b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = app.Build(); 2374b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2384b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2394b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.app()->num_packets()); 2404b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(30U, parser.app()->SubType()); 2414b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(name, parser.app()->Name()); 2424b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.app_item()->num_packets()); 2434b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kDataLength, parser.app_item()->DataLength()); 2444b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0, strncmp(kData, (const char*)parser.app_item()->Data(), 2454b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.app_item()->DataLength())); 2464b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2474b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2484b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, SdesWithOneChunk) { 2494b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sdes sdes; 2504b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc, "alice@host"); 2514b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2524b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = sdes.Build(); 2534b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2544b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2554b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes()->num_packets()); 2564b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes_chunk()->num_packets()); 2574b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sdes_chunk()->Ssrc()); 2584b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ("alice@host", parser.sdes_chunk()->Cname()); 2594b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2604b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2614b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, SdesWithMultipleChunks) { 2624b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sdes sdes; 2634b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc, "a"); 2644b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc + 1, "ab"); 2654b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc + 2, "abc"); 2664b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc + 3, "abcd"); 2674b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc + 4, "abcde"); 2684b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc + 5, "abcdef"); 2694b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2704b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = sdes.Build(); 2714b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2724b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2734b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes()->num_packets()); 2744b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(6, parser.sdes_chunk()->num_packets()); 2754b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc + 5, parser.sdes_chunk()->Ssrc()); 2764b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ("abcdef", parser.sdes_chunk()->Cname()); 2774b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2784b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2794b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, CnameItemWithEmptyString) { 2804b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sdes sdes; 2814b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc, ""); 2824b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2834b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = sdes.Build(); 2844b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2854b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2864b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes()->num_packets()); 2874b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes_chunk()->num_packets()); 2884b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sdes_chunk()->Ssrc()); 2894b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ("", parser.sdes_chunk()->Cname()); 2904b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2914b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2924b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, Pli) { 2934b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Pli pli; 2944b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org pli.From(kSenderSsrc); 2954b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org pli.To(kRemoteSsrc); 2964b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2974b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = pli.Build(); 2984b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2994b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 3004b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.pli()->num_packets()); 3014b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.pli()->Ssrc()); 3024b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.pli()->MediaSsrc()); 3034b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 3044b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 3054b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, Sli) { 3064b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const uint16_t kFirstMb = 7777; 3074b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const uint16_t kNumberOfMb = 6666; 3084b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const uint8_t kPictureId = 60; 3094b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sli sli; 3104b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sli.From(kSenderSsrc); 3114b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sli.To(kRemoteSsrc); 3124b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sli.WithFirstMb(kFirstMb); 3134b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sli.WithNumberOfMb(kNumberOfMb); 3144b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sli.WithPictureId(kPictureId); 3154b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 3164b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = sli.Build(); 3174b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 3184b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 3194b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sli()->num_packets()); 3204b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sli()->Ssrc()); 3214b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.sli()->MediaSsrc()); 3224b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sli_item()->num_packets()); 3234b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kFirstMb, parser.sli_item()->FirstMb()); 3244b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kNumberOfMb, parser.sli_item()->NumberOfMb()); 3254b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kPictureId, parser.sli_item()->PictureId()); 3264b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 3274b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 328a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, Nack) { 329a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Nack nack; 330a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kList[] = {0, 1, 3, 8, 16}; 331a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kListLength = sizeof(kList) / sizeof(kList[0]); 332a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.From(kSenderSsrc); 333a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.To(kRemoteSsrc); 334a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.WithList(kList, kListLength); 335a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = nack.Build(); 336a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 337a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 338a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(1, parser.nack()->num_packets()); 339a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.nack()->Ssrc()); 340a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.nack()->MediaSsrc()); 341a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(1, parser.nack_item()->num_packets()); 342a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org std::vector<uint16_t> seqs = parser.nack_item()->last_nack_list(); 343a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kListLength, seqs.size()); 344a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org for (size_t i = 0; i < kListLength; ++i) { 345a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kList[i], seqs[i]); 346a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org } 347a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 348a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 349a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, NackWithWrap) { 350a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Nack nack; 351a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kList[] = {65500, 65516, 65534, 65535, 0, 1, 3, 20, 100}; 352a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kListLength = sizeof(kList) / sizeof(kList[0]); 353a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.From(kSenderSsrc); 354a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.To(kRemoteSsrc); 355a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.WithList(kList, kListLength); 356a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = nack.Build(); 357a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 358a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 359a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(1, parser.nack()->num_packets()); 360a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.nack()->Ssrc()); 361a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.nack()->MediaSsrc()); 362a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(4, parser.nack_item()->num_packets()); 363a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org std::vector<uint16_t> seqs = parser.nack_item()->last_nack_list(); 364a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kListLength, seqs.size()); 365a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org for (size_t i = 0; i < kListLength; ++i) { 366a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kList[i], seqs[i]); 367a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org } 368a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 369a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 370a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, Rpsi) { 371a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 372a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 1000001 (7 bits = 1 byte in native string). 373a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x41; 374a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 1; 375a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPayloadType(100); 376a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 377a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 378a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = rpsi.Build(); 379a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 380a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 381a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(100, parser.rpsi()->PayloadType()); 382a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 383a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 384a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 385a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 386a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithTwoByteNativeString) { 387a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 388a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // |1 0000001 (7 bits = 1 byte in native string). 389a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x81; 390a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 2; 391a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 392a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 393a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = rpsi.Build(); 394a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 395a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 396a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 397a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 398a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 399a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 400a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithThreeByteNativeString) { 401a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 402a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 10000|00 100000|0 1000000 (7 bits = 1 byte in native string). 403a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x102040; 404a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 3; 405a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 406a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 407a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = rpsi.Build(); 408a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 409a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 410a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 411a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 412a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 413a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 414a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithFourByteNativeString) { 415a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 416a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 1000|001 00001|01 100001|1 1000010 (7 bits = 1 byte in native string). 417a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x84161C2; 418a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 4; 419a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 420a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 421a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = rpsi.Build(); 422a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 423a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 424a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 425a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 426a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 427a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 428a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithMaxPictureId) { 429a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 430a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 1 1111111| 1111111 1|111111 11|11111 111|1111 1111|111 11111| 431a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 11 111111|1 1111111 (7 bits = 1 byte in native string). 432a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0xffffffffffffffff; 433a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 10; 434a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 435a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 436a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = rpsi.Build(); 437a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 438a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 439a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 440a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 441a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 442a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 4430f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, Fir) { 4440f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 4450f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org fir.From(kSenderSsrc); 4460f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org fir.To(kRemoteSsrc); 4470f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org fir.WithCommandSeqNum(123); 4480f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4490f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = fir.Build(); 4500f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 4510f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 4520f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 4530f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.fir()->Ssrc()); 4540f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir_item()->num_packets()); 4550f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.fir_item()->Ssrc()); 4560f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(123U, parser.fir_item()->SeqNum()); 4570f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 4580f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4590f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, AppendPacket) { 4600f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 4610f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 4620f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 4630f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 4640f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 4650f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Append(&fir); 4660f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4670f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = rr.Build(); 4680f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 4690f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 4700f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 4710f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); 4720f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 4730f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 4740f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 4750f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4760f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, AppendPacketOnEmpty) { 4770f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Empty empty; 4780f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 4790f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 4800f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org empty.Append(&rr); 4810f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4820f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = empty.Build(); 4830f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 4840f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 4850f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 4860f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.report_block()->num_packets()); 4870f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 4880f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4890f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, AppendPacketWithOwnAppendedPacket) { 4900f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 4910f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Bye bye; 4920f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 4930f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4940f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 4950f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 4960f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Append(&fir); 4970f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4980f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 4990f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.Append(&bye); 5000f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.Append(&rr); 5010f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5020f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = sr.Build(); 5030f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5040f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 5050f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 5060f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 5070f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 5080f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.bye()->num_packets()); 5090f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 5100f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5110f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5120f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, Bye) { 5130f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Bye bye; 5140f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org bye.From(kSenderSsrc); 5150f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5160f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = bye.Build(); 5170f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5180f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 5190f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.bye()->num_packets()); 5200f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.bye()->Ssrc()); 5210f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5220f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5230f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, ByeWithCsrcs) { 5240f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 5250f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Bye bye; 5260f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org bye.From(kSenderSsrc); 5270f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org bye.WithCsrc(0x22222222); 5280f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org bye.WithCsrc(0x33333333); 5290f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org bye.Append(&fir); 5300f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5310f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = bye.Build(); 5320f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5330f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 5340f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.bye()->num_packets()); 5350f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.bye()->Ssrc()); 5360f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 5370f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5380f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5390f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, BuildWithInputBuffer) { 5400f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 5410f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 5420f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 5430f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 5440f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 5450f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Append(&fir); 5460f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5474b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kRrLength = 8; 5484b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kReportBlockLength = 24; 5494b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kFirLength = 20; 5500f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5514b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org size_t len = 0; 5520f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org uint8_t packet[kRrLength + kReportBlockLength + kFirLength]; 5530f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Build(packet, &len, kRrLength + kReportBlockLength + kFirLength); 5540f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5550f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5560f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet, len); 5570f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 5580f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 5590f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 5600f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5610f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5620f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, BuildWithTooSmallBuffer) { 5630f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 5640f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 5650f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 5660f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 5670f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5684b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kRrLength = 8; 5694b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kReportBlockLength = 24; 5700f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5710f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org // No packet. 5724b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org size_t len = 0; 5730f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org uint8_t packet[kRrLength + kReportBlockLength - 1]; 5740f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Build(packet, &len, kRrLength + kReportBlockLength - 1); 5750f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5760f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet, len); 5774b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0U, len); 5780f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5790f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5800f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, BuildWithTooSmallBuffer_LastBlockFits) { 5810f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 5820f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 5830f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 5840f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 5850f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 5860f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Append(&fir); 5870f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5884b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kRrLength = 8; 5894b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kReportBlockLength = 24; 5900f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5914b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org size_t len = 0; 5920f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org uint8_t packet[kRrLength + kReportBlockLength - 1]; 5930f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Build(packet, &len, kRrLength + kReportBlockLength - 1); 5940f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5950f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet, len); 5960f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.receiver_report()->num_packets()); 5970f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.report_block()->num_packets()); 5980f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 5990f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 6003b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6013b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, Remb) { 6023b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Remb remb; 6033b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org remb.From(kSenderSsrc); 6043b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org remb.AppliesTo(kRemoteSsrc); 6053b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org remb.AppliesTo(kRemoteSsrc + 1); 6063b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org remb.AppliesTo(kRemoteSsrc + 2); 6073b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org remb.WithBitrateBps(261011); 6083b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6093b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = remb.Build(); 6103b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 6113b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 6123b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.psfb_app()->num_packets()); 6133b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.psfb_app()->Ssrc()); 6143b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.remb_item()->num_packets()); 6153b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(261011, parser.remb_item()->last_bitrate_bps()); 6163b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org std::vector<uint32_t> ssrcs = parser.remb_item()->last_ssrc_list(); 6173b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, ssrcs[0]); 6183b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc + 1, ssrcs[1]); 6193b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc + 2, ssrcs[2]); 6203b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 6213b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6223b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, Tmmbr) { 6233b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Tmmbr tmmbr; 6243b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org tmmbr.From(kSenderSsrc); 6253b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org tmmbr.To(kRemoteSsrc); 6263b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org tmmbr.WithBitrateKbps(312); 6273b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org tmmbr.WithOverhead(60); 6283b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6293b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = tmmbr.Build(); 6303b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 6313b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 6323b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.tmmbr()->num_packets()); 6333b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.tmmbr()->Ssrc()); 6343b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.tmmbr_item()->num_packets()); 6353b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(312U, parser.tmmbr_item()->BitrateKbps()); 6363b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(60U, parser.tmmbr_item()->Overhead()); 6373b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 6383b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6393b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, TmmbnWithNoItem) { 6403b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Tmmbn tmmbn; 6413b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org tmmbn.From(kSenderSsrc); 6423b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6433b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = tmmbn.Build(); 6443b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 6453b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 6463b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.tmmbn()->num_packets()); 6473b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.tmmbn()->Ssrc()); 6483b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0, parser.tmmbn_items()->num_packets()); 6493b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 6503b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6513b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, TmmbnWithOneItem) { 6523b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Tmmbn tmmbn; 6533b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org tmmbn.From(kSenderSsrc); 6543b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org tmmbn.WithTmmbr(kRemoteSsrc, 312, 60); 6553b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6563b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = tmmbn.Build(); 6573b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 6583b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 6593b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.tmmbn()->num_packets()); 6603b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.tmmbn()->Ssrc()); 6613b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.tmmbn_items()->num_packets()); 6623b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.tmmbn_items()->Ssrc(0)); 6633b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(312U, parser.tmmbn_items()->BitrateKbps(0)); 6643b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(60U, parser.tmmbn_items()->Overhead(0)); 6653b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 6663b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6673b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, TmmbnWithTwoItems) { 6683b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Tmmbn tmmbn; 6693b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org tmmbn.From(kSenderSsrc); 6703b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org tmmbn.WithTmmbr(kRemoteSsrc, 312, 60); 6713b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org tmmbn.WithTmmbr(kRemoteSsrc + 1, 1288, 40); 6723b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6733b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = tmmbn.Build(); 6743b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 6753b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 6763b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.tmmbn()->num_packets()); 6773b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.tmmbn()->Ssrc()); 6783b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.tmmbn_items()->num_packets()); 6793b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.tmmbn_items()->Ssrc(0)); 6803b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(312U, parser.tmmbn_items()->BitrateKbps(0)); 6813b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(60U, parser.tmmbn_items()->Overhead(0)); 6823b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc + 1, parser.tmmbn_items()->Ssrc(1)); 6833b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1288U, parser.tmmbn_items()->BitrateKbps(1)); 6843b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(40U, parser.tmmbn_items()->Overhead(1)); 6853b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 6863b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6873b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithNoReportBlocks) { 6883b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 6893b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 6903b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6913b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = xr.Build(); 6923b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 6933b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 6943b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 6953b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 6963b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 6973b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 6983b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithRrtr) { 6993b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Rrtr rrtr; 7003b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org rrtr.WithNtpSec(0x11111111); 7013b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org rrtr.WithNtpFrac(0x22222222); 7023b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 7033b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 7043b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithRrtr(&rrtr); 7053b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 7063b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = xr.Build(); 7073b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 7083b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 7093b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 7103b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 7113b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.rrtr()->num_packets()); 7123b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.rrtr()->NtpSec()); 7133b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.rrtr()->NtpFrac()); 7143b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 7153b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 7163b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithTwoRrtrBlocks) { 7173b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Rrtr rrtr1; 7183b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org rrtr1.WithNtpSec(0x11111111); 7193b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org rrtr1.WithNtpFrac(0x22222222); 7203b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Rrtr rrtr2; 7213b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org rrtr2.WithNtpSec(0x33333333); 7223b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org rrtr2.WithNtpFrac(0x44444444); 7233b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 7243b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 7253b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithRrtr(&rrtr1); 7263b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithRrtr(&rrtr2); 7273b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 7283b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = xr.Build(); 7293b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 7303b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 7313b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 7323b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 7333b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.rrtr()->num_packets()); 7343b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.rrtr()->NtpSec()); 7353b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.rrtr()->NtpFrac()); 7363b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 7373b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 7383b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithDlrrWithOneSubBlock) { 7393b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr; 7403b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333); 7413b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 7423b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 7433b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithDlrr(&dlrr); 7443b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 7453b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = xr.Build(); 7463b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 7473b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 7483b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 7493b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 7503b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.dlrr()->num_packets()); 7513b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.dlrr_items()->num_packets()); 7523b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); 7533b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); 7543b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); 7553b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 7563b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 7573b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithDlrrWithTwoSubBlocks) { 7583b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr; 7593b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333); 7603b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org dlrr.WithDlrrItem(0x44444444, 0x55555555, 0x66666666); 7613b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 7623b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 7633b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithDlrr(&dlrr); 7643b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 7653b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = xr.Build(); 7663b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 7673b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 7683b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 7693b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 7703b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.dlrr()->num_packets()); 7713b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.dlrr_items()->num_packets()); 7723b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); 7733b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); 7743b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); 7753b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1)); 7763b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1)); 7773b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1)); 7783b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 7793b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 7803b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithTwoDlrrBlocks) { 7813b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr1; 7823b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org dlrr1.WithDlrrItem(0x11111111, 0x22222222, 0x33333333); 7833b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr2; 7843b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org dlrr2.WithDlrrItem(0x44444444, 0x55555555, 0x66666666); 7853b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 7863b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 7873b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithDlrr(&dlrr1); 7883b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithDlrr(&dlrr2); 7893b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 7903b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = xr.Build(); 7913b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 7923b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 7933b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 7943b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 7953b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.dlrr()->num_packets()); 7963b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.dlrr_items()->num_packets()); 7973b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0)); 7983b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0)); 7993b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0)); 8003b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1)); 8013b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1)); 8023b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1)); 8033b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 8043b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 8053b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithVoipMetric) { 8063b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org VoipMetric metric; 8073b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.To(kRemoteSsrc); 8083b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.LossRate(1); 8093b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.DiscardRate(2); 8103b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.BurstDensity(3); 8113b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.GapDensity(4); 8123b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.BurstDuration(0x1111); 8133b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.GapDuration(0x2222); 8143b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.RoundTripDelay(0x3333); 8153b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.EndSystemDelay(0x4444); 8163b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.SignalLevel(5); 8173b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.NoiseLevel(6); 8183b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.Rerl(7); 8193b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.Gmin(8); 8203b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.Rfactor(9); 8213b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.ExtRfactor(10); 8223b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.MosLq(11); 8233b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.MosCq(12); 8243b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.RxConfig(13); 8253b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.JbNominal(0x5555); 8263b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.JbMax(0x6666); 8273b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org metric.JbAbsMax(0x7777); 8283b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 8293b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 8303b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 8313b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithVoipMetric(&metric); 8323b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 8333b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = xr.Build(); 8343b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 8353b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 8363b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 8373b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 8383b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.voip_metric()->num_packets()); 8393b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.voip_metric()->Ssrc()); 8403b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.voip_metric()->LossRate()); 8413b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(2, parser.voip_metric()->DiscardRate()); 8423b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(3, parser.voip_metric()->BurstDensity()); 8433b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(4, parser.voip_metric()->GapDensity()); 8443b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x1111, parser.voip_metric()->BurstDuration()); 8453b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x2222, parser.voip_metric()->GapDuration()); 8463b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x3333, parser.voip_metric()->RoundTripDelay()); 8473b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x4444, parser.voip_metric()->EndSystemDelay()); 8483b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(5, parser.voip_metric()->SignalLevel()); 8493b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(6, parser.voip_metric()->NoiseLevel()); 8503b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(7, parser.voip_metric()->Rerl()); 8513b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(8, parser.voip_metric()->Gmin()); 8523b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(9, parser.voip_metric()->Rfactor()); 8533b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(10, parser.voip_metric()->ExtRfactor()); 8543b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(11, parser.voip_metric()->MosLq()); 8553b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(12, parser.voip_metric()->MosCq()); 8563b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(13, parser.voip_metric()->RxConfig()); 8573b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x5555, parser.voip_metric()->JbNominal()); 8583b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x6666, parser.voip_metric()->JbMax()); 8593b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0x7777, parser.voip_metric()->JbAbsMax()); 8603b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 8613b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 8623b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, XrWithMultipleReportBlocks) { 8633b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Rrtr rrtr; 8643b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr; 8653b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org dlrr.WithDlrrItem(1, 2, 3); 8663b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org VoipMetric metric; 8673b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 8683b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 8693b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithRrtr(&rrtr); 8703b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithDlrr(&dlrr); 8713b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithVoipMetric(&metric); 8723b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 8733b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = xr.Build(); 8743b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 8753b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 8763b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 8773b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 8783b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.rrtr()->num_packets()); 8793b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.dlrr()->num_packets()); 8803b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.dlrr_items()->num_packets()); 8813b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.voip_metric()->num_packets()); 8823b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 8833b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 8843b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.orgTEST(RtcpPacketTest, DlrrWithoutItemNotIncludedInPacket) { 8853b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Rrtr rrtr; 8863b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Dlrr dlrr; 8873b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org VoipMetric metric; 8883b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org Xr xr; 8893b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.From(kSenderSsrc); 8903b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithRrtr(&rrtr); 8913b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithDlrr(&dlrr); 8923b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org xr.WithVoipMetric(&metric); 8933b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org 8943b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RawPacket packet = xr.Build(); 8953b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org RtcpPacketParser parser; 8963b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 8973b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.xr_header()->num_packets()); 8983b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc()); 8993b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.rrtr()->num_packets()); 9003b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(0, parser.dlrr()->num_packets()); 9013b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org EXPECT_EQ(1, parser.voip_metric()->num_packets()); 9023b84b3a58cf4093204749fa7ba782f49b8934246asapersson@webrtc.org} 9030f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} // namespace webrtc 904