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

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: 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/test/rtcp_packet_parser.h" 18 #include "webrtc/test/rtcp_packet_parser.h"
19 19
20 using ::testing::ElementsAre; 20 using ::testing::ElementsAre;
21 21
22 using webrtc::rtcp::App; 22 using webrtc::rtcp::App;
23 using webrtc::rtcp::Bye; 23 using webrtc::rtcp::Bye;
24 using webrtc::rtcp::Dlrr; 24 using webrtc::rtcp::Dlrr;
25 using webrtc::rtcp::Empty; 25 using webrtc::rtcp::Empty;
26 using webrtc::rtcp::Fir; 26 using webrtc::rtcp::Fir;
27 using webrtc::rtcp::Nack;
28 using webrtc::rtcp::Pli; 27 using webrtc::rtcp::Pli;
29 using webrtc::rtcp::Sdes; 28 using webrtc::rtcp::Sdes;
30 using webrtc::rtcp::SenderReport; 29 using webrtc::rtcp::SenderReport;
31 using webrtc::rtcp::Sli; 30 using webrtc::rtcp::Sli;
32 using webrtc::rtcp::RawPacket; 31 using webrtc::rtcp::RawPacket;
33 using webrtc::rtcp::ReceiverReport; 32 using webrtc::rtcp::ReceiverReport;
34 using webrtc::rtcp::Remb; 33 using webrtc::rtcp::Remb;
35 using webrtc::rtcp::ReportBlock; 34 using webrtc::rtcp::ReportBlock;
36 using webrtc::rtcp::Rpsi; 35 using webrtc::rtcp::Rpsi;
37 using webrtc::rtcp::Rrtr; 36 using webrtc::rtcp::Rrtr;
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 parser.Parse(packet->Buffer(), packet->Length()); 323 parser.Parse(packet->Buffer(), packet->Length());
325 EXPECT_EQ(1, parser.sli()->num_packets()); 324 EXPECT_EQ(1, parser.sli()->num_packets());
326 EXPECT_EQ(kSenderSsrc, parser.sli()->Ssrc()); 325 EXPECT_EQ(kSenderSsrc, parser.sli()->Ssrc());
327 EXPECT_EQ(kRemoteSsrc, parser.sli()->MediaSsrc()); 326 EXPECT_EQ(kRemoteSsrc, parser.sli()->MediaSsrc());
328 EXPECT_EQ(1, parser.sli_item()->num_packets()); 327 EXPECT_EQ(1, parser.sli_item()->num_packets());
329 EXPECT_EQ(kFirstMb, parser.sli_item()->FirstMb()); 328 EXPECT_EQ(kFirstMb, parser.sli_item()->FirstMb());
330 EXPECT_EQ(kNumberOfMb, parser.sli_item()->NumberOfMb()); 329 EXPECT_EQ(kNumberOfMb, parser.sli_item()->NumberOfMb());
331 EXPECT_EQ(kPictureId, parser.sli_item()->PictureId()); 330 EXPECT_EQ(kPictureId, parser.sli_item()->PictureId());
332 } 331 }
333 332
334 TEST(RtcpPacketTest, Nack) {
335 Nack nack;
336 const uint16_t kList[] = {0, 1, 3, 8, 16};
337 const uint16_t kListLength = sizeof(kList) / sizeof(kList[0]);
338 nack.From(kSenderSsrc);
339 nack.To(kRemoteSsrc);
340 nack.WithList(kList, kListLength);
341 rtc::scoped_ptr<RawPacket> packet(nack.Build());
342 RtcpPacketParser parser;
343 parser.Parse(packet->Buffer(), packet->Length());
344 EXPECT_EQ(1, parser.nack()->num_packets());
345 EXPECT_EQ(kSenderSsrc, parser.nack()->Ssrc());
346 EXPECT_EQ(kRemoteSsrc, parser.nack()->MediaSsrc());
347 EXPECT_EQ(1, parser.nack_item()->num_packets());
348 std::vector<uint16_t> seqs = parser.nack_item()->last_nack_list();
349 EXPECT_EQ(kListLength, seqs.size());
350 for (size_t i = 0; i < kListLength; ++i) {
351 EXPECT_EQ(kList[i], seqs[i]);
352 }
353 }
354
355 TEST(RtcpPacketTest, NackWithWrap) {
356 Nack nack;
357 const uint16_t kList[] = {65500, 65516, 65534, 65535, 0, 1, 3, 20, 100};
358 const uint16_t kListLength = sizeof(kList) / sizeof(kList[0]);
359 nack.From(kSenderSsrc);
360 nack.To(kRemoteSsrc);
361 nack.WithList(kList, kListLength);
362 rtc::scoped_ptr<RawPacket> packet(nack.Build());
363 RtcpPacketParser parser;
364 parser.Parse(packet->Buffer(), packet->Length());
365 EXPECT_EQ(1, parser.nack()->num_packets());
366 EXPECT_EQ(kSenderSsrc, parser.nack()->Ssrc());
367 EXPECT_EQ(kRemoteSsrc, parser.nack()->MediaSsrc());
368 EXPECT_EQ(4, parser.nack_item()->num_packets());
369 std::vector<uint16_t> seqs = parser.nack_item()->last_nack_list();
370 EXPECT_EQ(kListLength, seqs.size());
371 for (size_t i = 0; i < kListLength; ++i) {
372 EXPECT_EQ(kList[i], seqs[i]);
373 }
374 }
375
376 TEST(RtcpPacketTest, NackFragmented) {
377 Nack nack;
378 const uint16_t kList[] = {1, 100, 200, 300, 400};
379 const uint16_t kListLength = sizeof(kList) / sizeof(kList[0]);
380 nack.From(kSenderSsrc);
381 nack.To(kRemoteSsrc);
382 nack.WithList(kList, kListLength);
383
384 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback {
385 public:
386 void OnPacketReady(uint8_t* data, size_t length) override {
387 ++packets_created_;
388 RtcpPacketParser parser;
389 parser.Parse(data, length);
390 EXPECT_EQ(1, parser.nack()->num_packets());
391 EXPECT_EQ(kSenderSsrc, parser.nack()->Ssrc());
392 EXPECT_EQ(kRemoteSsrc, parser.nack()->MediaSsrc());
393 switch (packets_created_) {
394 case 1:
395 EXPECT_THAT(parser.nack_item()->last_nack_list(),
396 ElementsAre(1, 100, 200));
397 break;
398 case 2:
399 EXPECT_THAT(parser.nack_item()->last_nack_list(),
400 ElementsAre(300, 400));
401 break;
402 default:
403 ADD_FAILURE() << "Unexpected packet count: " << packets_created_;
404 }
405 }
406 int packets_created_ = 0;
407 } verifier;
408 const size_t kBufferSize = 12 + (3 * 4); // Fits common header + 3 nack items
409 uint8_t buffer[kBufferSize];
410 EXPECT_TRUE(nack.BuildExternalBuffer(buffer, kBufferSize, &verifier));
411 EXPECT_EQ(2, verifier.packets_created_);
412 }
413
414 TEST(RtcpPacketTest, NackWithTooSmallBuffer) {
415 const uint16_t kList[] = {1};
416 const size_t kMinNackBlockSize = 16;
417 Nack nack;
418 nack.From(kSenderSsrc);
419 nack.To(kRemoteSsrc);
420 nack.WithList(kList, 1);
421 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback {
422 public:
423 void OnPacketReady(uint8_t* data, size_t length) override {
424 ADD_FAILURE() << "Buffer should be too small.";
425 }
426 } verifier;
427 uint8_t buffer[kMinNackBlockSize - 1];
428 EXPECT_FALSE(
429 nack.BuildExternalBuffer(buffer, kMinNackBlockSize - 1, &verifier));
430 }
431
432 TEST(RtcpPacketTest, Rpsi) { 333 TEST(RtcpPacketTest, Rpsi) {
433 Rpsi rpsi; 334 Rpsi rpsi;
434 // 1000001 (7 bits = 1 byte in native string). 335 // 1000001 (7 bits = 1 byte in native string).
435 const uint64_t kPictureId = 0x41; 336 const uint64_t kPictureId = 0x41;
436 const uint16_t kNumberOfValidBytes = 1; 337 const uint16_t kNumberOfValidBytes = 1;
437 rpsi.WithPayloadType(100); 338 rpsi.WithPayloadType(100);
438 rpsi.WithPictureId(kPictureId); 339 rpsi.WithPictureId(kPictureId);
439 340
440 rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); 341 rtc::scoped_ptr<RawPacket> packet(rpsi.Build());
441 RtcpPacketParser parser; 342 RtcpPacketParser parser;
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 EXPECT_TRUE(xr.WithDlrr(&dlrr)); 936 EXPECT_TRUE(xr.WithDlrr(&dlrr));
1036 EXPECT_FALSE(xr.WithDlrr(&dlrr)); 937 EXPECT_FALSE(xr.WithDlrr(&dlrr));
1037 938
1038 VoipMetric voip_metric; 939 VoipMetric voip_metric;
1039 for (int i = 0; i < kMaxBlocks; ++i) 940 for (int i = 0; i < kMaxBlocks; ++i)
1040 EXPECT_TRUE(xr.WithVoipMetric(&voip_metric)); 941 EXPECT_TRUE(xr.WithVoipMetric(&voip_metric));
1041 EXPECT_FALSE(xr.WithVoipMetric(&voip_metric)); 942 EXPECT_FALSE(xr.WithVoipMetric(&voip_metric));
1042 } 943 }
1043 944
1044 } // namespace webrtc 945 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698