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

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

Issue 1579213005: [rtp_rtcp] rtcp::Xr moved into own file and renamed to ExtendedReports on the way (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 11 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) 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;
27 using webrtc::rtcp::RawPacket; 26 using webrtc::rtcp::RawPacket;
28 using webrtc::rtcp::ReceiverReport; 27 using webrtc::rtcp::ReceiverReport;
29 using webrtc::rtcp::ReportBlock; 28 using webrtc::rtcp::ReportBlock;
30 using webrtc::rtcp::Rpsi; 29 using webrtc::rtcp::Rpsi;
31 using webrtc::rtcp::Rrtr;
32 using webrtc::rtcp::Sdes; 30 using webrtc::rtcp::Sdes;
33 using webrtc::rtcp::SenderReport; 31 using webrtc::rtcp::SenderReport;
34 using webrtc::rtcp::VoipMetric;
35 using webrtc::rtcp::Xr;
36 using webrtc::test::RtcpPacketParser; 32 using webrtc::test::RtcpPacketParser;
37 33
38 namespace webrtc { 34 namespace webrtc {
39 35
40 const uint32_t kSenderSsrc = 0x12345678; 36 const uint32_t kSenderSsrc = 0x12345678;
41 const uint32_t kRemoteSsrc = 0x23456789; 37 const uint32_t kRemoteSsrc = 0x23456789;
42 38
43 TEST(RtcpPacketTest, Sr) { 39 TEST(RtcpPacketTest, Sr) {
44 SenderReport sr; 40 SenderReport sr;
45 sr.From(kSenderSsrc); 41 sr.From(kSenderSsrc);
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 // No packet. 294 // No packet.
299 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback { 295 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback {
300 void OnPacketReady(uint8_t* data, size_t length) override { 296 void OnPacketReady(uint8_t* data, size_t length) override {
301 ADD_FAILURE() << "Packet should not fit within max size."; 297 ADD_FAILURE() << "Packet should not fit within max size.";
302 } 298 }
303 } verifier; 299 } verifier;
304 const size_t kBufferSize = kRrLength + kReportBlockLength - 1; 300 const size_t kBufferSize = kRrLength + kReportBlockLength - 1;
305 uint8_t buffer[kBufferSize]; 301 uint8_t buffer[kBufferSize];
306 EXPECT_FALSE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier)); 302 EXPECT_FALSE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier));
307 } 303 }
308
309
310 TEST(RtcpPacketTest, XrWithNoReportBlocks) {
311 Xr xr;
312 xr.From(kSenderSsrc);
313
314 rtc::scoped_ptr<RawPacket> packet(xr.Build());
315 RtcpPacketParser parser;
316 parser.Parse(packet->Buffer(), packet->Length());
317 EXPECT_EQ(1, parser.xr_header()->num_packets());
318 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
319 }
320
321 TEST(RtcpPacketTest, XrWithRrtr) {
322 Rrtr rrtr;
323 rrtr.WithNtp(NtpTime(0x11111111, 0x22222222));
324 Xr xr;
325 xr.From(kSenderSsrc);
326 EXPECT_TRUE(xr.WithRrtr(&rrtr));
327
328 rtc::scoped_ptr<RawPacket> packet(xr.Build());
329 RtcpPacketParser parser;
330 parser.Parse(packet->Buffer(), packet->Length());
331 EXPECT_EQ(1, parser.xr_header()->num_packets());
332 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
333 EXPECT_EQ(1, parser.rrtr()->num_packets());
334 EXPECT_EQ(0x11111111U, parser.rrtr()->NtpSec());
335 EXPECT_EQ(0x22222222U, parser.rrtr()->NtpFrac());
336 }
337
338 TEST(RtcpPacketTest, XrWithTwoRrtrBlocks) {
339 Rrtr rrtr1;
340 rrtr1.WithNtp(NtpTime(0x11111111, 0x22222222));
341 Rrtr rrtr2;
342 rrtr2.WithNtp(NtpTime(0x33333333, 0x44444444));
343 Xr xr;
344 xr.From(kSenderSsrc);
345 EXPECT_TRUE(xr.WithRrtr(&rrtr1));
346 EXPECT_TRUE(xr.WithRrtr(&rrtr2));
347
348 rtc::scoped_ptr<RawPacket> packet(xr.Build());
349 RtcpPacketParser parser;
350 parser.Parse(packet->Buffer(), packet->Length());
351 EXPECT_EQ(1, parser.xr_header()->num_packets());
352 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
353 EXPECT_EQ(2, parser.rrtr()->num_packets());
354 EXPECT_EQ(0x33333333U, parser.rrtr()->NtpSec());
355 EXPECT_EQ(0x44444444U, parser.rrtr()->NtpFrac());
356 }
357
358 TEST(RtcpPacketTest, XrWithDlrrWithOneSubBlock) {
359 Dlrr dlrr;
360 EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333));
361 Xr xr;
362 xr.From(kSenderSsrc);
363 EXPECT_TRUE(xr.WithDlrr(&dlrr));
364
365 rtc::scoped_ptr<RawPacket> packet(xr.Build());
366 RtcpPacketParser parser;
367 parser.Parse(packet->Buffer(), packet->Length());
368 EXPECT_EQ(1, parser.xr_header()->num_packets());
369 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
370 EXPECT_EQ(1, parser.dlrr()->num_packets());
371 EXPECT_EQ(1, parser.dlrr_items()->num_packets());
372 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0));
373 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0));
374 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0));
375 }
376
377 TEST(RtcpPacketTest, XrWithDlrrWithTwoSubBlocks) {
378 Dlrr dlrr;
379 EXPECT_TRUE(dlrr.WithDlrrItem(0x11111111, 0x22222222, 0x33333333));
380 EXPECT_TRUE(dlrr.WithDlrrItem(0x44444444, 0x55555555, 0x66666666));
381 Xr xr;
382 xr.From(kSenderSsrc);
383 EXPECT_TRUE(xr.WithDlrr(&dlrr));
384
385 rtc::scoped_ptr<RawPacket> packet(xr.Build());
386 RtcpPacketParser parser;
387 parser.Parse(packet->Buffer(), packet->Length());
388 EXPECT_EQ(1, parser.xr_header()->num_packets());
389 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
390 EXPECT_EQ(1, parser.dlrr()->num_packets());
391 EXPECT_EQ(2, parser.dlrr_items()->num_packets());
392 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0));
393 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0));
394 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0));
395 EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1));
396 EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1));
397 EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1));
398 }
399
400 TEST(RtcpPacketTest, DlrrWithTooManySubBlocks) {
401 const int kMaxItems = 100;
402 Dlrr dlrr;
403 for (int i = 0; i < kMaxItems; ++i)
404 EXPECT_TRUE(dlrr.WithDlrrItem(i, i, i));
405 EXPECT_FALSE(dlrr.WithDlrrItem(kMaxItems, kMaxItems, kMaxItems));
406 }
407
408 TEST(RtcpPacketTest, XrWithTwoDlrrBlocks) {
409 Dlrr dlrr1;
410 EXPECT_TRUE(dlrr1.WithDlrrItem(0x11111111, 0x22222222, 0x33333333));
411 Dlrr dlrr2;
412 EXPECT_TRUE(dlrr2.WithDlrrItem(0x44444444, 0x55555555, 0x66666666));
413 Xr xr;
414 xr.From(kSenderSsrc);
415 EXPECT_TRUE(xr.WithDlrr(&dlrr1));
416 EXPECT_TRUE(xr.WithDlrr(&dlrr2));
417
418 rtc::scoped_ptr<RawPacket> packet(xr.Build());
419 RtcpPacketParser parser;
420 parser.Parse(packet->Buffer(), packet->Length());
421 EXPECT_EQ(1, parser.xr_header()->num_packets());
422 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
423 EXPECT_EQ(2, parser.dlrr()->num_packets());
424 EXPECT_EQ(2, parser.dlrr_items()->num_packets());
425 EXPECT_EQ(0x11111111U, parser.dlrr_items()->Ssrc(0));
426 EXPECT_EQ(0x22222222U, parser.dlrr_items()->LastRr(0));
427 EXPECT_EQ(0x33333333U, parser.dlrr_items()->DelayLastRr(0));
428 EXPECT_EQ(0x44444444U, parser.dlrr_items()->Ssrc(1));
429 EXPECT_EQ(0x55555555U, parser.dlrr_items()->LastRr(1));
430 EXPECT_EQ(0x66666666U, parser.dlrr_items()->DelayLastRr(1));
431 }
432
433 TEST(RtcpPacketTest, XrWithVoipMetric) {
434 RTCPVoIPMetric metric;
435 metric.lossRate = 1;
436 metric.discardRate = 2;
437 metric.burstDensity = 3;
438 metric.gapDensity = 4;
439 metric.burstDuration = 0x1111;
440 metric.gapDuration = 0x2222;
441 metric.roundTripDelay = 0x3333;
442 metric.endSystemDelay = 0x4444;
443 metric.signalLevel = 5;
444 metric.noiseLevel = 6;
445 metric.RERL = 7;
446 metric.Gmin = 8;
447 metric.Rfactor = 9;
448 metric.extRfactor = 10;
449 metric.MOSLQ = 11;
450 metric.MOSCQ = 12;
451 metric.RXconfig = 13;
452 metric.JBnominal = 0x5555;
453 metric.JBmax = 0x6666;
454 metric.JBabsMax = 0x7777;
455 VoipMetric metric_block;
456 metric_block.To(kRemoteSsrc);
457 metric_block.WithVoipMetric(metric);
458 Xr xr;
459 xr.From(kSenderSsrc);
460 EXPECT_TRUE(xr.WithVoipMetric(&metric_block));
461
462 rtc::scoped_ptr<RawPacket> packet(xr.Build());
463 RtcpPacketParser parser;
464 parser.Parse(packet->Buffer(), packet->Length());
465 EXPECT_EQ(1, parser.xr_header()->num_packets());
466 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
467 EXPECT_EQ(1, parser.voip_metric()->num_packets());
468 EXPECT_EQ(kRemoteSsrc, parser.voip_metric()->Ssrc());
469 EXPECT_EQ(1, parser.voip_metric()->LossRate());
470 EXPECT_EQ(2, parser.voip_metric()->DiscardRate());
471 EXPECT_EQ(3, parser.voip_metric()->BurstDensity());
472 EXPECT_EQ(4, parser.voip_metric()->GapDensity());
473 EXPECT_EQ(0x1111, parser.voip_metric()->BurstDuration());
474 EXPECT_EQ(0x2222, parser.voip_metric()->GapDuration());
475 EXPECT_EQ(0x3333, parser.voip_metric()->RoundTripDelay());
476 EXPECT_EQ(0x4444, parser.voip_metric()->EndSystemDelay());
477 EXPECT_EQ(5, parser.voip_metric()->SignalLevel());
478 EXPECT_EQ(6, parser.voip_metric()->NoiseLevel());
479 EXPECT_EQ(7, parser.voip_metric()->Rerl());
480 EXPECT_EQ(8, parser.voip_metric()->Gmin());
481 EXPECT_EQ(9, parser.voip_metric()->Rfactor());
482 EXPECT_EQ(10, parser.voip_metric()->ExtRfactor());
483 EXPECT_EQ(11, parser.voip_metric()->MosLq());
484 EXPECT_EQ(12, parser.voip_metric()->MosCq());
485 EXPECT_EQ(13, parser.voip_metric()->RxConfig());
486 EXPECT_EQ(0x5555, parser.voip_metric()->JbNominal());
487 EXPECT_EQ(0x6666, parser.voip_metric()->JbMax());
488 EXPECT_EQ(0x7777, parser.voip_metric()->JbAbsMax());
489 }
490
491 TEST(RtcpPacketTest, XrWithMultipleReportBlocks) {
492 Rrtr rrtr;
493 Dlrr dlrr;
494 EXPECT_TRUE(dlrr.WithDlrrItem(1, 2, 3));
495 VoipMetric metric;
496 Xr xr;
497 xr.From(kSenderSsrc);
498 EXPECT_TRUE(xr.WithRrtr(&rrtr));
499 EXPECT_TRUE(xr.WithDlrr(&dlrr));
500 EXPECT_TRUE(xr.WithVoipMetric(&metric));
501
502 rtc::scoped_ptr<RawPacket> packet(xr.Build());
503 RtcpPacketParser parser;
504 parser.Parse(packet->Buffer(), packet->Length());
505 EXPECT_EQ(1, parser.xr_header()->num_packets());
506 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
507 EXPECT_EQ(1, parser.rrtr()->num_packets());
508 EXPECT_EQ(1, parser.dlrr()->num_packets());
509 EXPECT_EQ(1, parser.dlrr_items()->num_packets());
510 EXPECT_EQ(1, parser.voip_metric()->num_packets());
511 }
512
513 TEST(RtcpPacketTest, DlrrWithoutItemNotIncludedInPacket) {
514 Rrtr rrtr;
515 Dlrr dlrr;
516 VoipMetric metric;
517 Xr xr;
518 xr.From(kSenderSsrc);
519 EXPECT_TRUE(xr.WithRrtr(&rrtr));
520 EXPECT_TRUE(xr.WithDlrr(&dlrr));
521 EXPECT_TRUE(xr.WithVoipMetric(&metric));
522
523 rtc::scoped_ptr<RawPacket> packet(xr.Build());
524 RtcpPacketParser parser;
525 parser.Parse(packet->Buffer(), packet->Length());
526 EXPECT_EQ(1, parser.xr_header()->num_packets());
527 EXPECT_EQ(kSenderSsrc, parser.xr_header()->Ssrc());
528 EXPECT_EQ(1, parser.rrtr()->num_packets());
529 EXPECT_EQ(0, parser.dlrr()->num_packets());
530 EXPECT_EQ(1, parser.voip_metric()->num_packets());
531 }
532
533 TEST(RtcpPacketTest, XrWithTooManyBlocks) {
534 const int kMaxBlocks = 50;
535 Xr xr;
536
537 Rrtr rrtr;
538 for (int i = 0; i < kMaxBlocks; ++i)
539 EXPECT_TRUE(xr.WithRrtr(&rrtr));
540 EXPECT_FALSE(xr.WithRrtr(&rrtr));
541
542 Dlrr dlrr;
543 for (int i = 0; i < kMaxBlocks; ++i)
544 EXPECT_TRUE(xr.WithDlrr(&dlrr));
545 EXPECT_FALSE(xr.WithDlrr(&dlrr));
546
547 VoipMetric voip_metric;
548 for (int i = 0; i < kMaxBlocks; ++i)
549 EXPECT_TRUE(xr.WithVoipMetric(&voip_metric));
550 EXPECT_FALSE(xr.WithVoipMetric(&voip_metric));
551 }
552
553 } // namespace webrtc 304 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698