1 /*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include <gtest/gtest.h>
18
19 #include "DataQueue.h"
20
21 // Define a test fixture class
22 class DataQueueTest : public ::testing::Test {
23 protected:
24 DataQueue queue;
25 };
26
27 // Test isEmpty() when the queue is empty
TEST_F(DataQueueTest,IsEmptyInitially)28 TEST_F(DataQueueTest, IsEmptyInitially) { ASSERT_TRUE(queue.isEmpty()); }
29
30 // Test enqueue() and dequeue() with a single element
TEST_F(DataQueueTest,EnqueueDequeueOneElement)31 TEST_F(DataQueueTest, EnqueueDequeueOneElement) {
32 uint8_t data[] = {1, 2, 3};
33 ASSERT_TRUE(queue.enqueue(data, sizeof(data)));
34 ASSERT_FALSE(queue.isEmpty());
35
36 uint8_t buffer[10];
37 uint16_t actualLen;
38 ASSERT_TRUE(queue.dequeue(buffer, sizeof(buffer), actualLen));
39 ASSERT_EQ(actualLen, sizeof(data));
40 ASSERT_EQ(memcmp(buffer, data, sizeof(data)), 0);
41 ASSERT_TRUE(queue.isEmpty());
42 }
43
44 // Test enqueue() and dequeue() with multiple elements
TEST_F(DataQueueTest,EnqueueDequeueMultipleElements)45 TEST_F(DataQueueTest, EnqueueDequeueMultipleElements) {
46 uint8_t data1[] = {1, 2, 3};
47 uint8_t data2[] = {4, 5, 6, 7};
48 ASSERT_TRUE(queue.enqueue(data1, sizeof(data1)));
49 ASSERT_TRUE(queue.enqueue(data2, sizeof(data2)));
50
51 uint8_t buffer[10];
52 uint16_t actualLen;
53 ASSERT_TRUE(queue.dequeue(buffer, sizeof(buffer), actualLen));
54 ASSERT_EQ(actualLen, sizeof(data1));
55 ASSERT_EQ(memcmp(buffer, data1, sizeof(data1)), 0);
56
57 ASSERT_TRUE(queue.dequeue(buffer, sizeof(buffer), actualLen));
58 ASSERT_EQ(actualLen, sizeof(data2));
59 ASSERT_EQ(memcmp(buffer, data2, sizeof(data2)), 0);
60 ASSERT_TRUE(queue.isEmpty());
61 }
62
63 // Test dequeue() with a buffer smaller than the data size
TEST_F(DataQueueTest,DequeuePartial)64 TEST_F(DataQueueTest, DequeuePartial) {
65 uint8_t data[] = {1, 2, 3, 4, 5};
66 ASSERT_TRUE(queue.enqueue(data, sizeof(data)));
67
68 uint8_t buffer[3]; // Smaller buffer
69 uint16_t actualLen;
70 ASSERT_TRUE(queue.dequeue(buffer, sizeof(buffer), actualLen));
71 ASSERT_EQ(actualLen, sizeof(buffer));
72 ASSERT_EQ(memcmp(buffer, data, sizeof(buffer)), 0);
73
74 ASSERT_TRUE(queue.dequeue(buffer, sizeof(buffer), actualLen));
75 ASSERT_EQ(actualLen, 2); // Remaining 2 bytes
76 ASSERT_EQ(memcmp(buffer, data + 3, 2), 0);
77 ASSERT_TRUE(queue.isEmpty());
78 }
79
80 // Test dequeue() with an empty queue
TEST_F(DataQueueTest,DequeueEmpty)81 TEST_F(DataQueueTest, DequeueEmpty) {
82 uint8_t buffer[10];
83 uint16_t actualLen;
84 ASSERT_FALSE(queue.dequeue(buffer, sizeof(buffer), actualLen));
85 }
86
87 // Test enqueue() with NULL data and zero data length
TEST_F(DataQueueTest,EnqueueInvalidInput)88 TEST_F(DataQueueTest, EnqueueInvalidInput) {
89 ASSERT_FALSE(queue.enqueue(nullptr, 10));
90 ASSERT_FALSE(queue.enqueue(reinterpret_cast<uint8_t*>(0x1234), 0));
91 }