blob: 17e6617fb0fa7c87d4d6d3fcaffad6ae0fd09205 [file] [log] [blame]
eladalona52722f2017-06-26 11:23:54 -07001/*
2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
3 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Jonas Olssona4d87372019-07-05 19:08:33 +020011#include "call/rtp_rtcp_demuxer_helper.h"
12
Yves Gerey3e707812018-11-28 16:47:49 +010013#include <string.h>
Jonas Olssona4d87372019-07-05 19:08:33 +020014
eladalona52722f2017-06-26 11:23:54 -070015#include <cstdio>
16
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "modules/rtp_rtcp/source/rtcp_packet/bye.h"
18#include "modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h"
19#include "modules/rtp_rtcp/source/rtcp_packet/extended_reports.h"
20#include "modules/rtp_rtcp/source/rtcp_packet/pli.h"
21#include "modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h"
22#include "modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
23#include "modules/rtp_rtcp/source/rtcp_packet/sender_report.h"
24#include "rtc_base/arraysize.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020025#include "rtc_base/buffer.h"
26#include "test/gtest.h"
eladalona52722f2017-06-26 11:23:54 -070027
28namespace webrtc {
29
30namespace {
31constexpr uint32_t kSsrc = 8374;
32} // namespace
33
34TEST(RtpRtcpDemuxerHelperTest, ParseRtcpPacketSenderSsrc_ByePacket) {
35 webrtc::rtcp::Bye rtcp_packet;
36 rtcp_packet.SetSenderSsrc(kSsrc);
37 rtc::Buffer raw_packet = rtcp_packet.Build();
38
Danil Chapovalovb9b146c2018-06-15 12:28:07 +020039 absl::optional<uint32_t> ssrc = ParseRtcpPacketSenderSsrc(raw_packet);
eladalona52722f2017-06-26 11:23:54 -070040 EXPECT_EQ(ssrc, kSsrc);
41}
42
43TEST(RtpRtcpDemuxerHelperTest,
44 ParseRtcpPacketSenderSsrc_ExtendedReportsPacket) {
45 webrtc::rtcp::ExtendedReports rtcp_packet;
46 rtcp_packet.SetSenderSsrc(kSsrc);
47 rtc::Buffer raw_packet = rtcp_packet.Build();
48
Danil Chapovalovb9b146c2018-06-15 12:28:07 +020049 absl::optional<uint32_t> ssrc = ParseRtcpPacketSenderSsrc(raw_packet);
eladalona52722f2017-06-26 11:23:54 -070050 EXPECT_EQ(ssrc, kSsrc);
51}
52
53TEST(RtpRtcpDemuxerHelperTest, ParseRtcpPacketSenderSsrc_PsfbPacket) {
54 webrtc::rtcp::Pli rtcp_packet; // Psfb is abstract; use a subclass.
55 rtcp_packet.SetSenderSsrc(kSsrc);
56 rtc::Buffer raw_packet = rtcp_packet.Build();
57
Danil Chapovalovb9b146c2018-06-15 12:28:07 +020058 absl::optional<uint32_t> ssrc = ParseRtcpPacketSenderSsrc(raw_packet);
eladalona52722f2017-06-26 11:23:54 -070059 EXPECT_EQ(ssrc, kSsrc);
60}
61
62TEST(RtpRtcpDemuxerHelperTest, ParseRtcpPacketSenderSsrc_ReceiverReportPacket) {
63 webrtc::rtcp::ReceiverReport rtcp_packet;
64 rtcp_packet.SetSenderSsrc(kSsrc);
65 rtc::Buffer raw_packet = rtcp_packet.Build();
66
Danil Chapovalovb9b146c2018-06-15 12:28:07 +020067 absl::optional<uint32_t> ssrc = ParseRtcpPacketSenderSsrc(raw_packet);
eladalona52722f2017-06-26 11:23:54 -070068 EXPECT_EQ(ssrc, kSsrc);
69}
70
71TEST(RtpRtcpDemuxerHelperTest, ParseRtcpPacketSenderSsrc_RtpfbPacket) {
72 // Rtpfb is abstract; use a subclass.
73 webrtc::rtcp::RapidResyncRequest rtcp_packet;
74 rtcp_packet.SetSenderSsrc(kSsrc);
75 rtc::Buffer raw_packet = rtcp_packet.Build();
76
Danil Chapovalovb9b146c2018-06-15 12:28:07 +020077 absl::optional<uint32_t> ssrc = ParseRtcpPacketSenderSsrc(raw_packet);
eladalona52722f2017-06-26 11:23:54 -070078 EXPECT_EQ(ssrc, kSsrc);
79}
80
81TEST(RtpRtcpDemuxerHelperTest, ParseRtcpPacketSenderSsrc_SenderReportPacket) {
82 webrtc::rtcp::SenderReport rtcp_packet;
83 rtcp_packet.SetSenderSsrc(kSsrc);
84 rtc::Buffer raw_packet = rtcp_packet.Build();
85
Danil Chapovalovb9b146c2018-06-15 12:28:07 +020086 absl::optional<uint32_t> ssrc = ParseRtcpPacketSenderSsrc(raw_packet);
eladalona52722f2017-06-26 11:23:54 -070087 EXPECT_EQ(ssrc, kSsrc);
88}
89
90TEST(RtpRtcpDemuxerHelperTest, ParseRtcpPacketSenderSsrc_MalformedRtcpPacket) {
91 uint8_t garbage[100];
92 memset(&garbage[0], 0, arraysize(garbage));
93
Danil Chapovalovb9b146c2018-06-15 12:28:07 +020094 absl::optional<uint32_t> ssrc = ParseRtcpPacketSenderSsrc(garbage);
eladalona52722f2017-06-26 11:23:54 -070095 EXPECT_FALSE(ssrc);
96}
97
98TEST(RtpRtcpDemuxerHelperTest,
99 ParseRtcpPacketSenderSsrc_RtcpMessageWithoutSenderSsrc) {
100 webrtc::rtcp::ExtendedJitterReport rtcp_packet; // Has no sender SSRC.
101 rtc::Buffer raw_packet = rtcp_packet.Build();
102
Danil Chapovalovb9b146c2018-06-15 12:28:07 +0200103 absl::optional<uint32_t> ssrc = ParseRtcpPacketSenderSsrc(raw_packet);
eladalona52722f2017-06-26 11:23:54 -0700104 EXPECT_FALSE(ssrc);
105}
106
107TEST(RtpRtcpDemuxerHelperTest, ParseRtcpPacketSenderSsrc_TruncatedRtcpMessage) {
108 webrtc::rtcp::Bye rtcp_packet;
109 rtcp_packet.SetSenderSsrc(kSsrc);
110 rtc::Buffer raw_packet = rtcp_packet.Build();
111
112 constexpr size_t rtcp_length_bytes = 8;
113 ASSERT_EQ(rtcp_length_bytes, raw_packet.size());
114
Danil Chapovalovb9b146c2018-06-15 12:28:07 +0200115 absl::optional<uint32_t> ssrc = ParseRtcpPacketSenderSsrc(
eladalona52722f2017-06-26 11:23:54 -0700116 rtc::ArrayView<const uint8_t>(raw_packet.data(), rtcp_length_bytes - 1));
117 EXPECT_FALSE(ssrc);
118}
119
120} // namespace webrtc