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