From b42c7036505815f4047465510cf07ca4b9b7c0f3 Mon Sep 17 00:00:00 2001 From: Laczen JMS Date: Fri, 5 Apr 2024 18:17:27 +0200 Subject: [PATCH] flash_partitions: add tests Added tests for flash partitions Signed-off-by: Laczen JMS --- .../storage/flash_partitions/CMakeLists.txt | 9 +++ .../boards/native_sim.overlay | 24 +++++++ .../subsys/storage/flash_partitions/prj.conf | 6 ++ .../storage/flash_partitions/src/main.c | 72 +++++++++++++++++++ .../storage/flash_partitions/testcase.yaml | 12 ++++ 5 files changed, 123 insertions(+) create mode 100644 tests/subsys/storage/flash_partitions/CMakeLists.txt create mode 100644 tests/subsys/storage/flash_partitions/boards/native_sim.overlay create mode 100644 tests/subsys/storage/flash_partitions/prj.conf create mode 100644 tests/subsys/storage/flash_partitions/src/main.c create mode 100644 tests/subsys/storage/flash_partitions/testcase.yaml diff --git a/tests/subsys/storage/flash_partitions/CMakeLists.txt b/tests/subsys/storage/flash_partitions/CMakeLists.txt new file mode 100644 index 000000000000000..8048e44459f81b6 --- /dev/null +++ b/tests/subsys/storage/flash_partitions/CMakeLists.txt @@ -0,0 +1,9 @@ +# Copyright (c) 2024 Laczen +# SPDX-License-Identifier: Apache-2.0 + +cmake_minimum_required(VERSION 3.20.0) + +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(flash_partitions_test) + +target_sources(app PRIVATE src/main.c) diff --git a/tests/subsys/storage/flash_partitions/boards/native_sim.overlay b/tests/subsys/storage/flash_partitions/boards/native_sim.overlay new file mode 100644 index 000000000000000..ef33c78fed23f12 --- /dev/null +++ b/tests/subsys/storage/flash_partitions/boards/native_sim.overlay @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2024 Laczen + * SPDX-License-Identifier: Apache-2.0 + */ + +&flash0 { + compatible = "soc-nv-flash", "zephyr,flash-no-erase"; + + flash_partitions { + compatible = "zephyr,flash-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + flash0_partition0: partition@0 { + reg = <0x00000000 0x00002000>; + erase-block-size = ; + read-only; + }; + + flash0_partition1: partition@2000 { + reg = <0x00002000 0x00002000>; + }; + }; +}; diff --git a/tests/subsys/storage/flash_partitions/prj.conf b/tests/subsys/storage/flash_partitions/prj.conf new file mode 100644 index 000000000000000..45d2ccee4fe5c69 --- /dev/null +++ b/tests/subsys/storage/flash_partitions/prj.conf @@ -0,0 +1,6 @@ +# Copyright (c) 2024 Laczen +# SPDX-License-Identifier: Apache-2.0 +CONFIG_FLASH_PARTITIONS=y +CONFIG_FLASH_PARTITIONS_RUNTIME_VERIFY=y +CONFIG_USERSPACE=n +CONFIG_ZTEST=y diff --git a/tests/subsys/storage/flash_partitions/src/main.c b/tests/subsys/storage/flash_partitions/src/main.c new file mode 100644 index 000000000000000..7e3ddb2a5c7f4de --- /dev/null +++ b/tests/subsys/storage/flash_partitions/src/main.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2024 Laczen. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include + +#define FLASH_PARTITION0 flash0_partition0 +#define FLASH_PARTITION1 flash0_partition1 + +ZTEST_BMEM static const struct flash_partition *fp; + +static void *flash_partition_api_setup(void) +{ + return NULL; +} + +ZTEST_USER(flash_partition_api, test_read_write_erase) +{ + uint8_t *wr = "/a9/9a/a9/9a"; + uint8_t rd[sizeof(wr)]; + int rc = 0; + + memset(rd, 0, sizeof(rd)); + + rc = flash_partition_open(fp); + zassert_equal(rc, 0, "open returned [%d]", rc); + + TC_PRINT("flash partition: size %d, offset %d, erase-block-size %d\n", + fp->size, fp->offset, fp->erase_block_size); + + rc = flash_partition_read(fp, 0, rd, sizeof(rd)); + zassert_equal(rc, 0, "read returned [%d]", rc); + + if (fp->write != NULL) { + rc = flash_partition_write(fp, 0, wr, sizeof(wr)); + zassert_equal(rc, 0, "write returned [%d]", rc); + + rc = flash_partition_read(fp, 0, rd, sizeof(rd)); + zassert_equal(rc, 0, "read returned [%d]", rc); + + zassert_equal(memcmp(wr, rd, sizeof(rd)), 0, + "read/write data differ"); + } + + if (fp->erase != NULL) { + rc = flash_partition_erase(fp, 0, fp->erase_block_size); + zassert_equal(rc, 0, "erase returned [%d]", rc); + } else { + TC_PRINT("no erase\n"); + } +} + +ZTEST_SUITE(flash_partition_api, NULL, flash_partition_api_setup, NULL, NULL, + NULL); + +/* Run all of our tests on the given flash partition */ +static void run_tests_on_partition(const struct flash_partition *partition) +{ + fp = partition; + ztest_run_all(NULL, false, 1, 1); +} + +void test_main(void) +{ + run_tests_on_partition(FLASH_PARTITION_GET(FLASH_PARTITION0)); + run_tests_on_partition(FLASH_PARTITION_GET(FLASH_PARTITION1)); + ztest_verify_all_test_suites_ran(); +} diff --git a/tests/subsys/storage/flash_partitions/testcase.yaml b/tests/subsys/storage/flash_partitions/testcase.yaml new file mode 100644 index 000000000000000..f6c1ffccefaf37e --- /dev/null +++ b/tests/subsys/storage/flash_partitions/testcase.yaml @@ -0,0 +1,12 @@ +common: + depends_on: + - flash_partitions + - flash + tags: flash_partitions +tests: + storage.flash_partitions.native_sim.api: + platform_allow: + - native_sim + integration_platforms: + - native_sim + timeout: 60