xref: /aosp_15_r20/external/vboot_reference/tests/chromeos_config_tests.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2020 The ChromiumOS Authors
2*8617a60dSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
3*8617a60dSAndroid Build Coastguard Worker  * found in the LICENSE file.
4*8617a60dSAndroid Build Coastguard Worker  */
5*8617a60dSAndroid Build Coastguard Worker 
6*8617a60dSAndroid Build Coastguard Worker #include <stdbool.h>
7*8617a60dSAndroid Build Coastguard Worker #include <stdint.h>
8*8617a60dSAndroid Build Coastguard Worker #include <stdlib.h>
9*8617a60dSAndroid Build Coastguard Worker #include <string.h>
10*8617a60dSAndroid Build Coastguard Worker 
11*8617a60dSAndroid Build Coastguard Worker #include "2common.h"
12*8617a60dSAndroid Build Coastguard Worker #include "2return_codes.h"
13*8617a60dSAndroid Build Coastguard Worker #include "chromeos_config.h"
14*8617a60dSAndroid Build Coastguard Worker #include "common/tests.h"
15*8617a60dSAndroid Build Coastguard Worker #include "host_misc.h"
16*8617a60dSAndroid Build Coastguard Worker 
17*8617a60dSAndroid Build Coastguard Worker static struct {
18*8617a60dSAndroid Build Coastguard Worker 	const char *path;
19*8617a60dSAndroid Build Coastguard Worker 	const char *data;
20*8617a60dSAndroid Build Coastguard Worker } fakefs[] = {
21*8617a60dSAndroid Build Coastguard Worker 	{"/run/chromeos-config/v1/name", "bleh_model"},
22*8617a60dSAndroid Build Coastguard Worker 	{"/run/chromeos-config/v1/brand-code", "ZZCR"},
23*8617a60dSAndroid Build Coastguard Worker 	{"/run/chromeos-config/v1/identity/sku-id", "7"},
24*8617a60dSAndroid Build Coastguard Worker 	{"/run/chromeos-config/v1/firmware/image-name", "bloop"},
25*8617a60dSAndroid Build Coastguard Worker 	{"/run/chromeos-config/v1/auto-night-light", "true"},
26*8617a60dSAndroid Build Coastguard Worker 	{"/run/chromeos-config/v1/hardware-properties/is-lid-convertible",
27*8617a60dSAndroid Build Coastguard Worker 	 "false"},
28*8617a60dSAndroid Build Coastguard Worker };
29*8617a60dSAndroid Build Coastguard Worker 
vb2_read_file(const char * filepath,uint8_t ** data_ptr,uint32_t * size_ptr)30*8617a60dSAndroid Build Coastguard Worker vb2_error_t vb2_read_file(const char *filepath, uint8_t **data_ptr,
31*8617a60dSAndroid Build Coastguard Worker 			  uint32_t *size_ptr)
32*8617a60dSAndroid Build Coastguard Worker {
33*8617a60dSAndroid Build Coastguard Worker 	*data_ptr = NULL;
34*8617a60dSAndroid Build Coastguard Worker 	*size_ptr = 0;
35*8617a60dSAndroid Build Coastguard Worker 
36*8617a60dSAndroid Build Coastguard Worker 	for (size_t i = 0; i < ARRAY_SIZE(fakefs); i++) {
37*8617a60dSAndroid Build Coastguard Worker 		if (!strcmp(fakefs[i].path, filepath)) {
38*8617a60dSAndroid Build Coastguard Worker 			*size_ptr = strlen(fakefs[i].data);
39*8617a60dSAndroid Build Coastguard Worker 			*data_ptr = malloc(*size_ptr);
40*8617a60dSAndroid Build Coastguard Worker 
41*8617a60dSAndroid Build Coastguard Worker 			if (!*data_ptr)
42*8617a60dSAndroid Build Coastguard Worker 				return VB2_ERROR_READ_FILE_ALLOC;
43*8617a60dSAndroid Build Coastguard Worker 
44*8617a60dSAndroid Build Coastguard Worker 			memcpy(*data_ptr, fakefs[i].data, *size_ptr);
45*8617a60dSAndroid Build Coastguard Worker 			return VB2_SUCCESS;
46*8617a60dSAndroid Build Coastguard Worker 		}
47*8617a60dSAndroid Build Coastguard Worker 	}
48*8617a60dSAndroid Build Coastguard Worker 
49*8617a60dSAndroid Build Coastguard Worker 	return VB2_ERROR_READ_FILE_OPEN;
50*8617a60dSAndroid Build Coastguard Worker }
51*8617a60dSAndroid Build Coastguard Worker 
test_get_string(void)52*8617a60dSAndroid Build Coastguard Worker static void test_get_string(void)
53*8617a60dSAndroid Build Coastguard Worker {
54*8617a60dSAndroid Build Coastguard Worker 	char *val_out;
55*8617a60dSAndroid Build Coastguard Worker 
56*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(chromeos_config_get_string("/firmware", "image-name", &val_out),
57*8617a60dSAndroid Build Coastguard Worker 		VB2_SUCCESS, "Reading a string is successful");
58*8617a60dSAndroid Build Coastguard Worker 	TEST_STR_EQ(val_out, "bloop", "The string is the correct value");
59*8617a60dSAndroid Build Coastguard Worker 	free(val_out);
60*8617a60dSAndroid Build Coastguard Worker }
61*8617a60dSAndroid Build Coastguard Worker 
test_get_boolean_true(void)62*8617a60dSAndroid Build Coastguard Worker static void test_get_boolean_true(void)
63*8617a60dSAndroid Build Coastguard Worker {
64*8617a60dSAndroid Build Coastguard Worker 	bool val_out;
65*8617a60dSAndroid Build Coastguard Worker 
66*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(chromeos_config_get_boolean("/", "auto-night-light", &val_out),
67*8617a60dSAndroid Build Coastguard Worker 		VB2_SUCCESS, "Reading a true boolean is successful");
68*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(val_out, true, "The resulting boolean is true");
69*8617a60dSAndroid Build Coastguard Worker }
70*8617a60dSAndroid Build Coastguard Worker 
test_get_boolean_false(void)71*8617a60dSAndroid Build Coastguard Worker static void test_get_boolean_false(void)
72*8617a60dSAndroid Build Coastguard Worker {
73*8617a60dSAndroid Build Coastguard Worker 	bool val_out;
74*8617a60dSAndroid Build Coastguard Worker 
75*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(chromeos_config_get_boolean("/hardware-properties",
76*8617a60dSAndroid Build Coastguard Worker 					    "is-lid-convertible", &val_out),
77*8617a60dSAndroid Build Coastguard Worker 		VB2_SUCCESS, "Reading a false boolean is successful");
78*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(val_out, false, "The resulting boolean is false");
79*8617a60dSAndroid Build Coastguard Worker }
80*8617a60dSAndroid Build Coastguard Worker 
test_get_integer(void)81*8617a60dSAndroid Build Coastguard Worker static void test_get_integer(void)
82*8617a60dSAndroid Build Coastguard Worker {
83*8617a60dSAndroid Build Coastguard Worker 	int val_out;
84*8617a60dSAndroid Build Coastguard Worker 
85*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(chromeos_config_get_integer("/identity", "sku-id", &val_out),
86*8617a60dSAndroid Build Coastguard Worker 		VB2_SUCCESS, "Reading an integer is successful");
87*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(val_out, 7, "The resulting integer is correct");
88*8617a60dSAndroid Build Coastguard Worker }
89*8617a60dSAndroid Build Coastguard Worker 
test_get_no_exist(void)90*8617a60dSAndroid Build Coastguard Worker static void test_get_no_exist(void)
91*8617a60dSAndroid Build Coastguard Worker {
92*8617a60dSAndroid Build Coastguard Worker 	char *val_out;
93*8617a60dSAndroid Build Coastguard Worker 
94*8617a60dSAndroid Build Coastguard Worker 	TEST_NEQ(
95*8617a60dSAndroid Build Coastguard Worker 		chromeos_config_get_string("/this/does", "not-exist", &val_out),
96*8617a60dSAndroid Build Coastguard Worker 		VB2_SUCCESS, "Reading non-existent property fails");
97*8617a60dSAndroid Build Coastguard Worker 	free(val_out);
98*8617a60dSAndroid Build Coastguard Worker }
99*8617a60dSAndroid Build Coastguard Worker 
test_get_bad_path(void)100*8617a60dSAndroid Build Coastguard Worker static void test_get_bad_path(void)
101*8617a60dSAndroid Build Coastguard Worker {
102*8617a60dSAndroid Build Coastguard Worker 	char *val_out;
103*8617a60dSAndroid Build Coastguard Worker 
104*8617a60dSAndroid Build Coastguard Worker 	TEST_NEQ(chromeos_config_get_string("name", "name", &val_out),
105*8617a60dSAndroid Build Coastguard Worker 		 VB2_SUCCESS, "Reading bad path fails");
106*8617a60dSAndroid Build Coastguard Worker 	free(val_out);
107*8617a60dSAndroid Build Coastguard Worker }
108*8617a60dSAndroid Build Coastguard Worker 
test_get_bad_path2(void)109*8617a60dSAndroid Build Coastguard Worker static void test_get_bad_path2(void)
110*8617a60dSAndroid Build Coastguard Worker {
111*8617a60dSAndroid Build Coastguard Worker 	char *val_out;
112*8617a60dSAndroid Build Coastguard Worker 
113*8617a60dSAndroid Build Coastguard Worker 	TEST_NEQ(chromeos_config_get_string("//name", "name", &val_out),
114*8617a60dSAndroid Build Coastguard Worker 		 VB2_SUCCESS, "Reading bad path fails");
115*8617a60dSAndroid Build Coastguard Worker 	free(val_out);
116*8617a60dSAndroid Build Coastguard Worker }
117*8617a60dSAndroid Build Coastguard Worker 
test_get_bad_property(void)118*8617a60dSAndroid Build Coastguard Worker static void test_get_bad_property(void)
119*8617a60dSAndroid Build Coastguard Worker {
120*8617a60dSAndroid Build Coastguard Worker 	char *val_out;
121*8617a60dSAndroid Build Coastguard Worker 
122*8617a60dSAndroid Build Coastguard Worker 	TEST_NEQ(chromeos_config_get_string("/firmware", "/image-name",
123*8617a60dSAndroid Build Coastguard Worker 					    &val_out),
124*8617a60dSAndroid Build Coastguard Worker 		 VB2_SUCCESS, "Reading bad property fails");
125*8617a60dSAndroid Build Coastguard Worker 	free(val_out);
126*8617a60dSAndroid Build Coastguard Worker }
127*8617a60dSAndroid Build Coastguard Worker 
test_get_not_boolean(void)128*8617a60dSAndroid Build Coastguard Worker static void test_get_not_boolean(void)
129*8617a60dSAndroid Build Coastguard Worker {
130*8617a60dSAndroid Build Coastguard Worker 	bool val_out;
131*8617a60dSAndroid Build Coastguard Worker 
132*8617a60dSAndroid Build Coastguard Worker 	TEST_NEQ(chromeos_config_get_boolean("/identity", "sku-id", &val_out),
133*8617a60dSAndroid Build Coastguard Worker 		 VB2_SUCCESS, "Reading integer as boolean fails");
134*8617a60dSAndroid Build Coastguard Worker }
135*8617a60dSAndroid Build Coastguard Worker 
test_get_not_integer(void)136*8617a60dSAndroid Build Coastguard Worker static void test_get_not_integer(void)
137*8617a60dSAndroid Build Coastguard Worker {
138*8617a60dSAndroid Build Coastguard Worker 	int val_out;
139*8617a60dSAndroid Build Coastguard Worker 
140*8617a60dSAndroid Build Coastguard Worker 	TEST_NEQ(chromeos_config_get_integer("/", "brand-code", &val_out),
141*8617a60dSAndroid Build Coastguard Worker 		 VB2_SUCCESS, "Reading string as integer fails");
142*8617a60dSAndroid Build Coastguard Worker }
143*8617a60dSAndroid Build Coastguard Worker 
main(int argc,char * argv[])144*8617a60dSAndroid Build Coastguard Worker int main(int argc, char *argv[])
145*8617a60dSAndroid Build Coastguard Worker {
146*8617a60dSAndroid Build Coastguard Worker 	test_get_string();
147*8617a60dSAndroid Build Coastguard Worker 	test_get_boolean_true();
148*8617a60dSAndroid Build Coastguard Worker 	test_get_boolean_false();
149*8617a60dSAndroid Build Coastguard Worker 	test_get_integer();
150*8617a60dSAndroid Build Coastguard Worker 	test_get_no_exist();
151*8617a60dSAndroid Build Coastguard Worker 	test_get_bad_path();
152*8617a60dSAndroid Build Coastguard Worker 	test_get_bad_path2();
153*8617a60dSAndroid Build Coastguard Worker 	test_get_bad_property();
154*8617a60dSAndroid Build Coastguard Worker 	test_get_not_boolean();
155*8617a60dSAndroid Build Coastguard Worker 	test_get_not_integer();
156*8617a60dSAndroid Build Coastguard Worker 
157*8617a60dSAndroid Build Coastguard Worker 	return gTestSuccess ? 0 : 255;
158*8617a60dSAndroid Build Coastguard Worker }
159