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/test/rtcp_packet_parser.h" | 15 #include "webrtc/test/rtcp_packet_parser.h" |
16 | 16 |
17 using testing::ElementsAre; | 17 using testing::ElementsAre; |
18 using webrtc::rtcp::Bye; | 18 using webrtc::rtcp::Bye; |
19 | 19 |
20 namespace webrtc { | 20 namespace webrtc { |
21 namespace { | 21 namespace { |
22 const uint32_t kSenderSsrc = 0x12345678; | 22 const uint32_t kSenderSsrc = 0x12345678; |
23 const uint32_t kCsrc1 = 0x22232425; | 23 const uint32_t kCsrc1 = 0x22232425; |
24 const uint32_t kCsrc2 = 0x33343536; | 24 const uint32_t kCsrc2 = 0x33343536; |
25 } // namespace | 25 } // namespace |
26 | 26 |
27 TEST(RtcpPacketByeTest, CreateAndParseWithoutReason) { | 27 TEST(RtcpPacketByeTest, CreateAndParseWithoutReason) { |
28 Bye bye; | 28 Bye bye; |
29 bye.SetSenderSsrc(kSenderSsrc); | 29 bye.From(kSenderSsrc); |
30 | 30 |
31 rtc::Buffer raw = bye.Build(); | 31 rtc::Buffer raw = bye.Build(); |
32 Bye parsed_bye; | 32 Bye parsed_bye; |
33 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye)); | 33 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye)); |
34 | 34 |
35 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); | 35 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); |
36 EXPECT_TRUE(parsed_bye.csrcs().empty()); | 36 EXPECT_TRUE(parsed_bye.csrcs().empty()); |
37 EXPECT_TRUE(parsed_bye.reason().empty()); | 37 EXPECT_TRUE(parsed_bye.reason().empty()); |
38 } | 38 } |
39 | 39 |
40 TEST(RtcpPacketByeTest, CreateAndParseWithCsrcs) { | 40 TEST(RtcpPacketByeTest, CreateAndParseWithCsrcs) { |
41 Bye bye; | 41 Bye bye; |
42 bye.SetSenderSsrc(kSenderSsrc); | 42 bye.From(kSenderSsrc); |
43 EXPECT_TRUE(bye.SetCsrcs({kCsrc1, kCsrc2})); | 43 EXPECT_TRUE(bye.WithCsrc(kCsrc1)); |
| 44 EXPECT_TRUE(bye.WithCsrc(kCsrc2)); |
44 EXPECT_TRUE(bye.reason().empty()); | 45 EXPECT_TRUE(bye.reason().empty()); |
45 | 46 |
46 rtc::Buffer raw = bye.Build(); | 47 rtc::Buffer raw = bye.Build(); |
47 Bye parsed_bye; | 48 Bye parsed_bye; |
48 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye)); | 49 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye)); |
49 | 50 |
50 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); | 51 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); |
51 EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2)); | 52 EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2)); |
52 EXPECT_TRUE(parsed_bye.reason().empty()); | 53 EXPECT_TRUE(parsed_bye.reason().empty()); |
53 } | 54 } |
54 | 55 |
55 TEST(RtcpPacketByeTest, CreateAndParseWithCsrcsAndAReason) { | 56 TEST(RtcpPacketByeTest, CreateAndParseWithCsrcsAndAReason) { |
56 Bye bye; | 57 Bye bye; |
57 const std::string kReason = "Some Reason"; | 58 const std::string kReason = "Some Reason"; |
58 | 59 |
59 bye.SetSenderSsrc(kSenderSsrc); | 60 bye.From(kSenderSsrc); |
60 EXPECT_TRUE(bye.SetCsrcs({kCsrc1, kCsrc2})); | 61 EXPECT_TRUE(bye.WithCsrc(kCsrc1)); |
61 bye.SetReason(kReason); | 62 EXPECT_TRUE(bye.WithCsrc(kCsrc2)); |
| 63 bye.WithReason(kReason); |
62 | 64 |
63 rtc::Buffer raw = bye.Build(); | 65 rtc::Buffer raw = bye.Build(); |
64 Bye parsed_bye; | 66 Bye parsed_bye; |
65 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye)); | 67 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye)); |
66 | 68 |
67 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); | 69 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); |
68 EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2)); | 70 EXPECT_THAT(parsed_bye.csrcs(), ElementsAre(kCsrc1, kCsrc2)); |
69 EXPECT_EQ(kReason, parsed_bye.reason()); | 71 EXPECT_EQ(kReason, parsed_bye.reason()); |
70 } | 72 } |
71 | 73 |
72 TEST(RtcpPacketByeTest, CreateWithTooManyCsrcs) { | 74 TEST(RtcpPacketByeTest, CreateWithTooManyCsrcs) { |
73 Bye bye; | 75 Bye bye; |
74 bye.SetSenderSsrc(kSenderSsrc); | 76 bye.From(kSenderSsrc); |
75 const int kMaxCsrcs = (1 << 5) - 2; // 5 bit len, first item is sender SSRC. | 77 const int kMaxCsrcs = (1 << 5) - 2; // 5 bit len, first item is sender SSRC. |
76 EXPECT_TRUE(bye.SetCsrcs(std::vector<uint32_t>(kMaxCsrcs, kCsrc1))); | 78 for (int i = 0; i < kMaxCsrcs; ++i) { |
77 EXPECT_FALSE(bye.SetCsrcs(std::vector<uint32_t>(kMaxCsrcs + 1, kCsrc1))); | 79 EXPECT_TRUE(bye.WithCsrc(i)); |
| 80 } |
| 81 EXPECT_FALSE(bye.WithCsrc(kMaxCsrcs)); |
78 } | 82 } |
79 | 83 |
80 TEST(RtcpPacketByeTest, CreateAndParseWithAReason) { | 84 TEST(RtcpPacketByeTest, CreateAndParseWithAReason) { |
81 Bye bye; | 85 Bye bye; |
82 const std::string kReason = "Some Random Reason"; | 86 const std::string kReason = "Some Random Reason"; |
83 | 87 |
84 bye.SetSenderSsrc(kSenderSsrc); | 88 bye.From(kSenderSsrc); |
85 bye.SetReason(kReason); | 89 bye.WithReason(kReason); |
86 | 90 |
87 rtc::Buffer raw = bye.Build(); | 91 rtc::Buffer raw = bye.Build(); |
88 Bye parsed_bye; | 92 Bye parsed_bye; |
89 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye)); | 93 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye)); |
90 | 94 |
91 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); | 95 EXPECT_EQ(kSenderSsrc, parsed_bye.sender_ssrc()); |
92 EXPECT_TRUE(parsed_bye.csrcs().empty()); | 96 EXPECT_TRUE(parsed_bye.csrcs().empty()); |
93 EXPECT_EQ(kReason, parsed_bye.reason()); | 97 EXPECT_EQ(kReason, parsed_bye.reason()); |
94 } | 98 } |
95 | 99 |
96 TEST(RtcpPacketByeTest, CreateAndParseWithReasons) { | 100 TEST(RtcpPacketByeTest, CreateAndParseWithReasons) { |
97 // Test that packet creation/parsing behave with reasons of different length | 101 // Test that packet creation/parsing behave with reasons of different length |
98 // both when it require padding and when it does not. | 102 // both when it require padding and when it does not. |
99 for (size_t reminder = 0; reminder < 4; ++reminder) { | 103 for (size_t reminder = 0; reminder < 4; ++reminder) { |
100 const std::string kReason(4 + reminder, 'a' + reminder); | 104 const std::string kReason(4 + reminder, 'a' + reminder); |
101 Bye bye; | 105 Bye bye; |
102 bye.SetSenderSsrc(kSenderSsrc); | 106 bye.From(kSenderSsrc); |
103 bye.SetReason(kReason); | 107 bye.WithReason(kReason); |
104 | 108 |
105 rtc::Buffer raw = bye.Build(); | 109 rtc::Buffer raw = bye.Build(); |
106 Bye parsed_bye; | 110 Bye parsed_bye; |
107 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye)); | 111 EXPECT_TRUE(test::ParseSinglePacket(raw, &parsed_bye)); |
108 | 112 |
109 EXPECT_EQ(kReason, parsed_bye.reason()); | 113 EXPECT_EQ(kReason, parsed_bye.reason()); |
110 } | 114 } |
111 } | 115 } |
112 | 116 |
113 TEST(RtcpPacketByeTest, ParseEmptyPacket) { | 117 TEST(RtcpPacketByeTest, ParseEmptyPacket) { |
114 uint8_t kEmptyPacket[] = {0x80, Bye::kPacketType, 0, 0}; | 118 uint8_t kEmptyPacket[] = {0x80, Bye::kPacketType, 0, 0}; |
115 Bye parsed_bye; | 119 Bye parsed_bye; |
116 EXPECT_TRUE(test::ParseSinglePacket(kEmptyPacket, &parsed_bye)); | 120 EXPECT_TRUE(test::ParseSinglePacket(kEmptyPacket, &parsed_bye)); |
117 EXPECT_EQ(0u, parsed_bye.sender_ssrc()); | 121 EXPECT_EQ(0u, parsed_bye.sender_ssrc()); |
118 EXPECT_TRUE(parsed_bye.csrcs().empty()); | 122 EXPECT_TRUE(parsed_bye.csrcs().empty()); |
119 EXPECT_TRUE(parsed_bye.reason().empty()); | 123 EXPECT_TRUE(parsed_bye.reason().empty()); |
120 } | 124 } |
121 | 125 |
122 TEST(RtcpPacketByeTest, ParseFailOnInvalidSrcCount) { | 126 TEST(RtcpPacketByeTest, ParseFailOnInvalidSrcCount) { |
123 Bye bye; | 127 Bye bye; |
124 bye.SetSenderSsrc(kSenderSsrc); | 128 bye.From(kSenderSsrc); |
125 | 129 |
126 rtc::Buffer raw = bye.Build(); | 130 rtc::Buffer raw = bye.Build(); |
127 raw[0]++; // Damage the packet: increase ssrc count by one. | 131 raw[0]++; // Damage the packet: increase ssrc count by one. |
128 | 132 |
129 Bye parsed_bye; | 133 Bye parsed_bye; |
130 EXPECT_FALSE(test::ParseSinglePacket(raw, &parsed_bye)); | 134 EXPECT_FALSE(test::ParseSinglePacket(raw, &parsed_bye)); |
131 } | 135 } |
132 | 136 |
133 TEST(RtcpPacketByeTest, ParseFailOnInvalidReasonLength) { | 137 TEST(RtcpPacketByeTest, ParseFailOnInvalidReasonLength) { |
134 Bye bye; | 138 Bye bye; |
135 bye.SetSenderSsrc(kSenderSsrc); | 139 bye.From(kSenderSsrc); |
136 bye.SetReason("18 characters long"); | 140 bye.WithReason("18 characters long"); |
137 | 141 |
138 rtc::Buffer raw = bye.Build(); | 142 rtc::Buffer raw = bye.Build(); |
139 // Damage the packet: decrease payload size by 4 bytes | 143 // Damage the packet: decrease payload size by 4 bytes |
140 raw[3]--; | 144 raw[3]--; |
141 raw.SetSize(raw.size() - 4); | 145 raw.SetSize(raw.size() - 4); |
142 | 146 |
143 Bye parsed_bye; | 147 Bye parsed_bye; |
144 EXPECT_FALSE(test::ParseSinglePacket(raw, &parsed_bye)); | 148 EXPECT_FALSE(test::ParseSinglePacket(raw, &parsed_bye)); |
145 } | 149 } |
146 | 150 |
147 } // namespace webrtc | 151 } // namespace webrtc |
OLD | NEW |