include/assert.h: Use mock_assert() for ENV_TEST targets
Some tests have to be able to catch assertion errors. Adding CMocka mock_assert() enables that. Additionally fix test_imd_create_tiered_empty(), test_full_stack() and test_incorrectly_initialized_stack() by adding missing expect_assert_failure(). Signed-off-by: Jakub Czapiga <jacz@semihalf.com> Change-Id: I5e8dd1b198ee6fab61e2be3f92baf1178f79bf18 Reviewed-on: https://review.coreboot.org/c/coreboot/+/51804 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Paul Fagerburg <pfagerburg@chromium.org>
This commit is contained in:
parent
70fe2707ba
commit
45d37d5cb8
|
@ -29,12 +29,24 @@
|
||||||
#define __build_time_assert(x) 0
|
#define __build_time_assert(x) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* CMocka function redefinition. */
|
||||||
|
void mock_assert(const int result, const char *const expression,
|
||||||
|
const char *const file, const int line);
|
||||||
|
|
||||||
|
#if ENV_TEST
|
||||||
|
#define MOCK_ASSERT(result, expression) \
|
||||||
|
mock_assert((result), (expression), __ASSERT_FILE__, __ASSERT_LINE__)
|
||||||
|
#else
|
||||||
|
#define MOCK_ASSERT(result, expression)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* GCC and CAR versions */
|
/* GCC and CAR versions */
|
||||||
#define ASSERT(x) { \
|
#define ASSERT(x) { \
|
||||||
if (!__build_time_assert(x) && !(x)) { \
|
if (!__build_time_assert(x) && !(x)) { \
|
||||||
printk(BIOS_EMERG, \
|
printk(BIOS_EMERG, \
|
||||||
"ASSERTION ERROR: file '%s', line %d\n", \
|
"ASSERTION ERROR: file '%s', line %d\n", \
|
||||||
__ASSERT_FILE__, __ASSERT_LINE__); \
|
__ASSERT_FILE__, __ASSERT_LINE__); \
|
||||||
|
MOCK_ASSERT(!!(x), #x); \
|
||||||
if (CONFIG(FATAL_ASSERTS)) \
|
if (CONFIG(FATAL_ASSERTS)) \
|
||||||
hlt(); \
|
hlt(); \
|
||||||
} \
|
} \
|
||||||
|
@ -45,6 +57,7 @@
|
||||||
"ASSERTION ERROR: file '%s', line %d\n", \
|
"ASSERTION ERROR: file '%s', line %d\n", \
|
||||||
__ASSERT_FILE__, __ASSERT_LINE__); \
|
__ASSERT_FILE__, __ASSERT_LINE__); \
|
||||||
printk(BIOS_EMERG, "%s", msg); \
|
printk(BIOS_EMERG, "%s", msg); \
|
||||||
|
MOCK_ASSERT(!!(x), (msg)); \
|
||||||
if (CONFIG(FATAL_ASSERTS)) \
|
if (CONFIG(FATAL_ASSERTS)) \
|
||||||
hlt(); \
|
hlt(); \
|
||||||
} \
|
} \
|
||||||
|
@ -53,6 +66,7 @@
|
||||||
printk(BIOS_EMERG, \
|
printk(BIOS_EMERG, \
|
||||||
"ERROR: BUG ENCOUNTERED at file '%s', line %d\n", \
|
"ERROR: BUG ENCOUNTERED at file '%s', line %d\n", \
|
||||||
__ASSERT_FILE__, __ASSERT_LINE__); \
|
__ASSERT_FILE__, __ASSERT_LINE__); \
|
||||||
|
MOCK_ASSERT(0, "BUG ENCOUNTERED"); \
|
||||||
if (CONFIG(FATAL_ASSERTS)) \
|
if (CONFIG(FATAL_ASSERTS)) \
|
||||||
hlt(); \
|
hlt(); \
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,9 +176,10 @@ static void test_imd_create_tiered_empty(void **state)
|
||||||
/* Fail when large region doesn't have capacity for more than 1 entry */
|
/* Fail when large region doesn't have capacity for more than 1 entry */
|
||||||
lg_region_wrong_size = sizeof(struct imd_root_pointer) + sizeof(struct imd_root) +
|
lg_region_wrong_size = sizeof(struct imd_root_pointer) + sizeof(struct imd_root) +
|
||||||
sizeof(struct imd_entry);
|
sizeof(struct imd_entry);
|
||||||
assert_int_equal(-1, imd_create_tiered_empty(&imd, lg_region_wrong_size,
|
expect_assert_failure(
|
||||||
LG_ENTRY_ALIGN, SM_ROOT_SIZE,
|
imd_create_tiered_empty(&imd, lg_region_wrong_size, LG_ENTRY_ALIGN,
|
||||||
SM_ENTRY_ALIGN));
|
SM_ROOT_SIZE, SM_ENTRY_ALIGN)
|
||||||
|
);
|
||||||
|
|
||||||
assert_int_equal(0, imd_create_tiered_empty(&imd, LG_ROOT_SIZE, LG_ENTRY_ALIGN,
|
assert_int_equal(0, imd_create_tiered_empty(&imd, LG_ROOT_SIZE, LG_ENTRY_ALIGN,
|
||||||
SM_ROOT_SIZE, SM_ENTRY_ALIGN));
|
SM_ROOT_SIZE, SM_ENTRY_ALIGN));
|
||||||
|
|
|
@ -73,7 +73,7 @@ static void test_full_stack(void **state)
|
||||||
|
|
||||||
/* Expect failure when checking full stack as absence of guard value at the end of
|
/* Expect failure when checking full stack as absence of guard value at the end of
|
||||||
the stack indicates stack overrun. */
|
the stack indicates stack overrun. */
|
||||||
assert_int_equal(-1, checkstack(top_of_stack, 0));
|
expect_assert_failure(checkstack(top_of_stack, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_partialy_filled_stack(void **state)
|
static void test_partialy_filled_stack(void **state)
|
||||||
|
@ -115,7 +115,7 @@ static void test_incorrectly_initialized_stack(void **state)
|
||||||
|
|
||||||
/* Expect failure when there is no last stack guard value even if no other value was
|
/* Expect failure when there is no last stack guard value even if no other value was
|
||||||
changed. */
|
changed. */
|
||||||
assert_int_equal(-1, checkstack(top_of_stack, 0));
|
expect_assert_failure(checkstack(top_of_stack, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
|
|
Loading…
Reference in New Issue