| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 * This file includes unit tests for the RtcpPacket. | 10 * This file includes unit tests for the RtcpPacket. |
| 11 */ | 11 */ |
| 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 | 15 |
| 16 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" | 16 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" |
| 17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" | 17 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h" |
| 18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" | 18 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h" |
| 19 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" | 19 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" |
| 20 #include "webrtc/test/rtcp_packet_parser.h" | 20 #include "webrtc/test/rtcp_packet_parser.h" |
| 21 | 21 |
| 22 using ::testing::ElementsAre; | 22 using ::testing::ElementsAre; |
| 23 | 23 |
| 24 using webrtc::rtcp::App; | 24 using webrtc::rtcp::App; |
| 25 using webrtc::rtcp::Bye; | 25 using webrtc::rtcp::Bye; |
| 26 using webrtc::rtcp::RawPacket; | 26 using webrtc::rtcp::RawPacket; |
| 27 using webrtc::rtcp::ReceiverReport; | 27 using webrtc::rtcp::ReceiverReport; |
| 28 using webrtc::rtcp::ReportBlock; | 28 using webrtc::rtcp::ReportBlock; |
| 29 using webrtc::rtcp::Rpsi; | |
| 30 using webrtc::rtcp::Sdes; | 29 using webrtc::rtcp::Sdes; |
| 31 using webrtc::rtcp::SenderReport; | 30 using webrtc::rtcp::SenderReport; |
| 32 using webrtc::test::RtcpPacketParser; | 31 using webrtc::test::RtcpPacketParser; |
| 33 | 32 |
| 34 namespace webrtc { | 33 namespace webrtc { |
| 35 | 34 |
| 36 const uint32_t kSenderSsrc = 0x12345678; | 35 const uint32_t kSenderSsrc = 0x12345678; |
| 37 const uint32_t kRemoteSsrc = 0x23456789; | 36 const uint32_t kRemoteSsrc = 0x23456789; |
| 38 | 37 |
| 39 TEST(RtcpPacketTest, Sr) { | 38 TEST(RtcpPacketTest, Sr) { |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 | 201 |
| 203 rtc::scoped_ptr<RawPacket> packet(sdes.Build()); | 202 rtc::scoped_ptr<RawPacket> packet(sdes.Build()); |
| 204 RtcpPacketParser parser; | 203 RtcpPacketParser parser; |
| 205 parser.Parse(packet->Buffer(), packet->Length()); | 204 parser.Parse(packet->Buffer(), packet->Length()); |
| 206 EXPECT_EQ(1, parser.sdes()->num_packets()); | 205 EXPECT_EQ(1, parser.sdes()->num_packets()); |
| 207 EXPECT_EQ(1, parser.sdes_chunk()->num_packets()); | 206 EXPECT_EQ(1, parser.sdes_chunk()->num_packets()); |
| 208 EXPECT_EQ(kSenderSsrc, parser.sdes_chunk()->Ssrc()); | 207 EXPECT_EQ(kSenderSsrc, parser.sdes_chunk()->Ssrc()); |
| 209 EXPECT_EQ("", parser.sdes_chunk()->Cname()); | 208 EXPECT_EQ("", parser.sdes_chunk()->Cname()); |
| 210 } | 209 } |
| 211 | 210 |
| 212 TEST(RtcpPacketTest, Rpsi) { | |
| 213 Rpsi rpsi; | |
| 214 // 1000001 (7 bits = 1 byte in native string). | |
| 215 const uint64_t kPictureId = 0x41; | |
| 216 const uint16_t kNumberOfValidBytes = 1; | |
| 217 rpsi.WithPayloadType(100); | |
| 218 rpsi.WithPictureId(kPictureId); | |
| 219 | |
| 220 rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); | |
| 221 RtcpPacketParser parser; | |
| 222 parser.Parse(packet->Buffer(), packet->Length()); | |
| 223 EXPECT_EQ(100, parser.rpsi()->PayloadType()); | |
| 224 EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); | |
| 225 EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); | |
| 226 } | |
| 227 | |
| 228 TEST(RtcpPacketTest, RpsiWithTwoByteNativeString) { | |
| 229 Rpsi rpsi; | |
| 230 // |1 0000001 (7 bits = 1 byte in native string). | |
| 231 const uint64_t kPictureId = 0x81; | |
| 232 const uint16_t kNumberOfValidBytes = 2; | |
| 233 rpsi.WithPictureId(kPictureId); | |
| 234 | |
| 235 rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); | |
| 236 RtcpPacketParser parser; | |
| 237 parser.Parse(packet->Buffer(), packet->Length()); | |
| 238 EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); | |
| 239 EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); | |
| 240 } | |
| 241 | |
| 242 TEST(RtcpPacketTest, RpsiWithThreeByteNativeString) { | |
| 243 Rpsi rpsi; | |
| 244 // 10000|00 100000|0 1000000 (7 bits = 1 byte in native string). | |
| 245 const uint64_t kPictureId = 0x102040; | |
| 246 const uint16_t kNumberOfValidBytes = 3; | |
| 247 rpsi.WithPictureId(kPictureId); | |
| 248 | |
| 249 rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); | |
| 250 RtcpPacketParser parser; | |
| 251 parser.Parse(packet->Buffer(), packet->Length()); | |
| 252 EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); | |
| 253 EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); | |
| 254 } | |
| 255 | |
| 256 TEST(RtcpPacketTest, RpsiWithFourByteNativeString) { | |
| 257 Rpsi rpsi; | |
| 258 // 1000|001 00001|01 100001|1 1000010 (7 bits = 1 byte in native string). | |
| 259 const uint64_t kPictureId = 0x84161C2; | |
| 260 const uint16_t kNumberOfValidBytes = 4; | |
| 261 rpsi.WithPictureId(kPictureId); | |
| 262 | |
| 263 rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); | |
| 264 RtcpPacketParser parser; | |
| 265 parser.Parse(packet->Buffer(), packet->Length()); | |
| 266 EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); | |
| 267 EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); | |
| 268 } | |
| 269 | |
| 270 TEST(RtcpPacketTest, RpsiWithMaxPictureId) { | |
| 271 Rpsi rpsi; | |
| 272 // 1 1111111| 1111111 1|111111 11|11111 111|1111 1111|111 11111| | |
| 273 // 11 111111|1 1111111 (7 bits = 1 byte in native string). | |
| 274 const uint64_t kPictureId = 0xffffffffffffffff; | |
| 275 const uint16_t kNumberOfValidBytes = 10; | |
| 276 rpsi.WithPictureId(kPictureId); | |
| 277 | |
| 278 rtc::scoped_ptr<RawPacket> packet(rpsi.Build()); | |
| 279 RtcpPacketParser parser; | |
| 280 parser.Parse(packet->Buffer(), packet->Length()); | |
| 281 EXPECT_EQ(kNumberOfValidBytes * 8, parser.rpsi()->NumberOfValidBits()); | |
| 282 EXPECT_EQ(kPictureId, parser.rpsi()->PictureId()); | |
| 283 } | |
| 284 | 211 |
| 285 TEST(RtcpPacketTest, BuildWithTooSmallBuffer) { | 212 TEST(RtcpPacketTest, BuildWithTooSmallBuffer) { |
| 286 ReportBlock rb; | 213 ReportBlock rb; |
| 287 ReceiverReport rr; | 214 ReceiverReport rr; |
| 288 rr.From(kSenderSsrc); | 215 rr.From(kSenderSsrc); |
| 289 EXPECT_TRUE(rr.WithReportBlock(rb)); | 216 EXPECT_TRUE(rr.WithReportBlock(rb)); |
| 290 | 217 |
| 291 const size_t kRrLength = 8; | 218 const size_t kRrLength = 8; |
| 292 const size_t kReportBlockLength = 24; | 219 const size_t kReportBlockLength = 24; |
| 293 | 220 |
| 294 // No packet. | 221 // No packet. |
| 295 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback { | 222 class Verifier : public rtcp::RtcpPacket::PacketReadyCallback { |
| 296 void OnPacketReady(uint8_t* data, size_t length) override { | 223 void OnPacketReady(uint8_t* data, size_t length) override { |
| 297 ADD_FAILURE() << "Packet should not fit within max size."; | 224 ADD_FAILURE() << "Packet should not fit within max size."; |
| 298 } | 225 } |
| 299 } verifier; | 226 } verifier; |
| 300 const size_t kBufferSize = kRrLength + kReportBlockLength - 1; | 227 const size_t kBufferSize = kRrLength + kReportBlockLength - 1; |
| 301 uint8_t buffer[kBufferSize]; | 228 uint8_t buffer[kBufferSize]; |
| 302 EXPECT_FALSE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier)); | 229 EXPECT_FALSE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier)); |
| 303 } | 230 } |
| 304 } // namespace webrtc | 231 } // namespace webrtc |
| OLD | NEW |