|
5 | 5 | #include <Fw/FPrimeBasicTypes.hpp> |
6 | 6 | #include <gtest/gtest.h> |
7 | 7 |
|
8 | | - |
9 | | -void test_basic() { |
10 | | - U8 data[100]; |
11 | | - U8 faux[100]; |
12 | | - Fw::Buffer buffer; |
13 | | - // Check basic guarantees |
14 | | - ASSERT_EQ(buffer.m_context, Fw::Buffer::NO_CONTEXT); |
15 | | - buffer.setData(data); |
16 | | - buffer.setSize(sizeof(data)); |
17 | | - buffer.setContext(1234); |
18 | | - ASSERT_EQ(buffer.getData(), data); |
19 | | - ASSERT_EQ(buffer.getSize(), sizeof(data)); |
20 | | - ASSERT_EQ(buffer.getContext(), 1234); |
21 | | - |
22 | | - // Test set method is equivalent |
23 | | - Fw::Buffer buffer_set; |
24 | | - buffer_set.set(data, sizeof(data), 1234); |
25 | | - ASSERT_EQ(buffer_set, buffer); |
26 | | - |
27 | | - // Check constructors and assignments |
28 | | - Fw::Buffer buffer_new(buffer); |
29 | | - ASSERT_EQ(buffer_new.getData(), data); |
30 | | - ASSERT_EQ(buffer_new.getSize(), sizeof(data)); |
31 | | - ASSERT_EQ(buffer_new.getContext(), 1234); |
32 | | - ASSERT_EQ(buffer, buffer_new); |
33 | | - |
34 | | - // Creating empty buffer |
35 | | - Fw::Buffer testBuffer(nullptr,0); |
36 | | - ASSERT_EQ(testBuffer.getData(), nullptr); |
37 | | - ASSERT_EQ(testBuffer.getSize(), 0); |
38 | | - |
39 | | - // Assignment operator with transitivity |
40 | | - Fw::Buffer buffer_assignment1, buffer_assignment2; |
41 | | - ASSERT_NE(buffer_assignment1.getData(), data); |
42 | | - ASSERT_NE(buffer_assignment1.getSize(), sizeof(data)); |
43 | | - ASSERT_NE(buffer_assignment1.getContext(), 1234); |
44 | | - ASSERT_NE(buffer_assignment2.getData(), data); |
45 | | - ASSERT_NE(buffer_assignment2.getSize(), sizeof(data)); |
46 | | - ASSERT_NE(buffer_assignment2.getContext(), 1234); |
47 | | - buffer_assignment1 = buffer_assignment2 = buffer; |
48 | | - ASSERT_EQ(buffer_assignment1.getData(), data); |
49 | | - ASSERT_EQ(buffer_assignment1.getSize(), sizeof(data)); |
50 | | - ASSERT_EQ(buffer_assignment1.getContext(), 1234); |
51 | | - ASSERT_EQ(buffer_assignment2.getData(), data); |
52 | | - ASSERT_EQ(buffer_assignment2.getSize(), sizeof(data)); |
53 | | - ASSERT_EQ(buffer_assignment2.getContext(), 1234); |
54 | | - |
55 | | - // Check modifying the copies does not destroy |
56 | | - buffer_new.setSize(0); |
57 | | - buffer_new.setData(faux); |
58 | | - buffer_new.setContext(22222); |
59 | | - buffer_assignment1.setSize(0); |
60 | | - buffer_assignment1.setData(faux); |
61 | | - buffer_assignment1.setContext(22222); |
62 | | - buffer_assignment2.setSize(0); |
63 | | - buffer_assignment2.setData(faux); |
64 | | - buffer_assignment2.setContext(22222); |
65 | | - |
66 | | - ASSERT_EQ(buffer.getData(), data); |
67 | | - ASSERT_EQ(buffer.getSize(), sizeof(data)); |
68 | | - ASSERT_EQ(buffer.getContext(), 1234); |
69 | | -} |
70 | | - |
71 | | -void test_representations() { |
72 | | - U8 data[100]; |
73 | | - Fw::Buffer buffer; |
74 | | - buffer.setData(data); |
75 | | - buffer.setSize(sizeof(data)); |
76 | | - buffer.setContext(1234); |
77 | | - |
78 | | - // Test serialization and that it stops before overflowing |
79 | | - auto serializer = buffer.getSerializer(); |
80 | | - for (U32 i = 0; i < sizeof(data)/4; i++) { |
81 | | - ASSERT_EQ(serializer.serialize(i), Fw::FW_SERIALIZE_OK); |
82 | | - } |
83 | | - Fw::SerializeStatus stat = serializer.serialize(100); |
84 | | - ASSERT_NE(stat, Fw::FW_SERIALIZE_OK); |
85 | | - |
86 | | - // And that another call to repr resets it |
87 | | - serializer.resetSer(); |
88 | | - ASSERT_EQ(serializer.serialize(0), Fw::FW_SERIALIZE_OK); |
89 | | - |
90 | | - // Now deserialize all the things |
91 | | - auto deserializer = buffer.getDeserializer(); |
92 | | - U32 out; |
93 | | - for (U32 i = 0; i < sizeof(data)/4; i++) { |
94 | | - ASSERT_EQ(deserializer.deserialize(out), Fw::FW_SERIALIZE_OK); |
95 | | - ASSERT_EQ(i, out); |
96 | | - } |
97 | | - ASSERT_NE(deserializer.deserialize(out), Fw::FW_SERIALIZE_OK); |
98 | | - deserializer.setBuffLen(buffer.getSize()); |
99 | | - ASSERT_EQ(deserializer.deserialize(out), Fw::FW_SERIALIZE_OK); |
100 | | - ASSERT_EQ(0, out); |
| 8 | +namespace Fw { |
| 9 | + class BufferTester{ |
| 10 | + |
| 11 | + |
| 12 | + public: |
| 13 | + // ---------------------------------------------------------------------- |
| 14 | + // Construction and destruction |
| 15 | + // ---------------------------------------------------------------------- |
| 16 | + BufferTester() |
| 17 | + { |
| 18 | + } |
| 19 | + |
| 20 | + ~BufferTester() |
| 21 | + { |
| 22 | + } |
| 23 | + |
| 24 | + // ---------------------------------------------------------------------- |
| 25 | + // Tests |
| 26 | + // ---------------------------------------------------------------------- |
| 27 | + void test_basic() { |
| 28 | + U8 data[100]; |
| 29 | + U8 faux[100]; |
| 30 | + Fw::Buffer buffer; |
| 31 | + // Check basic guarantees |
| 32 | + ASSERT_EQ(buffer.m_context, Fw::Buffer::NO_CONTEXT); |
| 33 | + buffer.setData(data); |
| 34 | + buffer.setSize(sizeof(data)); |
| 35 | + buffer.setContext(1234); |
| 36 | + ASSERT_EQ(buffer.getData(), data); |
| 37 | + ASSERT_EQ(buffer.getSize(), sizeof(data)); |
| 38 | + ASSERT_EQ(buffer.getContext(), 1234); |
| 39 | + |
| 40 | + // Test set method is equivalent |
| 41 | + Fw::Buffer buffer_set; |
| 42 | + buffer_set.set(data, sizeof(data), 1234); |
| 43 | + ASSERT_EQ(buffer_set, buffer); |
| 44 | + |
| 45 | + // Check constructors and assignments |
| 46 | + Fw::Buffer buffer_new(buffer); |
| 47 | + ASSERT_EQ(buffer_new.getData(), data); |
| 48 | + ASSERT_EQ(buffer_new.getSize(), sizeof(data)); |
| 49 | + ASSERT_EQ(buffer_new.getContext(), 1234); |
| 50 | + ASSERT_EQ(buffer, buffer_new); |
| 51 | + |
| 52 | + // Creating empty buffer |
| 53 | + Fw::Buffer testBuffer(nullptr,0); |
| 54 | + ASSERT_EQ(testBuffer.getData(), nullptr); |
| 55 | + ASSERT_EQ(testBuffer.getSize(), 0); |
| 56 | + |
| 57 | + // Assignment operator with transitivity |
| 58 | + Fw::Buffer buffer_assignment1, buffer_assignment2; |
| 59 | + ASSERT_NE(buffer_assignment1.getData(), data); |
| 60 | + ASSERT_NE(buffer_assignment1.getSize(), sizeof(data)); |
| 61 | + ASSERT_NE(buffer_assignment1.getContext(), 1234); |
| 62 | + ASSERT_NE(buffer_assignment2.getData(), data); |
| 63 | + ASSERT_NE(buffer_assignment2.getSize(), sizeof(data)); |
| 64 | + ASSERT_NE(buffer_assignment2.getContext(), 1234); |
| 65 | + buffer_assignment1 = buffer_assignment2 = buffer; |
| 66 | + ASSERT_EQ(buffer_assignment1.getData(), data); |
| 67 | + ASSERT_EQ(buffer_assignment1.getSize(), sizeof(data)); |
| 68 | + ASSERT_EQ(buffer_assignment1.getContext(), 1234); |
| 69 | + ASSERT_EQ(buffer_assignment2.getData(), data); |
| 70 | + ASSERT_EQ(buffer_assignment2.getSize(), sizeof(data)); |
| 71 | + ASSERT_EQ(buffer_assignment2.getContext(), 1234); |
| 72 | + |
| 73 | + // Check modifying the copies does not destroy |
| 74 | + buffer_new.setSize(0); |
| 75 | + buffer_new.setData(faux); |
| 76 | + buffer_new.setContext(22222); |
| 77 | + buffer_assignment1.setSize(0); |
| 78 | + buffer_assignment1.setData(faux); |
| 79 | + buffer_assignment1.setContext(22222); |
| 80 | + buffer_assignment2.setSize(0); |
| 81 | + buffer_assignment2.setData(faux); |
| 82 | + buffer_assignment2.setContext(22222); |
| 83 | + |
| 84 | + ASSERT_EQ(buffer.getData(), data); |
| 85 | + ASSERT_EQ(buffer.getSize(), sizeof(data)); |
| 86 | + ASSERT_EQ(buffer.getContext(), 1234); |
| 87 | + } |
| 88 | + |
| 89 | + void test_representations() { |
| 90 | + U8 data[100]; |
| 91 | + Fw::Buffer buffer; |
| 92 | + buffer.setData(data); |
| 93 | + buffer.setSize(sizeof(data)); |
| 94 | + buffer.setContext(1234); |
| 95 | + |
| 96 | + // Test serialization and that it stops before overflowing |
| 97 | + auto serializer = buffer.getSerializer(); |
| 98 | + for (U32 i = 0; i < sizeof(data)/4; i++) { |
| 99 | + ASSERT_EQ(serializer.serialize(i), Fw::FW_SERIALIZE_OK); |
| 100 | + } |
| 101 | + Fw::SerializeStatus stat = serializer.serialize(100); |
| 102 | + ASSERT_NE(stat, Fw::FW_SERIALIZE_OK); |
| 103 | + |
| 104 | + // And that another call to repr resets it |
| 105 | + serializer.resetSer(); |
| 106 | + ASSERT_EQ(serializer.serialize(0), Fw::FW_SERIALIZE_OK); |
| 107 | + |
| 108 | + // Now deserialize all the things |
| 109 | + auto deserializer = buffer.getDeserializer(); |
| 110 | + U32 out; |
| 111 | + for (U32 i = 0; i < sizeof(data)/4; i++) { |
| 112 | + ASSERT_EQ(deserializer.deserialize(out), Fw::FW_SERIALIZE_OK); |
| 113 | + ASSERT_EQ(i, out); |
| 114 | + } |
| 115 | + ASSERT_NE(deserializer.deserialize(out), Fw::FW_SERIALIZE_OK); |
| 116 | + deserializer.setBuffLen(buffer.getSize()); |
| 117 | + ASSERT_EQ(deserializer.deserialize(out), Fw::FW_SERIALIZE_OK); |
| 118 | + ASSERT_EQ(0, out); |
| 119 | + } |
| 120 | + |
| 121 | + void test_serialization() { |
| 122 | + U8 data[100]; |
| 123 | + U8 wire[100]; |
| 124 | + |
| 125 | + Fw::Buffer buffer; |
| 126 | + buffer.setData(data); |
| 127 | + buffer.setSize(sizeof(data)); |
| 128 | + buffer.setContext(1234); |
| 129 | + |
| 130 | + Fw::ExternalSerializeBuffer externalSerializeBuffer(wire, sizeof(wire)); |
| 131 | + externalSerializeBuffer.serialize(buffer); |
| 132 | + ASSERT_LT(externalSerializeBuffer.m_serLoc, sizeof(data)); |
| 133 | + |
| 134 | + Fw::Buffer buffer_new; |
| 135 | + externalSerializeBuffer.deserialize(buffer_new); |
| 136 | + ASSERT_EQ(buffer_new, buffer); |
| 137 | + } |
| 138 | + |
| 139 | + }; |
101 | 140 | } |
102 | 141 |
|
103 | | -void test_serialization() { |
104 | | - U8 data[100]; |
105 | | - U8 wire[100]; |
106 | | - |
107 | | - Fw::Buffer buffer; |
108 | | - buffer.setData(data); |
109 | | - buffer.setSize(sizeof(data)); |
110 | | - buffer.setContext(1234); |
111 | | - |
112 | | - Fw::ExternalSerializeBuffer externalSerializeBuffer(wire, sizeof(wire)); |
113 | | - externalSerializeBuffer.serialize(buffer); |
114 | | - ASSERT_LT(externalSerializeBuffer.m_serLoc, sizeof(data)); |
115 | | - |
116 | | - Fw::Buffer buffer_new; |
117 | | - externalSerializeBuffer.deserialize(buffer_new); |
118 | | - ASSERT_EQ(buffer_new, buffer); |
119 | | -} |
120 | | - |
121 | | - |
122 | 142 | TEST(Nominal, BasicBuffer) { |
123 | | - test_basic(); |
| 143 | + Fw::BufferTester tester; |
| 144 | + tester.test_basic(); |
124 | 145 | } |
125 | 146 |
|
126 | 147 | TEST(Nominal, Representations) { |
127 | | - test_representations(); |
| 148 | + Fw::BufferTester tester; |
| 149 | + tester.test_representations(); |
128 | 150 | } |
129 | 151 |
|
130 | 152 | TEST(Nominal, Serialization) { |
131 | | - test_serialization(); |
| 153 | + Fw::BufferTester tester; |
| 154 | + tester.test_serialization(); |
132 | 155 | } |
133 | 156 |
|
134 | 157 |
|
|
0 commit comments