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/dlrr.h" | 11 #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr.h" |
12 | 12 |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 15 #include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
16 | 16 |
17 using webrtc::rtcp::Dlrr; | 17 using webrtc::rtcp::Dlrr; |
| 18 using webrtc::rtcp::ReceiveTimeInfo; |
18 | 19 |
19 namespace webrtc { | 20 namespace webrtc { |
20 namespace { | 21 namespace { |
21 | |
22 const uint32_t kSsrc = 0x12345678; | 22 const uint32_t kSsrc = 0x12345678; |
23 const uint32_t kLastRR = 0x23344556; | 23 const uint32_t kLastRR = 0x23344556; |
24 const uint32_t kDelay = 0x33343536; | 24 const uint32_t kDelay = 0x33343536; |
25 const uint8_t kBlock[] = {0x05, 0x00, 0x00, 0x03, 0x12, 0x34, 0x56, 0x78, | 25 const uint8_t kBlock[] = {0x05, 0x00, 0x00, 0x03, 0x12, 0x34, 0x56, 0x78, |
26 0x23, 0x34, 0x45, 0x56, 0x33, 0x34, 0x35, 0x36}; | 26 0x23, 0x34, 0x45, 0x56, 0x33, 0x34, 0x35, 0x36}; |
27 const size_t kBlockSizeBytes = sizeof(kBlock); | 27 const size_t kBlockSizeBytes = sizeof(kBlock); |
| 28 } // namespace |
28 | 29 |
29 TEST(RtcpPacketDlrrTest, Empty) { | 30 TEST(RtcpPacketDlrrTest, Empty) { |
30 Dlrr dlrr; | 31 Dlrr dlrr; |
31 | 32 |
32 EXPECT_EQ(0u, dlrr.BlockLength()); | 33 EXPECT_EQ(0u, dlrr.BlockLength()); |
33 } | 34 } |
34 | 35 |
35 TEST(RtcpPacketDlrrTest, Create) { | 36 TEST(RtcpPacketDlrrTest, Create) { |
36 Dlrr dlrr; | 37 Dlrr dlrr; |
37 EXPECT_TRUE(dlrr.WithDlrrItem(kSsrc, kLastRR, kDelay)); | 38 EXPECT_TRUE(dlrr.WithDlrrItem(kSsrc, kLastRR, kDelay)); |
38 | 39 |
39 ASSERT_EQ(kBlockSizeBytes, dlrr.BlockLength()); | 40 ASSERT_EQ(kBlockSizeBytes, dlrr.BlockLength()); |
40 uint8_t buffer[kBlockSizeBytes]; | 41 uint8_t buffer[kBlockSizeBytes]; |
41 | 42 |
42 dlrr.Create(buffer); | 43 dlrr.Create(buffer); |
43 EXPECT_EQ(0, memcmp(buffer, kBlock, kBlockSizeBytes)); | 44 EXPECT_EQ(0, memcmp(buffer, kBlock, kBlockSizeBytes)); |
44 } | 45 } |
45 | 46 |
46 TEST(RtcpPacketDlrrTest, Parse) { | 47 TEST(RtcpPacketDlrrTest, Parse) { |
47 Dlrr dlrr; | 48 Dlrr dlrr; |
48 uint16_t block_length = ByteReader<uint16_t>::ReadBigEndian(&kBlock[2]); | 49 uint16_t block_length = ByteReader<uint16_t>::ReadBigEndian(&kBlock[2]); |
49 EXPECT_TRUE(dlrr.Parse(kBlock, block_length)); | 50 EXPECT_TRUE(dlrr.Parse(kBlock, block_length)); |
50 | 51 |
51 EXPECT_EQ(1u, dlrr.sub_blocks().size()); | 52 EXPECT_EQ(1u, dlrr.sub_blocks().size()); |
52 const Dlrr::SubBlock& block = dlrr.sub_blocks().front(); | 53 const ReceiveTimeInfo& block = dlrr.sub_blocks().front(); |
53 EXPECT_EQ(kSsrc, block.ssrc); | 54 EXPECT_EQ(kSsrc, block.ssrc); |
54 EXPECT_EQ(kLastRR, block.last_rr); | 55 EXPECT_EQ(kLastRR, block.last_rr); |
55 EXPECT_EQ(kDelay, block.delay_since_last_rr); | 56 EXPECT_EQ(kDelay, block.delay_since_last_rr); |
56 } | 57 } |
57 | 58 |
58 TEST(RtcpPacketDlrrTest, ParseFailsOnBadSize) { | 59 TEST(RtcpPacketDlrrTest, ParseFailsOnBadSize) { |
59 const size_t kBigBufferSize = 0x100; // More than enough. | 60 const size_t kBigBufferSize = 0x100; // More than enough. |
60 uint8_t buffer[kBigBufferSize]; | 61 uint8_t buffer[kBigBufferSize]; |
61 buffer[0] = Dlrr::kBlockType; | 62 buffer[0] = Dlrr::kBlockType; |
62 buffer[1] = 0; // Reserved. | 63 buffer[1] = 0; // Reserved. |
(...skipping 27 matching lines...) Expand all Loading... |
90 ASSERT_LE(used_buffer_size, kBufferSize); | 91 ASSERT_LE(used_buffer_size, kBufferSize); |
91 dlrr.Create(buffer); | 92 dlrr.Create(buffer); |
92 | 93 |
93 // Parse. | 94 // Parse. |
94 Dlrr parsed; | 95 Dlrr parsed; |
95 uint16_t block_length = ByteReader<uint16_t>::ReadBigEndian(&buffer[2]); | 96 uint16_t block_length = ByteReader<uint16_t>::ReadBigEndian(&buffer[2]); |
96 EXPECT_EQ(used_buffer_size, (block_length + 1) * 4u); | 97 EXPECT_EQ(used_buffer_size, (block_length + 1) * 4u); |
97 EXPECT_TRUE(parsed.Parse(buffer, block_length)); | 98 EXPECT_TRUE(parsed.Parse(buffer, block_length)); |
98 EXPECT_TRUE(parsed.sub_blocks().size() == Dlrr::kMaxNumberOfDlrrItems); | 99 EXPECT_TRUE(parsed.sub_blocks().size() == Dlrr::kMaxNumberOfDlrrItems); |
99 } | 100 } |
100 | |
101 } // namespace | |
102 } // namespace webrtc | 101 } // namespace webrtc |
OLD | NEW |