rtcp_packet_unittest.cc revision 4b12d400089f324293b8c313ba8257d9247e9cc6
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; 200f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::Empty; 210f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::Fir; 224b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::Ij; 23a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgusing webrtc::rtcp::Nack; 244b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::Pli; 254b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::Sdes; 264b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::SenderReport; 274b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgusing webrtc::rtcp::Sli; 280f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::RawPacket; 290f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::ReceiverReport; 300f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::rtcp::ReportBlock; 31a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgusing webrtc::rtcp::Rpsi; 320f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgusing webrtc::test::RtcpPacketParser; 330f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 340f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgnamespace webrtc { 350f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 360f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgconst uint32_t kSenderSsrc = 0x12345678; 370f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgconst uint32_t kRemoteSsrc = 0x23456789; 380f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 390f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, Rr) { 400f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 410f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 420f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 430f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = rr.Build(); 440f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 450f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 460f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 470f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); 480f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.report_block()->num_packets()); 490f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 500f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 510f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, RrWithOneReportBlock) { 520f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 530f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.To(kRemoteSsrc); 540f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.WithFractionLost(55); 554b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org rb.WithCumulativeLost(0x111111); 560f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.WithExtHighestSeqNum(0x22222222); 570f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.WithJitter(0x33333333); 580f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.WithLastSr(0x44444444); 590f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.WithDelayLastSr(0x55555555); 600f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 610f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 620f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 630f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 640f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 650f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = rr.Build(); 660f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 670f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 680f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 690f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); 700f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 710f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.report_block()->Ssrc()); 720f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(55U, parser.report_block()->FractionLost()); 730f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x111111U, parser.report_block()->CumPacketLost()); 740f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.report_block()->ExtHighestSeqNum()); 750f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.report_block()->Jitter()); 760f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.report_block()->LastSr()); 770f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x55555555U, parser.report_block()->DelayLastSr()); 780f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 790f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 800f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, RrWithTwoReportBlocks) { 810f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb1; 820f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb1.To(kRemoteSsrc); 830f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb2; 840f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb2.To(kRemoteSsrc + 1); 850f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 860f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 870f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 880f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb1); 890f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb2); 900f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 910f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = rr.Build(); 920f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 930f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 940f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 950f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); 960f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(2, parser.report_block()->num_packets()); 970f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_blocks_per_ssrc(kRemoteSsrc)); 980f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_blocks_per_ssrc(kRemoteSsrc + 1)); 990f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 1000f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1010f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, Sr) { 1020f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 1030f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.From(kSenderSsrc); 1040f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithNtpSec(0x11111111); 1050f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithNtpFrac(0x22222222); 1060f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithRtpTimestamp(0x33333333); 1070f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithPacketCount(0x44444444); 1080f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithOctetCount(0x55555555); 1090f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1100f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = sr.Build(); 1110f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 1120f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1130f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1140f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 1150f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sender_report()->Ssrc()); 1160f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.sender_report()->NtpSec()); 1170f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.sender_report()->NtpFrac()); 1180f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x33333333U, parser.sender_report()->RtpTimestamp()); 1190f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x44444444U, parser.sender_report()->PacketCount()); 1200f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0x55555555U, parser.sender_report()->OctetCount()); 1210f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.report_block()->num_packets()); 1220f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 1230f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1240f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, SrWithOneReportBlock) { 1250f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 1260f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb.To(kRemoteSsrc); 1270f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1280f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 1290f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.From(kSenderSsrc); 1300f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithReportBlock(&rb); 1310f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1320f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = sr.Build(); 1330f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 1340f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1350f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 1360f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sender_report()->Ssrc()); 1370f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 1380f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.report_block()->Ssrc()); 1390f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 1400f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1410f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, SrWithTwoReportBlocks) { 1420f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb1; 1430f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb1.To(kRemoteSsrc); 1440f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb2; 1450f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rb2.To(kRemoteSsrc + 1); 1460f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1470f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 1480f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.From(kSenderSsrc); 1490f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithReportBlock(&rb1); 1500f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.WithReportBlock(&rb2); 1510f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1520f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = sr.Build(); 1530f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 1540f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1550f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 1560f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sender_report()->Ssrc()); 1570f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(2, parser.report_block()->num_packets()); 1580f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_blocks_per_ssrc(kRemoteSsrc)); 1590f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_blocks_per_ssrc(kRemoteSsrc + 1)); 1600f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 1610f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 1624b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, IjNoItem) { 1634b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Ij ij; 1644b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1654b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = ij.Build(); 1664b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 1674b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1684b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.ij()->num_packets()); 1694b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0, parser.ij_item()->num_packets()); 1704b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 1714b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1724b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, IjOneItem) { 1734b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Ij ij; 1744b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org ij.WithJitterItem(0x11111111); 1754b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1764b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = ij.Build(); 1774b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 1784b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1794b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.ij()->num_packets()); 1804b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.ij_item()->num_packets()); 1814b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0x11111111U, parser.ij_item()->Jitter()); 1824b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 1834b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1844b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, IjTwoItems) { 1854b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Ij ij; 1864b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org ij.WithJitterItem(0x11111111); 1874b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org ij.WithJitterItem(0x22222222); 1884b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1894b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = ij.Build(); 1904b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 1914b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 1924b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.ij()->num_packets()); 1934b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(2, parser.ij_item()->num_packets()); 1944b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0x22222222U, parser.ij_item()->Jitter()); 1954b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 1964b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 1974b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, AppWithNoData) { 1984b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org App app; 1994b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithSubType(30); 2004b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org uint32_t name = 'n' << 24; 2014b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'a' << 16; 2024b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'm' << 8; 2034b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'e'; 2044b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithName(name); 2054b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2064b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = app.Build(); 2074b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2084b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2094b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.app()->num_packets()); 2104b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(30U, parser.app()->SubType()); 2114b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(name, parser.app()->Name()); 2124b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0, parser.app_item()->num_packets()); 2134b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2144b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2154b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, App) { 2164b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org App app; 2174b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.From(kSenderSsrc); 2184b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithSubType(30); 2194b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org uint32_t name = 'n' << 24; 2204b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'a' << 16; 2214b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'm' << 8; 2224b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org name += 'e'; 2234b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithName(name); 2244b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const char kData[] = {'t', 'e', 's', 't', 'd', 'a', 't', 'a'}; 2254b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kDataLength = sizeof(kData) / sizeof(kData[0]); 2264b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org app.WithData((const uint8_t*)kData, kDataLength); 2274b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2284b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = app.Build(); 2294b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2304b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2314b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.app()->num_packets()); 2324b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(30U, parser.app()->SubType()); 2334b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(name, parser.app()->Name()); 2344b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.app_item()->num_packets()); 2354b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kDataLength, parser.app_item()->DataLength()); 2364b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0, strncmp(kData, (const char*)parser.app_item()->Data(), 2374b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.app_item()->DataLength())); 2384b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2394b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2404b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, SdesWithOneChunk) { 2414b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sdes sdes; 2424b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc, "alice@host"); 2434b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2444b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = sdes.Build(); 2454b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2464b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2474b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes()->num_packets()); 2484b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes_chunk()->num_packets()); 2494b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sdes_chunk()->Ssrc()); 2504b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ("alice@host", parser.sdes_chunk()->Cname()); 2514b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2524b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2534b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, SdesWithMultipleChunks) { 2544b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sdes sdes; 2554b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc, "a"); 2564b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc + 1, "ab"); 2574b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc + 2, "abc"); 2584b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc + 3, "abcd"); 2594b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc + 4, "abcde"); 2604b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc + 5, "abcdef"); 2614b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2624b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = sdes.Build(); 2634b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2644b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2654b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes()->num_packets()); 2664b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(6, parser.sdes_chunk()->num_packets()); 2674b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc + 5, parser.sdes_chunk()->Ssrc()); 2684b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ("abcdef", parser.sdes_chunk()->Cname()); 2694b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2704b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2714b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, CnameItemWithEmptyString) { 2724b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sdes sdes; 2734b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sdes.WithCName(kSenderSsrc, ""); 2744b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2754b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = sdes.Build(); 2764b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2774b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2784b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes()->num_packets()); 2794b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sdes_chunk()->num_packets()); 2804b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sdes_chunk()->Ssrc()); 2814b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ("", parser.sdes_chunk()->Cname()); 2824b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2834b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2844b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, Pli) { 2854b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Pli pli; 2864b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org pli.From(kSenderSsrc); 2874b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org pli.To(kRemoteSsrc); 2884b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2894b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = pli.Build(); 2904b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 2914b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 2924b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.pli()->num_packets()); 2934b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.pli()->Ssrc()); 2944b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.pli()->MediaSsrc()); 2954b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 2964b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 2974b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.orgTEST(RtcpPacketTest, Sli) { 2984b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const uint16_t kFirstMb = 7777; 2994b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const uint16_t kNumberOfMb = 6666; 3004b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const uint8_t kPictureId = 60; 3014b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org Sli sli; 3024b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sli.From(kSenderSsrc); 3034b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sli.To(kRemoteSsrc); 3044b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sli.WithFirstMb(kFirstMb); 3054b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sli.WithNumberOfMb(kNumberOfMb); 3064b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org sli.WithPictureId(kPictureId); 3074b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 3084b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RawPacket packet = sli.Build(); 3094b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org RtcpPacketParser parser; 3104b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 3114b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sli()->num_packets()); 3124b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.sli()->Ssrc()); 3134b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.sli()->MediaSsrc()); 3144b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(1, parser.sli_item()->num_packets()); 3154b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kFirstMb, parser.sli_item()->FirstMb()); 3164b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kNumberOfMb, parser.sli_item()->NumberOfMb()); 3174b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(kPictureId, parser.sli_item()->PictureId()); 3184b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org} 3194b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org 320a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, Nack) { 321a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Nack nack; 322a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kList[] = {0, 1, 3, 8, 16}; 323a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kListLength = sizeof(kList) / sizeof(kList[0]); 324a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.From(kSenderSsrc); 325a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.To(kRemoteSsrc); 326a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.WithList(kList, kListLength); 327a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = nack.Build(); 328a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 329a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 330a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(1, parser.nack()->num_packets()); 331a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.nack()->Ssrc()); 332a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.nack()->MediaSsrc()); 333a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(1, parser.nack_item()->num_packets()); 334a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org std::vector<uint16_t> seqs = parser.nack_item()->last_nack_list(); 335a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kListLength, seqs.size()); 336a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org for (size_t i = 0; i < kListLength; ++i) { 337a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kList[i], seqs[i]); 338a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org } 339a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 340a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 341a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, NackWithWrap) { 342a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Nack nack; 343a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kList[] = {65500, 65516, 65534, 65535, 0, 1, 3, 20, 100}; 344a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kListLength = sizeof(kList) / sizeof(kList[0]); 345a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.From(kSenderSsrc); 346a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.To(kRemoteSsrc); 347a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org nack.WithList(kList, kListLength); 348a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = nack.Build(); 349a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 350a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 351a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(1, parser.nack()->num_packets()); 352a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.nack()->Ssrc()); 353a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.nack()->MediaSsrc()); 354a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(4, parser.nack_item()->num_packets()); 355a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org std::vector<uint16_t> seqs = parser.nack_item()->last_nack_list(); 356a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kListLength, seqs.size()); 357a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org for (size_t i = 0; i < kListLength; ++i) { 358a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kList[i], seqs[i]); 359a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org } 360a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 361a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 362a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, Rpsi) { 363a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 364a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 1000001 (7 bits = 1 byte in native string). 365a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x41; 366a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 1; 367a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPayloadType(100); 368a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 369a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 370a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = rpsi.Build(); 371a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 372a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 373a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(100, parser.rpsi()->PayloadType()); 374a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 375a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 376a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 377a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 378a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithTwoByteNativeString) { 379a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 380a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // |1 0000001 (7 bits = 1 byte in native string). 381a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x81; 382a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 2; 383a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 384a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 385a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = rpsi.Build(); 386a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 387a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 388a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 389a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 390a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 391a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 392a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithThreeByteNativeString) { 393a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 394a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 10000|00 100000|0 1000000 (7 bits = 1 byte in native string). 395a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x102040; 396a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 3; 397a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 398a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 399a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = rpsi.Build(); 400a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 401a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 402a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 403a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 404a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 405a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 406a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithFourByteNativeString) { 407a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 408a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 1000|001 00001|01 100001|1 1000010 (7 bits = 1 byte in native string). 409a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0x84161C2; 410a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 4; 411a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 412a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 413a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = rpsi.Build(); 414a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 415a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 416a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 417a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 418a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 419a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 420a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.orgTEST(RtcpPacketTest, RpsiWithMaxPictureId) { 421a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org Rpsi rpsi; 422a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 1 1111111| 1111111 1|111111 11|11111 111|1111 1111|111 11111| 423a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org // 11 111111|1 1111111 (7 bits = 1 byte in native string). 424a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint64_t kPictureId = 0xffffffffffffffff; 425a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org const uint16_t kNumberOfValidBytes = 10; 426a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org rpsi.WithPictureId(kPictureId); 427a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 428a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RawPacket packet = rpsi.Build(); 429a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org RtcpPacketParser parser; 430a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 431a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); 432a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); 433a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org} 434a826006132b3606b7325befcbffd608df6714f6casapersson@webrtc.org 4350f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, Fir) { 4360f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 4370f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org fir.From(kSenderSsrc); 4380f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org fir.To(kRemoteSsrc); 4390f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org fir.WithCommandSeqNum(123); 4400f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4410f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = fir.Build(); 4420f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 4430f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 4440f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 4450f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.fir()->Ssrc()); 4460f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir_item()->num_packets()); 4470f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kRemoteSsrc, parser.fir_item()->Ssrc()); 4480f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(123U, parser.fir_item()->SeqNum()); 4490f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 4500f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4510f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, AppendPacket) { 4520f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 4530f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 4540f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 4550f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 4560f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 4570f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Append(&fir); 4580f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4590f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = rr.Build(); 4600f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 4610f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 4620f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 4630f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.receiver_report()->Ssrc()); 4640f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 4650f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 4660f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 4670f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4680f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, AppendPacketOnEmpty) { 4690f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Empty empty; 4700f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 4710f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 4720f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org empty.Append(&rr); 4730f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4740f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = empty.Build(); 4750f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 4760f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 4770f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 4780f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.report_block()->num_packets()); 4790f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 4800f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4810f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, AppendPacketWithOwnAppendedPacket) { 4820f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 4830f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Bye bye; 4840f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 4850f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4860f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 4870f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 4880f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Append(&fir); 4890f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4900f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org SenderReport sr; 4910f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.Append(&bye); 4920f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org sr.Append(&rr); 4930f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 4940f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = sr.Build(); 4950f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 4960f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 4970f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.sender_report()->num_packets()); 4980f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 4990f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 5000f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.bye()->num_packets()); 5010f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 5020f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5030f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5040f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, Bye) { 5050f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Bye bye; 5060f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org bye.From(kSenderSsrc); 5070f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5080f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = bye.Build(); 5090f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5100f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 5110f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.bye()->num_packets()); 5120f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.bye()->Ssrc()); 5130f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5140f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5150f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, ByeWithCsrcs) { 5160f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 5170f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Bye bye; 5180f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org bye.From(kSenderSsrc); 5190f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org bye.WithCsrc(0x22222222); 5200f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org bye.WithCsrc(0x33333333); 5210f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org bye.Append(&fir); 5220f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5230f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RawPacket packet = bye.Build(); 5240f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5250f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet.buffer(), packet.buffer_length()); 5260f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.bye()->num_packets()); 5270f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(kSenderSsrc, parser.bye()->Ssrc()); 5280f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 5290f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5300f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5310f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, BuildWithInputBuffer) { 5320f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 5330f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 5340f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 5350f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 5360f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 5370f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Append(&fir); 5380f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5394b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kRrLength = 8; 5404b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kReportBlockLength = 24; 5414b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kFirLength = 20; 5420f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5434b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org size_t len = 0; 5440f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org uint8_t packet[kRrLength + kReportBlockLength + kFirLength]; 5450f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Build(packet, &len, kRrLength + kReportBlockLength + kFirLength); 5460f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5470f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5480f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet, len); 5490f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.receiver_report()->num_packets()); 5500f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.report_block()->num_packets()); 5510f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 5520f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5530f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5540f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, BuildWithTooSmallBuffer) { 5550f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 5560f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 5570f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 5580f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 5590f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5604b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kRrLength = 8; 5614b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kReportBlockLength = 24; 5620f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5630f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org // No packet. 5644b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org size_t len = 0; 5650f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org uint8_t packet[kRrLength + kReportBlockLength - 1]; 5660f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Build(packet, &len, kRrLength + kReportBlockLength - 1); 5670f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5680f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet, len); 5694b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org EXPECT_EQ(0U, len); 5700f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5710f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5720f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.orgTEST(RtcpPacketTest, BuildWithTooSmallBuffer_LastBlockFits) { 5730f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org Fir fir; 5740f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReportBlock rb; 5750f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org ReceiverReport rr; 5760f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.From(kSenderSsrc); 5770f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.WithReportBlock(&rb); 5780f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Append(&fir); 5790f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5804b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kRrLength = 8; 5814b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org const size_t kReportBlockLength = 24; 5820f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org 5834b12d400089f324293b8c313ba8257d9247e9cc6asapersson@webrtc.org size_t len = 0; 5840f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org uint8_t packet[kRrLength + kReportBlockLength - 1]; 5850f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org rr.Build(packet, &len, kRrLength + kReportBlockLength - 1); 5860f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org RtcpPacketParser parser; 5870f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org parser.Parse(packet, len); 5880f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.receiver_report()->num_packets()); 5890f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(0, parser.report_block()->num_packets()); 5900f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org EXPECT_EQ(1, parser.fir()->num_packets()); 5910f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} 5920f2809a5ac5477a6134ebafb4680597252f8a5c5asapersson@webrtc.org} // namespace webrtc 593