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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtp_utility_unittest.cc

Issue 2805023002: Add read support of RtpStreamId/RepairedRtpStreamId header extensions. (Closed)
Patch Set: +rtp_header_fuzzer Created 3 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
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/rtp_header_extension.h" 11 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extension.h"
12 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h" 12 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h"
13 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" 13 #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h"
14 #include "webrtc/test/gmock.h" 14 #include "webrtc/test/gmock.h"
15 #include "webrtc/test/gtest.h" 15 #include "webrtc/test/gtest.h"
16 16
17 namespace webrtc { 17 namespace webrtc {
18 namespace { 18 namespace {
19 19
20 using ::testing::ElementsAre;
20 using ::testing::ElementsAreArray; 21 using ::testing::ElementsAreArray;
21 using ::testing::make_tuple; 22 using ::testing::make_tuple;
22 23
23 const int8_t kPayloadType = 100; 24 const int8_t kPayloadType = 100;
24 const uint32_t kSsrc = 0x12345678; 25 const uint32_t kSsrc = 0x12345678;
25 const uint16_t kSeqNum = 88; 26 const uint16_t kSeqNum = 88;
26 const uint32_t kTimestamp = 0x65431278; 27 const uint32_t kTimestamp = 0x65431278;
27 28
28 } // namespace 29 } // namespace
29 30
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket)); 142 RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket));
142 RTPHeader header; 143 RTPHeader header;
143 144
144 EXPECT_TRUE(parser.Parse(&header, &extensions)); 145 EXPECT_TRUE(parser.Parse(&header, &extensions));
145 146
146 // Parse should ignore extension. 147 // Parse should ignore extension.
147 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); 148 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset);
148 EXPECT_EQ(sizeof(kPacket), header.headerLength); 149 EXPECT_EQ(sizeof(kPacket), header.headerLength);
149 } 150 }
150 151
151 TEST(RtpHeaderParser, ParseAll6Extensions) { 152 TEST(RtpHeaderParser, ParseAll8Extensions) {
152 const uint8_t kAudioLevel = 0x5a; 153 const uint8_t kAudioLevel = 0x5a;
153 // clang-format off 154 // clang-format off
154 const uint8_t kPacket[] = { 155 const uint8_t kPacket[] = {
155 0x90, kPayloadType, 0x00, kSeqNum, 156 0x90, kPayloadType, 0x00, kSeqNum,
156 0x65, 0x43, 0x12, 0x78, // kTimestamp. 157 0x65, 0x43, 0x12, 0x78, // kTimestamp.
157 0x12, 0x34, 0x56, 0x78, // kSsrc. 158 0x12, 0x34, 0x56, 0x78, // kSsrc.
158 0xbe, 0xde, 0x00, 0x05, // Extension of size 5x32bit word. 159 0xbe, 0xde, 0x00, 0x08, // Extension of size 8x32bit words.
159 0x40, 0x80|kAudioLevel, // AudioLevel. 160 0x40, 0x80|kAudioLevel, // AudioLevel.
160 0x22, 0x01, 0x56, 0xce, // TransmissionOffset. 161 0x22, 0x01, 0x56, 0xce, // TransmissionOffset.
161 0x62, 0x12, 0x34, 0x56, // AbsoluteSendTime. 162 0x62, 0x12, 0x34, 0x56, // AbsoluteSendTime.
162 0x81, 0xce, 0xab, // TransportSequenceNumber. 163 0x81, 0xce, 0xab, // TransportSequenceNumber.
163 0xa0, 0x03, // VideoRotation. 164 0xa0, 0x03, // VideoRotation.
164 0xb2, 0x12, 0x48, 0x76, // PlayoutDelayLimits. 165 0xb2, 0x12, 0x48, 0x76, // PlayoutDelayLimits.
165 0x00, // Padding to 32bit boundary. 166 0xc2, 'r', 't', 'x', // RtpStreamId
167 0xd5, 's', 't', 'r', 'e', 'a', 'm', // RepairedRtpStreamId
168 0x00, 0x00, // Padding to 32bit boundary.
166 }; 169 };
167 // clang-format on 170 // clang-format on
168 ASSERT_EQ(sizeof(kPacket) % 4, 0u); 171 ASSERT_EQ(sizeof(kPacket) % 4, 0u);
169 172
170 RtpHeaderExtensionMap extensions; 173 RtpHeaderExtensionMap extensions;
171 extensions.Register<TransmissionOffset>(2); 174 extensions.Register<TransmissionOffset>(2);
172 extensions.Register<AudioLevel>(4); 175 extensions.Register<AudioLevel>(4);
173 extensions.Register<AbsoluteSendTime>(6); 176 extensions.Register<AbsoluteSendTime>(6);
174 extensions.Register<TransportSequenceNumber>(8); 177 extensions.Register<TransportSequenceNumber>(8);
175 extensions.Register<VideoOrientation>(0xa); 178 extensions.Register<VideoOrientation>(0xa);
176 extensions.Register<PlayoutDelayLimits>(0xb); 179 extensions.Register<PlayoutDelayLimits>(0xb);
180 extensions.Register<RtpStreamId>(0xc);
181 extensions.Register<RepairedRtpStreamId>(0xd);
177 RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket)); 182 RtpUtility::RtpHeaderParser parser(kPacket, sizeof(kPacket));
178 RTPHeader header; 183 RTPHeader header;
179 184
180 EXPECT_TRUE(parser.Parse(&header, &extensions)); 185 EXPECT_TRUE(parser.Parse(&header, &extensions));
181 186
182 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset); 187 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset);
183 EXPECT_EQ(0x156ce, header.extension.transmissionTimeOffset); 188 EXPECT_EQ(0x156ce, header.extension.transmissionTimeOffset);
184 189
185 EXPECT_TRUE(header.extension.hasAudioLevel); 190 EXPECT_TRUE(header.extension.hasAudioLevel);
186 EXPECT_TRUE(header.extension.voiceActivity); 191 EXPECT_TRUE(header.extension.voiceActivity);
187 EXPECT_EQ(kAudioLevel, header.extension.audioLevel); 192 EXPECT_EQ(kAudioLevel, header.extension.audioLevel);
188 193
189 EXPECT_TRUE(header.extension.hasAbsoluteSendTime); 194 EXPECT_TRUE(header.extension.hasAbsoluteSendTime);
190 EXPECT_EQ(0x123456U, header.extension.absoluteSendTime); 195 EXPECT_EQ(0x123456U, header.extension.absoluteSendTime);
191 196
192 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); 197 EXPECT_TRUE(header.extension.hasTransportSequenceNumber);
193 EXPECT_EQ(0xceab, header.extension.transportSequenceNumber); 198 EXPECT_EQ(0xceab, header.extension.transportSequenceNumber);
194 199
195 EXPECT_TRUE(header.extension.hasVideoRotation); 200 EXPECT_TRUE(header.extension.hasVideoRotation);
196 EXPECT_EQ(kVideoRotation_270, header.extension.videoRotation); 201 EXPECT_EQ(kVideoRotation_270, header.extension.videoRotation);
197 202
198 EXPECT_EQ(0x124 * PlayoutDelayLimits::kGranularityMs, 203 EXPECT_EQ(0x124 * PlayoutDelayLimits::kGranularityMs,
199 header.extension.playout_delay.min_ms); 204 header.extension.playout_delay.min_ms);
200 EXPECT_EQ(0x876 * PlayoutDelayLimits::kGranularityMs, 205 EXPECT_EQ(0x876 * PlayoutDelayLimits::kGranularityMs,
201 header.extension.playout_delay.max_ms); 206 header.extension.playout_delay.max_ms);
207 EXPECT_EQ(header.extension.stream_id_size, 3U);
208 // Join buffer + size using ArrayView because ::testing::make_tuple calls
209 // strlen(const char* rsid), but rsid is not 0-terminated causing msan error.
210 EXPECT_THAT(rtc::MakeArrayView(header.extension.stream_id,
211 header.extension.stream_id_size),
212 ElementsAre('r', 't', 'x'));
213 EXPECT_THAT(rtc::MakeArrayView(header.extension.repaired_stream_id,
214 header.extension.repaired_stream_id_size),
215 ElementsAre('s', 't', 'r', 'e', 'a', 'm'));
202 } 216 }
203 217
204 TEST(RtpHeaderParser, ParseWithCsrcsExtensionAndPadding) { 218 TEST(RtpHeaderParser, ParseWithCsrcsExtensionAndPadding) {
205 const uint8_t kPacketPaddingSize = 8; 219 const uint8_t kPacketPaddingSize = 8;
206 const uint32_t kCsrcs[] = {0x34567890, 0x32435465}; 220 const uint32_t kCsrcs[] = {0x34567890, 0x32435465};
207 const size_t kPayloadSize = 7; 221 const size_t kPayloadSize = 7;
208 // clang-format off 222 // clang-format off
209 const uint8_t kPacket[] = { 223 const uint8_t kPacket[] = {
210 0xb2, kPayloadType, 0x00, kSeqNum, 224 0xb2, kPayloadType, 0x00, kSeqNum,
211 0x65, 0x43, 0x12, 0x78, // kTimestamp. 225 0x65, 0x43, 0x12, 0x78, // kTimestamp.
(...skipping 19 matching lines...) Expand all
231 EXPECT_THAT(make_tuple(header.arrOfCSRCs, header.numCSRCs), 245 EXPECT_THAT(make_tuple(header.arrOfCSRCs, header.numCSRCs),
232 ElementsAreArray(kCsrcs)); 246 ElementsAreArray(kCsrcs));
233 EXPECT_EQ(kPacketPaddingSize, header.paddingLength); 247 EXPECT_EQ(kPacketPaddingSize, header.paddingLength);
234 EXPECT_THAT(sizeof(kPacket) - kPayloadSize - kPacketPaddingSize, 248 EXPECT_THAT(sizeof(kPacket) - kPayloadSize - kPacketPaddingSize,
235 header.headerLength); 249 header.headerLength);
236 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset); 250 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset);
237 EXPECT_EQ(0x56ce, header.extension.transmissionTimeOffset); 251 EXPECT_EQ(0x56ce, header.extension.transmissionTimeOffset);
238 } 252 }
239 253
240 } // namespace webrtc 254 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698