blob: 2679be473f255044b5e7958ad86504bdd70a4747 [file] [log] [blame]
kjellander@webrtc.org35a17562011-10-06 06:44:54 +00001/*
andrew@webrtc.orgd41f59a2012-07-16 17:05:47 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
kjellander@webrtc.org35a17562011-10-06 06:44:54 +00003 *
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 */
kjellander@webrtc.org5b97b122011-12-08 07:42:18 +000010
pbos@webrtc.org34741c82013-05-27 08:02:22 +000011#include "webrtc/test/testsupport/packet_reader.h"
kjellander@webrtc.org5b97b122011-12-08 07:42:18 +000012
pbos@webrtc.org34741c82013-05-27 08:02:22 +000013#include "testing/gtest/include/gtest/gtest.h"
14#include "webrtc/test/testsupport/unittest_utils.h"
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000015
16namespace webrtc {
17namespace test {
18
19class PacketReaderTest: public PacketRelatedTest {
20 protected:
kjellander@webrtc.org5b97b122011-12-08 07:42:18 +000021 PacketReaderTest() {}
22 virtual ~PacketReaderTest() {}
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000023 void SetUp() {
24 reader_ = new PacketReader();
25 }
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000026 void TearDown() {
27 delete reader_;
28 }
pkasting@chromium.org4591fbd2014-11-20 22:28:14 +000029 void VerifyPacketData(size_t expected_length,
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000030 int actual_length,
pbos@webrtc.orga5f17872013-04-09 11:10:21 +000031 uint8_t* original_data_pointer,
32 uint8_t* new_data_pointer) {
pkasting@chromium.org4591fbd2014-11-20 22:28:14 +000033 EXPECT_EQ(static_cast<int>(expected_length), actual_length);
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000034 EXPECT_EQ(*original_data_pointer, *new_data_pointer);
35 EXPECT_EQ(0, memcmp(original_data_pointer, new_data_pointer,
36 actual_length));
37 }
kjellander@webrtc.org5b97b122011-12-08 07:42:18 +000038 PacketReader* reader_;
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000039};
40
41// Test lack of initialization
42TEST_F(PacketReaderTest, Uninitialized) {
pbos@webrtc.orga5f17872013-04-09 11:10:21 +000043 uint8_t* data_pointer = NULL;
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000044 EXPECT_EQ(-1, reader_->NextPacket(&data_pointer));
45 EXPECT_EQ(NULL, data_pointer);
46}
47
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000048TEST_F(PacketReaderTest, InitializeZeroLengthArgument) {
49 reader_->InitializeReading(packet_data_, 0, kPacketSizeInBytes);
50 ASSERT_EQ(0, reader_->NextPacket(&packet_data_pointer_));
51}
52
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000053// Test with something smaller than one packet
54TEST_F(PacketReaderTest, NormalSmallData) {
55 const int kDataLengthInBytes = 1499;
pbos@webrtc.orga5f17872013-04-09 11:10:21 +000056 uint8_t data[kDataLengthInBytes];
57 uint8_t* data_pointer = data;
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000058 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
72TEST_F(PacketReaderTest, NormalOnePacketData) {
pbos@webrtc.orga5f17872013-04-09 11:10:21 +000073 uint8_t data[kPacketSizeInBytes];
74 uint8_t* data_pointer = data;
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000075 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);
pkasting@chromium.org4591fbd2014-11-20 22:28:14 +000085 EXPECT_EQ(kPacketSizeInBytes, static_cast<size_t>(data_pointer - data));
kjellander@webrtc.org35a17562011-10-06 06:44:54 +000086}
87
88// Test with data length that will result in 3 packets
89TEST_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);
pkasting@chromium.org4591fbd2014-11-20 22:28:14 +0000108 EXPECT_EQ(kPacketDataLength,
109 static_cast<size_t>(packet_data_pointer_ - packet_data_));
kjellander@webrtc.org35a17562011-10-06 06:44:54 +0000110}
111
112// Test with empty data.
113TEST_F(PacketReaderTest, EmptyData) {
114 const int kDataLengthInBytes = 0;
andrew@webrtc.orgd41f59a2012-07-16 17:05:47 +0000115 // But don't really try to allocate a zero-length array...
pbos@webrtc.orga5f17872013-04-09 11:10:21 +0000116 uint8_t data[kPacketSizeInBytes];
117 uint8_t* data_pointer = data;
kjellander@webrtc.org35a17562011-10-06 06:44:54 +0000118 reader_->InitializeReading(data, kDataLengthInBytes, kPacketSizeInBytes);
andrew@webrtc.orgd41f59a2012-07-16 17:05:47 +0000119 EXPECT_EQ(kDataLengthInBytes, reader_->NextPacket(&data_pointer));
kjellander@webrtc.org35a17562011-10-06 06:44:54 +0000120 // Do it again to make sure nothing changes
andrew@webrtc.orgd41f59a2012-07-16 17:05:47 +0000121 EXPECT_EQ(kDataLengthInBytes, reader_->NextPacket(&data_pointer));
kjellander@webrtc.org35a17562011-10-06 06:44:54 +0000122}
123
124} // namespace test
125} // namespace webrtc