Chromium Code Reviews

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

Issue 1696203002: [rtp_rtcp] rtc::scoped_ptr<rtcp::RawPacket> replaced with rtc::Buffer (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 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/rpsi.h" 11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rpsi.h"
12 12
13 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "webrtc/base/checks.h" 15 #include "webrtc/base/checks.h"
16 16
17 using testing::ElementsAreArray; 17 using testing::ElementsAreArray;
18 using testing::make_tuple; 18 using testing::make_tuple;
19 using webrtc::rtcp::RawPacket;
20 using webrtc::rtcp::Rpsi; 19 using webrtc::rtcp::Rpsi;
21 using webrtc::RTCPUtility::RtcpCommonHeader; 20 using webrtc::RTCPUtility::RtcpCommonHeader;
22 using webrtc::RTCPUtility::RtcpParseCommonHeader; 21 using webrtc::RTCPUtility::RtcpParseCommonHeader;
23 22
24 namespace webrtc { 23 namespace webrtc {
25 namespace { 24 namespace {
26 const uint32_t kSenderSsrc = 0x12345678; 25 const uint32_t kSenderSsrc = 0x12345678;
27 const uint32_t kRemoteSsrc = 0x23456789; 26 const uint32_t kRemoteSsrc = 0x23456789;
28 // 10000|01 100001|0 1000011 (7 bits = 1 byte in native string). 27 // 10000|01 100001|0 1000011 (7 bits = 1 byte in native string).
29 const uint64_t kPictureId = 0x106143; 28 const uint64_t kPictureId = 0x106143;
(...skipping 29 matching lines...)
59 EXPECT_EQ(kPictureId, parsed.picture_id()); 58 EXPECT_EQ(kPictureId, parsed.picture_id());
60 } 59 }
61 60
62 TEST(RtcpPacketRpsiTest, Create) { 61 TEST(RtcpPacketRpsiTest, Create) {
63 Rpsi rpsi; 62 Rpsi rpsi;
64 rpsi.From(kSenderSsrc); 63 rpsi.From(kSenderSsrc);
65 rpsi.To(kRemoteSsrc); 64 rpsi.To(kRemoteSsrc);
66 rpsi.WithPayloadType(kPayloadType); 65 rpsi.WithPayloadType(kPayloadType);
67 rpsi.WithPictureId(kPictureId); 66 rpsi.WithPictureId(kPictureId);
68 67
69 rtc::scoped_ptr<RawPacket> packet = rpsi.Build(); 68 rtc::Buffer packet = rpsi.Build();
70 69
71 EXPECT_THAT(make_tuple(packet->Buffer(), packet->Length()), 70 EXPECT_THAT(make_tuple(packet.data(), packet.size()),
72 ElementsAreArray(kPacket)); 71 ElementsAreArray(kPacket));
73 } 72 }
74 73
75 TEST(RtcpPacketRpsiTest, ParseFailsOnTooSmallPacket) { 74 TEST(RtcpPacketRpsiTest, ParseFailsOnTooSmallPacket) {
76 Rpsi rpsi; 75 Rpsi rpsi;
77 rpsi.From(kSenderSsrc); 76 rpsi.From(kSenderSsrc);
78 rpsi.To(kRemoteSsrc); 77 rpsi.To(kRemoteSsrc);
79 78
80 rtc::scoped_ptr<RawPacket> packet = rpsi.Build(); 79 rtc::Buffer packet = rpsi.Build();
81 packet->MutableBuffer()[3]--; // Reduce size field by one word (4 bytes). 80 packet.data()[3]--; // Reduce size field by one word (4 bytes).
82 81
83 EXPECT_FALSE(ParseRpsi(packet->Buffer(), packet->Length() - 4)); 82 EXPECT_FALSE(ParseRpsi(packet.data(), packet.size() - 4));
84 } 83 }
85 84
86 TEST(RtcpPacketRpsiTest, ParseFailsOnFractionalPaddingBytes) { 85 TEST(RtcpPacketRpsiTest, ParseFailsOnFractionalPaddingBytes) {
87 Rpsi rpsi; 86 Rpsi rpsi;
88 rpsi.From(kSenderSsrc); 87 rpsi.From(kSenderSsrc);
89 rpsi.To(kRemoteSsrc); 88 rpsi.To(kRemoteSsrc);
90 rpsi.WithPictureId(kPictureId); 89 rpsi.WithPictureId(kPictureId);
91 rtc::scoped_ptr<RawPacket> packet = rpsi.Build(); 90 rtc::Buffer packet = rpsi.Build();
92 uint8_t* padding_bits = packet->MutableBuffer() + 12; 91 uint8_t* padding_bits = packet.data() + 12;
93 uint8_t saved_padding_bits = *padding_bits; 92 uint8_t saved_padding_bits = *padding_bits;
94 ASSERT_TRUE(ParseRpsi(packet->Buffer(), packet->Length())); 93 ASSERT_TRUE(ParseRpsi(packet.data(), packet.size()));
95 94
96 for (uint8_t i = 1; i < 8; ++i) { 95 for (uint8_t i = 1; i < 8; ++i) {
97 *padding_bits = saved_padding_bits + i; 96 *padding_bits = saved_padding_bits + i;
98 EXPECT_FALSE(ParseRpsi(packet->Buffer(), packet->Length())); 97 EXPECT_FALSE(ParseRpsi(packet.data(), packet.size()));
99 } 98 }
100 } 99 }
101 100
102 TEST(RtcpPacketRpsiTest, ParseFailsOnTooBigPadding) { 101 TEST(RtcpPacketRpsiTest, ParseFailsOnTooBigPadding) {
103 Rpsi rpsi; 102 Rpsi rpsi;
104 rpsi.From(kSenderSsrc); 103 rpsi.From(kSenderSsrc);
105 rpsi.To(kRemoteSsrc); 104 rpsi.To(kRemoteSsrc);
106 rpsi.WithPictureId(1); // Small picture id that occupy just 1 byte. 105 rpsi.WithPictureId(1); // Small picture id that occupy just 1 byte.
107 rtc::scoped_ptr<RawPacket> packet = rpsi.Build(); 106 rtc::Buffer packet = rpsi.Build();
108 uint8_t* padding_bits = packet->MutableBuffer() + 12; 107 uint8_t* padding_bits = packet.data() + 12;
109 ASSERT_TRUE(ParseRpsi(packet->Buffer(), packet->Length())); 108 ASSERT_TRUE(ParseRpsi(packet.data(), packet.size()));
110 109
111 *padding_bits += 8; 110 *padding_bits += 8;
112 EXPECT_FALSE(ParseRpsi(packet->Buffer(), packet->Length())); 111 EXPECT_FALSE(ParseRpsi(packet.data(), packet.size()));
113 } 112 }
114 113
115 // For raw rpsi packet extract how many bytes are used to store picture_id. 114 // For raw rpsi packet extract how many bytes are used to store picture_id.
116 size_t UsedBytes(const RawPacket& packet) { // Works for small packets only. 115 size_t UsedBytes(const rtc::Buffer& packet) { // Works for small packets only.
117 RTC_CHECK_EQ(packet.Buffer()[2], 0); // Assume packet is small. 116 RTC_CHECK_EQ(packet.data()[2], 0); // Assume packet is small.
118 size_t total_rpsi_payload_bytes = 4 * (packet.Buffer()[3] - 2) - 2; 117 size_t total_rpsi_payload_bytes = 4 * (packet.data()[3] - 2) - 2;
119 uint8_t padding_bits = packet.Buffer()[12]; 118 uint8_t padding_bits = packet.data()[12];
120 RTC_CHECK_EQ(padding_bits % 8, 0); 119 RTC_CHECK_EQ(padding_bits % 8, 0);
121 return total_rpsi_payload_bytes - (padding_bits / 8); 120 return total_rpsi_payload_bytes - (padding_bits / 8);
122 } 121 }
123 122
124 TEST(RtcpPacketRpsiTest, WithOneByteNativeString) { 123 TEST(RtcpPacketRpsiTest, WithOneByteNativeString) {
125 Rpsi rpsi; 124 Rpsi rpsi;
126 // 1000001 (7 bits = 1 byte in native string). 125 // 1000001 (7 bits = 1 byte in native string).
127 const uint64_t kPictureId = 0x41; 126 const uint64_t kPictureId = 0x41;
128 const uint16_t kNumberOfValidBytes = 1; 127 const uint16_t kNumberOfValidBytes = 1;
129 rpsi.WithPictureId(kPictureId); 128 rpsi.WithPictureId(kPictureId);
130 129
131 rtc::scoped_ptr<RawPacket> packet = rpsi.Build(); 130 rtc::Buffer packet = rpsi.Build();
132 EXPECT_EQ(kNumberOfValidBytes, UsedBytes(*packet)); 131 EXPECT_EQ(kNumberOfValidBytes, UsedBytes(packet));
133 132
134 Rpsi parsed; 133 Rpsi parsed;
135 EXPECT_TRUE(ParseRpsi(packet->Buffer(), packet->Length(), &parsed)); 134 EXPECT_TRUE(ParseRpsi(packet.data(), packet.size(), &parsed));
136 EXPECT_EQ(kPictureId, parsed.picture_id()); 135 EXPECT_EQ(kPictureId, parsed.picture_id());
137 } 136 }
138 137
139 TEST(RtcpPacketRpsiTest, WithTwoByteNativeString) { 138 TEST(RtcpPacketRpsiTest, WithTwoByteNativeString) {
140 Rpsi rpsi; 139 Rpsi rpsi;
141 // |1 0000001 (7 bits = 1 byte in native string). 140 // |1 0000001 (7 bits = 1 byte in native string).
142 const uint64_t kPictureId = 0x81; 141 const uint64_t kPictureId = 0x81;
143 const uint16_t kNumberOfValidBytes = 2; 142 const uint16_t kNumberOfValidBytes = 2;
144 rpsi.WithPictureId(kPictureId); 143 rpsi.WithPictureId(kPictureId);
145 144
146 rtc::scoped_ptr<RawPacket> packet = rpsi.Build(); 145 rtc::Buffer packet = rpsi.Build();
147 EXPECT_EQ(kNumberOfValidBytes, UsedBytes(*packet)); 146 EXPECT_EQ(kNumberOfValidBytes, UsedBytes(packet));
148 147
149 Rpsi parsed; 148 Rpsi parsed;
150 EXPECT_TRUE(ParseRpsi(packet->Buffer(), packet->Length(), &parsed)); 149 EXPECT_TRUE(ParseRpsi(packet.data(), packet.size(), &parsed));
151 EXPECT_EQ(kPictureId, parsed.picture_id()); 150 EXPECT_EQ(kPictureId, parsed.picture_id());
152 } 151 }
153 152
154 TEST(RtcpPacketRpsiTest, WithThreeByteNativeString) { 153 TEST(RtcpPacketRpsiTest, WithThreeByteNativeString) {
155 Rpsi rpsi; 154 Rpsi rpsi;
156 // 10000|00 100000|0 1000000 (7 bits = 1 byte in native string). 155 // 10000|00 100000|0 1000000 (7 bits = 1 byte in native string).
157 const uint64_t kPictureId = 0x102040; 156 const uint64_t kPictureId = 0x102040;
158 const uint16_t kNumberOfValidBytes = 3; 157 const uint16_t kNumberOfValidBytes = 3;
159 rpsi.WithPictureId(kPictureId); 158 rpsi.WithPictureId(kPictureId);
160 159
161 rtc::scoped_ptr<RawPacket> packet = rpsi.Build(); 160 rtc::Buffer packet = rpsi.Build();
162 EXPECT_EQ(kNumberOfValidBytes, UsedBytes(*packet)); 161 EXPECT_EQ(kNumberOfValidBytes, UsedBytes(packet));
163 162
164 Rpsi parsed; 163 Rpsi parsed;
165 EXPECT_TRUE(ParseRpsi(packet->Buffer(), packet->Length(), &parsed)); 164 EXPECT_TRUE(ParseRpsi(packet.data(), packet.size(), &parsed));
166 EXPECT_EQ(kPictureId, parsed.picture_id()); 165 EXPECT_EQ(kPictureId, parsed.picture_id());
167 } 166 }
168 167
169 TEST(RtcpPacketRpsiTest, WithFourByteNativeString) { 168 TEST(RtcpPacketRpsiTest, WithFourByteNativeString) {
170 Rpsi rpsi; 169 Rpsi rpsi;
171 // 1000|001 00001|01 100001|1 1000010 (7 bits = 1 byte in native string). 170 // 1000|001 00001|01 100001|1 1000010 (7 bits = 1 byte in native string).
172 const uint64_t kPictureId = 0x84161C2; 171 const uint64_t kPictureId = 0x84161C2;
173 const uint16_t kNumberOfValidBytes = 4; 172 const uint16_t kNumberOfValidBytes = 4;
174 rpsi.WithPictureId(kPictureId); 173 rpsi.WithPictureId(kPictureId);
175 174
176 rtc::scoped_ptr<RawPacket> packet = rpsi.Build(); 175 rtc::Buffer packet = rpsi.Build();
177 EXPECT_EQ(kNumberOfValidBytes, UsedBytes(*packet)); 176 EXPECT_EQ(kNumberOfValidBytes, UsedBytes(packet));
178 177
179 Rpsi parsed; 178 Rpsi parsed;
180 EXPECT_TRUE(ParseRpsi(packet->Buffer(), packet->Length(), &parsed)); 179 EXPECT_TRUE(ParseRpsi(packet.data(), packet.size(), &parsed));
181 EXPECT_EQ(kPictureId, parsed.picture_id()); 180 EXPECT_EQ(kPictureId, parsed.picture_id());
182 } 181 }
183 182
184 TEST(RtcpPacketRpsiTest, WithMaxPictureId) { 183 TEST(RtcpPacketRpsiTest, WithMaxPictureId) {
185 Rpsi rpsi; 184 Rpsi rpsi;
186 // 1 1111111| 1111111 1|111111 11|11111 111|1111 1111|111 11111| 185 // 1 1111111| 1111111 1|111111 11|11111 111|1111 1111|111 11111|
187 // 11 111111|1 1111111 (7 bits = 1 byte in native string). 186 // 11 111111|1 1111111 (7 bits = 1 byte in native string).
188 const uint64_t kPictureId = 0xffffffffffffffff; 187 const uint64_t kPictureId = 0xffffffffffffffff;
189 const uint16_t kNumberOfValidBytes = 10; 188 const uint16_t kNumberOfValidBytes = 10;
190 rpsi.WithPictureId(kPictureId); 189 rpsi.WithPictureId(kPictureId);
191 190
192 rtc::scoped_ptr<RawPacket> packet = rpsi.Build(); 191 rtc::Buffer packet = rpsi.Build();
193 EXPECT_EQ(kNumberOfValidBytes, UsedBytes(*packet)); 192 EXPECT_EQ(kNumberOfValidBytes, UsedBytes(packet));
194 193
195 Rpsi parsed; 194 Rpsi parsed;
196 EXPECT_TRUE(ParseRpsi(packet->Buffer(), packet->Length(), &parsed)); 195 EXPECT_TRUE(ParseRpsi(packet.data(), packet.size(), &parsed));
197 EXPECT_EQ(kPictureId, parsed.picture_id()); 196 EXPECT_EQ(kPictureId, parsed.picture_id());
198 } 197 }
199 } // namespace webrtc 198 } // namespace webrtc
OLDNEW

Powered by Google App Engine