parent
b29e0b945d
commit
bbc799f805
@ -0,0 +1 @@ |
||||
test-obj-y += source/tests/main.o
|
@ -0,0 +1,246 @@ |
||||
#include <stdarg.h> |
||||
#include <stddef.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
#include <setjmp.h> |
||||
|
||||
#include <cmocka.h> |
||||
|
||||
#include <bitops.h> |
||||
#include <flash.h> |
||||
#include <ftl.h> |
||||
#include <macros.h> |
||||
|
||||
size_t __wrap_flash_read(struct flash_dev *dev, uint32_t addr, |
||||
void *data, size_t len) __attribute__((used)); |
||||
int find_block_div(struct ftl_map *map); |
||||
int read_page_desc(struct ftl_map *map, |
||||
struct ftl_page_desc *page_desc, uint32_t upage); |
||||
|
||||
size_t __wrap_flash_read(struct flash_dev *dev, uint32_t addr, |
||||
void *data, size_t len) |
||||
{ |
||||
(void)dev; |
||||
|
||||
check_expected(addr); |
||||
check_expected(len); |
||||
|
||||
memcpy(data, mock_ptr_type(void *), len); |
||||
|
||||
return mock_type(size_t); |
||||
} |
||||
|
||||
static void test_find_block_div1(void **state) |
||||
{ |
||||
struct ftl_map map; |
||||
|
||||
(void)state; |
||||
|
||||
map.log2_block_size = ilog2(64 * KIB); |
||||
map.log2_page_size = ilog2(4 * KIB); |
||||
|
||||
find_block_div(&map); |
||||
|
||||
assert_int_equal(1 << map.log2_pages_per_group, 16); |
||||
assert_int_equal(1 << map.log2_groups_per_block, 1); |
||||
} |
||||
|
||||
static void test_find_block_div2(void **state) |
||||
{ |
||||
struct ftl_map map; |
||||
|
||||
(void)state; |
||||
|
||||
map.log2_block_size = ilog2(16 * KIB); |
||||
map.log2_page_size = ilog2(4 * KIB); |
||||
|
||||
find_block_div(&map); |
||||
|
||||
assert_int_equal(1 << map.log2_pages_per_group, 4); |
||||
assert_int_equal(1 << map.log2_groups_per_block, 1); |
||||
} |
||||
|
||||
static void test_find_block_div3(void **state) |
||||
{ |
||||
struct ftl_map map; |
||||
|
||||
(void)state; |
||||
|
||||
map.log2_block_size = ilog2(64 * KIB); |
||||
map.log2_page_size = ilog2(1 * KIB); |
||||
|
||||
find_block_div(&map); |
||||
|
||||
assert_int_equal(1 << map.log2_pages_per_group, 8); |
||||
assert_int_equal(1 << map.log2_groups_per_block, 8); |
||||
} |
||||
|
||||
static void test_read_page_desc1(void **state) |
||||
{ |
||||
struct ftl_map map; |
||||
struct ftl_page_desc page_desc, ret_page_desc; |
||||
size_t ret; |
||||
|
||||
(void)state; |
||||
|
||||
memcpy(&page_desc.magic, "page", 4); |
||||
|
||||
expect_value(__wrap_flash_read, addr, (16 - 1) * 4 * KIB + |
||||
sizeof(struct ftl_page_group)); |
||||
expect_value(__wrap_flash_read, len, sizeof page_desc); |
||||
will_return(__wrap_flash_read, &page_desc); |
||||
will_return(__wrap_flash_read, sizeof page_desc); |
||||
|
||||
map.log2_pages_per_group = ilog2(16); |
||||
map.log2_page_size = ilog2(4 * KIB); |
||||
|
||||
ret = read_page_desc(&map, &ret_page_desc, 0); |
||||
|
||||
assert_int_equal(ret, 0); |
||||
} |
||||
|
||||
static void test_read_page_desc2(void **state) |
||||
{ |
||||
struct ftl_map map; |
||||
struct ftl_page_desc page_desc, ret_page_desc; |
||||
size_t ret; |
||||
|
||||
(void)state; |
||||
|
||||
memcpy(&page_desc.magic, "page", 4); |
||||
|
||||
expect_value(__wrap_flash_read, addr, (16 - 1) * 4 * KIB + |
||||
sizeof(struct ftl_page_group) + 14 * sizeof(struct ftl_page_desc)); |
||||
expect_value(__wrap_flash_read, len, sizeof page_desc); |
||||
will_return(__wrap_flash_read, &page_desc); |
||||
will_return(__wrap_flash_read, sizeof page_desc); |
||||
|
||||
map.log2_pages_per_group = ilog2(16); |
||||
map.log2_page_size = ilog2(4 * KIB); |
||||
|
||||
ret = read_page_desc(&map, &ret_page_desc, 14); |
||||
|
||||
assert_int_equal(ret, 0); |
||||
} |
||||
|
||||
static void test_read_page_desc3(void **state) |
||||
{ |
||||
struct ftl_map map; |
||||
struct ftl_page_desc ret_page_desc; |
||||
size_t ret; |
||||
|
||||
(void)state; |
||||
|
||||
map.log2_pages_per_group = ilog2(16); |
||||
map.log2_page_size = ilog2(4 * KIB); |
||||
|
||||
ret = read_page_desc(&map, &ret_page_desc, 15); |
||||
|
||||
assert_int_equal(ret, -1); |
||||
} |
||||
|
||||
static void test_read_page_desc4(void **state) |
||||
{ |
||||
struct ftl_map map; |
||||
struct ftl_page_desc page_desc, ret_page_desc; |
||||
size_t ret; |
||||
|
||||
(void)state; |
||||
|
||||
memcpy(&page_desc.magic, "page", 4); |
||||
|
||||
expect_value(__wrap_flash_read, addr, (32 - 1) * 4 * KIB + |
||||
sizeof(struct ftl_page_group)); |
||||
expect_value(__wrap_flash_read, len, sizeof page_desc); |
||||
will_return(__wrap_flash_read, &page_desc); |
||||
will_return(__wrap_flash_read, sizeof page_desc); |
||||
|
||||
map.log2_pages_per_group = ilog2(16); |
||||
map.log2_page_size = ilog2(4 * KIB); |
||||
|
||||
ret = read_page_desc(&map, &ret_page_desc, 16); |
||||
|
||||
assert_int_equal(ret, 0); |
||||
} |
||||
|
||||
static void test_read_page_desc5(void **state) |
||||
{ |
||||
struct ftl_map map; |
||||
struct ftl_page_desc page_desc, ret_page_desc; |
||||
size_t ret; |
||||
|
||||
(void)state; |
||||
|
||||
memcpy(&page_desc.magic, "page", 4); |
||||
|
||||
expect_value(__wrap_flash_read, addr, (32 - 1) * 4 * KIB + |
||||
sizeof(struct ftl_page_group) + 14 * sizeof(struct ftl_page_desc)); |
||||
expect_value(__wrap_flash_read, len, sizeof page_desc); |
||||
will_return(__wrap_flash_read, &page_desc); |
||||
will_return(__wrap_flash_read, sizeof page_desc); |
||||
|
||||
map.log2_pages_per_group = ilog2(16); |
||||
map.log2_page_size = ilog2(4 * KIB); |
||||
|
||||
ret = read_page_desc(&map, &ret_page_desc, 30); |
||||
|
||||
assert_int_equal(ret, 0); |
||||
} |
||||
|
||||
static void test_read_page_desc6(void **state) |
||||
{ |
||||
struct ftl_map map; |
||||
struct ftl_page_desc ret_page_desc; |
||||
size_t ret; |
||||
|
||||
(void)state; |
||||
|
||||
map.log2_pages_per_group = ilog2(16); |
||||
map.log2_page_size = ilog2(4 * KIB); |
||||
|
||||
ret = read_page_desc(&map, &ret_page_desc, 31); |
||||
|
||||
assert_int_equal(ret, -1); |
||||
} |
||||
|
||||
static void test_read_page_desc7(void **state) |
||||
{ |
||||
struct ftl_map map; |
||||
struct ftl_page_desc page_desc, ret_page_desc; |
||||
size_t ret; |
||||
|
||||
(void)state; |
||||
|
||||
memcpy(&page_desc.magic, "page", 4); |
||||
|
||||
expect_value(__wrap_flash_read, addr, (48 - 1) * 4 * KIB + |
||||
sizeof(struct ftl_page_group)); |
||||
expect_value(__wrap_flash_read, len, sizeof page_desc); |
||||
will_return(__wrap_flash_read, &page_desc); |
||||
will_return(__wrap_flash_read, sizeof page_desc); |
||||
|
||||
map.log2_pages_per_group = ilog2(16); |
||||
map.log2_page_size = ilog2(4 * KIB); |
||||
|
||||
ret = read_page_desc(&map, &ret_page_desc, 32); |
||||
|
||||
assert_int_equal(ret, 0); |
||||
} |
||||
|
||||
int main(void) |
||||
{ |
||||
const struct CMUnitTest tests[] = { |
||||
cmocka_unit_test(test_find_block_div1), |
||||
cmocka_unit_test(test_find_block_div2), |
||||
cmocka_unit_test(test_find_block_div3), |
||||
cmocka_unit_test(test_read_page_desc1), |
||||
cmocka_unit_test(test_read_page_desc2), |
||||
cmocka_unit_test(test_read_page_desc3), |
||||
cmocka_unit_test(test_read_page_desc4), |
||||
cmocka_unit_test(test_read_page_desc5), |
||||
cmocka_unit_test(test_read_page_desc6), |
||||
cmocka_unit_test(test_read_page_desc7), |
||||
}; |
||||
|
||||
return cmocka_run_group_tests(tests, NULL, NULL); |
||||
} |
Loading…
Reference in new issue