diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.common | 2 | ||||
-rw-r--r-- | tests/commonlib/bsd/string-test.c | 134 | ||||
-rw-r--r-- | tests/commonlib/region-test.c | 6 | ||||
-rw-r--r-- | tests/drivers/efivars.c | 1 | ||||
-rw-r--r-- | tests/lib/Makefile.mk | 3 | ||||
-rw-r--r-- | tests/lib/b64_decode-test.c | 3 | ||||
-rw-r--r-- | tests/lib/imd-test.c | 2 | ||||
-rw-r--r-- | tests/lib/imd_cbmem-test.c | 4 | ||||
-rw-r--r-- | tests/lib/region_file-test.c | 6 | ||||
-rw-r--r-- | tests/lib/string-test.c | 28 |
10 files changed, 137 insertions, 52 deletions
diff --git a/tests/Makefile.common b/tests/Makefile.common index e856fe07c1..dd7cca29f4 100644 --- a/tests/Makefile.common +++ b/tests/Makefile.common @@ -48,7 +48,7 @@ TEST_INCLUDES += -I$(dir $(TEST_KCONFIG_AUTOHEADER)) # unintentional. TEST_CFLAGS += -Wall -Werror -Wundef -Wstrict-prototypes -Wno-inline-asm TEST_CFLAGS += -Wno-unknown-warning-option -Wno-source-mgr -Wno-main-return-type -TEST_CFLAGS += -Wno-array-compare -Wno-packed-not-aligned -Wno-trigraphs +TEST_CFLAGS += -Wno-array-compare -Wno-trigraphs TEST_CFLAGS += -Wno-unused-but-set-variables TEST_CFLAGS += -std=gnu11 -ffunction-sections -fdata-sections -fno-builtin diff --git a/tests/commonlib/bsd/string-test.c b/tests/commonlib/bsd/string-test.c index d94b82e18c..194177abbb 100644 --- a/tests/commonlib/bsd/string-test.c +++ b/tests/commonlib/bsd/string-test.c @@ -1,24 +1,132 @@ /* SPDX-License-Identifier: GPL-2.0-only */ #include <commonlib/bsd/string.h> +#include <stddef.h> +#include <string.h> #include <tests/test.h> -/* Used to test skip_atoi */ -struct str_with_u_val_t { - char *str; - uint32_t value; - uint32_t offset; -} str_with_u_val[] = { - {"42aa", 42, 2}, - {"a", 0, 0}, - {"0", 0, 1}, - {"4a2", 4, 1}, -}; +static void test_strlen(void **state) +{ + const char *str; + + str = "coreboot"; + assert_int_equal(__builtin_strlen(str), strlen(str)); + + str = "is\0very"; + assert_int_equal(__builtin_strlen(str), strlen(str)); + + str = "nice\n"; + assert_int_equal(__builtin_strlen(str), strlen(str)); + + assert_int_equal(0, strlen("")); +} + +static void test_strnlen(void **state) +{ + /* maxlen is SIZE_MAX */ + assert_int_equal(8, strnlen("coreboot", SIZE_MAX)); + + /* maxlen larger than string len */ + assert_int_equal(8, strnlen("coreboot", 100)); + + /* maxlen equal to string len */ + assert_int_equal(8, strnlen("coreboot", 8)); + + /* maxlen smaller than string len */ + assert_int_equal(5, strnlen("coreboot", 5)); + + /* maxlen is 0 */ + assert_int_equal(0, strnlen("coreboot", 0)); + + /* Empty string */ + assert_int_equal(0, strnlen("", 3)); +} + +static void test_strcat(void **state) +{ + static const char str[] = "Hello "; + size_t len = __builtin_strlen(str); + static const char src[] = "World"; + static const char expected[] = "Hello World"; + size_t expected_len = __builtin_strlen(expected); + char dst[100]; + char *ret; + + /* Empty src & dst */ + dst[0] = '\0'; + memset(dst + 1, 0xee, sizeof(dst) - 1); + ret = strcat(dst, ""); + assert_ptr_equal(dst, ret); + assert_int_equal('\0', dst[0]); + + /* Empty src */ + memcpy(dst, str, len + 1); + memset(dst + len + 1, 0xee, sizeof(dst) - len - 1); + ret = strcat(dst, ""); + assert_memory_equal(str, dst, len + 1); + + /* Empty dst */ + memset(dst, 0x0, sizeof(dst)); + memset(dst + 1, 0xee, sizeof(dst) - 1); + ret = strcat(dst, src); + assert_ptr_equal(dst, ret); + assert_memory_equal(src, dst, __builtin_strlen(src) + 1); + + /* Non-empty str & dst */ + memcpy(dst, str, len + 1); + memset(dst + len + 1, 0xee, sizeof(dst) - len - 1); + ret = strcat(dst, src); + assert_ptr_equal(dst, ret); + assert_memory_equal(expected, dst, expected_len + 1); +} + +static void test_strncat(void **state) +{ + static const char str[] = "Hello "; + size_t len = __builtin_strlen(str); + static const char src[] = "World"; + size_t src_len = __builtin_strlen(src); + static const char expected[] = "Hello World"; + size_t expected_len = __builtin_strlen(expected); + char dst[100]; + char *ret; + + /* n larger than src len */ + memcpy(dst, str, len + 1); + memset(dst + len + 1, 0xee, sizeof(dst) - len - 1); + ret = strncat(dst, src, src_len + 5); + assert_ptr_equal(dst, ret); + assert_memory_equal(expected, dst, expected_len + 1); + + /* n smaller than src len */ + memcpy(dst, str, len + 1); + memset(dst + len + 1, 0xee, sizeof(dst) - len - 1); + ret = strncat(dst, src, src_len - 2); + assert_ptr_equal(dst, ret); + assert_memory_equal("Hello Wor", dst, expected_len - 2 + 1); + + /* n is 0 */ + memcpy(dst, str, len + 1); + memset(dst + len + 1, 0xee, sizeof(dst) - len - 1); + ret = strncat(dst, src, 0); + assert_ptr_equal(dst, ret); + assert_memory_equal(str, dst, len + 1); +} static void test_skip_atoi(void **state) { int i; char *ptr, *copy; + const struct str_with_u_val_t { + char *str; + uint32_t value; + uint32_t offset; + } str_with_u_val[] = { + {"42aa", 42, 2}, + {"a", 0, 0}, + {"0", 0, 1}, + {"4a2", 4, 1}, + }; for (i = 0; i < ARRAY_SIZE(str_with_u_val); i++) { ptr = str_with_u_val[i].str; @@ -31,6 +139,10 @@ static void test_skip_atoi(void **state) int main(void) { const struct CMUnitTest tests[] = { + cmocka_unit_test(test_strlen), + cmocka_unit_test(test_strnlen), + cmocka_unit_test(test_strcat), + cmocka_unit_test(test_strncat), cmocka_unit_test(test_skip_atoi), }; diff --git a/tests/commonlib/region-test.c b/tests/commonlib/region-test.c index 32804825a6..6caa12cad2 100644 --- a/tests/commonlib/region-test.c +++ b/tests/commonlib/region-test.c @@ -17,7 +17,7 @@ static void test_region(void **state) struct region outer = {.offset = VAL(2), .size = VAL(4)}; assert_int_equal(region_offset(&outer), VAL(2)); assert_int_equal(region_sz(&outer), VAL(4)); - assert_int_equal(region_end(&outer), VAL(6)); + assert_int_equal(region_last(&outer), VAL(6) - 1); struct region inner = {.offset = VAL(3), .size = VAL(2)}; assert_true(region_is_subregion(&outer, &inner)); @@ -118,7 +118,7 @@ static void test_rdev_basics(void **state) { assert_int_equal(region_device_offset(&mock_rdev), 0); assert_int_equal(region_device_sz(&mock_rdev), ~(size_t)0); - assert_int_equal(region_device_end(&mock_rdev), ~(size_t)0); + assert_int_equal(region_device_last(&mock_rdev), ~(size_t)0 - 1); } /* @@ -254,7 +254,7 @@ static void test_rdev_chain(void **state) assert_int_equal(rdev_chain(&child, &mock_rdev, child_offs, child_size), 0); assert_int_equal(region_device_sz(&child), child_size); assert_int_equal(region_device_offset(&child), child_offs); - assert_int_equal(region_device_end(&child), child_offs + child_size); + assert_int_equal(region_device_last(&child), child_offs + child_size - 1); assert_int_equal(rdev_relative_offset(&mock_rdev, &child), child_offs); assert_int_equal(rdev_relative_offset(&child, &mock_rdev), -1); diff --git a/tests/drivers/efivars.c b/tests/drivers/efivars.c index 6899ce5bba..326e1fb7d5 100644 --- a/tests/drivers/efivars.c +++ b/tests/drivers/efivars.c @@ -1,7 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ #include <drivers/efi/efivars.h> -#include <limits.h> #include <vendorcode/intel/edk2/UDK2017/MdePkg/Include/Pi/PiFirmwareVolume.h> #include <vendorcode/intel/edk2/UDK2017/MdeModulePkg/Include/Guid/VariableFormat.h> #include <string.h> diff --git a/tests/lib/Makefile.mk b/tests/lib/Makefile.mk index 7fc5471529..1a96c7d620 100644 --- a/tests/lib/Makefile.mk +++ b/tests/lib/Makefile.mk @@ -55,6 +55,7 @@ hexstrtobin-test-srcs += src/lib/hexstrtobin.c imd-test-srcs += tests/lib/imd-test.c imd-test-srcs += tests/stubs/console.c imd-test-srcs += src/lib/imd.c +imd-test-srcs += tests/stubs/die.c timestamp-test-srcs += tests/lib/timestamp-test.c timestamp-test-srcs += tests/stubs/timestamp.c @@ -85,12 +86,14 @@ imd_cbmem-ramstage-test-srcs += tests/lib/imd_cbmem-test.c imd_cbmem-ramstage-test-srcs += tests/stubs/console.c imd_cbmem-ramstage-test-srcs += src/lib/imd.c imd_cbmem-ramstage-test-mocks += cbmem_top_chipset +imd_cbmem-ramstage-test-srcs += tests/stubs/die.c imd_cbmem-romstage-test-stage := romstage imd_cbmem-romstage-test-srcs += tests/lib/imd_cbmem-test.c imd_cbmem-romstage-test-srcs += tests/stubs/console.c imd_cbmem-romstage-test-srcs += src/lib/imd.c imd_cbmem-romstage-test-mocks += cbmem_top_chipset +imd_cbmem-romstage-test-srcs += tests/stubs/die.c region_file-test-srcs += tests/lib/region_file-test.c region_file-test-srcs += src/commonlib/region.c diff --git a/tests/lib/b64_decode-test.c b/tests/lib/b64_decode-test.c index 189ce96237..8560eb2ccc 100644 --- a/tests/lib/b64_decode-test.c +++ b/tests/lib/b64_decode-test.c @@ -35,6 +35,9 @@ static void test_b64_decode(void **state) res = b64_decode((uint8_t *)messages[i].enc, strlen(messages[i].enc), decoded); assert_int_equal(res, (strlen(messages[i].dec))); + + decoded[res] = 0x00; + assert_string_equal((const char *)decoded, messages[i].dec); free(decoded); diff --git a/tests/lib/imd-test.c b/tests/lib/imd-test.c index de42e08e3c..b95b7424a7 100644 --- a/tests/lib/imd-test.c +++ b/tests/lib/imd-test.c @@ -232,7 +232,7 @@ static void test_imd_recover(void **state) const struct imd_entry *lg_entry; /* Fail when the limit for lg was not set. */ - imd.lg.limit = (uintptr_t)NULL; + imd.lg.limit = 0; assert_int_equal(-1, imd_recover(&imd)); /* Set the limit for lg. */ diff --git a/tests/lib/imd_cbmem-test.c b/tests/lib/imd_cbmem-test.c index 6c0ba5ad41..b1cca04742 100644 --- a/tests/lib/imd_cbmem-test.c +++ b/tests/lib/imd_cbmem-test.c @@ -21,9 +21,9 @@ static void reset_imd(void) { - imd.lg.limit = (uintptr_t)NULL; + imd.lg.limit = 0; imd.lg.r = NULL; - imd.sm.limit = (uintptr_t)NULL; + imd.sm.limit = 0; imd.sm.r = NULL; cbmem_initialized = 0; diff --git a/tests/lib/region_file-test.c b/tests/lib/region_file-test.c index 56bb8e4f01..7607aafe96 100644 --- a/tests/lib/region_file-test.c +++ b/tests/lib/region_file-test.c @@ -145,12 +145,8 @@ static void test_region_file_init_real_data(void **state) static void test_region_file_init_invalid_region_device(void **state) { struct region_device bad_dev; - struct region_file regf; - - rdev_chain_mem_rw(&bad_dev, NULL, 0); - /* Expect fail when passing invalid region_device. */ - assert_int_equal(-1, region_file_init(®f, &bad_dev)); + assert_int_equal(rdev_chain_mem_rw(&bad_dev, NULL, 0), -1); } static void test_region_file_data(void **state) diff --git a/tests/lib/string-test.c b/tests/lib/string-test.c index 17bb69ab56..527135353d 100644 --- a/tests/lib/string-test.c +++ b/tests/lib/string-test.c @@ -23,12 +23,6 @@ struct string_pairs_t { {"", ""}, }; -const char *strings[] = { - "coreboot", - "is\0very", - "nice\n" -}; - /* Used to test atol */ struct str_with_l_val_t { char *str; @@ -76,26 +70,6 @@ static void test_strconcat(void **state) } } -static void test_strnlen(void **state) -{ - int i, n = 5; - size_t str_len, limited_len; - - for (i = 0; i < ARRAY_SIZE(strings); i++) { - str_len = __builtin_strlen(strings[i]); - limited_len = MIN(n, str_len); - assert_int_equal(limited_len, strnlen(strings[i], n)); - } -} - -static void test_strlen(void **state) -{ - int i; - - for (i = 0; i < ARRAY_SIZE(strings); i++) - assert_int_equal(__builtin_strlen(strings[i]), strlen(strings[i])); -} - static void test_strchr(void **state) { char str[] = "Abracadabra!\n"; @@ -227,8 +201,6 @@ int main(void) const struct CMUnitTest tests[] = { cmocka_unit_test(test_strdup), cmocka_unit_test(test_strconcat), - cmocka_unit_test(test_strnlen), - cmocka_unit_test(test_strlen), cmocka_unit_test(test_strchr), cmocka_unit_test(test_strrchr), cmocka_unit_test(test_strncpy), |