Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report_unittest.cc

Issue 1837213002: [rtcp] ReceiverReport::Parse updated not to use RTCPUtility (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" 11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
12 12
13 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "webrtc/test/rtcp_packet_parser.h"
14 16
17 using testing::ElementsAreArray;
18 using testing::IsEmpty;
19 using testing::make_tuple;
15 using webrtc::rtcp::ReceiverReport; 20 using webrtc::rtcp::ReceiverReport;
16 using webrtc::rtcp::ReportBlock; 21 using webrtc::rtcp::ReportBlock;
17 using webrtc::RTCPUtility::RtcpCommonHeader;
18 using webrtc::RTCPUtility::RtcpParseCommonHeader;
19 22
20 namespace webrtc { 23 namespace webrtc {
21 namespace { 24 namespace {
22 const uint32_t kSenderSsrc = 0x12345678; 25 const uint32_t kSenderSsrc = 0x12345678;
23 const uint32_t kRemoteSsrc = 0x23456789; 26 const uint32_t kRemoteSsrc = 0x23456789;
24 const uint8_t kFractionLost = 55; 27 const uint8_t kFractionLost = 55;
25 const uint32_t kCumulativeLost = 0x111213; 28 const uint32_t kCumulativeLost = 0x111213;
26 const uint32_t kExtHighestSeqNum = 0x22232425; 29 const uint32_t kExtHighestSeqNum = 0x22232425;
27 const uint32_t kJitter = 0x33343536; 30 const uint32_t kJitter = 0x33343536;
28 const uint32_t kLastSr = 0x44454647; 31 const uint32_t kLastSr = 0x44454647;
29 const uint32_t kDelayLastSr = 0x55565758; 32 const uint32_t kDelayLastSr = 0x55565758;
30 // Manually created ReceiverReport with one ReportBlock matching constants 33 // Manually created ReceiverReport with one ReportBlock matching constants
31 // above. 34 // above.
32 // Having this block allows to test Create and Parse separately. 35 // Having this block allows to test Create and Parse separately.
33 const uint8_t kPacket[] = {0x81, 201, 0x00, 0x07, 0x12, 0x34, 0x56, 0x78, 36 const uint8_t kPacket[] = {0x81, 201, 0x00, 0x07, 0x12, 0x34, 0x56, 0x78,
34 0x23, 0x45, 0x67, 0x89, 55, 0x11, 0x12, 0x13, 37 0x23, 0x45, 0x67, 0x89, 55, 0x11, 0x12, 0x13,
35 0x22, 0x23, 0x24, 0x25, 0x33, 0x34, 0x35, 0x36, 38 0x22, 0x23, 0x24, 0x25, 0x33, 0x34, 0x35, 0x36,
36 0x44, 0x45, 0x46, 0x47, 0x55, 0x56, 0x57, 0x58}; 39 0x44, 0x45, 0x46, 0x47, 0x55, 0x56, 0x57, 0x58};
37 const size_t kPacketLength = sizeof(kPacket); 40 } // namespace
38 41
39 class RtcpPacketReceiverReportTest : public ::testing::Test { 42 TEST(RtcpPacketReceiverReportTest, ParseWithOneReportBlock) {
40 protected:
41 void BuildPacket() { packet = rr.Build(); }
42 void ParsePacket() {
43 RtcpCommonHeader header;
44 EXPECT_TRUE(RtcpParseCommonHeader(packet.data(), packet.size(), &header));
45 EXPECT_EQ(header.BlockSize(), packet.size());
46 EXPECT_TRUE(parsed_.Parse(
47 header, packet.data() + RtcpCommonHeader::kHeaderSizeBytes));
48 }
49
50 ReceiverReport rr; 43 ReceiverReport rr;
51 rtc::Buffer packet; 44 EXPECT_TRUE(test::ParseSinglePacket(kPacket, &rr));
52 const ReceiverReport& parsed() { return parsed_; }
53
54 private:
55 ReceiverReport parsed_;
56 };
57
58 TEST_F(RtcpPacketReceiverReportTest, Parse) {
59 RtcpCommonHeader header;
60 RtcpParseCommonHeader(kPacket, kPacketLength, &header);
61 EXPECT_TRUE(rr.Parse(header, kPacket + RtcpCommonHeader::kHeaderSizeBytes));
62 const ReceiverReport& parsed = rr; 45 const ReceiverReport& parsed = rr;
63 46
64 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc()); 47 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
65 EXPECT_EQ(1u, parsed.report_blocks().size()); 48 EXPECT_EQ(1u, parsed.report_blocks().size());
66 const ReportBlock& rb = parsed.report_blocks().front(); 49 const ReportBlock& rb = parsed.report_blocks().front();
67 EXPECT_EQ(kRemoteSsrc, rb.source_ssrc()); 50 EXPECT_EQ(kRemoteSsrc, rb.source_ssrc());
68 EXPECT_EQ(kFractionLost, rb.fraction_lost()); 51 EXPECT_EQ(kFractionLost, rb.fraction_lost());
69 EXPECT_EQ(kCumulativeLost, rb.cumulative_lost()); 52 EXPECT_EQ(kCumulativeLost, rb.cumulative_lost());
70 EXPECT_EQ(kExtHighestSeqNum, rb.extended_high_seq_num()); 53 EXPECT_EQ(kExtHighestSeqNum, rb.extended_high_seq_num());
71 EXPECT_EQ(kJitter, rb.jitter()); 54 EXPECT_EQ(kJitter, rb.jitter());
72 EXPECT_EQ(kLastSr, rb.last_sr()); 55 EXPECT_EQ(kLastSr, rb.last_sr());
73 EXPECT_EQ(kDelayLastSr, rb.delay_since_last_sr()); 56 EXPECT_EQ(kDelayLastSr, rb.delay_since_last_sr());
74 } 57 }
75 58
76 TEST_F(RtcpPacketReceiverReportTest, ParseFailsOnIncorrectSize) { 59 TEST(RtcpPacketReceiverReportTest, ParseFailsOnIncorrectSize) {
77 RtcpCommonHeader header; 60 rtc::Buffer damaged_packet(kPacket);
78 RtcpParseCommonHeader(kPacket, kPacketLength, &header); 61 damaged_packet[0]++; // Damage the packet: increase count field.
79 header.count_or_format++; // Damage the packet. 62 ReceiverReport rr;
80 EXPECT_FALSE(rr.Parse(header, kPacket + RtcpCommonHeader::kHeaderSizeBytes)); 63 EXPECT_FALSE(test::ParseSinglePacket(damaged_packet, &rr));
81 } 64 }
82 65
83 TEST_F(RtcpPacketReceiverReportTest, Create) { 66 TEST(RtcpPacketReceiverReportTest, CreateWithOneReportBlock) {
67 ReceiverReport rr;
84 rr.From(kSenderSsrc); 68 rr.From(kSenderSsrc);
85 ReportBlock rb; 69 ReportBlock rb;
86 rb.To(kRemoteSsrc); 70 rb.To(kRemoteSsrc);
87 rb.WithFractionLost(kFractionLost); 71 rb.WithFractionLost(kFractionLost);
88 rb.WithCumulativeLost(kCumulativeLost); 72 rb.WithCumulativeLost(kCumulativeLost);
89 rb.WithExtHighestSeqNum(kExtHighestSeqNum); 73 rb.WithExtHighestSeqNum(kExtHighestSeqNum);
90 rb.WithJitter(kJitter); 74 rb.WithJitter(kJitter);
91 rb.WithLastSr(kLastSr); 75 rb.WithLastSr(kLastSr);
92 rb.WithDelayLastSr(kDelayLastSr); 76 rb.WithDelayLastSr(kDelayLastSr);
93 rr.WithReportBlock(rb); 77 rr.WithReportBlock(rb);
94 78
95 BuildPacket(); 79 rtc::Buffer raw = rr.Build();
96 80
97 ASSERT_EQ(kPacketLength, packet.size()); 81 EXPECT_THAT(make_tuple(raw.data(), raw.size()), ElementsAreArray(kPacket));
98 EXPECT_EQ(0, memcmp(kPacket, packet.data(), kPacketLength));
99 } 82 }
100 83
101 TEST_F(RtcpPacketReceiverReportTest, WithoutReportBlocks) { 84 TEST(RtcpPacketReceiverReportTest, CreateAndParseWithoutReportBlocks) {
85 ReceiverReport rr;
102 rr.From(kSenderSsrc); 86 rr.From(kSenderSsrc);
103 87
104 BuildPacket(); 88 rtc::Buffer raw = rr.Build();
105 ParsePacket(); 89 ReceiverReport parsed;
90 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed));
106 91
107 EXPECT_EQ(kSenderSsrc, parsed().sender_ssrc()); 92 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
108 EXPECT_EQ(0u, parsed().report_blocks().size()); 93 EXPECT_THAT(parsed.report_blocks(), IsEmpty());
109 } 94 }
110 95
111 TEST_F(RtcpPacketReceiverReportTest, WithTwoReportBlocks) { 96 TEST(RtcpPacketReceiverReportTest, CreateAndParseWithTwoReportBlocks) {
97 ReceiverReport rr;
112 ReportBlock rb1; 98 ReportBlock rb1;
113 rb1.To(kRemoteSsrc); 99 rb1.To(kRemoteSsrc);
114 ReportBlock rb2; 100 ReportBlock rb2;
115 rb2.To(kRemoteSsrc + 1); 101 rb2.To(kRemoteSsrc + 1);
116 102
117 rr.From(kSenderSsrc); 103 rr.From(kSenderSsrc);
118 EXPECT_TRUE(rr.WithReportBlock(rb1)); 104 EXPECT_TRUE(rr.WithReportBlock(rb1));
119 EXPECT_TRUE(rr.WithReportBlock(rb2)); 105 EXPECT_TRUE(rr.WithReportBlock(rb2));
120 106
121 BuildPacket(); 107 rtc::Buffer raw = rr.Build();
122 ParsePacket(); 108 ReceiverReport parsed;
109 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed));
123 110
124 EXPECT_EQ(kSenderSsrc, parsed().sender_ssrc()); 111 EXPECT_EQ(kSenderSsrc, parsed.sender_ssrc());
125 EXPECT_EQ(2u, parsed().report_blocks().size()); 112 EXPECT_EQ(2u, parsed.report_blocks().size());
126 EXPECT_EQ(kRemoteSsrc, parsed().report_blocks()[0].source_ssrc()); 113 EXPECT_EQ(kRemoteSsrc, parsed.report_blocks()[0].source_ssrc());
127 EXPECT_EQ(kRemoteSsrc + 1, parsed().report_blocks()[1].source_ssrc()); 114 EXPECT_EQ(kRemoteSsrc + 1, parsed.report_blocks()[1].source_ssrc());
128 } 115 }
129 116
130 TEST_F(RtcpPacketReceiverReportTest, WithTooManyReportBlocks) { 117 TEST(RtcpPacketReceiverReportTest, CreateWithTooManyReportBlocks) {
118 ReceiverReport rr;
131 rr.From(kSenderSsrc); 119 rr.From(kSenderSsrc);
132 const size_t kMaxReportBlocks = (1 << 5) - 1; 120 const size_t kMaxReportBlocks = (1 << 5) - 1;
133 ReportBlock rb; 121 ReportBlock rb;
134 for (size_t i = 0; i < kMaxReportBlocks; ++i) { 122 for (size_t i = 0; i < kMaxReportBlocks; ++i) {
135 rb.To(kRemoteSsrc + i); 123 rb.To(kRemoteSsrc + i);
136 EXPECT_TRUE(rr.WithReportBlock(rb)); 124 EXPECT_TRUE(rr.WithReportBlock(rb));
137 } 125 }
138 rb.To(kRemoteSsrc + kMaxReportBlocks); 126 rb.To(kRemoteSsrc + kMaxReportBlocks);
139 EXPECT_FALSE(rr.WithReportBlock(rb)); 127 EXPECT_FALSE(rr.WithReportBlock(rb));
140 } 128 }
141 129
142 } // namespace
143 } // namespace webrtc 130 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698