xref: /aosp_15_r20/external/vboot_reference/tests/cbfstool_tests.c (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
1*8617a60dSAndroid Build Coastguard Worker /* Copyright 2024 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 <sys/stat.h>
7*8617a60dSAndroid Build Coastguard Worker #include <sys/types.h>
8*8617a60dSAndroid Build Coastguard Worker #include <unistd.h>
9*8617a60dSAndroid Build Coastguard Worker 
10*8617a60dSAndroid Build Coastguard Worker #include "2return_codes.h"
11*8617a60dSAndroid Build Coastguard Worker #include "cbfstool.h"
12*8617a60dSAndroid Build Coastguard Worker #include "common/tests.h"
13*8617a60dSAndroid Build Coastguard Worker 
14*8617a60dSAndroid Build Coastguard Worker #define ME "cbfstool_tests"
15*8617a60dSAndroid Build Coastguard Worker 
16*8617a60dSAndroid Build Coastguard Worker /* Utility functions. */
17*8617a60dSAndroid Build Coastguard Worker 
is_file(const char * path)18*8617a60dSAndroid Build Coastguard Worker static bool is_file(const char *path)
19*8617a60dSAndroid Build Coastguard Worker {
20*8617a60dSAndroid Build Coastguard Worker 	struct stat st = {0};
21*8617a60dSAndroid Build Coastguard Worker 	return stat(path, &st) == 0 && S_ISREG(st.st_mode);
22*8617a60dSAndroid Build Coastguard Worker }
23*8617a60dSAndroid Build Coastguard Worker 
24*8617a60dSAndroid Build Coastguard Worker /* Setup and teardown functions. */
25*8617a60dSAndroid Build Coastguard Worker 
26*8617a60dSAndroid Build Coastguard Worker const char *tmp_dir;
27*8617a60dSAndroid Build Coastguard Worker 
setup(void)28*8617a60dSAndroid Build Coastguard Worker static void setup(void)
29*8617a60dSAndroid Build Coastguard Worker {
30*8617a60dSAndroid Build Coastguard Worker 	tmp_dir = create_test_tmp_dir(ME);
31*8617a60dSAndroid Build Coastguard Worker }
32*8617a60dSAndroid Build Coastguard Worker 
teardown(void)33*8617a60dSAndroid Build Coastguard Worker static void teardown(void)
34*8617a60dSAndroid Build Coastguard Worker {
35*8617a60dSAndroid Build Coastguard Worker 	free((char *)tmp_dir);
36*8617a60dSAndroid Build Coastguard Worker }
37*8617a60dSAndroid Build Coastguard Worker 
38*8617a60dSAndroid Build Coastguard Worker /* Test functions. */
39*8617a60dSAndroid Build Coastguard Worker 
40*8617a60dSAndroid Build Coastguard Worker #define IMAGE "tests/futility/data/bios_coachz_cbfs.bin"
41*8617a60dSAndroid Build Coastguard Worker 
cbfstool_file_exists_tests(void)42*8617a60dSAndroid Build Coastguard Worker static void cbfstool_file_exists_tests(void)
43*8617a60dSAndroid Build Coastguard Worker {
44*8617a60dSAndroid Build Coastguard Worker 	/* Region not exists. */
45*8617a60dSAndroid Build Coastguard Worker 	TEST_FALSE(cbfstool_file_exists(IMAGE, "NO_SUCH_REGION", "config"),
46*8617a60dSAndroid Build Coastguard Worker 		   "region NO_SUCH_REGION not exists");
47*8617a60dSAndroid Build Coastguard Worker 
48*8617a60dSAndroid Build Coastguard Worker 	/* Default FMAP region. */
49*8617a60dSAndroid Build Coastguard Worker 	TEST_TRUE(cbfstool_file_exists(IMAGE, NULL, "font.bin"),
50*8617a60dSAndroid Build Coastguard Worker 		  "font.bin found in COREBOOT");
51*8617a60dSAndroid Build Coastguard Worker 
52*8617a60dSAndroid Build Coastguard Worker 	/* File not found. */
53*8617a60dSAndroid Build Coastguard Worker 	TEST_FALSE(cbfstool_file_exists(IMAGE, "FW_MAIN_A", "font.bin"),
54*8617a60dSAndroid Build Coastguard Worker 		   "font.bin not found in FW_MAIN_A");
55*8617a60dSAndroid Build Coastguard Worker 
56*8617a60dSAndroid Build Coastguard Worker 	/* File found in specified region. */
57*8617a60dSAndroid Build Coastguard Worker 	TEST_TRUE(cbfstool_file_exists(IMAGE, "FW_MAIN_A", "ecrw"),
58*8617a60dSAndroid Build Coastguard Worker 		  "ecrw found in FW_MAIN_A");
59*8617a60dSAndroid Build Coastguard Worker }
60*8617a60dSAndroid Build Coastguard Worker 
cbfstool_extract_tests(void)61*8617a60dSAndroid Build Coastguard Worker static void cbfstool_extract_tests(void)
62*8617a60dSAndroid Build Coastguard Worker {
63*8617a60dSAndroid Build Coastguard Worker 	char *tmp_file = NULL;
64*8617a60dSAndroid Build Coastguard Worker 	xasprintf(&tmp_file, "%s/tmp_file", tmp_dir);
65*8617a60dSAndroid Build Coastguard Worker 
66*8617a60dSAndroid Build Coastguard Worker 	/* Default FMAP region. */
67*8617a60dSAndroid Build Coastguard Worker 	unlink(tmp_file);
68*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(cbfstool_extract(IMAGE, NULL, "font.bin", tmp_file), 0,
69*8617a60dSAndroid Build Coastguard Worker 		"extract font.bin from COREBOOT");
70*8617a60dSAndroid Build Coastguard Worker 	TEST_TRUE(is_file(tmp_file), "  extracted");
71*8617a60dSAndroid Build Coastguard Worker 
72*8617a60dSAndroid Build Coastguard Worker 	/* File not found. */
73*8617a60dSAndroid Build Coastguard Worker 	unlink(tmp_file);
74*8617a60dSAndroid Build Coastguard Worker 	TEST_NEQ(cbfstool_extract(IMAGE, "FW_MAIN_A", "font.bin", tmp_file), 0,
75*8617a60dSAndroid Build Coastguard Worker 		 "extract font.bin from FW_MAIN_A");
76*8617a60dSAndroid Build Coastguard Worker 
77*8617a60dSAndroid Build Coastguard Worker 	/* File from specified region. */
78*8617a60dSAndroid Build Coastguard Worker 	unlink(tmp_file);
79*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(cbfstool_extract(IMAGE, "FW_MAIN_A", "ecrw", tmp_file), 0,
80*8617a60dSAndroid Build Coastguard Worker 		"extract ecrw from FW_MAIN_A");
81*8617a60dSAndroid Build Coastguard Worker 	TEST_TRUE(is_file(tmp_file), "  extracted");
82*8617a60dSAndroid Build Coastguard Worker 
83*8617a60dSAndroid Build Coastguard Worker 	free(tmp_file);
84*8617a60dSAndroid Build Coastguard Worker }
85*8617a60dSAndroid Build Coastguard Worker 
cbfstool_get_config_bool_tests(void)86*8617a60dSAndroid Build Coastguard Worker static void cbfstool_get_config_bool_tests(void)
87*8617a60dSAndroid Build Coastguard Worker {
88*8617a60dSAndroid Build Coastguard Worker 	bool value;
89*8617a60dSAndroid Build Coastguard Worker 	vb2_error_t rv;
90*8617a60dSAndroid Build Coastguard Worker 
91*8617a60dSAndroid Build Coastguard Worker 	/* File not found */
92*8617a60dSAndroid Build Coastguard Worker 	value = true;
93*8617a60dSAndroid Build Coastguard Worker 	rv = cbfstool_get_config_bool("no_such_file", NULL,
94*8617a60dSAndroid Build Coastguard Worker 				      "CONFIG_CHROMEOS", &value);
95*8617a60dSAndroid Build Coastguard Worker 	TEST_FAIL(rv, "file not found");
96*8617a60dSAndroid Build Coastguard Worker 	TEST_FALSE(value, "  value is false");
97*8617a60dSAndroid Build Coastguard Worker 
98*8617a60dSAndroid Build Coastguard Worker 	/* Config not found */
99*8617a60dSAndroid Build Coastguard Worker 	value = true;
100*8617a60dSAndroid Build Coastguard Worker 	rv = cbfstool_get_config_bool(IMAGE, NULL,
101*8617a60dSAndroid Build Coastguard Worker 				      "CONFIG_NOT_FOUND", &value);
102*8617a60dSAndroid Build Coastguard Worker 	TEST_SUCC(rv, "config not found");
103*8617a60dSAndroid Build Coastguard Worker 	TEST_FALSE(value, "  value is false");
104*8617a60dSAndroid Build Coastguard Worker 
105*8617a60dSAndroid Build Coastguard Worker 	/* Config CHROMEOS */
106*8617a60dSAndroid Build Coastguard Worker 	value = false;
107*8617a60dSAndroid Build Coastguard Worker 	rv = cbfstool_get_config_bool(IMAGE, NULL,
108*8617a60dSAndroid Build Coastguard Worker 				      "CONFIG_CHROMEOS", &value);
109*8617a60dSAndroid Build Coastguard Worker 	TEST_SUCC(rv, "get CHROMEOS value");
110*8617a60dSAndroid Build Coastguard Worker 	TEST_TRUE(value, "  value is true");
111*8617a60dSAndroid Build Coastguard Worker 
112*8617a60dSAndroid Build Coastguard Worker 	/* Config CHROMEOS from FW_MAIN_A */
113*8617a60dSAndroid Build Coastguard Worker 	value = false;
114*8617a60dSAndroid Build Coastguard Worker 	rv = cbfstool_get_config_bool(IMAGE, "FW_MAIN_A",
115*8617a60dSAndroid Build Coastguard Worker 				      "CONFIG_CHROMEOS", &value);
116*8617a60dSAndroid Build Coastguard Worker 	TEST_SUCC(rv, "get CHROMEOS value from FW_MAIN_A");
117*8617a60dSAndroid Build Coastguard Worker 	TEST_TRUE(value, "  value is true");
118*8617a60dSAndroid Build Coastguard Worker }
119*8617a60dSAndroid Build Coastguard Worker 
cbfstool_get_config_string_tests(void)120*8617a60dSAndroid Build Coastguard Worker static void cbfstool_get_config_string_tests(void)
121*8617a60dSAndroid Build Coastguard Worker {
122*8617a60dSAndroid Build Coastguard Worker 	char *value;
123*8617a60dSAndroid Build Coastguard Worker 	char init_value[] = "INIT_VALUE";
124*8617a60dSAndroid Build Coastguard Worker 	vb2_error_t rv;
125*8617a60dSAndroid Build Coastguard Worker 
126*8617a60dSAndroid Build Coastguard Worker 	/* Config not found */
127*8617a60dSAndroid Build Coastguard Worker 	value = init_value;
128*8617a60dSAndroid Build Coastguard Worker 	rv = cbfstool_get_config_string(IMAGE, NULL,
129*8617a60dSAndroid Build Coastguard Worker 					"CONFIG_NOT_FOUND", &value);
130*8617a60dSAndroid Build Coastguard Worker 	TEST_FAIL(rv, "config not found");
131*8617a60dSAndroid Build Coastguard Worker 	TEST_PTR_EQ(value, NULL, "  value is null");
132*8617a60dSAndroid Build Coastguard Worker 
133*8617a60dSAndroid Build Coastguard Worker 	/* Config MAINBOARD_PART_NUMBER */
134*8617a60dSAndroid Build Coastguard Worker 	value = NULL;
135*8617a60dSAndroid Build Coastguard Worker 	rv = cbfstool_get_config_string(IMAGE, NULL,
136*8617a60dSAndroid Build Coastguard Worker 					"CONFIG_MAINBOARD_PART_NUMBER", &value);
137*8617a60dSAndroid Build Coastguard Worker 	TEST_SUCC(rv, "get MAINBOARD_PART_NUMBER value");
138*8617a60dSAndroid Build Coastguard Worker 	TEST_PTR_NEQ(value, NULL, "  value not null");
139*8617a60dSAndroid Build Coastguard Worker 	TEST_EQ(strcmp(value, "Coachz"), 0, "  value is Coachz");
140*8617a60dSAndroid Build Coastguard Worker }
141*8617a60dSAndroid Build Coastguard Worker 
main(int argc,char * argv[])142*8617a60dSAndroid Build Coastguard Worker int main(int argc, char *argv[])
143*8617a60dSAndroid Build Coastguard Worker {
144*8617a60dSAndroid Build Coastguard Worker 	setup();
145*8617a60dSAndroid Build Coastguard Worker 
146*8617a60dSAndroid Build Coastguard Worker 	cbfstool_file_exists_tests();
147*8617a60dSAndroid Build Coastguard Worker 	cbfstool_extract_tests();
148*8617a60dSAndroid Build Coastguard Worker 	cbfstool_get_config_bool_tests();
149*8617a60dSAndroid Build Coastguard Worker 	cbfstool_get_config_string_tests();
150*8617a60dSAndroid Build Coastguard Worker 
151*8617a60dSAndroid Build Coastguard Worker 	teardown();
152*8617a60dSAndroid Build Coastguard Worker 
153*8617a60dSAndroid Build Coastguard Worker 	return gTestSuccess ? 0 : 255;
154*8617a60dSAndroid Build Coastguard Worker }
155