summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.common2
-rw-r--r--tests/commonlib/bsd/string-test.c134
-rw-r--r--tests/commonlib/region-test.c6
-rw-r--r--tests/drivers/efivars.c1
-rw-r--r--tests/lib/Makefile.mk3
-rw-r--r--tests/lib/b64_decode-test.c3
-rw-r--r--tests/lib/imd-test.c2
-rw-r--r--tests/lib/imd_cbmem-test.c4
-rw-r--r--tests/lib/region_file-test.c6
-rw-r--r--tests/lib/string-test.c28
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(&regf, &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),