tests: add basic k_mem_map() test
Show we can measure free memory properly and map a page of
anonymous memory, which has been zeroed and is writable.
Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
diff --git a/tests/kernel/mem_protect/mem_map/src/main.c b/tests/kernel/mem_protect/mem_map/src/main.c
index df858a6..d4d8517 100644
--- a/tests/kernel/mem_protect/mem_map/src/main.c
+++ b/tests/kernel/mem_protect/mem_map/src/main.c
@@ -165,6 +165,48 @@
ztest_test_fail();
}
+/**
+ * Basic k_mem_map() functionality
+ *
+ * Does not exercise K_MEM_MAP_* control flags, just default behavior
+ */
+void test_k_mem_map(void)
+{
+ size_t free_mem, free_mem_after_map;
+ char *mapped;
+ int i;
+
+ free_mem = k_mem_free_get();
+ zassert_not_equal(free_mem, 0, "no free memory");
+ printk("Free memory: %zu\n", free_mem);
+
+ mapped = k_mem_map(CONFIG_MMU_PAGE_SIZE, K_MEM_PERM_RW);
+ zassert_not_null(mapped, "failed to map memory");
+ printk("mapped a page to %p\n", mapped);
+
+ /* Page should be zeroed */
+ for (i = 0; i < CONFIG_MMU_PAGE_SIZE; i++) {
+ zassert_equal(mapped[i], '\x00', "page not zeroed");
+ }
+
+ free_mem_after_map = k_mem_free_get();
+ printk("Free memory now: %zu\n", free_mem_after_map);
+ zassert_equal(free_mem, free_mem_after_map + CONFIG_MMU_PAGE_SIZE,
+ "incorrect free memory accounting");
+
+ /* Show we can write to page without exploding */
+ (void)memset(mapped, '\xFF', CONFIG_MMU_PAGE_SIZE);
+ for (i = 0; i < CONFIG_MMU_PAGE_SIZE; i++) {
+ zassert_true(mapped[i] == '\xFF',
+ "incorrect value 0x%hhx read at index %d",
+ mapped[i], i);
+ }
+
+ /* TODO: Un-map the mapped page to clean up, once we have that
+ * capability
+ */
+}
+
/* ztest main entry*/
void test_main(void)
{
@@ -177,7 +219,8 @@
ztest_test_suite(test_mem_map,
ztest_unit_test(test_z_phys_map_rw),
ztest_unit_test(test_z_phys_map_exec),
- ztest_unit_test(test_z_phys_map_side_effect)
+ ztest_unit_test(test_z_phys_map_side_effect),
+ ztest_unit_test(test_k_mem_map)
);
ztest_run_test_suite(test_mem_map);
}