/* Copyright 2024 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include #include #include #include "2return_codes.h" #include "cbfstool.h" #include "common/tests.h" #define ME "cbfstool_tests" /* Utility functions. */ static bool is_file(const char *path) { struct stat st = {0}; return stat(path, &st) == 0 && S_ISREG(st.st_mode); } /* Setup and teardown functions. */ const char *tmp_dir; static void setup(void) { tmp_dir = create_test_tmp_dir(ME); } static void teardown(void) { free((char *)tmp_dir); } /* Test functions. */ #define IMAGE "tests/futility/data/bios_coachz_cbfs.bin" static void cbfstool_file_exists_tests(void) { /* Region not exists. */ TEST_FALSE(cbfstool_file_exists(IMAGE, "NO_SUCH_REGION", "config"), "region NO_SUCH_REGION not exists"); /* Default FMAP region. */ TEST_TRUE(cbfstool_file_exists(IMAGE, NULL, "font.bin"), "font.bin found in COREBOOT"); /* File not found. */ TEST_FALSE(cbfstool_file_exists(IMAGE, "FW_MAIN_A", "font.bin"), "font.bin not found in FW_MAIN_A"); /* File found in specified region. */ TEST_TRUE(cbfstool_file_exists(IMAGE, "FW_MAIN_A", "ecrw"), "ecrw found in FW_MAIN_A"); } static void cbfstool_extract_tests(void) { char *tmp_file = NULL; xasprintf(&tmp_file, "%s/tmp_file", tmp_dir); /* Default FMAP region. */ unlink(tmp_file); TEST_EQ(cbfstool_extract(IMAGE, NULL, "font.bin", tmp_file), 0, "extract font.bin from COREBOOT"); TEST_TRUE(is_file(tmp_file), " extracted"); /* File not found. */ unlink(tmp_file); TEST_NEQ(cbfstool_extract(IMAGE, "FW_MAIN_A", "font.bin", tmp_file), 0, "extract font.bin from FW_MAIN_A"); /* File from specified region. */ unlink(tmp_file); TEST_EQ(cbfstool_extract(IMAGE, "FW_MAIN_A", "ecrw", tmp_file), 0, "extract ecrw from FW_MAIN_A"); TEST_TRUE(is_file(tmp_file), " extracted"); free(tmp_file); } static void cbfstool_get_config_bool_tests(void) { bool value; vb2_error_t rv; /* File not found */ value = true; rv = cbfstool_get_config_bool("no_such_file", NULL, "CONFIG_CHROMEOS", &value); TEST_FAIL(rv, "file not found"); TEST_FALSE(value, " value is false"); /* Config not found */ value = true; rv = cbfstool_get_config_bool(IMAGE, NULL, "CONFIG_NOT_FOUND", &value); TEST_SUCC(rv, "config not found"); TEST_FALSE(value, " value is false"); /* Config CHROMEOS */ value = false; rv = cbfstool_get_config_bool(IMAGE, NULL, "CONFIG_CHROMEOS", &value); TEST_SUCC(rv, "get CHROMEOS value"); TEST_TRUE(value, " value is true"); /* Config CHROMEOS from FW_MAIN_A */ value = false; rv = cbfstool_get_config_bool(IMAGE, "FW_MAIN_A", "CONFIG_CHROMEOS", &value); TEST_SUCC(rv, "get CHROMEOS value from FW_MAIN_A"); TEST_TRUE(value, " value is true"); } static void cbfstool_get_config_string_tests(void) { char *value; char init_value[] = "INIT_VALUE"; vb2_error_t rv; /* Config not found */ value = init_value; rv = cbfstool_get_config_string(IMAGE, NULL, "CONFIG_NOT_FOUND", &value); TEST_FAIL(rv, "config not found"); TEST_PTR_EQ(value, NULL, " value is null"); /* Config MAINBOARD_PART_NUMBER */ value = NULL; rv = cbfstool_get_config_string(IMAGE, NULL, "CONFIG_MAINBOARD_PART_NUMBER", &value); TEST_SUCC(rv, "get MAINBOARD_PART_NUMBER value"); TEST_PTR_NEQ(value, NULL, " value not null"); TEST_EQ(strcmp(value, "Coachz"), 0, " value is Coachz"); } int main(int argc, char *argv[]) { setup(); cbfstool_file_exists_tests(); cbfstool_extract_tests(); cbfstool_get_config_bool_tests(); cbfstool_get_config_string_tests(); teardown(); return gTestSuccess ? 0 : 255; }