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:
		
				
					committed by
					
						
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							70fe2707ba
						
					
				
				
					commit
					45d37d5cb8
				
			@@ -29,12 +29,24 @@
 | 
			
		||||
#define __build_time_assert(x) 0
 | 
			
		||||
#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 */
 | 
			
		||||
#define ASSERT(x) {							\
 | 
			
		||||
	if (!__build_time_assert(x) && !(x)) {				\
 | 
			
		||||
		printk(BIOS_EMERG,					\
 | 
			
		||||
			"ASSERTION ERROR: file '%s', line %d\n",	\
 | 
			
		||||
			__ASSERT_FILE__, __ASSERT_LINE__);		\
 | 
			
		||||
		MOCK_ASSERT(!!(x), #x);					\
 | 
			
		||||
		if (CONFIG(FATAL_ASSERTS))				\
 | 
			
		||||
			hlt();						\
 | 
			
		||||
	}								\
 | 
			
		||||
@@ -45,6 +57,7 @@
 | 
			
		||||
			"ASSERTION ERROR: file '%s', line %d\n",	\
 | 
			
		||||
			__ASSERT_FILE__, __ASSERT_LINE__);		\
 | 
			
		||||
		printk(BIOS_EMERG, "%s", msg);				\
 | 
			
		||||
		MOCK_ASSERT(!!(x), (msg));				\
 | 
			
		||||
		if (CONFIG(FATAL_ASSERTS))				\
 | 
			
		||||
			hlt();						\
 | 
			
		||||
	}								\
 | 
			
		||||
@@ -53,6 +66,7 @@
 | 
			
		||||
	printk(BIOS_EMERG,						\
 | 
			
		||||
		"ERROR: BUG ENCOUNTERED at file '%s', line %d\n",	\
 | 
			
		||||
		__ASSERT_FILE__, __ASSERT_LINE__);			\
 | 
			
		||||
	MOCK_ASSERT(0, "BUG ENCOUNTERED");				\
 | 
			
		||||
	if (CONFIG(FATAL_ASSERTS))					\
 | 
			
		||||
		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 */
 | 
			
		||||
	lg_region_wrong_size = sizeof(struct imd_root_pointer) + sizeof(struct imd_root) +
 | 
			
		||||
			       sizeof(struct imd_entry);
 | 
			
		||||
	assert_int_equal(-1, imd_create_tiered_empty(&imd, lg_region_wrong_size,
 | 
			
		||||
						     LG_ENTRY_ALIGN, SM_ROOT_SIZE,
 | 
			
		||||
						     SM_ENTRY_ALIGN));
 | 
			
		||||
	expect_assert_failure(
 | 
			
		||||
		imd_create_tiered_empty(&imd, lg_region_wrong_size, LG_ENTRY_ALIGN,
 | 
			
		||||
					SM_ROOT_SIZE, SM_ENTRY_ALIGN)
 | 
			
		||||
	);
 | 
			
		||||
 | 
			
		||||
	assert_int_equal(0, imd_create_tiered_empty(&imd, LG_ROOT_SIZE, LG_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
 | 
			
		||||
	   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)
 | 
			
		||||
@@ -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
 | 
			
		||||
	   changed. */
 | 
			
		||||
	assert_int_equal(-1, checkstack(top_of_stack, 0));
 | 
			
		||||
	expect_assert_failure(checkstack(top_of_stack, 0));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(void)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user