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

Side by Side Diff: webrtc/modules/rtp_rtcp/source/rtcp_packet/bye_unittest.cc

Issue 1430013003: rtcp::Bye packet moved to own file and got a Parse function (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Added empty Bye packet support. Created 5 years, 1 month 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
(Empty)
1 /*
2 * Copyright (c) 2015 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
11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h"
12
13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h"
16
17 using ::testing::ElementsAre;
18
19 using webrtc::rtcp::Bye;
20 using webrtc::rtcp::RawPacket;
21 using webrtc::RTCPUtility::RtcpCommonHeader;
22 using webrtc::RTCPUtility::RtcpParseCommonHeader;
23
24 namespace webrtc {
25 namespace {
26
27 const uint32_t kSenderSsrc = 0x12345678;
28 const uint32_t kCsrc1 = 0x22232425;
29 const uint32_t kCsrc2 = 0x33343536;
30
31 class RtcpPacketByeTest : public ::testing::Test {
32 protected:
33 void BuildPacket() { packet = bye.Build().Pass(); }
34 void ParsePacket() {
35 RtcpCommonHeader header;
36 EXPECT_TRUE(
37 RtcpParseCommonHeader(packet->Buffer(), packet->Length(), &header));
38 // Check that there is exactly one RTCP packet in the buffer.
39 EXPECT_EQ(header.BlockSize(), packet->Length());
40 EXPECT_TRUE(parsed_bye.Parse(
41 header, packet->Buffer() + RtcpCommonHeader::kHeaderSizeBytes));
42 }
43
44 Bye bye;
45 rtc::scoped_ptr<RawPacket> packet;
46 Bye parsed_bye;
47 };
48
49 TEST_F(RtcpPacketByeTest, Bye) {
50 bye.From(kSenderSsrc);
51
52 BuildPacket();
53 ParsePacket();
54
55 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc());
åsapersson 2015/11/20 12:11:44 maybe check that csrcs and reason empty
danilchap 2015/11/20 12:44:03 Done.
56 }
57
58 TEST_F(RtcpPacketByeTest, WithCsrcs) {
59 bye.From(kSenderSsrc);
60 EXPECT_TRUE(bye.WithCsrc(kCsrc1));
61 EXPECT_TRUE(bye.WithCsrc(kCsrc2));
62 EXPECT_TRUE(bye.reason().empty());
63
64 BuildPacket();
65 EXPECT_EQ(16u, packet->Length()); // Header: 4, 3xSRCs: 12, Reason: 0.
66
67 ParsePacket();
68
69 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc());
70 EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2));
71 EXPECT_TRUE(parsed_bye.reason().empty());
72 }
73
74 TEST_F(RtcpPacketByeTest, WithCsrcsAndReason) {
75 const std::string kReason = "Some Reason";
76
77 bye.From(kSenderSsrc);
78 EXPECT_TRUE(bye.WithCsrc(kCsrc1));
79 EXPECT_TRUE(bye.WithCsrc(kCsrc2));
80 bye.WithReason(kReason);
81
82 BuildPacket();
83 EXPECT_EQ(28u, packet->Length()); // Header: 4, 3xSRCs: 12, Reason: 12.
84
85 ParsePacket();
86
87 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc());
88 EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2));
89 EXPECT_EQ(kReason, parsed_bye.reason());
90 }
91
92 TEST_F(RtcpPacketByeTest, WithTooManyCsrcs) {
93 bye.From(kSenderSsrc);
94 const int kMaxCsrcs = (1 << 5) - 2; // 5 bit len, first item is sender SSRC.
95 for (int i = 0; i < kMaxCsrcs; ++i) {
96 EXPECT_TRUE(bye.WithCsrc(i));
97 }
98 EXPECT_FALSE(bye.WithCsrc(kMaxCsrcs));
99 }
100
101 TEST_F(RtcpPacketByeTest, WithAReason) {
102 const std::string kReason = "Some Random Reason";
103
104 bye.From(kSenderSsrc);
105 bye.WithReason(kReason);
106
107 BuildPacket();
108 ParsePacket();
109
110 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc());
åsapersson 2015/11/20 12:11:45 maybe check that csrcs empty
danilchap 2015/11/20 12:44:03 Done.
111 EXPECT_EQ(kReason, parsed_bye.reason());
112 }
113
114 TEST_F(RtcpPacketByeTest, WithReasons) {
115 // Test that packet creation/parsing behave with reasons of different length
116 // both when it require padding and when it does not.
117 for (size_t reminder = 0; reminder < 4; ++reminder) {
118 const std::string kReason(4 + reminder, 'a' + reminder);
119 bye.From(kSenderSsrc);
120 bye.WithReason(kReason);
121
122 BuildPacket();
123 ParsePacket();
124
125 EXPECT_EQ(kReason, parsed_bye.reason());
126 }
127 }
128
129 TEST_F(RtcpPacketByeTest, ParseEmptyPacket) {
130 RtcpCommonHeader header;
131 header.packet_type = Bye::kPacketType;
132 header.count_or_format = 0;
133 header.payload_size_bytes = 0;
134 uint8_t empty_payload[0];
135
136 EXPECT_TRUE(parsed_bye.Parse(header, empty_payload));
137 EXPECT_EQ(0u, parsed_bye.sender_ssrc());
138 }
139
140 TEST_F(RtcpPacketByeTest, ParseFailOnInvalidSrcCount) {
141 bye.From(kSenderSsrc);
142
143 BuildPacket();
144
145 RtcpCommonHeader header;
146 RtcpParseCommonHeader(packet->Buffer(), packet->Length(), &header);
147 header.count_or_format = 2; // Lie there are 2 ssrcs, not one.
148
149 EXPECT_FALSE(parsed_bye.Parse(
150 header, packet->Buffer() + RtcpCommonHeader::kHeaderSizeBytes));
151 }
152
153 TEST_F(RtcpPacketByeTest, ParseFailOnInvalidReasonLength) {
154 bye.From(kSenderSsrc);
155 bye.WithReason("18 characters long");
156
157 BuildPacket();
158
159 RtcpCommonHeader header;
160 RtcpParseCommonHeader(packet->Buffer(), packet->Length(), &header);
161 header.payload_size_bytes -= 4; // Payload is usually 32bit aligned.
162
163 EXPECT_FALSE(parsed_bye.Parse(
164 header, packet->Buffer() + RtcpCommonHeader::kHeaderSizeBytes));
165 }
166
167 } // namespace
168 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.cc ('k') | webrtc/modules/rtp_rtcp/source/rtcp_packet_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698