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

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

Issue 1461623003: rtcp::Nack packet moved into own file and got Parse function (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years 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) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 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 * This file includes unit tests for the RtcpPacket. 10 * This file includes unit tests for the RtcpPacket.
11 */ 11 */
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 15
16 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" 16 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h"
17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" 17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h"
18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" 18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h"
19 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" 19 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
20 #include "webrtc/test/rtcp_packet_parser.h" 20 #include "webrtc/test/rtcp_packet_parser.h"
21 21
22 using ::testing::ElementsAre; 22 using ::testing::ElementsAre;
23 23
24 using webrtc::rtcp::App; 24 using webrtc::rtcp::App;
25 using webrtc::rtcp::Bye; 25 using webrtc::rtcp::Bye;
26 using webrtc::rtcp::Dlrr; 26 using webrtc::rtcp::Dlrr;
27 using webrtc::rtcp::Empty; 27 using webrtc::rtcp::Empty;
28 using webrtc::rtcp::Fir; 28 using webrtc::rtcp::Fir;
29 using webrtc::rtcp::Nack;
30 using webrtc::rtcp::RawPacket; 29 using webrtc::rtcp::RawPacket;
31 using webrtc::rtcp::ReceiverReport; 30 using webrtc::rtcp::ReceiverReport;
32 using webrtc::rtcp::Remb; 31 using webrtc::rtcp::Remb;
33 using webrtc::rtcp::ReportBlock; 32 using webrtc::rtcp::ReportBlock;
34 using webrtc::rtcp::Rpsi; 33 using webrtc::rtcp::Rpsi;
35 using webrtc::rtcp::Rrtr; 34 using webrtc::rtcp::Rrtr;
36 using webrtc::rtcp::Sdes; 35 using webrtc::rtcp::Sdes;
37 using webrtc::rtcp::SenderReport; 36 using webrtc::rtcp::SenderReport;
38 using webrtc::rtcp::Sli; 37 using webrtc::rtcp::Sli;
39 using webrtc::rtcp::Tmmbn; 38 using webrtc::rtcp::Tmmbn;
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 parser.Parse(packet->Buffer(), packet->Length()); 235 parser.Parse(packet->Buffer(), packet->Length());
237 EXPECT_EQ(1, parser.sli()->num_packets()); 236 EXPECT_EQ(1, parser.sli()->num_packets());
238 EXPECT_EQ(kSenderSsrc, parser.sli()->Ssrc()); 237 EXPECT_EQ(kSenderSsrc, parser.sli()->Ssrc());
239 EXPECT_EQ(kRemoteSsrc, parser.sli()->MediaSsrc()); 238 EXPECT_EQ(kRemoteSsrc, parser.sli()->MediaSsrc());
240 EXPECT_EQ(1, parser.sli_item()->num_packets()); 239 EXPECT_EQ(1, parser.sli_item()->num_packets());
241 EXPECT_EQ(kFirstMb, parser.sli_item()->FirstMb()); 240 EXPECT_EQ(kFirstMb, parser.sli_item()->FirstMb());
242 EXPECT_EQ(kNumberOfMb, parser.sli_item()->NumberOfMb()); 241 EXPECT_EQ(kNumberOfMb, parser.sli_item()->NumberOfMb());
243 EXPECT_EQ(kPictureId, parser.sli_item()->PictureId()); 242 EXPECT_EQ(kPictureId, parser.sli_item()->PictureId());
244 } 243 }
245 244
246 TEST(RtcpPacketTest, Nack) {
247 Nack nack;
248 const uint16_t kList[] = {0, 1, 3, 8, 16};
249 const uint16_t kListLength = sizeof(kList) / sizeof(kList[0]);
250 nack.From(kSenderSsrc);
251 nack.To(kRemoteSsrc);
252 nack.WithList(kList, kListLength);
253 rtc::scoped_ptr<RawPacket> packet(nack.Build());
254 RtcpPacketParser parser;
255 parser.Parse(packet->Buffer(), packet->Length());
256 EXPECT_EQ(1, parser.nack()->num_packets());
257 EXPECT_EQ(kSenderSsrc, parser.nack()->Ssrc());
258 EXPECT_EQ(kRemoteSsrc, parser.nack()->MediaSsrc());
259 EXPECT_EQ(1, parser.nack_item()->num_packets());
260 std::vector<uint16_t> seqs = parser.nack_item()->last_nack_list();
261 EXPECT_EQ(kListLength, seqs.size());
262 for (size_t i = 0; i < kListLength; ++i) {
263 EXPECT_EQ(kList[i], seqs[i]);
264 }
265 }
266
267 TEST(RtcpPacketTest, NackWithWrap) {
268 Nack nack;
269 const uint16_t kList[] = {65500, 65516, 65534, 65535, 0, 1, 3, 20, 100};
270 const uint16_t kListLength = sizeof(kList) / sizeof(kList[0]);
271 nack.From(kSenderSsrc);
272 nack.To(kRemoteSsrc);
273 nack.WithList(kList, kListLength);
274 rtc::scoped_ptr<RawPacket> packet(nack.Build());
275 RtcpPacketParser parser;
276 parser.Parse(packet->Buffer(), packet->Length());
277 EXPECT_EQ(1, parser.nack()->num_packets());
278 EXPECT_EQ(kSenderSsrc, parser.nack()->Ssrc());
279 EXPECT_EQ(kRemoteSsrc, parser.nack()->MediaSsrc());
280 EXPECT_EQ(4, parser.nack_item()->num_packets());
281 std::vector<uint16_t> seqs = parser.nack_item()->last_nack_list();
282 EXPECT_EQ(kListLength, seqs.size());
283 for (size_t i = 0; i < kListLength; ++i) {
284 EXPECT_EQ(kList[i], seqs[i]);
285 }
286 }
287
288 TEST(RtcpPacketTest, NackFragmented) {
289 Nack nack;
290 const uint16_t kList[] = {1, 100, 200, 300, 400};
291 const uint16_t kListLength = sizeof(kList) / sizeof(kList[0]);
292 nack.From(kSenderSsrc);
293 nack.To(kRemoteSsrc);
294 nack.WithList(kList, kListLength);
295
296 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback {
297 public:
298 void OnPacketReady(uint8_t* data, size_t length) override {
299 ++packets_created_;
300 RtcpPacketParser parser;
301 parser.Parse(data, length);
302 EXPECT_EQ(1, parser.nack()->num_packets());
303 EXPECT_EQ(kSenderSsrc, parser.nack()->Ssrc());
304 EXPECT_EQ(kRemoteSsrc, parser.nack()->MediaSsrc());
305 switch (packets_created_) {
306 case 1:
307 EXPECT_THAT(parser.nack_item()->last_nack_list(),
308 ElementsAre(1, 100, 200));
309 break;
310 case 2:
311 EXPECT_THAT(parser.nack_item()->last_nack_list(),
312 ElementsAre(300, 400));
313 break;
314 default:
315 ADD_FAILURE() << "Unexpected packet count: " << packets_created_;
316 }
317 }
318 int packets_created_ = 0;
319 } verifier;
320 const size_t kBufferSize = 12 + (3 * 4); // Fits common header + 3 nack items
321 uint8_t buffer[kBufferSize];
322 EXPECT_TRUE(nack.BuildExternalBuffer(buffer, kBufferSize, &verifier));
323 EXPECT_EQ(2, verifier.packets_created_);
324 }
325
326 TEST(RtcpPacketTest, NackWithTooSmallBuffer) {
327 const uint16_t kList[] = {1};
328 const size_t kMinNackBlockSize = 16;
329 Nack nack;
330 nack.From(kSenderSsrc);
331 nack.To(kRemoteSsrc);
332 nack.WithList(kList, 1);
333 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback {
334 public:
335 void OnPacketReady(uint8_t* data, size_t length) override {
336 ADD_FAILURE() << "Buffer should be too small.";
337 }
338 } verifier;
339 uint8_t buffer[kMinNackBlockSize - 1];
340 EXPECT_FALSE(
341 nack.BuildExternalBuffer(buffer, kMinNackBlockSize - 1, &verifier));
342 }
343
344 TEST(RtcpPacketTest, Rpsi) { 245 TEST(RtcpPacketTest, Rpsi) {
345 Rpsi rpsi; 246 Rpsi rpsi;
346 // 1000001 (7 bits = 1 byte in native string). 247 // 1000001 (7 bits = 1 byte in native string).
347 const uint64_t kPictureId = 0x41; 248 const uint64_t kPictureId = 0x41;
348 const uint16_t kNumberOfValidBytes = 1; 249 const uint16_t kNumberOfValidBytes = 1;
349 rpsi.WithPayloadType(100); 250 rpsi.WithPayloadType(100);
350 rpsi.WithPictureId(kPictureId); 251 rpsi.WithPictureId(kPictureId);
351 252
352 rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); 253 rtc::scoped_ptr<RawPacket> packet(rpsi.Build());
353 RtcpPacketParser parser; 254 RtcpPacketParser parser;
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 EXPECT_TRUE(xr.WithDlrr(&dlrr)); 809 EXPECT_TRUE(xr.WithDlrr(&dlrr));
909 EXPECT_FALSE(xr.WithDlrr(&dlrr)); 810 EXPECT_FALSE(xr.WithDlrr(&dlrr));
910 811
911 VoipMetric voip_metric; 812 VoipMetric voip_metric;
912 for (int i = 0; i < kMaxBlocks; ++i) 813 for (int i = 0; i < kMaxBlocks; ++i)
913 EXPECT_TRUE(xr.WithVoipMetric(&voip_metric)); 814 EXPECT_TRUE(xr.WithVoipMetric(&voip_metric));
914 EXPECT_FALSE(xr.WithVoipMetric(&voip_metric)); 815 EXPECT_FALSE(xr.WithVoipMetric(&voip_metric));
915 } 816 }
916 817
917 } // namespace webrtc 818 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/rtpfb.cc ('k') | webrtc/modules/rtp_rtcp/source/rtcp_sender.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698