OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 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/rtcp_packet/bye.h" | 11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" |
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 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" | 15 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" |
16 | 16 |
17 using ::testing::ElementsAre; | 17 using ::testing::ElementsAre; |
18 | 18 |
19 using webrtc::rtcp::Bye; | 19 using webrtc::rtcp::Bye; |
20 using webrtc::rtcp::RawPacket; | |
21 using webrtc::RTCPUtility::RtcpCommonHeader; | 20 using webrtc::RTCPUtility::RtcpCommonHeader; |
22 using webrtc::RTCPUtility::RtcpParseCommonHeader; | 21 using webrtc::RTCPUtility::RtcpParseCommonHeader; |
23 | 22 |
24 namespace webrtc { | 23 namespace webrtc { |
25 namespace { | 24 namespace { |
26 | 25 |
27 const uint32_t kSenderSsrc = 0x12345678; | 26 const uint32_t kSenderSsrc = 0x12345678; |
28 const uint32_t kCsrc1 = 0x22232425; | 27 const uint32_t kCsrc1 = 0x22232425; |
29 const uint32_t kCsrc2 = 0x33343536; | 28 const uint32_t kCsrc2 = 0x33343536; |
30 | 29 |
31 class RtcpPacketByeTest : public ::testing::Test { | 30 class RtcpPacketByeTest : public ::testing::Test { |
32 protected: | 31 protected: |
33 void BuildPacket() { packet = bye.Build(); } | 32 void BuildPacket() { packet = bye.Build(); } |
34 void ParsePacket() { | 33 void ParsePacket() { |
35 RtcpCommonHeader header; | 34 RtcpCommonHeader header; |
36 EXPECT_TRUE( | 35 EXPECT_TRUE(RtcpParseCommonHeader(packet.data(), packet.size(), &header)); |
37 RtcpParseCommonHeader(packet->Buffer(), packet->Length(), &header)); | |
38 // Check that there is exactly one RTCP packet in the buffer. | 36 // Check that there is exactly one RTCP packet in the buffer. |
39 EXPECT_EQ(header.BlockSize(), packet->Length()); | 37 EXPECT_EQ(header.BlockSize(), packet.size()); |
40 EXPECT_TRUE(parsed_bye.Parse( | 38 EXPECT_TRUE(parsed_bye.Parse( |
41 header, packet->Buffer() + RtcpCommonHeader::kHeaderSizeBytes)); | 39 header, packet.data() + RtcpCommonHeader::kHeaderSizeBytes)); |
42 } | 40 } |
43 | 41 |
44 Bye bye; | 42 Bye bye; |
45 rtc::scoped_ptr<RawPacket> packet; | 43 rtc::Buffer packet; |
46 Bye parsed_bye; | 44 Bye parsed_bye; |
47 }; | 45 }; |
48 | 46 |
49 TEST_F(RtcpPacketByeTest, Bye) { | 47 TEST_F(RtcpPacketByeTest, Bye) { |
50 bye.From(kSenderSsrc); | 48 bye.From(kSenderSsrc); |
51 | 49 |
52 BuildPacket(); | 50 BuildPacket(); |
53 ParsePacket(); | 51 ParsePacket(); |
54 | 52 |
55 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); | 53 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); |
56 EXPECT_TRUE(parsed_bye.csrcs().empty()); | 54 EXPECT_TRUE(parsed_bye.csrcs().empty()); |
57 EXPECT_TRUE(parsed_bye.reason().empty()); | 55 EXPECT_TRUE(parsed_bye.reason().empty()); |
58 } | 56 } |
59 | 57 |
60 TEST_F(RtcpPacketByeTest, WithCsrcs) { | 58 TEST_F(RtcpPacketByeTest, WithCsrcs) { |
61 bye.From(kSenderSsrc); | 59 bye.From(kSenderSsrc); |
62 EXPECT_TRUE(bye.WithCsrc(kCsrc1)); | 60 EXPECT_TRUE(bye.WithCsrc(kCsrc1)); |
63 EXPECT_TRUE(bye.WithCsrc(kCsrc2)); | 61 EXPECT_TRUE(bye.WithCsrc(kCsrc2)); |
64 EXPECT_TRUE(bye.reason().empty()); | 62 EXPECT_TRUE(bye.reason().empty()); |
65 | 63 |
66 BuildPacket(); | 64 BuildPacket(); |
67 EXPECT_EQ(16u, packet->Length()); // Header: 4, 3xSRCs: 12, Reason: 0. | 65 EXPECT_EQ(16u, packet.size()); // Header: 4, 3xSRCs: 12, Reason: 0. |
68 | 66 |
69 ParsePacket(); | 67 ParsePacket(); |
70 | 68 |
71 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); | 69 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); |
72 EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2)); | 70 EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2)); |
73 EXPECT_TRUE(parsed_bye.reason().empty()); | 71 EXPECT_TRUE(parsed_bye.reason().empty()); |
74 } | 72 } |
75 | 73 |
76 TEST_F(RtcpPacketByeTest, WithCsrcsAndReason) { | 74 TEST_F(RtcpPacketByeTest, WithCsrcsAndReason) { |
77 const std::string kReason = "Some Reason"; | 75 const std::string kReason = "Some Reason"; |
78 | 76 |
79 bye.From(kSenderSsrc); | 77 bye.From(kSenderSsrc); |
80 EXPECT_TRUE(bye.WithCsrc(kCsrc1)); | 78 EXPECT_TRUE(bye.WithCsrc(kCsrc1)); |
81 EXPECT_TRUE(bye.WithCsrc(kCsrc2)); | 79 EXPECT_TRUE(bye.WithCsrc(kCsrc2)); |
82 bye.WithReason(kReason); | 80 bye.WithReason(kReason); |
83 | 81 |
84 BuildPacket(); | 82 BuildPacket(); |
85 EXPECT_EQ(28u, packet->Length()); // Header: 4, 3xSRCs: 12, Reason: 12. | 83 EXPECT_EQ(28u, packet.size()); // Header: 4, 3xSRCs: 12, Reason: 12. |
86 | 84 |
87 ParsePacket(); | 85 ParsePacket(); |
88 | 86 |
89 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); | 87 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); |
90 EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2)); | 88 EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2)); |
91 EXPECT_EQ(kReason, parsed_bye.reason()); | 89 EXPECT_EQ(kReason, parsed_bye.reason()); |
92 } | 90 } |
93 | 91 |
94 TEST_F(RtcpPacketByeTest, WithTooManyCsrcs) { | 92 TEST_F(RtcpPacketByeTest, WithTooManyCsrcs) { |
95 bye.From(kSenderSsrc); | 93 bye.From(kSenderSsrc); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 EXPECT_TRUE(parsed_bye.csrcs().empty()); | 139 EXPECT_TRUE(parsed_bye.csrcs().empty()); |
142 EXPECT_TRUE(parsed_bye.reason().empty()); | 140 EXPECT_TRUE(parsed_bye.reason().empty()); |
143 } | 141 } |
144 | 142 |
145 TEST_F(RtcpPacketByeTest, ParseFailOnInvalidSrcCount) { | 143 TEST_F(RtcpPacketByeTest, ParseFailOnInvalidSrcCount) { |
146 bye.From(kSenderSsrc); | 144 bye.From(kSenderSsrc); |
147 | 145 |
148 BuildPacket(); | 146 BuildPacket(); |
149 | 147 |
150 RtcpCommonHeader header; | 148 RtcpCommonHeader header; |
151 RtcpParseCommonHeader(packet->Buffer(), packet->Length(), &header); | 149 RtcpParseCommonHeader(packet.data(), packet.size(), &header); |
152 header.count_or_format = 2; // Lie there are 2 ssrcs, not one. | 150 header.count_or_format = 2; // Lie there are 2 ssrcs, not one. |
153 | 151 |
154 EXPECT_FALSE(parsed_bye.Parse( | 152 EXPECT_FALSE(parsed_bye.Parse( |
155 header, packet->Buffer() + RtcpCommonHeader::kHeaderSizeBytes)); | 153 header, packet.data() + RtcpCommonHeader::kHeaderSizeBytes)); |
156 } | 154 } |
157 | 155 |
158 TEST_F(RtcpPacketByeTest, ParseFailOnInvalidReasonLength) { | 156 TEST_F(RtcpPacketByeTest, ParseFailOnInvalidReasonLength) { |
159 bye.From(kSenderSsrc); | 157 bye.From(kSenderSsrc); |
160 bye.WithReason("18 characters long"); | 158 bye.WithReason("18 characters long"); |
161 | 159 |
162 BuildPacket(); | 160 BuildPacket(); |
163 | 161 |
164 RtcpCommonHeader header; | 162 RtcpCommonHeader header; |
165 RtcpParseCommonHeader(packet->Buffer(), packet->Length(), &header); | 163 RtcpParseCommonHeader(packet.data(), packet.size(), &header); |
166 header.payload_size_bytes -= 4; // Payload is usually 32bit aligned. | 164 header.payload_size_bytes -= 4; // Payload is usually 32bit aligned. |
167 | 165 |
168 EXPECT_FALSE(parsed_bye.Parse( | 166 EXPECT_FALSE(parsed_bye.Parse( |
169 header, packet->Buffer() + RtcpCommonHeader::kHeaderSizeBytes)); | 167 header, packet.data() + RtcpCommonHeader::kHeaderSizeBytes)); |
170 } | 168 } |
171 | 169 |
172 } // namespace | 170 } // namespace |
173 } // namespace webrtc | 171 } // namespace webrtc |
OLD | NEW |