1*d289c2baSAndroid Build Coastguard Worker /*
2*d289c2baSAndroid Build Coastguard Worker * Copyright (C) 2016 The Android Open Source Project
3*d289c2baSAndroid Build Coastguard Worker *
4*d289c2baSAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person
5*d289c2baSAndroid Build Coastguard Worker * obtaining a copy of this software and associated documentation
6*d289c2baSAndroid Build Coastguard Worker * files (the "Software"), to deal in the Software without
7*d289c2baSAndroid Build Coastguard Worker * restriction, including without limitation the rights to use, copy,
8*d289c2baSAndroid Build Coastguard Worker * modify, merge, publish, distribute, sublicense, and/or sell copies
9*d289c2baSAndroid Build Coastguard Worker * of the Software, and to permit persons to whom the Software is
10*d289c2baSAndroid Build Coastguard Worker * furnished to do so, subject to the following conditions:
11*d289c2baSAndroid Build Coastguard Worker *
12*d289c2baSAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be
13*d289c2baSAndroid Build Coastguard Worker * included in all copies or substantial portions of the Software.
14*d289c2baSAndroid Build Coastguard Worker *
15*d289c2baSAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16*d289c2baSAndroid Build Coastguard Worker * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17*d289c2baSAndroid Build Coastguard Worker * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18*d289c2baSAndroid Build Coastguard Worker * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19*d289c2baSAndroid Build Coastguard Worker * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20*d289c2baSAndroid Build Coastguard Worker * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21*d289c2baSAndroid Build Coastguard Worker * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22*d289c2baSAndroid Build Coastguard Worker * SOFTWARE.
23*d289c2baSAndroid Build Coastguard Worker */
24*d289c2baSAndroid Build Coastguard Worker
25*d289c2baSAndroid Build Coastguard Worker #include <endian.h>
26*d289c2baSAndroid Build Coastguard Worker #include <string.h>
27*d289c2baSAndroid Build Coastguard Worker
28*d289c2baSAndroid Build Coastguard Worker #include <gtest/gtest.h>
29*d289c2baSAndroid Build Coastguard Worker
30*d289c2baSAndroid Build Coastguard Worker #include <libavb/libavb.h>
31*d289c2baSAndroid Build Coastguard Worker
32*d289c2baSAndroid Build Coastguard Worker #include "avb_unittest_util.h"
33*d289c2baSAndroid Build Coastguard Worker
34*d289c2baSAndroid Build Coastguard Worker namespace avb {
35*d289c2baSAndroid Build Coastguard Worker
36*d289c2baSAndroid Build Coastguard Worker // Subclass BaseAvbToolTest to check for memory leaks.
37*d289c2baSAndroid Build Coastguard Worker class UtilTest : public BaseAvbToolTest {
38*d289c2baSAndroid Build Coastguard Worker public:
UtilTest()39*d289c2baSAndroid Build Coastguard Worker UtilTest() {}
40*d289c2baSAndroid Build Coastguard Worker };
41*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,RSAPublicKeyHeaderByteswap)42*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, RSAPublicKeyHeaderByteswap) {
43*d289c2baSAndroid Build Coastguard Worker AvbRSAPublicKeyHeader h;
44*d289c2baSAndroid Build Coastguard Worker AvbRSAPublicKeyHeader s;
45*d289c2baSAndroid Build Coastguard Worker uint32_t n32;
46*d289c2baSAndroid Build Coastguard Worker uint64_t n64;
47*d289c2baSAndroid Build Coastguard Worker
48*d289c2baSAndroid Build Coastguard Worker n32 = 0x11223344;
49*d289c2baSAndroid Build Coastguard Worker n64 = 0x1122334455667788;
50*d289c2baSAndroid Build Coastguard Worker
51*d289c2baSAndroid Build Coastguard Worker h.key_num_bits = htobe32(n32);
52*d289c2baSAndroid Build Coastguard Worker n32++;
53*d289c2baSAndroid Build Coastguard Worker h.n0inv = htobe32(n32);
54*d289c2baSAndroid Build Coastguard Worker n32++;
55*d289c2baSAndroid Build Coastguard Worker
56*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_rsa_public_key_header_validate_and_byteswap(&h, &s));
57*d289c2baSAndroid Build Coastguard Worker
58*d289c2baSAndroid Build Coastguard Worker n32 = 0x11223344;
59*d289c2baSAndroid Build Coastguard Worker n64 = 0x1122334455667788;
60*d289c2baSAndroid Build Coastguard Worker
61*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n32, s.key_num_bits);
62*d289c2baSAndroid Build Coastguard Worker n32++;
63*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n32, s.n0inv);
64*d289c2baSAndroid Build Coastguard Worker n32++;
65*d289c2baSAndroid Build Coastguard Worker }
66*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,FooterByteswap)67*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, FooterByteswap) {
68*d289c2baSAndroid Build Coastguard Worker AvbFooter h;
69*d289c2baSAndroid Build Coastguard Worker AvbFooter s;
70*d289c2baSAndroid Build Coastguard Worker AvbFooter other;
71*d289c2baSAndroid Build Coastguard Worker AvbFooter bad;
72*d289c2baSAndroid Build Coastguard Worker uint64_t n64;
73*d289c2baSAndroid Build Coastguard Worker
74*d289c2baSAndroid Build Coastguard Worker n64 = 0x1122334455667788;
75*d289c2baSAndroid Build Coastguard Worker
76*d289c2baSAndroid Build Coastguard Worker memcpy(h.magic, AVB_FOOTER_MAGIC, AVB_FOOTER_MAGIC_LEN);
77*d289c2baSAndroid Build Coastguard Worker h.version_major = htobe32(AVB_FOOTER_VERSION_MAJOR);
78*d289c2baSAndroid Build Coastguard Worker h.version_minor = htobe32(AVB_FOOTER_VERSION_MINOR);
79*d289c2baSAndroid Build Coastguard Worker h.original_image_size = htobe64(n64);
80*d289c2baSAndroid Build Coastguard Worker n64++;
81*d289c2baSAndroid Build Coastguard Worker h.vbmeta_offset = htobe64(n64);
82*d289c2baSAndroid Build Coastguard Worker n64++;
83*d289c2baSAndroid Build Coastguard Worker h.vbmeta_size = htobe64(n64);
84*d289c2baSAndroid Build Coastguard Worker n64++;
85*d289c2baSAndroid Build Coastguard Worker
86*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_footer_validate_and_byteswap(&h, &s));
87*d289c2baSAndroid Build Coastguard Worker
88*d289c2baSAndroid Build Coastguard Worker n64 = 0x1122334455667788;
89*d289c2baSAndroid Build Coastguard Worker
90*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ((uint32_t)AVB_FOOTER_VERSION_MAJOR, s.version_major);
91*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ((uint32_t)AVB_FOOTER_VERSION_MINOR, s.version_minor);
92*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n64, s.original_image_size);
93*d289c2baSAndroid Build Coastguard Worker n64++;
94*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n64, s.vbmeta_offset);
95*d289c2baSAndroid Build Coastguard Worker n64++;
96*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n64, s.vbmeta_size);
97*d289c2baSAndroid Build Coastguard Worker n64++;
98*d289c2baSAndroid Build Coastguard Worker
99*d289c2baSAndroid Build Coastguard Worker // Check that the struct still validates if minor is bigger than
100*d289c2baSAndroid Build Coastguard Worker // what we expect.
101*d289c2baSAndroid Build Coastguard Worker other = h;
102*d289c2baSAndroid Build Coastguard Worker h.version_minor = htobe32(AVB_FOOTER_VERSION_MINOR + 1);
103*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_footer_validate_and_byteswap(&other, &s));
104*d289c2baSAndroid Build Coastguard Worker
105*d289c2baSAndroid Build Coastguard Worker // Check for bad magic.
106*d289c2baSAndroid Build Coastguard Worker bad = h;
107*d289c2baSAndroid Build Coastguard Worker bad.magic[0] = 'x';
108*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_footer_validate_and_byteswap(&bad, &s));
109*d289c2baSAndroid Build Coastguard Worker
110*d289c2baSAndroid Build Coastguard Worker // Check for bad major version.
111*d289c2baSAndroid Build Coastguard Worker bad = h;
112*d289c2baSAndroid Build Coastguard Worker bad.version_major = htobe32(AVB_FOOTER_VERSION_MAJOR + 1);
113*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_footer_validate_and_byteswap(&bad, &s));
114*d289c2baSAndroid Build Coastguard Worker }
115*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,KernelCmdlineDescriptorByteswap)116*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, KernelCmdlineDescriptorByteswap) {
117*d289c2baSAndroid Build Coastguard Worker AvbKernelCmdlineDescriptor h;
118*d289c2baSAndroid Build Coastguard Worker AvbKernelCmdlineDescriptor s;
119*d289c2baSAndroid Build Coastguard Worker AvbKernelCmdlineDescriptor bad;
120*d289c2baSAndroid Build Coastguard Worker uint64_t nbf;
121*d289c2baSAndroid Build Coastguard Worker uint32_t n32;
122*d289c2baSAndroid Build Coastguard Worker
123*d289c2baSAndroid Build Coastguard Worker // Specify 40 bytes of data past the end of the descriptor struct.
124*d289c2baSAndroid Build Coastguard Worker nbf = 40 + sizeof(AvbKernelCmdlineDescriptor) - sizeof(AvbDescriptor);
125*d289c2baSAndroid Build Coastguard Worker h.parent_descriptor.num_bytes_following = htobe64(nbf);
126*d289c2baSAndroid Build Coastguard Worker h.parent_descriptor.tag = htobe64(AVB_DESCRIPTOR_TAG_KERNEL_CMDLINE);
127*d289c2baSAndroid Build Coastguard Worker h.kernel_cmdline_length = htobe32(40);
128*d289c2baSAndroid Build Coastguard Worker
129*d289c2baSAndroid Build Coastguard Worker n32 = 0x11223344;
130*d289c2baSAndroid Build Coastguard Worker h.flags = htobe32(n32);
131*d289c2baSAndroid Build Coastguard Worker n32++;
132*d289c2baSAndroid Build Coastguard Worker
133*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_kernel_cmdline_descriptor_validate_and_byteswap(&h, &s));
134*d289c2baSAndroid Build Coastguard Worker
135*d289c2baSAndroid Build Coastguard Worker n32 = 0x11223344;
136*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n32, s.flags);
137*d289c2baSAndroid Build Coastguard Worker n32++;
138*d289c2baSAndroid Build Coastguard Worker
139*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(AVB_DESCRIPTOR_TAG_KERNEL_CMDLINE, s.parent_descriptor.tag);
140*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(nbf, s.parent_descriptor.num_bytes_following);
141*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(40UL, s.kernel_cmdline_length);
142*d289c2baSAndroid Build Coastguard Worker
143*d289c2baSAndroid Build Coastguard Worker // Check for bad tag.
144*d289c2baSAndroid Build Coastguard Worker bad = h;
145*d289c2baSAndroid Build Coastguard Worker bad.parent_descriptor.tag = htobe64(0xf00dd00d);
146*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_kernel_cmdline_descriptor_validate_and_byteswap(&bad, &s));
147*d289c2baSAndroid Build Coastguard Worker
148*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 41 bytes.
149*d289c2baSAndroid Build Coastguard Worker bad = h;
150*d289c2baSAndroid Build Coastguard Worker bad.kernel_cmdline_length = htobe32(41);
151*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_kernel_cmdline_descriptor_validate_and_byteswap(&bad, &s));
152*d289c2baSAndroid Build Coastguard Worker }
153*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,HashtreeDescriptorByteswap)154*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, HashtreeDescriptorByteswap) {
155*d289c2baSAndroid Build Coastguard Worker AvbHashtreeDescriptor h;
156*d289c2baSAndroid Build Coastguard Worker AvbHashtreeDescriptor s;
157*d289c2baSAndroid Build Coastguard Worker AvbHashtreeDescriptor bad;
158*d289c2baSAndroid Build Coastguard Worker uint64_t nbf;
159*d289c2baSAndroid Build Coastguard Worker uint32_t n32;
160*d289c2baSAndroid Build Coastguard Worker uint64_t n64;
161*d289c2baSAndroid Build Coastguard Worker
162*d289c2baSAndroid Build Coastguard Worker // Specify 44 bytes of data past the end of the descriptor struct.
163*d289c2baSAndroid Build Coastguard Worker nbf = 44 + sizeof(AvbHashtreeDescriptor) - sizeof(AvbDescriptor);
164*d289c2baSAndroid Build Coastguard Worker h.parent_descriptor.num_bytes_following = htobe64(nbf);
165*d289c2baSAndroid Build Coastguard Worker h.parent_descriptor.tag = htobe64(AVB_DESCRIPTOR_TAG_HASHTREE);
166*d289c2baSAndroid Build Coastguard Worker h.partition_name_len = htobe32(10);
167*d289c2baSAndroid Build Coastguard Worker h.salt_len = htobe32(10);
168*d289c2baSAndroid Build Coastguard Worker h.root_digest_len = htobe32(10);
169*d289c2baSAndroid Build Coastguard Worker
170*d289c2baSAndroid Build Coastguard Worker n32 = 0x11223344;
171*d289c2baSAndroid Build Coastguard Worker n64 = 0x1122334455667788;
172*d289c2baSAndroid Build Coastguard Worker
173*d289c2baSAndroid Build Coastguard Worker h.dm_verity_version = htobe32(n32);
174*d289c2baSAndroid Build Coastguard Worker n32++;
175*d289c2baSAndroid Build Coastguard Worker h.image_size = htobe64(n64);
176*d289c2baSAndroid Build Coastguard Worker n64++;
177*d289c2baSAndroid Build Coastguard Worker h.tree_offset = htobe64(n64);
178*d289c2baSAndroid Build Coastguard Worker n64++;
179*d289c2baSAndroid Build Coastguard Worker h.tree_size = htobe64(n64);
180*d289c2baSAndroid Build Coastguard Worker n64++;
181*d289c2baSAndroid Build Coastguard Worker h.data_block_size = htobe32(n32);
182*d289c2baSAndroid Build Coastguard Worker n32++;
183*d289c2baSAndroid Build Coastguard Worker h.hash_block_size = htobe32(n32);
184*d289c2baSAndroid Build Coastguard Worker n32++;
185*d289c2baSAndroid Build Coastguard Worker h.fec_num_roots = htobe32(n32);
186*d289c2baSAndroid Build Coastguard Worker n32++;
187*d289c2baSAndroid Build Coastguard Worker h.fec_offset = htobe64(n64);
188*d289c2baSAndroid Build Coastguard Worker n64++;
189*d289c2baSAndroid Build Coastguard Worker h.fec_size = htobe64(n64);
190*d289c2baSAndroid Build Coastguard Worker n64++;
191*d289c2baSAndroid Build Coastguard Worker
192*d289c2baSAndroid Build Coastguard Worker EXPECT_TRUE(avb_hashtree_descriptor_validate_and_byteswap(&h, &s));
193*d289c2baSAndroid Build Coastguard Worker
194*d289c2baSAndroid Build Coastguard Worker n32 = 0x11223344;
195*d289c2baSAndroid Build Coastguard Worker n64 = 0x1122334455667788;
196*d289c2baSAndroid Build Coastguard Worker
197*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n32, s.dm_verity_version);
198*d289c2baSAndroid Build Coastguard Worker n32++;
199*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n64, s.image_size);
200*d289c2baSAndroid Build Coastguard Worker n64++;
201*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n64, s.tree_offset);
202*d289c2baSAndroid Build Coastguard Worker n64++;
203*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n64, s.tree_size);
204*d289c2baSAndroid Build Coastguard Worker n64++;
205*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n32, s.data_block_size);
206*d289c2baSAndroid Build Coastguard Worker n32++;
207*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n32, s.hash_block_size);
208*d289c2baSAndroid Build Coastguard Worker n32++;
209*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n32, s.fec_num_roots);
210*d289c2baSAndroid Build Coastguard Worker n32++;
211*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n64, s.fec_offset);
212*d289c2baSAndroid Build Coastguard Worker n64++;
213*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n64, s.fec_size);
214*d289c2baSAndroid Build Coastguard Worker n64++;
215*d289c2baSAndroid Build Coastguard Worker
216*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(AVB_DESCRIPTOR_TAG_HASHTREE, s.parent_descriptor.tag);
217*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(nbf, s.parent_descriptor.num_bytes_following);
218*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(10UL, s.partition_name_len);
219*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(10UL, s.salt_len);
220*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(10UL, s.root_digest_len);
221*d289c2baSAndroid Build Coastguard Worker
222*d289c2baSAndroid Build Coastguard Worker // Check for bad tag.
223*d289c2baSAndroid Build Coastguard Worker bad = h;
224*d289c2baSAndroid Build Coastguard Worker bad.parent_descriptor.tag = htobe64(0xf00dd00d);
225*d289c2baSAndroid Build Coastguard Worker EXPECT_FALSE(avb_hashtree_descriptor_validate_and_byteswap(&bad, &s));
226*d289c2baSAndroid Build Coastguard Worker
227*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 44 bytes (30 + 10 + 10 = 50).
228*d289c2baSAndroid Build Coastguard Worker bad = h;
229*d289c2baSAndroid Build Coastguard Worker bad.partition_name_len = htobe32(30);
230*d289c2baSAndroid Build Coastguard Worker EXPECT_FALSE(avb_hashtree_descriptor_validate_and_byteswap(&bad, &s));
231*d289c2baSAndroid Build Coastguard Worker
232*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 44 bytes (10 + 30 + 10 = 50).
233*d289c2baSAndroid Build Coastguard Worker bad = h;
234*d289c2baSAndroid Build Coastguard Worker bad.salt_len = htobe32(30);
235*d289c2baSAndroid Build Coastguard Worker EXPECT_FALSE(avb_hashtree_descriptor_validate_and_byteswap(&bad, &s));
236*d289c2baSAndroid Build Coastguard Worker
237*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 44 bytes (10 + 10 + 30 = 50).
238*d289c2baSAndroid Build Coastguard Worker bad = h;
239*d289c2baSAndroid Build Coastguard Worker bad.root_digest_len = htobe32(30);
240*d289c2baSAndroid Build Coastguard Worker EXPECT_FALSE(avb_hashtree_descriptor_validate_and_byteswap(&bad, &s));
241*d289c2baSAndroid Build Coastguard Worker }
242*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,HashDescriptorByteswap)243*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, HashDescriptorByteswap) {
244*d289c2baSAndroid Build Coastguard Worker AvbHashDescriptor h;
245*d289c2baSAndroid Build Coastguard Worker AvbHashDescriptor s;
246*d289c2baSAndroid Build Coastguard Worker AvbHashDescriptor bad;
247*d289c2baSAndroid Build Coastguard Worker uint64_t nbf;
248*d289c2baSAndroid Build Coastguard Worker
249*d289c2baSAndroid Build Coastguard Worker // Specify 44 bytes of data past the end of the descriptor struct.
250*d289c2baSAndroid Build Coastguard Worker nbf = 44 + sizeof(AvbHashDescriptor) - sizeof(AvbDescriptor);
251*d289c2baSAndroid Build Coastguard Worker h.parent_descriptor.num_bytes_following = htobe64(nbf);
252*d289c2baSAndroid Build Coastguard Worker h.parent_descriptor.tag = htobe64(AVB_DESCRIPTOR_TAG_HASH);
253*d289c2baSAndroid Build Coastguard Worker h.partition_name_len = htobe32(10);
254*d289c2baSAndroid Build Coastguard Worker h.salt_len = htobe32(10);
255*d289c2baSAndroid Build Coastguard Worker h.digest_len = htobe32(10);
256*d289c2baSAndroid Build Coastguard Worker
257*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_hash_descriptor_validate_and_byteswap(&h, &s));
258*d289c2baSAndroid Build Coastguard Worker
259*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(AVB_DESCRIPTOR_TAG_HASH, s.parent_descriptor.tag);
260*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(nbf, s.parent_descriptor.num_bytes_following);
261*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(10UL, s.partition_name_len);
262*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(10UL, s.salt_len);
263*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(10UL, s.digest_len);
264*d289c2baSAndroid Build Coastguard Worker
265*d289c2baSAndroid Build Coastguard Worker // Check for bad tag.
266*d289c2baSAndroid Build Coastguard Worker bad = h;
267*d289c2baSAndroid Build Coastguard Worker bad.parent_descriptor.tag = htobe64(0xf00dd00d);
268*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_hash_descriptor_validate_and_byteswap(&bad, &s));
269*d289c2baSAndroid Build Coastguard Worker
270*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 44 bytes (30 + 10 + 10 = 50).
271*d289c2baSAndroid Build Coastguard Worker bad = h;
272*d289c2baSAndroid Build Coastguard Worker bad.partition_name_len = htobe32(30);
273*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_hash_descriptor_validate_and_byteswap(&bad, &s));
274*d289c2baSAndroid Build Coastguard Worker
275*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 44 bytes (10 + 30 + 10 = 50).
276*d289c2baSAndroid Build Coastguard Worker bad = h;
277*d289c2baSAndroid Build Coastguard Worker bad.salt_len = htobe32(30);
278*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_hash_descriptor_validate_and_byteswap(&bad, &s));
279*d289c2baSAndroid Build Coastguard Worker
280*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 44 bytes (10 + 10 + 30 = 50).
281*d289c2baSAndroid Build Coastguard Worker bad = h;
282*d289c2baSAndroid Build Coastguard Worker bad.digest_len = htobe32(30);
283*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_hash_descriptor_validate_and_byteswap(&bad, &s));
284*d289c2baSAndroid Build Coastguard Worker }
285*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,ChainPartitionDescriptorByteswap)286*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, ChainPartitionDescriptorByteswap) {
287*d289c2baSAndroid Build Coastguard Worker AvbChainPartitionDescriptor h;
288*d289c2baSAndroid Build Coastguard Worker AvbChainPartitionDescriptor s;
289*d289c2baSAndroid Build Coastguard Worker AvbChainPartitionDescriptor bad;
290*d289c2baSAndroid Build Coastguard Worker uint64_t nbf;
291*d289c2baSAndroid Build Coastguard Worker
292*d289c2baSAndroid Build Coastguard Worker // Specify 36 bytes of data past the end of the descriptor struct.
293*d289c2baSAndroid Build Coastguard Worker nbf = 36 + sizeof(AvbChainPartitionDescriptor) - sizeof(AvbDescriptor);
294*d289c2baSAndroid Build Coastguard Worker h.parent_descriptor.num_bytes_following = htobe64(nbf);
295*d289c2baSAndroid Build Coastguard Worker h.parent_descriptor.tag = htobe64(AVB_DESCRIPTOR_TAG_CHAIN_PARTITION);
296*d289c2baSAndroid Build Coastguard Worker h.rollback_index_location = htobe32(42);
297*d289c2baSAndroid Build Coastguard Worker h.partition_name_len = htobe32(16);
298*d289c2baSAndroid Build Coastguard Worker h.public_key_len = htobe32(17);
299*d289c2baSAndroid Build Coastguard Worker
300*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_chain_partition_descriptor_validate_and_byteswap(&h, &s));
301*d289c2baSAndroid Build Coastguard Worker
302*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(AVB_DESCRIPTOR_TAG_CHAIN_PARTITION, s.parent_descriptor.tag);
303*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(nbf, s.parent_descriptor.num_bytes_following);
304*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(42UL, s.rollback_index_location);
305*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(16UL, s.partition_name_len);
306*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(17UL, s.public_key_len);
307*d289c2baSAndroid Build Coastguard Worker
308*d289c2baSAndroid Build Coastguard Worker // Check for bad tag.
309*d289c2baSAndroid Build Coastguard Worker bad = h;
310*d289c2baSAndroid Build Coastguard Worker bad.parent_descriptor.tag = htobe64(0xf00dd00d);
311*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_chain_partition_descriptor_validate_and_byteswap(&bad, &s));
312*d289c2baSAndroid Build Coastguard Worker
313*d289c2baSAndroid Build Coastguard Worker // Check for bad rollback index slot (must be at least 1).
314*d289c2baSAndroid Build Coastguard Worker bad = h;
315*d289c2baSAndroid Build Coastguard Worker bad.rollback_index_location = htobe32(0);
316*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_chain_partition_descriptor_validate_and_byteswap(&bad, &s));
317*d289c2baSAndroid Build Coastguard Worker
318*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 40 bytes (24 + 17 = 41).
319*d289c2baSAndroid Build Coastguard Worker bad = h;
320*d289c2baSAndroid Build Coastguard Worker bad.partition_name_len = htobe32(24);
321*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_chain_partition_descriptor_validate_and_byteswap(&bad, &s));
322*d289c2baSAndroid Build Coastguard Worker
323*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 40 bytes (16 + 25 = 41).
324*d289c2baSAndroid Build Coastguard Worker bad = h;
325*d289c2baSAndroid Build Coastguard Worker bad.public_key_len = htobe32(25);
326*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_chain_partition_descriptor_validate_and_byteswap(&bad, &s));
327*d289c2baSAndroid Build Coastguard Worker }
328*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,PropertyDescriptorByteswap)329*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, PropertyDescriptorByteswap) {
330*d289c2baSAndroid Build Coastguard Worker AvbPropertyDescriptor h;
331*d289c2baSAndroid Build Coastguard Worker AvbPropertyDescriptor s;
332*d289c2baSAndroid Build Coastguard Worker AvbPropertyDescriptor bad;
333*d289c2baSAndroid Build Coastguard Worker uint64_t nbf;
334*d289c2baSAndroid Build Coastguard Worker
335*d289c2baSAndroid Build Coastguard Worker // Specify 40 bytes of data past the end of the descriptor struct.
336*d289c2baSAndroid Build Coastguard Worker nbf = 40 + sizeof(AvbPropertyDescriptor) - sizeof(AvbDescriptor);
337*d289c2baSAndroid Build Coastguard Worker h.parent_descriptor.num_bytes_following = htobe64(nbf);
338*d289c2baSAndroid Build Coastguard Worker h.parent_descriptor.tag = htobe64(AVB_DESCRIPTOR_TAG_PROPERTY);
339*d289c2baSAndroid Build Coastguard Worker h.key_num_bytes = htobe64(16);
340*d289c2baSAndroid Build Coastguard Worker h.value_num_bytes = htobe64(17);
341*d289c2baSAndroid Build Coastguard Worker
342*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_property_descriptor_validate_and_byteswap(&h, &s));
343*d289c2baSAndroid Build Coastguard Worker
344*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(AVB_DESCRIPTOR_TAG_PROPERTY, s.parent_descriptor.tag);
345*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(nbf, s.parent_descriptor.num_bytes_following);
346*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(16UL, s.key_num_bytes);
347*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(17UL, s.value_num_bytes);
348*d289c2baSAndroid Build Coastguard Worker
349*d289c2baSAndroid Build Coastguard Worker // Check for bad tag.
350*d289c2baSAndroid Build Coastguard Worker bad = h;
351*d289c2baSAndroid Build Coastguard Worker bad.parent_descriptor.tag = htobe64(0xf00dd00d);
352*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_property_descriptor_validate_and_byteswap(&bad, &s));
353*d289c2baSAndroid Build Coastguard Worker
354*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 40 bytes (22 + 17 + 2 = 41).
355*d289c2baSAndroid Build Coastguard Worker bad = h;
356*d289c2baSAndroid Build Coastguard Worker bad.key_num_bytes = htobe64(22);
357*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_property_descriptor_validate_and_byteswap(&bad, &s));
358*d289c2baSAndroid Build Coastguard Worker
359*d289c2baSAndroid Build Coastguard Worker // Doesn't fit in 40 bytes (16 + 23 + 2 = 41).
360*d289c2baSAndroid Build Coastguard Worker bad = h;
361*d289c2baSAndroid Build Coastguard Worker bad.value_num_bytes = htobe64(23);
362*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_property_descriptor_validate_and_byteswap(&bad, &s));
363*d289c2baSAndroid Build Coastguard Worker }
364*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,DescriptorByteswap)365*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, DescriptorByteswap) {
366*d289c2baSAndroid Build Coastguard Worker AvbDescriptor h;
367*d289c2baSAndroid Build Coastguard Worker AvbDescriptor s;
368*d289c2baSAndroid Build Coastguard Worker uint64_t n64;
369*d289c2baSAndroid Build Coastguard Worker
370*d289c2baSAndroid Build Coastguard Worker n64 = 0x1122334455667788;
371*d289c2baSAndroid Build Coastguard Worker
372*d289c2baSAndroid Build Coastguard Worker h.num_bytes_following = htobe64(n64);
373*d289c2baSAndroid Build Coastguard Worker n64++;
374*d289c2baSAndroid Build Coastguard Worker h.tag = htobe64(n64);
375*d289c2baSAndroid Build Coastguard Worker n64++;
376*d289c2baSAndroid Build Coastguard Worker
377*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_descriptor_validate_and_byteswap(&h, &s));
378*d289c2baSAndroid Build Coastguard Worker
379*d289c2baSAndroid Build Coastguard Worker n64 = 0x1122334455667788;
380*d289c2baSAndroid Build Coastguard Worker
381*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n64, s.num_bytes_following);
382*d289c2baSAndroid Build Coastguard Worker n64++;
383*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(n64, s.tag);
384*d289c2baSAndroid Build Coastguard Worker n64++;
385*d289c2baSAndroid Build Coastguard Worker
386*d289c2baSAndroid Build Coastguard Worker // Check that we catch if |num_bytes_following| isn't divisble by 8.
387*d289c2baSAndroid Build Coastguard Worker h.num_bytes_following = htobe64(7);
388*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_descriptor_validate_and_byteswap(&h, &s));
389*d289c2baSAndroid Build Coastguard Worker }
390*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,SafeAddition)391*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, SafeAddition) {
392*d289c2baSAndroid Build Coastguard Worker uint64_t value;
393*d289c2baSAndroid Build Coastguard Worker uint64_t pow2_60 = 1ULL << 60;
394*d289c2baSAndroid Build Coastguard Worker
395*d289c2baSAndroid Build Coastguard Worker value = 2;
396*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_safe_add_to(&value, 5));
397*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(7UL, value);
398*d289c2baSAndroid Build Coastguard Worker
399*d289c2baSAndroid Build Coastguard Worker /* These should not overflow */
400*d289c2baSAndroid Build Coastguard Worker value = 1 * pow2_60;
401*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_safe_add_to(&value, 2 * pow2_60));
402*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(3 * pow2_60, value);
403*d289c2baSAndroid Build Coastguard Worker value = 7 * pow2_60;
404*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_safe_add_to(&value, 8 * pow2_60));
405*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(15 * pow2_60, value);
406*d289c2baSAndroid Build Coastguard Worker value = 9 * pow2_60;
407*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_safe_add_to(&value, 3 * pow2_60));
408*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(12 * pow2_60, value);
409*d289c2baSAndroid Build Coastguard Worker value = 0xfffffffffffffffcUL;
410*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_safe_add_to(&value, 2));
411*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0xfffffffffffffffeUL, value);
412*d289c2baSAndroid Build Coastguard Worker
413*d289c2baSAndroid Build Coastguard Worker /* These should overflow. */
414*d289c2baSAndroid Build Coastguard Worker value = 8 * pow2_60;
415*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_safe_add_to(&value, 8 * pow2_60));
416*d289c2baSAndroid Build Coastguard Worker value = 0xfffffffffffffffcUL;
417*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_safe_add_to(&value, 4));
418*d289c2baSAndroid Build Coastguard Worker }
419*d289c2baSAndroid Build Coastguard Worker
avb_validate_utf8z(const char * data)420*d289c2baSAndroid Build Coastguard Worker static int avb_validate_utf8z(const char* data) {
421*d289c2baSAndroid Build Coastguard Worker return avb_validate_utf8(reinterpret_cast<const uint8_t*>(data),
422*d289c2baSAndroid Build Coastguard Worker strlen(data));
423*d289c2baSAndroid Build Coastguard Worker }
424*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,UTF8Validation)425*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, UTF8Validation) {
426*d289c2baSAndroid Build Coastguard Worker // These should succeed.
427*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_validate_utf8z("foo bar"));
428*d289c2baSAndroid Build Coastguard Worker // Encoding of U+00E6 LATIN SMALL LETTER AE: æ
429*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_validate_utf8z("foo \xC3\xA6 bar"));
430*d289c2baSAndroid Build Coastguard Worker // Encoding of U+20AC EURO SIGN: €
431*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_validate_utf8z("foo \xE2\x82\xAC bar"));
432*d289c2baSAndroid Build Coastguard Worker // Encoding of U+1F466 BOY:
433*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_validate_utf8z("foo \xF0\x9F\x91\xA6 bar"));
434*d289c2baSAndroid Build Coastguard Worker // All three runes following each other.
435*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_validate_utf8z("\xC3\xA6\xE2\x82\xAC\xF0\x9F\x91\xA6"));
436*d289c2baSAndroid Build Coastguard Worker
437*d289c2baSAndroid Build Coastguard Worker // These should fail.
438*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_validate_utf8z("foo \xF8 bar"));
439*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_validate_utf8z("\xF8"));
440*d289c2baSAndroid Build Coastguard Worker // Stops in the middle of Unicode rune.
441*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_validate_utf8z("foo \xC3"));
442*d289c2baSAndroid Build Coastguard Worker }
443*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,StrConcat)444*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, StrConcat) {
445*d289c2baSAndroid Build Coastguard Worker char buf[8];
446*d289c2baSAndroid Build Coastguard Worker
447*d289c2baSAndroid Build Coastguard Worker // These should succeed.
448*d289c2baSAndroid Build Coastguard Worker EXPECT_NE(0, avb_str_concat(buf, sizeof buf, "foo", 3, "bar1", 4));
449*d289c2baSAndroid Build Coastguard Worker
450*d289c2baSAndroid Build Coastguard Worker // This should fail: Insufficient space.
451*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(0, avb_str_concat(buf, sizeof buf, "foo0", 4, "bar1", 4));
452*d289c2baSAndroid Build Coastguard Worker }
453*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,StrStr)454*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, StrStr) {
455*d289c2baSAndroid Build Coastguard Worker const char* haystack = "abc def abcabc";
456*d289c2baSAndroid Build Coastguard Worker
457*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(nullptr, avb_strstr(haystack, "needle"));
458*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(haystack, avb_strstr(haystack, "abc"));
459*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(haystack + 4, avb_strstr(haystack, "def"));
460*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(haystack, avb_strstr(haystack, haystack));
461*d289c2baSAndroid Build Coastguard Worker }
462*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,StrvFindStr)463*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, StrvFindStr) {
464*d289c2baSAndroid Build Coastguard Worker const char* strings[] = {"abcabc", "abc", "def", nullptr};
465*d289c2baSAndroid Build Coastguard Worker
466*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(nullptr, avb_strv_find_str(strings, "not there", 9));
467*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(strings[1], avb_strv_find_str(strings, "abc", 3));
468*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(strings[2], avb_strv_find_str(strings, "def", 3));
469*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(strings[0], avb_strv_find_str(strings, "abcabc", 6));
470*d289c2baSAndroid Build Coastguard Worker }
471*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,StrReplace)472*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, StrReplace) {
473*d289c2baSAndroid Build Coastguard Worker char* str;
474*d289c2baSAndroid Build Coastguard Worker
475*d289c2baSAndroid Build Coastguard Worker str = avb_replace("$(FOO) blah bah $(FOO $(FOO) blah", "$(FOO)", "OK");
476*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("OK blah bah $(FOO OK blah", std::string(str));
477*d289c2baSAndroid Build Coastguard Worker avb_free(str);
478*d289c2baSAndroid Build Coastguard Worker
479*d289c2baSAndroid Build Coastguard Worker str = avb_replace("$(FOO)", "$(FOO)", "OK");
480*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("OK", std::string(str));
481*d289c2baSAndroid Build Coastguard Worker avb_free(str);
482*d289c2baSAndroid Build Coastguard Worker
483*d289c2baSAndroid Build Coastguard Worker str = avb_replace(" $(FOO)", "$(FOO)", "OK");
484*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(" OK", std::string(str));
485*d289c2baSAndroid Build Coastguard Worker avb_free(str);
486*d289c2baSAndroid Build Coastguard Worker
487*d289c2baSAndroid Build Coastguard Worker str = avb_replace("$(FOO) ", "$(FOO)", "OK");
488*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("OK ", std::string(str));
489*d289c2baSAndroid Build Coastguard Worker avb_free(str);
490*d289c2baSAndroid Build Coastguard Worker
491*d289c2baSAndroid Build Coastguard Worker str = avb_replace("$(FOO)$(FOO)", "$(FOO)", "LONGSTRING");
492*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("LONGSTRINGLONGSTRING", std::string(str));
493*d289c2baSAndroid Build Coastguard Worker avb_free(str);
494*d289c2baSAndroid Build Coastguard Worker }
495*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,StrDupV)496*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, StrDupV) {
497*d289c2baSAndroid Build Coastguard Worker char* str;
498*d289c2baSAndroid Build Coastguard Worker
499*d289c2baSAndroid Build Coastguard Worker str = avb_strdupv("x", "y", "z", NULL);
500*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("xyz", std::string(str));
501*d289c2baSAndroid Build Coastguard Worker avb_free(str);
502*d289c2baSAndroid Build Coastguard Worker
503*d289c2baSAndroid Build Coastguard Worker str = avb_strdupv("Hello", "World", " XYZ", NULL);
504*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("HelloWorld XYZ", std::string(str));
505*d289c2baSAndroid Build Coastguard Worker avb_free(str);
506*d289c2baSAndroid Build Coastguard Worker }
507*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,Crc32)508*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, Crc32) {
509*d289c2baSAndroid Build Coastguard Worker /* Compare with output of crc32(1):
510*d289c2baSAndroid Build Coastguard Worker *
511*d289c2baSAndroid Build Coastguard Worker * $ (echo -n foobar > /tmp/crc32_input); crc32 /tmp/crc32_input
512*d289c2baSAndroid Build Coastguard Worker * 9ef61f95
513*d289c2baSAndroid Build Coastguard Worker */
514*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(uint32_t(0x9ef61f95), avb_crc32((const uint8_t*)"foobar", 6));
515*d289c2baSAndroid Build Coastguard Worker }
516*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,htobe32)517*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, htobe32) {
518*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(avb_htobe32(0x12345678), htobe32(0x12345678));
519*d289c2baSAndroid Build Coastguard Worker }
520*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,be32toh)521*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, be32toh) {
522*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(avb_be32toh(0x12345678), be32toh(0x12345678));
523*d289c2baSAndroid Build Coastguard Worker }
524*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,htobe64)525*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, htobe64) {
526*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(avb_htobe64(0x123456789abcdef0), htobe64(0x123456789abcdef0));
527*d289c2baSAndroid Build Coastguard Worker }
528*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,be64toh)529*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, be64toh) {
530*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ(avb_be64toh(0x123456789abcdef0), be64toh(0x123456789abcdef0));
531*d289c2baSAndroid Build Coastguard Worker }
532*d289c2baSAndroid Build Coastguard Worker
TEST_F(UtilTest,Basename)533*d289c2baSAndroid Build Coastguard Worker TEST_F(UtilTest, Basename) {
534*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("foobar.c", std::string(avb_basename("foobar.c")));
535*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("foobar.c", std::string(avb_basename("/path/to/foobar.c")));
536*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("foobar.c", std::string(avb_basename("a/foobar.c")));
537*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("baz.c", std::string(avb_basename("/baz.c")));
538*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("some_dir/", std::string(avb_basename("some_dir/")));
539*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("some_dir/", std::string(avb_basename("/path/to/some_dir/")));
540*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("some_dir/", std::string(avb_basename("a/some_dir/")));
541*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("some_dir/", std::string(avb_basename("/some_dir/")));
542*d289c2baSAndroid Build Coastguard Worker EXPECT_EQ("/", std::string(avb_basename("/")));
543*d289c2baSAndroid Build Coastguard Worker }
544*d289c2baSAndroid Build Coastguard Worker
545*d289c2baSAndroid Build Coastguard Worker } // namespace avb
546