OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 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 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 rtc::Buffer packet = sdes.Build(); | 88 rtc::Buffer packet = sdes.Build(); |
89 Sdes parsed; | 89 Sdes parsed; |
90 EXPECT_TRUE(test::ParseSinglePacket(packet, &parsed)); | 90 EXPECT_TRUE(test::ParseSinglePacket(packet, &parsed)); |
91 | 91 |
92 EXPECT_EQ(1u, parsed.chunks().size()); | 92 EXPECT_EQ(1u, parsed.chunks().size()); |
93 EXPECT_EQ(kSenderSsrc, parsed.chunks()[0].ssrc); | 93 EXPECT_EQ(kSenderSsrc, parsed.chunks()[0].ssrc); |
94 EXPECT_EQ("", parsed.chunks()[0].cname); | 94 EXPECT_EQ("", parsed.chunks()[0].cname); |
95 } | 95 } |
96 | 96 |
97 TEST(RtcpPacketSdesTest, ParseSkipsNonCNameField) { | 97 TEST(RtcpPacketSdesTest, ParseSkipsNonCNameField) { |
98 const char kName[] = "abc"; | 98 const uint8_t kName[] = "abc"; |
99 const std::string kCname = "de"; | 99 const uint8_t kCname[] = "de"; |
100 const uint8_t kValidPacket[] = {0x81, 202, 0x00, 0x04, | 100 const uint8_t kValidPacket[] = {0x81, 202, 0x00, 0x04, |
101 0x12, 0x34, 0x56, 0x78, | 101 0x12, 0x34, 0x56, 0x78, |
102 kNameTag, 3, kName[0], kName[1], kName[2], | 102 kNameTag, 3, kName[0], kName[1], kName[2], |
103 kCnameTag, 2, kCname[0], kCname[1], | 103 kCnameTag, 2, kCname[0], kCname[1], |
104 kTerminatorTag, kPadding, kPadding}; | 104 kTerminatorTag, kPadding, kPadding}; |
105 // Sanity checks packet was assembled correctly. | 105 // Sanity checks packet was assembled correctly. |
106 ASSERT_EQ(0u, sizeof(kValidPacket) % 4); | 106 ASSERT_EQ(0u, sizeof(kValidPacket) % 4); |
107 ASSERT_EQ(kValidPacket[3] + 1u, sizeof(kValidPacket) / 4); | 107 ASSERT_EQ(kValidPacket[3] + 1u, sizeof(kValidPacket) / 4); |
108 | 108 |
109 Sdes parsed; | 109 Sdes parsed; |
110 EXPECT_TRUE(test::ParseSinglePacket(kValidPacket, &parsed)); | 110 EXPECT_TRUE(test::ParseSinglePacket(kValidPacket, &parsed)); |
111 | 111 |
112 EXPECT_EQ(1u, parsed.chunks().size()); | 112 EXPECT_EQ(1u, parsed.chunks().size()); |
113 EXPECT_EQ(kSenderSsrc, parsed.chunks()[0].ssrc); | 113 EXPECT_EQ(kSenderSsrc, parsed.chunks()[0].ssrc); |
114 EXPECT_EQ(kCname, parsed.chunks()[0].cname); | 114 EXPECT_EQ("de", parsed.chunks()[0].cname); |
115 } | 115 } |
116 | 116 |
117 TEST(RtcpPacketSdesTest, ParseSkipsChunksWithoutCName) { | 117 TEST(RtcpPacketSdesTest, ParseSkipsChunksWithoutCName) { |
118 const char kName[] = "ab"; | 118 const uint8_t kName[] = "ab"; |
119 const char kEmail[] = "de"; | 119 const uint8_t kEmail[] = "de"; |
120 const std::string kCname = "def"; | 120 const uint8_t kCname[] = "def"; |
121 const uint8_t kPacket[] = {0x82, 202, 0x00, 0x07, | 121 const uint8_t kPacket[] = {0x82, 202, 0x00, 0x07, |
122 0x12, 0x34, 0x56, 0x78, // 1st chunk. | 122 0x12, 0x34, 0x56, 0x78, // 1st chunk. |
123 kNameTag, 3, kName[0], kName[1], kName[2], | 123 kNameTag, 3, kName[0], kName[1], kName[2], |
124 kEmailTag, 2, kEmail[0], kEmail[1], | 124 kEmailTag, 2, kEmail[0], kEmail[1], |
125 kTerminatorTag, kPadding, kPadding, | 125 kTerminatorTag, kPadding, kPadding, |
126 0x23, 0x45, 0x67, 0x89, // 2nd chunk. | 126 0x23, 0x45, 0x67, 0x89, // 2nd chunk. |
127 kCnameTag, 3, kCname[0], kCname[1], kCname[2], | 127 kCnameTag, 3, kCname[0], kCname[1], kCname[2], |
128 kTerminatorTag, kPadding, kPadding}; | 128 kTerminatorTag, kPadding, kPadding}; |
129 // Sanity checks packet was assembled correctly. | 129 // Sanity checks packet was assembled correctly. |
130 ASSERT_EQ(0u, sizeof(kPacket) % 4); | 130 ASSERT_EQ(0u, sizeof(kPacket) % 4); |
131 ASSERT_EQ(kPacket[3] + 1u, sizeof(kPacket) / 4); | 131 ASSERT_EQ(kPacket[3] + 1u, sizeof(kPacket) / 4); |
132 | 132 |
133 Sdes parsed; | 133 Sdes parsed; |
134 EXPECT_TRUE(test::ParseSinglePacket(kPacket, &parsed)); | 134 EXPECT_TRUE(test::ParseSinglePacket(kPacket, &parsed)); |
135 ASSERT_EQ(1u, parsed.chunks().size()); | 135 ASSERT_EQ(1u, parsed.chunks().size()); |
136 EXPECT_EQ(0x23456789u, parsed.chunks()[0].ssrc); | 136 EXPECT_EQ(0x23456789u, parsed.chunks()[0].ssrc); |
137 EXPECT_EQ(kCname, parsed.chunks()[0].cname); | 137 EXPECT_EQ("def", parsed.chunks()[0].cname); |
138 } | 138 } |
139 | 139 |
140 TEST(RtcpPacketSdesTest, ParseFailsWithoutChunkItemTerminator) { | 140 TEST(RtcpPacketSdesTest, ParseFailsWithoutChunkItemTerminator) { |
141 const char kName[] = "abc"; | 141 const uint8_t kName[] = "abc"; |
142 const char kCname[] = "d"; | 142 const uint8_t kCname[] = "d"; |
143 // No place for next chunk item. | 143 // No place for next chunk item. |
144 const uint8_t kInvalidPacket[] = {0x81, 202, 0x00, 0x03, | 144 const uint8_t kInvalidPacket[] = {0x81, 202, 0x00, 0x03, |
145 0x12, 0x34, 0x56, 0x78, | 145 0x12, 0x34, 0x56, 0x78, |
146 kNameTag, 3, kName[0], kName[1], kName[2], | 146 kNameTag, 3, kName[0], kName[1], kName[2], |
147 kCnameTag, 1, kCname[0]}; | 147 kCnameTag, 1, kCname[0]}; |
148 // Sanity checks packet was assembled correctly. | 148 // Sanity checks packet was assembled correctly. |
149 ASSERT_EQ(0u, sizeof(kInvalidPacket) % 4); | 149 ASSERT_EQ(0u, sizeof(kInvalidPacket) % 4); |
150 ASSERT_EQ(kInvalidPacket[3] + 1u, sizeof(kInvalidPacket) / 4); | 150 ASSERT_EQ(kInvalidPacket[3] + 1u, sizeof(kInvalidPacket) / 4); |
151 | 151 |
152 Sdes parsed; | 152 Sdes parsed; |
153 EXPECT_FALSE(test::ParseSinglePacket(kInvalidPacket, &parsed)); | 153 EXPECT_FALSE(test::ParseSinglePacket(kInvalidPacket, &parsed)); |
154 } | 154 } |
155 | 155 |
156 TEST(RtcpPacketSdesTest, ParseFailsWithDamagedChunkItem) { | 156 TEST(RtcpPacketSdesTest, ParseFailsWithDamagedChunkItem) { |
157 const char kName[] = "ab"; | 157 const uint8_t kName[] = "ab"; |
158 const char kCname[] = "d"; | 158 const uint8_t kCname[] = "d"; |
159 // Next chunk item has non-terminator type, but not the size. | 159 // Next chunk item has non-terminator type, but not the size. |
160 const uint8_t kInvalidPacket[] = {0x81, 202, 0x00, 0x03, | 160 const uint8_t kInvalidPacket[] = {0x81, 202, 0x00, 0x03, |
161 0x12, 0x34, 0x56, 0x78, | 161 0x12, 0x34, 0x56, 0x78, |
162 kNameTag, 2, kName[0], kName[1], | 162 kNameTag, 2, kName[0], kName[1], |
163 kCnameTag, 1, kCname[0], | 163 kCnameTag, 1, kCname[0], |
164 kEmailTag}; | 164 kEmailTag}; |
165 // Sanity checks packet was assembled correctly. | 165 // Sanity checks packet was assembled correctly. |
166 ASSERT_EQ(0u, sizeof(kInvalidPacket) % 4); | 166 ASSERT_EQ(0u, sizeof(kInvalidPacket) % 4); |
167 ASSERT_EQ(kInvalidPacket[3] + 1u, sizeof(kInvalidPacket) / 4); | 167 ASSERT_EQ(kInvalidPacket[3] + 1u, sizeof(kInvalidPacket) / 4); |
168 | 168 |
169 Sdes parsed; | 169 Sdes parsed; |
170 EXPECT_FALSE(test::ParseSinglePacket(kInvalidPacket, &parsed)); | 170 EXPECT_FALSE(test::ParseSinglePacket(kInvalidPacket, &parsed)); |
171 } | 171 } |
172 | 172 |
173 TEST(RtcpPacketSdesTest, ParseFailsWithTooLongChunkItem) { | 173 TEST(RtcpPacketSdesTest, ParseFailsWithTooLongChunkItem) { |
174 const char kName[] = "abc"; | 174 const uint8_t kName[] = "abc"; |
175 const char kCname[] = "d"; | 175 const uint8_t kCname[] = "d"; |
176 // Last chunk item has length that goes beyond the buffer end. | 176 // Last chunk item has length that goes beyond the buffer end. |
177 const uint8_t kInvalidPacket[] = {0x81, 202, 0x00, 0x03, | 177 const uint8_t kInvalidPacket[] = {0x81, 202, 0x00, 0x03, |
178 0x12, 0x34, 0x56, 0x78, | 178 0x12, 0x34, 0x56, 0x78, |
179 kNameTag, 3, kName[0], kName[1], kName[2], | 179 kNameTag, 3, kName[0], kName[1], kName[2], |
180 kCnameTag, 2, kCname[0]}; | 180 kCnameTag, 2, kCname[0]}; |
181 // Sanity checks packet was assembled correctly. | 181 // Sanity checks packet was assembled correctly. |
182 ASSERT_EQ(0u, sizeof(kInvalidPacket) % 4); | 182 ASSERT_EQ(0u, sizeof(kInvalidPacket) % 4); |
183 ASSERT_EQ(kInvalidPacket[3] + 1u, sizeof(kInvalidPacket) / 4); | 183 ASSERT_EQ(kInvalidPacket[3] + 1u, sizeof(kInvalidPacket) / 4); |
184 | 184 |
185 Sdes parsed; | 185 Sdes parsed; |
186 EXPECT_FALSE(test::ParseSinglePacket(kInvalidPacket, &parsed)); | 186 EXPECT_FALSE(test::ParseSinglePacket(kInvalidPacket, &parsed)); |
187 } | 187 } |
188 | 188 |
189 TEST(RtcpPacketSdesTest, ParseFailsWithTwoCNames) { | 189 TEST(RtcpPacketSdesTest, ParseFailsWithTwoCNames) { |
190 const char kCname1[] = "a"; | 190 const uint8_t kCname1[] = "a"; |
191 const char kCname2[] = "de"; | 191 const uint8_t kCname2[] = "de"; |
192 const uint8_t kInvalidPacket[] = {0x81, 202, 0x00, 0x03, | 192 const uint8_t kInvalidPacket[] = {0x81, 202, 0x00, 0x03, |
193 0x12, 0x34, 0x56, 0x78, | 193 0x12, 0x34, 0x56, 0x78, |
194 kCnameTag, 1, kCname1[0], | 194 kCnameTag, 1, kCname1[0], |
195 kCnameTag, 2, kCname2[0], kCname2[1], | 195 kCnameTag, 2, kCname2[0], kCname2[1], |
196 kTerminatorTag}; | 196 kTerminatorTag}; |
197 // Sanity checks packet was assembled correctly. | 197 // Sanity checks packet was assembled correctly. |
198 ASSERT_EQ(0u, sizeof(kInvalidPacket) % 4); | 198 ASSERT_EQ(0u, sizeof(kInvalidPacket) % 4); |
199 ASSERT_EQ(kInvalidPacket[3] + 1u, sizeof(kInvalidPacket) / 4); | 199 ASSERT_EQ(kInvalidPacket[3] + 1u, sizeof(kInvalidPacket) / 4); |
200 | 200 |
201 Sdes parsed; | 201 Sdes parsed; |
202 EXPECT_FALSE(test::ParseSinglePacket(kInvalidPacket, &parsed)); | 202 EXPECT_FALSE(test::ParseSinglePacket(kInvalidPacket, &parsed)); |
203 } | 203 } |
204 | 204 |
205 TEST(RtcpPacketSdesTest, ParseFailsWithTooLittleSpaceForNextChunk) { | 205 TEST(RtcpPacketSdesTest, ParseFailsWithTooLittleSpaceForNextChunk) { |
206 const char kCname[] = "a"; | 206 const uint8_t kCname[] = "a"; |
207 const char kEmail[] = "de"; | 207 const uint8_t kEmail[] = "de"; |
208 // Two chunks are promised in the header, but no place for the second chunk. | 208 // Two chunks are promised in the header, but no place for the second chunk. |
209 const uint8_t kInvalidPacket[] = {0x82, 202, 0x00, 0x04, | 209 const uint8_t kInvalidPacket[] = {0x82, 202, 0x00, 0x04, |
210 0x12, 0x34, 0x56, 0x78, // 1st chunk. | 210 0x12, 0x34, 0x56, 0x78, // 1st chunk. |
211 kCnameTag, 1, kCname[0], | 211 kCnameTag, 1, kCname[0], |
212 kEmailTag, 2, kEmail[0], kEmail[1], | 212 kEmailTag, 2, kEmail[0], kEmail[1], |
213 kTerminatorTag, | 213 kTerminatorTag, |
214 0x23, 0x45, 0x67, 0x89}; // 2nd chunk. | 214 0x23, 0x45, 0x67, 0x89}; // 2nd chunk. |
215 // Sanity checks packet was assembled correctly. | 215 // Sanity checks packet was assembled correctly. |
216 ASSERT_EQ(0u, sizeof(kInvalidPacket) % 4); | 216 ASSERT_EQ(0u, sizeof(kInvalidPacket) % 4); |
217 ASSERT_EQ(kInvalidPacket[3] + 1u, sizeof(kInvalidPacket) / 4); | 217 ASSERT_EQ(kInvalidPacket[3] + 1u, sizeof(kInvalidPacket) / 4); |
(...skipping 22 matching lines...) Expand all Loading... |
240 | 240 |
241 EXPECT_EQ(middle.BlockLength(), destination.BlockLength()); | 241 EXPECT_EQ(middle.BlockLength(), destination.BlockLength()); |
242 | 242 |
243 EXPECT_EQ(2u, destination.chunks().size()); | 243 EXPECT_EQ(2u, destination.chunks().size()); |
244 EXPECT_EQ(kSenderSsrc, destination.chunks()[0].ssrc); | 244 EXPECT_EQ(kSenderSsrc, destination.chunks()[0].ssrc); |
245 EXPECT_EQ(kAlice, destination.chunks()[0].cname); | 245 EXPECT_EQ(kAlice, destination.chunks()[0].cname); |
246 EXPECT_EQ(kSenderSsrc + 1, destination.chunks()[1].ssrc); | 246 EXPECT_EQ(kSenderSsrc + 1, destination.chunks()[1].ssrc); |
247 EXPECT_EQ(kBob, destination.chunks()[1].cname); | 247 EXPECT_EQ(kBob, destination.chunks()[1].cname); |
248 } | 248 } |
249 } // namespace webrtc | 249 } // namespace webrtc |
OLD | NEW |