xref: /aosp_15_r20/external/openthread/tests/unit/test_frame_builder.cpp (revision cfb92d1480a9e65faed56933e9c12405f45898b4)
1*cfb92d14SAndroid Build Coastguard Worker /*
2*cfb92d14SAndroid Build Coastguard Worker  *  Copyright (c) 2022, The OpenThread Authors.
3*cfb92d14SAndroid Build Coastguard Worker  *  All rights reserved.
4*cfb92d14SAndroid Build Coastguard Worker  *
5*cfb92d14SAndroid Build Coastguard Worker  *  Redistribution and use in source and binary forms, with or without
6*cfb92d14SAndroid Build Coastguard Worker  *  modification, are permitted provided that the following conditions are met:
7*cfb92d14SAndroid Build Coastguard Worker  *  1. Redistributions of source code must retain the above copyright
8*cfb92d14SAndroid Build Coastguard Worker  *     notice, this list of conditions and the following disclaimer.
9*cfb92d14SAndroid Build Coastguard Worker  *  2. Redistributions in binary form must reproduce the above copyright
10*cfb92d14SAndroid Build Coastguard Worker  *     notice, this list of conditions and the following disclaimer in the
11*cfb92d14SAndroid Build Coastguard Worker  *     documentation and/or other materials provided with the distribution.
12*cfb92d14SAndroid Build Coastguard Worker  *  3. Neither the name of the copyright holder nor the
13*cfb92d14SAndroid Build Coastguard Worker  *     names of its contributors may be used to endorse or promote products
14*cfb92d14SAndroid Build Coastguard Worker  *     derived from this software without specific prior written permission.
15*cfb92d14SAndroid Build Coastguard Worker  *
16*cfb92d14SAndroid Build Coastguard Worker  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17*cfb92d14SAndroid Build Coastguard Worker  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*cfb92d14SAndroid Build Coastguard Worker  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*cfb92d14SAndroid Build Coastguard Worker  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20*cfb92d14SAndroid Build Coastguard Worker  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*cfb92d14SAndroid Build Coastguard Worker  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*cfb92d14SAndroid Build Coastguard Worker  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*cfb92d14SAndroid Build Coastguard Worker  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*cfb92d14SAndroid Build Coastguard Worker  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*cfb92d14SAndroid Build Coastguard Worker  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*cfb92d14SAndroid Build Coastguard Worker  *  POSSIBILITY OF SUCH DAMAGE.
27*cfb92d14SAndroid Build Coastguard Worker  */
28*cfb92d14SAndroid Build Coastguard Worker 
29*cfb92d14SAndroid Build Coastguard Worker #include <openthread/config.h>
30*cfb92d14SAndroid Build Coastguard Worker 
31*cfb92d14SAndroid Build Coastguard Worker #include "test_platform.h"
32*cfb92d14SAndroid Build Coastguard Worker #include "test_util.hpp"
33*cfb92d14SAndroid Build Coastguard Worker 
34*cfb92d14SAndroid Build Coastguard Worker #include "common/frame_builder.hpp"
35*cfb92d14SAndroid Build Coastguard Worker 
36*cfb92d14SAndroid Build Coastguard Worker namespace ot {
37*cfb92d14SAndroid Build Coastguard Worker 
TestFrameBuilder(void)38*cfb92d14SAndroid Build Coastguard Worker void TestFrameBuilder(void)
39*cfb92d14SAndroid Build Coastguard Worker {
40*cfb92d14SAndroid Build Coastguard Worker     const uint8_t kData1[] = {0x01, 0x02, 0x03, 0x04, 0x05};
41*cfb92d14SAndroid Build Coastguard Worker     const uint8_t kData2[] = {0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa};
42*cfb92d14SAndroid Build Coastguard Worker     const uint8_t kData3[] = {0xca, 0xfe, 0xbe, 0xef};
43*cfb92d14SAndroid Build Coastguard Worker 
44*cfb92d14SAndroid Build Coastguard Worker     static constexpr uint16_t kMaxBufferSize = sizeof(kData1) * 2 + sizeof(kData2);
45*cfb92d14SAndroid Build Coastguard Worker 
46*cfb92d14SAndroid Build Coastguard Worker     Instance    *instance;
47*cfb92d14SAndroid Build Coastguard Worker     Message     *message;
48*cfb92d14SAndroid Build Coastguard Worker     uint16_t     offset;
49*cfb92d14SAndroid Build Coastguard Worker     uint8_t      buffer[kMaxBufferSize];
50*cfb92d14SAndroid Build Coastguard Worker     uint8_t      zeroBuffer[kMaxBufferSize];
51*cfb92d14SAndroid Build Coastguard Worker     FrameBuilder frameBuilder;
52*cfb92d14SAndroid Build Coastguard Worker 
53*cfb92d14SAndroid Build Coastguard Worker     printf("TestFrameBuilder\n");
54*cfb92d14SAndroid Build Coastguard Worker 
55*cfb92d14SAndroid Build Coastguard Worker     instance = static_cast<Instance *>(testInitInstance());
56*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(instance != nullptr);
57*cfb92d14SAndroid Build Coastguard Worker 
58*cfb92d14SAndroid Build Coastguard Worker     message = instance->Get<MessagePool>().Allocate(Message::kTypeIp6);
59*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(message != nullptr);
60*cfb92d14SAndroid Build Coastguard Worker 
61*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(message->Append(kData1));
62*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(message->Append(kData2));
63*cfb92d14SAndroid Build Coastguard Worker 
64*cfb92d14SAndroid Build Coastguard Worker     memset(buffer, 0, sizeof(buffer));
65*cfb92d14SAndroid Build Coastguard Worker     memset(zeroBuffer, 0, sizeof(zeroBuffer));
66*cfb92d14SAndroid Build Coastguard Worker 
67*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.Init(buffer, sizeof(buffer));
68*cfb92d14SAndroid Build Coastguard Worker 
69*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
70*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == 0);
71*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetMaxLength() == sizeof(buffer));
72*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, zeroBuffer, sizeof(buffer)) == 0);
73*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.CanAppend(sizeof(buffer)));
74*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(!frameBuilder.CanAppend(sizeof(buffer) + 1));
75*cfb92d14SAndroid Build Coastguard Worker 
76*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.SetMaxLength(sizeof(kData1));
77*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
78*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == 0);
79*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetMaxLength() == sizeof(kData1));
80*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, zeroBuffer, sizeof(buffer)) == 0);
81*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.CanAppend(sizeof(kData1)));
82*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(!frameBuilder.CanAppend(sizeof(kData1) + 1));
83*cfb92d14SAndroid Build Coastguard Worker 
84*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.Append(kData1));
85*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1));
86*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
87*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData1, sizeof(kData1)) == 0);
88*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData1), zeroBuffer, sizeof(buffer) - sizeof(kData1)) == 0);
89*cfb92d14SAndroid Build Coastguard Worker 
90*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.SetMaxLength(sizeof(buffer));
91*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetMaxLength() == sizeof(buffer));
92*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.CanAppend(sizeof(buffer) - sizeof(kData1)));
93*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(!frameBuilder.CanAppend(sizeof(buffer) - sizeof(kData1) + 1));
94*cfb92d14SAndroid Build Coastguard Worker 
95*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.AppendUint8(0x01));
96*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.AppendBigEndianUint16(0x0203));
97*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.AppendLittleEndianUint16(0x0504));
98*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1) * 2);
99*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
100*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData1, sizeof(kData1)) == 0);
101*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData1), kData1, sizeof(kData1)) == 0);
102*cfb92d14SAndroid Build Coastguard Worker 
103*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.AppendBigEndianUint32(0x01020304));
104*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.AppendUint8(0x05));
105*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1) * 3);
106*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
107*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData1, sizeof(kData1)) == 0);
108*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData1), kData1, sizeof(kData1)) == 0);
109*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + 2 * sizeof(kData1), kData1, sizeof(kData1)) == 0);
110*cfb92d14SAndroid Build Coastguard Worker 
111*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.Init(buffer, sizeof(buffer));
112*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
113*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == 0);
114*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetMaxLength() == sizeof(buffer));
115*cfb92d14SAndroid Build Coastguard Worker 
116*cfb92d14SAndroid Build Coastguard Worker     offset = sizeof(kData1);
117*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.AppendBytesFromMessage(*message, offset, sizeof(kData2)));
118*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData2));
119*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
120*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData2, sizeof(kData2)) == 0);
121*cfb92d14SAndroid Build Coastguard Worker 
122*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.Init(buffer, sizeof(buffer));
123*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
124*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == 0);
125*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetMaxLength() == sizeof(buffer));
126*cfb92d14SAndroid Build Coastguard Worker 
127*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.AppendLittleEndianUint32(0x04030201));
128*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.AppendUint8(0x05));
129*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1));
130*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
131*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData1, sizeof(kData1)) == 0);
132*cfb92d14SAndroid Build Coastguard Worker 
133*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.AppendBytes(zeroBuffer, sizeof(kData2)));
134*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.Append(kData1));
135*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(buffer));
136*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
137*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData1, sizeof(kData1)) == 0);
138*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData1), zeroBuffer, sizeof(kData2)) == 0);
139*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData1) + sizeof(kData2), kData1, sizeof(kData1)) == 0);
140*cfb92d14SAndroid Build Coastguard Worker 
141*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(!frameBuilder.CanAppend(1));
142*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.AppendUint8(0x00) == kErrorNoBufs);
143*cfb92d14SAndroid Build Coastguard Worker 
144*cfb92d14SAndroid Build Coastguard Worker     offset = sizeof(kData1);
145*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.Write(offset, kData2);
146*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(buffer));
147*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
148*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData1, sizeof(kData1)) == 0);
149*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData1), kData2, sizeof(kData2)) == 0);
150*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData1) + sizeof(kData2), kData1, sizeof(kData1)) == 0);
151*cfb92d14SAndroid Build Coastguard Worker 
152*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.Init(buffer, sizeof(buffer));
153*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
154*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == 0);
155*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetMaxLength() == sizeof(buffer));
156*cfb92d14SAndroid Build Coastguard Worker 
157*cfb92d14SAndroid Build Coastguard Worker     offset = 0;
158*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.Insert(offset, kData1));
159*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1));
160*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
161*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData1, sizeof(kData1)) == 0);
162*cfb92d14SAndroid Build Coastguard Worker 
163*cfb92d14SAndroid Build Coastguard Worker     offset = 0;
164*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.Insert(offset, kData2));
165*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1) + sizeof(kData2));
166*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
167*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData2, sizeof(kData2)) == 0);
168*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData2), kData1, sizeof(kData1)) == 0);
169*cfb92d14SAndroid Build Coastguard Worker 
170*cfb92d14SAndroid Build Coastguard Worker     offset = sizeof(kData2);
171*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.InsertBytes(offset, kData3, sizeof(kData3)));
172*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1) + sizeof(kData2) + sizeof(kData3));
173*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
174*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData2, sizeof(kData2)) == 0);
175*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData2), kData3, sizeof(kData3)) == 0);
176*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData2) + sizeof(kData3), kData1, sizeof(kData1)) == 0);
177*cfb92d14SAndroid Build Coastguard Worker 
178*cfb92d14SAndroid Build Coastguard Worker     offset = frameBuilder.GetLength();
179*cfb92d14SAndroid Build Coastguard Worker     SuccessOrQuit(frameBuilder.Insert<uint8_t>(offset, 0x77));
180*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1) + sizeof(kData2) + sizeof(kData3) + sizeof(uint8_t));
181*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
182*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData2, sizeof(kData2)) == 0);
183*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData2), kData3, sizeof(kData3)) == 0);
184*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData2) + sizeof(kData3), kData1, sizeof(kData1)) == 0);
185*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(buffer[sizeof(kData2) + sizeof(kData3) + sizeof(kData1)] == 0x77);
186*cfb92d14SAndroid Build Coastguard Worker 
187*cfb92d14SAndroid Build Coastguard Worker     offset = frameBuilder.GetLength() - 1;
188*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.RemoveBytes(offset, sizeof(uint8_t));
189*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1) + sizeof(kData2) + sizeof(kData3));
190*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
191*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData2, sizeof(kData2)) == 0);
192*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData2), kData3, sizeof(kData3)) == 0);
193*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData2) + sizeof(kData3), kData1, sizeof(kData1)) == 0);
194*cfb92d14SAndroid Build Coastguard Worker 
195*cfb92d14SAndroid Build Coastguard Worker     offset = sizeof(kData2);
196*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.RemoveBytes(offset, sizeof(kData3));
197*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1) + sizeof(kData2));
198*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
199*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData2, sizeof(kData2)) == 0);
200*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer + sizeof(kData2), kData1, sizeof(kData1)) == 0);
201*cfb92d14SAndroid Build Coastguard Worker 
202*cfb92d14SAndroid Build Coastguard Worker     offset = 0;
203*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.RemoveBytes(offset, sizeof(kData2));
204*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == sizeof(kData1));
205*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetBytes() == buffer);
206*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(memcmp(buffer, kData1, sizeof(kData1)) == 0);
207*cfb92d14SAndroid Build Coastguard Worker 
208*cfb92d14SAndroid Build Coastguard Worker     offset = 0;
209*cfb92d14SAndroid Build Coastguard Worker     frameBuilder.RemoveBytes(offset, sizeof(kData1));
210*cfb92d14SAndroid Build Coastguard Worker     VerifyOrQuit(frameBuilder.GetLength() == 0);
211*cfb92d14SAndroid Build Coastguard Worker 
212*cfb92d14SAndroid Build Coastguard Worker     message->Free();
213*cfb92d14SAndroid Build Coastguard Worker     testFreeInstance(instance);
214*cfb92d14SAndroid Build Coastguard Worker }
215*cfb92d14SAndroid Build Coastguard Worker 
216*cfb92d14SAndroid Build Coastguard Worker } // namespace ot
217*cfb92d14SAndroid Build Coastguard Worker 
main(void)218*cfb92d14SAndroid Build Coastguard Worker int main(void)
219*cfb92d14SAndroid Build Coastguard Worker {
220*cfb92d14SAndroid Build Coastguard Worker     ot::TestFrameBuilder();
221*cfb92d14SAndroid Build Coastguard Worker 
222*cfb92d14SAndroid Build Coastguard Worker     printf("All tests passed\n");
223*cfb92d14SAndroid Build Coastguard Worker     return 0;
224*cfb92d14SAndroid Build Coastguard Worker }
225