1 /*
2 * Copyright (c) 2011 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 "testsupport/packet_reader.h"
12
13 #include "gtest/gtest.h"
14 #include "testsupport/unittest_utils.h"
15
16 namespace webrtc {
17 namespace test {
18
19 class PacketReaderTest: public PacketRelatedTest {
20 protected:
PacketReaderTest()21 PacketReaderTest() {}
~PacketReaderTest()22 virtual ~PacketReaderTest() {}
SetUp()23 void SetUp() {
24 reader_ = new PacketReader();
25 }
TearDown()26 void TearDown() {
27 delete reader_;
28 }
VerifyPacketData(int expected_length,int actual_length,WebRtc_UWord8 * original_data_pointer,WebRtc_UWord8 * new_data_pointer)29 void VerifyPacketData(int expected_length,
30 int actual_length,
31 WebRtc_UWord8* original_data_pointer,
32 WebRtc_UWord8* new_data_pointer) {
33 EXPECT_EQ(expected_length, actual_length);
34 EXPECT_EQ(*original_data_pointer, *new_data_pointer);
35 EXPECT_EQ(0, memcmp(original_data_pointer, new_data_pointer,
36 actual_length));
37 }
38 PacketReader* reader_;
39 };
40
41 // Test lack of initialization
TEST_F(PacketReaderTest,Uninitialized)42 TEST_F(PacketReaderTest, Uninitialized) {
43 WebRtc_UWord8* data_pointer = NULL;
44 EXPECT_EQ(-1, reader_->NextPacket(&data_pointer));
45 EXPECT_EQ(NULL, data_pointer);
46 }
47
TEST_F(PacketReaderTest,InitializeZeroLengthArgument)48 TEST_F(PacketReaderTest, InitializeZeroLengthArgument) {
49 reader_->InitializeReading(packet_data_, 0, kPacketSizeInBytes);
50 ASSERT_EQ(0, reader_->NextPacket(&packet_data_pointer_));
51 }
52
53 // Test with something smaller than one packet
TEST_F(PacketReaderTest,NormalSmallData)54 TEST_F(PacketReaderTest, NormalSmallData) {
55 const int kDataLengthInBytes = 1499;
56 WebRtc_UWord8 data[kDataLengthInBytes];
57 WebRtc_UWord8* data_pointer = data;
58 memset(data, 1, kDataLengthInBytes);
59
60 reader_->InitializeReading(data, kDataLengthInBytes, kPacketSizeInBytes);
61 int length_to_read = reader_->NextPacket(&data_pointer);
62 VerifyPacketData(kDataLengthInBytes, length_to_read, data, data_pointer);
63 EXPECT_EQ(0, data_pointer - data); // pointer hasn't moved
64
65 // Reading another one shall result in 0 bytes:
66 length_to_read = reader_->NextPacket(&data_pointer);
67 EXPECT_EQ(0, length_to_read);
68 EXPECT_EQ(kDataLengthInBytes, data_pointer - data);
69 }
70
71 // Test with data length that exactly matches one packet
TEST_F(PacketReaderTest,NormalOnePacketData)72 TEST_F(PacketReaderTest, NormalOnePacketData) {
73 WebRtc_UWord8 data[kPacketSizeInBytes];
74 WebRtc_UWord8* data_pointer = data;
75 memset(data, 1, kPacketSizeInBytes);
76
77 reader_->InitializeReading(data, kPacketSizeInBytes, kPacketSizeInBytes);
78 int length_to_read = reader_->NextPacket(&data_pointer);
79 VerifyPacketData(kPacketSizeInBytes, length_to_read, data, data_pointer);
80 EXPECT_EQ(0, data_pointer - data); // pointer hasn't moved
81
82 // Reading another one shall result in 0 bytes:
83 length_to_read = reader_->NextPacket(&data_pointer);
84 EXPECT_EQ(0, length_to_read);
85 EXPECT_EQ(kPacketSizeInBytes, data_pointer - data);
86 }
87
88 // Test with data length that will result in 3 packets
TEST_F(PacketReaderTest,NormalLargeData)89 TEST_F(PacketReaderTest, NormalLargeData) {
90 reader_->InitializeReading(packet_data_, kPacketDataLength,
91 kPacketSizeInBytes);
92
93 int length_to_read = reader_->NextPacket(&packet_data_pointer_);
94 VerifyPacketData(kPacketSizeInBytes, length_to_read,
95 packet1_, packet_data_pointer_);
96
97 length_to_read = reader_->NextPacket(&packet_data_pointer_);
98 VerifyPacketData(kPacketSizeInBytes, length_to_read,
99 packet2_, packet_data_pointer_);
100
101 length_to_read = reader_->NextPacket(&packet_data_pointer_);
102 VerifyPacketData(1u, length_to_read,
103 packet3_, packet_data_pointer_);
104
105 // Reading another one shall result in 0 bytes:
106 length_to_read = reader_->NextPacket(&packet_data_pointer_);
107 EXPECT_EQ(0, length_to_read);
108 EXPECT_EQ(kPacketDataLength, packet_data_pointer_ - packet_data_);
109 }
110
111 // Test with empty data.
TEST_F(PacketReaderTest,EmptyData)112 TEST_F(PacketReaderTest, EmptyData) {
113 const int kDataLengthInBytes = 0;
114 WebRtc_UWord8* data = new WebRtc_UWord8[kDataLengthInBytes];
115 reader_->InitializeReading(data, kDataLengthInBytes, kPacketSizeInBytes);
116 EXPECT_EQ(kDataLengthInBytes, reader_->NextPacket(&data));
117 // Do it again to make sure nothing changes
118 EXPECT_EQ(kDataLengthInBytes, reader_->NextPacket(&data));
119 delete[] data;
120 }
121
122 } // namespace test
123 } // namespace webrtc
124