tests/kernel/mem_heap: Add minimum-size heap test
Add test to statically allocate a minimum-size heap, verify that it works to allocate a single byte and that it doesn't overrun its memory bounds. Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
This commit is contained in:
parent
d37370301c
commit
3953e07822
2 changed files with 38 additions and 0 deletions
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
|
||||
#include <ztest.h>
|
||||
extern void test_k_heap_min_size(void);
|
||||
extern void test_k_heap_alloc(void);
|
||||
extern void test_k_heap_alloc_fail(void);
|
||||
extern void test_k_heap_free(void);
|
||||
|
@ -24,6 +25,7 @@ extern void test_k_heap_alloc_pending(void);
|
|||
void test_main(void)
|
||||
{
|
||||
ztest_test_suite(k_heap_api,
|
||||
ztest_unit_test(test_k_heap_min_size),
|
||||
ztest_unit_test(test_k_heap_alloc),
|
||||
ztest_unit_test(test_k_heap_alloc_fail),
|
||||
ztest_unit_test(test_k_heap_free),
|
||||
|
|
|
@ -40,6 +40,42 @@ static void thread_alloc_heap(void *p1, void *p2, void *p3)
|
|||
|
||||
/*test cases*/
|
||||
|
||||
/* These need to be adjacent in BSS */
|
||||
volatile uint32_t heap_guard0;
|
||||
K_HEAP_DEFINE(tiny_heap, 1);
|
||||
volatile uint32_t heap_guard1;
|
||||
|
||||
/** @brief Test a minimum-size static k_heap
|
||||
* @ingroup kernel_kheap_api_tests
|
||||
*
|
||||
* @details Create a minimum size (1-byte) static heap, verify that it
|
||||
* works to allocate that byte at runtime and that it doesn't overflow
|
||||
* its memory bounds.
|
||||
*/
|
||||
void test_k_heap_min_size(void)
|
||||
{
|
||||
const uint32_t guard_bits = 0x5a5a5a5a;
|
||||
|
||||
/* Make sure static initialization didn't scribble on them */
|
||||
zassert_true(heap_guard0 == 0 && heap_guard1 == 0,
|
||||
"static heap initialization overran buffer");
|
||||
|
||||
heap_guard0 = guard_bits;
|
||||
heap_guard1 = guard_bits;
|
||||
|
||||
char *p0 = k_heap_alloc(&tiny_heap, 1, K_NO_WAIT);
|
||||
char *p1 = k_heap_alloc(&tiny_heap, 1, K_NO_WAIT);
|
||||
|
||||
zassert_not_null(p0, "allocation failed");
|
||||
zassert_is_null(p1, "second allocation unexpectedly succeeded");
|
||||
|
||||
*p0 = 0xff;
|
||||
k_heap_free(&tiny_heap, p0);
|
||||
|
||||
zassert_equal(heap_guard0, guard_bits, "heap overran buffer");
|
||||
zassert_equal(heap_guard1, guard_bits, "heap overran buffer");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Test to demonstrate k_heap_alloc() and k_heap_free() API usage
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue