diff --git a/source/tests/Makefile b/source/tests/Makefile index fc7b67c..9f26d06 100644 --- a/source/tests/Makefile +++ b/source/tests/Makefile @@ -1 +1,3 @@ test-obj-y += source/tests/main.o +test-obj-y += source/tests/ftl/find_block_div.o +test-obj-y += source/tests/ftl/read_page_desc.o diff --git a/source/tests/ftl/find_block_div.c b/source/tests/ftl/find_block_div.c new file mode 100644 index 0000000..d753121 --- /dev/null +++ b/source/tests/ftl/find_block_div.c @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +int find_block_div(struct ftl_map *map); + +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); +} + +int test_find_block_div(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), + }; + + return cmocka_run_group_tests_name("find_block_div", tests, NULL, NULL); +} diff --git a/source/tests/ftl/read_page_desc.c b/source/tests/ftl/read_page_desc.c new file mode 100644 index 0000000..401950a --- /dev/null +++ b/source/tests/ftl/read_page_desc.c @@ -0,0 +1,184 @@ +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +size_t __wrap_flash_read(struct flash_dev *dev, uint32_t addr, + void *data, size_t len) __attribute__((used)); +int read_page_desc(struct ftl_map *map, + struct ftl_page_desc *page_desc, uint32_t upage); + +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 test_read_page_desc(void) +{ + const struct CMUnitTest tests[] = { + 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_name("read_page_desc", tests, NULL, NULL); +} diff --git a/source/tests/main.c b/source/tests/main.c index c0dabbd..573e900 100644 --- a/source/tests/main.c +++ b/source/tests/main.c @@ -13,9 +13,6 @@ 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) @@ -30,217 +27,15 @@ size_t __wrap_flash_read(struct flash_dev *dev, uint32_t addr, 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 test_find_block_div(void); +int test_read_page_desc(void); 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), - }; + int count = 0; + + count += test_find_block_div(); + count += test_read_page_desc(); - return cmocka_run_group_tests(tests, NULL, NULL); + return count; }