Skip to content

Commit

Permalink
tests/storage/flash_map: Support for no flash_area_open
Browse files Browse the repository at this point in the history
The commit removes flash_area_open usage from tests, where it is not tested
and only used to obtain area.
The commit adds tests for flash_area_device_is_ready.
The commit adds test for flash_area_sectors, which is equivalent
of flash_area_get_sectors but takes flash area object instead of flash
area index.

Signed-off-by: Dominik Ermel <[email protected]>
  • Loading branch information
de-nordic authored and nashif committed Nov 27, 2024
1 parent b50dc43 commit 29f7f53
Showing 1 changed file with 68 additions and 28 deletions.
96 changes: 68 additions & 28 deletions tests/subsys/storage/flash_map/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,51 +32,95 @@ ZTEST(flash_map, test_flash_area_disabled_device)
zassert_equal(rc, -ENOENT, "Open did not fail");
}

ZTEST(flash_map, test_flash_area_device_is_ready)
{
const struct flash_area no_dev {
.fa_dev = NULL;
};

zassert_false(flash_area_device_is_ready(NULL));
zassert_false(flash_area_device_is_ready(no_dev));
/* The below just assumes that tests are executed so late that
* all devices are already initialized and ready.
*/
zassert_true(flash_area_device_is_ready(FIXED_PARTITION(SLOT1_PARTITION));
}

static void layout_match(const struct device flash_dev)
{
uint32_t sec_cnt;
off_t off = 0;
int i;

/* For each reported sector, check if it corresponds to real page on device */
for (i = 0; i < sec_cnt; ++i) {
struct flash_pages_info fpi;

zassert_ok(
flash_get_page_info_by_offs(flash_dev, SLOT1_PARTITION_OFFSET + off, &fpi));
/* Offset of page taken directly from device corresponds to offset
* within flash area
*/
zassert_equal(fpi.start_offset, fs_sectors[i].fs_off + SLOT1_PARTITION_OFFSET);
zassert_equal(fpi.size, fs_sectors[i].fs_size);
off += fs_sectors[i].fs_size;
}
}

/**
* @brief Test flash_area_get_sectors()
*/
ZTEST(flash_map, test_flash_area_get_sectors)
{
const struct flash_area *fa;
uint32_t sec_cnt;
int i;
int rc;
off_t off;
const struct device *flash_dev;
const struct device *flash_dev_a = SLOT1_PARTITION_DEV;

rc = flash_area_open(SLOT1_PARTITION_ID, &fa);
zassert_true(rc == 0, "flash_area_open() fail");
fa = FIXED_PARTITION(SLOT1_PARTITION);

zassert_true(flash_area_device_is_ready(fa));

/* First erase the area so it's ready for use. */
flash_dev = flash_area_get_device(fa);
zassert_true(device_is_ready(fa));

/* Device obtained by label should match the one from fa object */
zassert_equal(flash_dev, flash_dev_a, "Device for slot1_partition do not match");

memset(&fs_sectors[0], 0, sizeof(fs_sectors));

sec_cnt = ARRAY_SIZE(fs_sectors);
rc = flash_area_get_sectors(SLOT1_PARTITION_ID, &sec_cnt, fs_sectors);
zassert_true(rc == 0, "flash_area_get_sectors failed");

off = 0;
layout_match(flash_dev);
}

/* For each reported sector, check if it corresponds to real page on device */
for (i = 0; i < sec_cnt; ++i) {
struct flash_pages_info fpi;
ZTEST(flash_map, test_flash_area_sectors)
{
const struct flash_area *fa;
uint32_t sec_cnt;
int i;
int rc;
off_t off;
const struct device *flash_dev;
const struct device *flash_dev_a = SLOT1_PARTITION_DEV;

zassert_ok(flash_get_page_info_by_offs(flash_dev,
SLOT1_PARTITION_OFFSET + off,
&fpi));
/* Offset of page taken directly from device corresponds to offset
* within flash area
*/
zassert_equal(fpi.start_offset,
fs_sectors[i].fs_off + SLOT1_PARTITION_OFFSET);
zassert_equal(fpi.size, fs_sectors[i].fs_size);
off += fs_sectors[i].fs_size;
}
fa = FIXED_PARTITION(SLOT1_PARTITION);

zassert_true(flash_area_device_is_ready(fa));

flash_area_close(fa);
flash_dev = flash_area_get_device(fa);
zassert_true(device_is_ready(fa));

/* Device obtained by label should match the one from fa object */
zassert_equal(flash_dev, flash_dev_a, "Device for slot1_partition do not match");

sec_cnt = ARRAY_SIZE(fs_sectors);
rc = flash_area_sectors(SLOT1_PARTITION_ID, &sec_cnt, fs_sectors);
zassert_true(rc == 0, "flash_area_get_sectors failed");

layout_match();
}

ZTEST(flash_map, test_flash_area_erased_val)
Expand All @@ -86,17 +130,14 @@ ZTEST(flash_map, test_flash_area_erased_val)
uint8_t val;
int rc;

rc = flash_area_open(SLOT1_PARTITION_ID, &fa);
zassert_true(rc == 0, "flash_area_open() fail");
fa = FIXED_PARTITION(SLOT1_PARTITION);

val = flash_area_erased_val(fa);

param = flash_get_parameters(fa->fa_dev);

zassert_equal(param->erase_value, val,
"value different than the flash erase value");

flash_area_close(fa);
}

ZTEST(flash_map, test_fixed_partition_node_macros)
Expand All @@ -118,8 +159,7 @@ ZTEST(flash_map, test_flash_area_erase_and_flatten)
const struct flash_area *fa;
const struct device *flash_dev;

rc = flash_area_open(SLOT1_PARTITION_ID, &fa);
zassert_true(rc == 0, "flash_area_open() fail");
fa = FIXED_PARTITION(SLOT1_PARTITION);

/* First erase the area so it's ready for use. */
flash_dev = flash_area_get_device(fa);
Expand Down

0 comments on commit 29f7f53

Please sign in to comment.