tests: subsys/fs/nvs: Move to new ztest api
Convert nvs tests to use new ztest API
related: zephyrproject-rtos#47002
Signed-off-by: Simon Hein <SHein@baumer.com>
diff --git a/tests/subsys/fs/nvs/prj.conf b/tests/subsys/fs/nvs/prj.conf
index 7d7f4ae..b4b8502 100644
--- a/tests/subsys/fs/nvs/prj.conf
+++ b/tests/subsys/fs/nvs/prj.conf
@@ -1,5 +1,6 @@
CONFIG_ZTEST=y
CONFIG_ZTEST_STACK_SIZE=4096
+CONFIG_ZTEST_NEW_API=y
CONFIG_STDOUT_CONSOLE=y
CONFIG_FLASH=y
diff --git a/tests/subsys/fs/nvs/src/main.c b/tests/subsys/fs/nvs/src/main.c
index d95f2ca..dcf61f7 100644
--- a/tests/subsys/fs/nvs/src/main.c
+++ b/tests/subsys/fs/nvs/src/main.c
@@ -34,64 +34,85 @@
#define TEST_SECTOR_COUNT 5U
static const struct device *flash_dev = DEVICE_DT_GET(TEST_NVS_FLASH_DEV_NODE);
-static struct nvs_fs fs;
-struct stats_hdr *sim_stats;
-struct stats_hdr *sim_thresholds;
-void setup(void)
-{
- sim_stats = stats_group_find("flash_sim_stats");
- sim_thresholds = stats_group_find("flash_sim_thresholds");
+struct nvs_fixture {
+ struct nvs_fs fs;
+ struct stats_hdr *sim_stats;
+ struct stats_hdr *sim_thresholds;
+};
- /* Verify if NVS is initialized. */
- if (fs.ready) {
- int err;
-
- err = nvs_clear(&fs);
- zassert_true(err == 0, "nvs_clear call failure: %d", err);
- }
-}
-
-void teardown(void)
-{
- if (sim_stats) {
- stats_reset(sim_stats);
- }
- if (sim_thresholds) {
- stats_reset(sim_thresholds);
- }
-}
-
-void test_nvs_mount(void)
+static void *setup(void)
{
int err;
const struct flash_area *fa;
struct flash_pages_info info;
+ static struct nvs_fixture fixture;
+
+ __ASSERT_NO_MSG(device_is_ready(flash_dev));
err = flash_area_open(FLASH_AREA_ID(TEST_NVS_FLASH_AREA), &fa);
zassert_true(err == 0, "flash_area_open() fail: %d", err);
- fs.offset = TEST_NVS_FLASH_OFFSET;
- err = flash_get_page_info_by_offs(flash_area_get_device(fa), fs.offset,
+ fixture.fs.offset = TEST_NVS_FLASH_OFFSET;
+ err = flash_get_page_info_by_offs(flash_area_get_device(fa), fixture.fs.offset,
&info);
zassert_true(err == 0, "Unable to get page info: %d", err);
- fs.sector_size = info.size;
- fs.sector_count = TEST_SECTOR_COUNT;
- fs.flash_device = flash_area_get_device(fa);
+ fixture.fs.sector_size = info.size;
+ fixture.fs.sector_count = TEST_SECTOR_COUNT;
+ fixture.fs.flash_device = flash_area_get_device(fa);
- err = nvs_mount(&fs);
+ return &fixture;
+}
+
+static void before(void *data)
+{
+ struct nvs_fixture *fixture = (struct nvs_fixture *)data;
+
+ fixture->sim_stats = stats_group_find("flash_sim_stats");
+ fixture->sim_thresholds = stats_group_find("flash_sim_thresholds");
+
+ /* Verify if NVS is initialized. */
+ if (fixture->fs.ready) {
+ int err;
+
+ err = nvs_clear(&fixture->fs);
+ zassert_true(err == 0, "nvs_clear call failure: %d", err);
+ }
+}
+
+static void after(void *data)
+{
+ struct nvs_fixture *fixture = (struct nvs_fixture *)data;
+
+ if (fixture->sim_stats) {
+ stats_reset(fixture->sim_stats);
+ }
+ if (fixture->sim_thresholds) {
+ stats_reset(fixture->sim_thresholds);
+ }
+
+ fixture->fs.sector_count = TEST_SECTOR_COUNT;
+}
+
+ZTEST_SUITE(nvs, NULL, setup, before, after, NULL);
+
+ZTEST_F(nvs, test_nvs_mount)
+{
+ int err;
+
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
}
-static void execute_long_pattern_write(uint16_t id)
+static void execute_long_pattern_write(uint16_t id, struct nvs_fs *fs)
{
char rd_buf[512];
char wr_buf[512];
char pattern[] = {0xDE, 0xAD, 0xBE, 0xEF};
size_t len;
- len = nvs_read(&fs, id, rd_buf, sizeof(rd_buf));
+ len = nvs_read(fs, id, rd_buf, sizeof(rd_buf));
zassert_true(len == -ENOENT, "nvs_read unexpected failure: %d", len);
BUILD_ASSERT((sizeof(wr_buf) % sizeof(pattern)) == 0);
@@ -99,24 +120,24 @@
memcpy(wr_buf + i, pattern, sizeof(pattern));
}
- len = nvs_write(&fs, id, wr_buf, sizeof(wr_buf));
+ len = nvs_write(fs, id, wr_buf, sizeof(wr_buf));
zassert_true(len == sizeof(wr_buf), "nvs_write failed: %d", len);
- len = nvs_read(&fs, id, rd_buf, sizeof(rd_buf));
+ len = nvs_read(fs, id, rd_buf, sizeof(rd_buf));
zassert_true(len == sizeof(rd_buf), "nvs_read unexpected failure: %d",
len);
zassert_mem_equal(wr_buf, rd_buf, sizeof(rd_buf),
"RD buff should be equal to the WR buff");
}
-void test_nvs_write(void)
+ZTEST_F(nvs, test_nvs_write)
{
int err;
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
- execute_long_pattern_write(TEST_DATA_ID);
+ execute_long_pattern_write(TEST_DATA_ID, &fixture->fs);
}
static int flash_sim_write_calls_find(struct stats_hdr *hdr, void *arg,
@@ -141,7 +162,7 @@
return 0;
}
-void test_nvs_corrupted_write(void)
+ZTEST_F(nvs, test_nvs_corrupted_write)
{
int err;
size_t len;
@@ -153,10 +174,10 @@
uint32_t *flash_write_stat;
uint32_t *flash_max_write_calls;
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
- err = nvs_read(&fs, TEST_DATA_ID, rd_buf, sizeof(rd_buf));
+ err = nvs_read(&fixture->fs, TEST_DATA_ID, rd_buf, sizeof(rd_buf));
zassert_true(err == -ENOENT, "nvs_read unexpected failure: %d", err);
BUILD_ASSERT((sizeof(wr_buf_1) % sizeof(pattern_1)) == 0);
@@ -164,10 +185,10 @@
memcpy(wr_buf_1 + i, pattern_1, sizeof(pattern_1));
}
- len = nvs_write(&fs, TEST_DATA_ID, wr_buf_1, sizeof(wr_buf_1));
+ len = nvs_write(&fixture->fs, TEST_DATA_ID, wr_buf_1, sizeof(wr_buf_1));
zassert_true(len == sizeof(wr_buf_1), "nvs_write failed: %d", len);
- len = nvs_read(&fs, TEST_DATA_ID, rd_buf, sizeof(rd_buf));
+ len = nvs_read(&fixture->fs, TEST_DATA_ID, rd_buf, sizeof(rd_buf));
zassert_true(len == sizeof(rd_buf), "nvs_read unexpected failure: %d",
len);
zassert_mem_equal(wr_buf_1, rd_buf, sizeof(rd_buf),
@@ -181,9 +202,9 @@
/* Set the maximum number of writes that the flash simulator can
* execute.
*/
- stats_walk(sim_thresholds, flash_sim_max_write_calls_find,
+ stats_walk(fixture->sim_thresholds, flash_sim_max_write_calls_find,
&flash_max_write_calls);
- stats_walk(sim_stats, flash_sim_write_calls_find, &flash_write_stat);
+ stats_walk(fixture->sim_stats, flash_sim_write_calls_find, &flash_write_stat);
*flash_max_write_calls = *flash_write_stat - 1;
*flash_write_stat = 0;
@@ -192,14 +213,16 @@
* This should simulate power down during flash write. The written data
* are corrupted at this point and should be discarded by the NVS.
*/
- len = nvs_write(&fs, TEST_DATA_ID, wr_buf_2, sizeof(wr_buf_2));
+ len = nvs_write(&fixture->fs, TEST_DATA_ID, wr_buf_2, sizeof(wr_buf_2));
zassert_true(len == sizeof(wr_buf_2), "nvs_write failed: %d", len);
/* Reinitialize the NVS. */
- memset(&fs, 0, sizeof(fs));
- test_nvs_mount();
+ memset(&fixture->fs, 0, sizeof(fixture->fs));
+ (void)setup();
+ err = nvs_mount(&fixture->fs);
+ zassert_true(err == 0, "nvs_mount call failure: %d", err);
- len = nvs_read(&fs, TEST_DATA_ID, rd_buf, sizeof(rd_buf));
+ len = nvs_read(&fixture->fs, TEST_DATA_ID, rd_buf, sizeof(rd_buf));
zassert_true(len == sizeof(rd_buf), "nvs_read unexpected failure: %d",
len);
zassert_true(memcmp(wr_buf_2, rd_buf, sizeof(rd_buf)) != 0,
@@ -210,7 +233,7 @@
"write operation has failed");
}
-void test_nvs_gc(void)
+ZTEST_F(nvs, test_nvs_gc)
{
int err;
int len;
@@ -221,9 +244,9 @@
/* 25th write will trigger GC. */
const uint16_t max_writes = 26;
- fs.sector_count = 2;
+ fixture->fs.sector_count = 2;
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
for (uint16_t i = 0; i < max_writes; i++) {
@@ -232,12 +255,12 @@
memset(buf, id_data, sizeof(buf));
- len = nvs_write(&fs, id, buf, sizeof(buf));
+ len = nvs_write(&fixture->fs, id, buf, sizeof(buf));
zassert_true(len == sizeof(buf), "nvs_write failed: %d", len);
}
for (uint16_t id = 0; id < max_id; id++) {
- len = nvs_read(&fs, id, rd_buf, sizeof(buf));
+ len = nvs_read(&fixture->fs, id, rd_buf, sizeof(buf));
zassert_true(len == sizeof(rd_buf),
"nvs_read unexpected failure: %d", len);
@@ -250,11 +273,11 @@
}
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
for (uint16_t id = 0; id < max_id; id++) {
- len = nvs_read(&fs, id, rd_buf, sizeof(buf));
+ len = nvs_read(&fixture->fs, id, rd_buf, sizeof(buf));
zassert_true(len == sizeof(rd_buf),
"nvs_read unexpected failure: %d", len);
@@ -309,7 +332,7 @@
/**
* Full round of GC over 3 sectors
*/
-void test_nvs_gc_3sectors(void)
+ZTEST_F(nvs, test_nvs_gc_3sectors)
{
int err;
@@ -323,72 +346,72 @@
/* 125th write will trigger 4st GC. */
const uint16_t max_writes_4 = 51 + 25 + 25 + 25;
- fs.sector_count = 3;
+ fixture->fs.sector_count = 3;
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
- zassert_equal(fs.ate_wra >> ADDR_SECT_SHIFT, 0,
+ zassert_equal(fixture->fs.ate_wra >> ADDR_SECT_SHIFT, 0,
"unexpected write sector");
/* Trigger 1st GC */
- write_content(max_id, 0, max_writes, &fs);
+ write_content(max_id, 0, max_writes, &fixture->fs);
/* sector sequence: empty,closed, write */
- zassert_equal(fs.ate_wra >> ADDR_SECT_SHIFT, 2,
+ zassert_equal(fixture->fs.ate_wra >> ADDR_SECT_SHIFT, 2,
"unexpected write sector");
- check_content(max_id, &fs);
+ check_content(max_id, &fixture->fs);
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
- zassert_equal(fs.ate_wra >> ADDR_SECT_SHIFT, 2,
+ zassert_equal(fixture->fs.ate_wra >> ADDR_SECT_SHIFT, 2,
"unexpected write sector");
- check_content(max_id, &fs);
+ check_content(max_id, &fixture->fs);
/* Trigger 2nd GC */
- write_content(max_id, max_writes, max_writes_2, &fs);
+ write_content(max_id, max_writes, max_writes_2, &fixture->fs);
/* sector sequence: write, empty, closed */
- zassert_equal(fs.ate_wra >> ADDR_SECT_SHIFT, 0,
+ zassert_equal(fixture->fs.ate_wra >> ADDR_SECT_SHIFT, 0,
"unexpected write sector");
- check_content(max_id, &fs);
+ check_content(max_id, &fixture->fs);
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
- zassert_equal(fs.ate_wra >> ADDR_SECT_SHIFT, 0,
+ zassert_equal(fixture->fs.ate_wra >> ADDR_SECT_SHIFT, 0,
"unexpected write sector");
- check_content(max_id, &fs);
+ check_content(max_id, &fixture->fs);
/* Trigger 3rd GC */
- write_content(max_id, max_writes_2, max_writes_3, &fs);
+ write_content(max_id, max_writes_2, max_writes_3, &fixture->fs);
/* sector sequence: closed, write, empty */
- zassert_equal(fs.ate_wra >> ADDR_SECT_SHIFT, 1,
+ zassert_equal(fixture->fs.ate_wra >> ADDR_SECT_SHIFT, 1,
"unexpected write sector");
- check_content(max_id, &fs);
+ check_content(max_id, &fixture->fs);
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
- zassert_equal(fs.ate_wra >> ADDR_SECT_SHIFT, 1,
+ zassert_equal(fixture->fs.ate_wra >> ADDR_SECT_SHIFT, 1,
"unexpected write sector");
- check_content(max_id, &fs);
+ check_content(max_id, &fixture->fs);
/* Trigger 4th GC */
- write_content(max_id, max_writes_3, max_writes_4, &fs);
+ write_content(max_id, max_writes_3, max_writes_4, &fixture->fs);
/* sector sequence: empty,closed, write */
- zassert_equal(fs.ate_wra >> ADDR_SECT_SHIFT, 2,
+ zassert_equal(fixture->fs.ate_wra >> ADDR_SECT_SHIFT, 2,
"unexpected write sector");
- check_content(max_id, &fs);
+ check_content(max_id, &fixture->fs);
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
- zassert_equal(fs.ate_wra >> ADDR_SECT_SHIFT, 2,
+ zassert_equal(fixture->fs.ate_wra >> ADDR_SECT_SHIFT, 2,
"unexpected write sector");
- check_content(max_id, &fs);
+ check_content(max_id, &fixture->fs);
}
static int flash_sim_erase_calls_find(struct stats_hdr *hdr, void *arg,
@@ -424,7 +447,7 @@
return 0;
}
-void test_nvs_corrupted_sector_close_operation(void)
+ZTEST_F(nvs, test_nvs_corrupted_sector_close_operation)
{
int err;
int len;
@@ -440,16 +463,16 @@
const uint16_t max_writes = 26;
/* Get the address of simulator parameters. */
- stats_walk(sim_thresholds, flash_sim_max_write_calls_find,
+ stats_walk(fixture->sim_thresholds, flash_sim_max_write_calls_find,
&flash_max_write_calls);
- stats_walk(sim_thresholds, flash_sim_max_erase_calls_find,
+ stats_walk(fixture->sim_thresholds, flash_sim_max_erase_calls_find,
&flash_max_erase_calls);
- stats_walk(sim_thresholds, flash_sim_max_len_find,
+ stats_walk(fixture->sim_thresholds, flash_sim_max_len_find,
&flash_max_len);
- stats_walk(sim_stats, flash_sim_write_calls_find, &flash_write_stat);
- stats_walk(sim_stats, flash_sim_erase_calls_find, &flash_erase_stat);
+ stats_walk(fixture->sim_stats, flash_sim_write_calls_find, &flash_write_stat);
+ stats_walk(fixture->sim_stats, flash_sim_erase_calls_find, &flash_erase_stat);
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
for (uint16_t i = 0; i < max_writes; i++) {
@@ -472,7 +495,7 @@
*flash_max_len = 4;
}
- len = nvs_write(&fs, id, buf, sizeof(buf));
+ len = nvs_write(&fixture->fs, id, buf, sizeof(buf));
zassert_true(len == sizeof(buf), "nvs_write failed: %d", len);
}
@@ -481,32 +504,32 @@
*flash_max_erase_calls = 0;
*flash_max_len = 0;
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
- check_content(max_id, &fs);
+ check_content(max_id, &fixture->fs);
/* Ensure that the NVS is able to store new content. */
- execute_long_pattern_write(max_id);
+ execute_long_pattern_write(max_id, &fixture->fs);
}
/**
* @brief Test case when storage become full, so only deletion is possible.
*/
-void test_nvs_full_sector(void)
+ZTEST_F(nvs, test_nvs_full_sector)
{
int err;
ssize_t len;
uint16_t filling_id = 0;
uint16_t i, data_read;
- fs.sector_count = 3;
+ fixture->fs.sector_count = 3;
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
while (1) {
- len = nvs_write(&fs, filling_id, &filling_id,
+ len = nvs_write(&fixture->fs, filling_id, &filling_id,
sizeof(filling_id));
if (len == -ENOSPC) {
break;
@@ -517,19 +540,19 @@
}
/* check whether can delete whatever from full storage */
- err = nvs_delete(&fs, 1);
+ err = nvs_delete(&fixture->fs, 1);
zassert_true(err == 0, "nvs_delete call failure: %d", err);
/* the last sector is full now, test re-initialization */
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
- len = nvs_write(&fs, filling_id, &filling_id, sizeof(filling_id));
+ len = nvs_write(&fixture->fs, filling_id, &filling_id, sizeof(filling_id));
zassert_true(len == sizeof(filling_id), "nvs_write failed: %d", len);
/* sanitycheck on NVS content */
for (i = 0; i <= filling_id; i++) {
- len = nvs_read(&fs, i, &data_read, sizeof(data_read));
+ len = nvs_read(&fixture->fs, i, &data_read, sizeof(data_read));
if (i == 1) {
zassert_true(len == -ENOENT,
"nvs_read shouldn't found the entry: %d",
@@ -544,20 +567,20 @@
}
}
-void test_delete(void)
+ZTEST_F(nvs, test_delete)
{
int err;
ssize_t len;
uint16_t filling_id, data_read;
uint32_t ate_wra, data_wra;
- fs.sector_count = 3;
+ fixture->fs.sector_count = 3;
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
for (filling_id = 0; filling_id < 10; filling_id++) {
- len = nvs_write(&fs, filling_id, &filling_id,
+ len = nvs_write(&fixture->fs, filling_id, &filling_id,
sizeof(filling_id));
zassert_true(len == sizeof(filling_id), "nvs_write failed: %d",
@@ -568,36 +591,36 @@
}
/* delete the first entry while it is the most recent one */
- err = nvs_delete(&fs, filling_id);
+ err = nvs_delete(&fixture->fs, filling_id);
zassert_true(err == 0, "nvs_delete call failure: %d", err);
- len = nvs_read(&fs, filling_id, &data_read, sizeof(data_read));
+ len = nvs_read(&fixture->fs, filling_id, &data_read, sizeof(data_read));
zassert_true(len == -ENOENT,
"nvs_read shouldn't found the entry: %d", len);
}
/* delete existing entry */
- err = nvs_delete(&fs, 1);
+ err = nvs_delete(&fixture->fs, 1);
zassert_true(err == 0, "nvs_delete call failure: %d", err);
- len = nvs_read(&fs, 1, &data_read, sizeof(data_read));
+ len = nvs_read(&fixture->fs, 1, &data_read, sizeof(data_read));
zassert_true(len == -ENOENT, "nvs_read shouldn't found the entry: %d",
len);
- ate_wra = fs.ate_wra;
- data_wra = fs.data_wra;
+ ate_wra = fixture->fs.ate_wra;
+ data_wra = fixture->fs.data_wra;
/* delete already deleted entry */
- err = nvs_delete(&fs, 1);
+ err = nvs_delete(&fixture->fs, 1);
zassert_true(err == 0, "nvs_delete call failure: %d", err);
- zassert_true(ate_wra == fs.ate_wra && data_wra == fs.data_wra,
+ zassert_true(ate_wra == fixture->fs.ate_wra && data_wra == fixture->fs.data_wra,
"delete already deleted entry should not make"
" any footprint in the storage");
/* delete nonexisting entry */
- err = nvs_delete(&fs, filling_id);
+ err = nvs_delete(&fixture->fs, filling_id);
zassert_true(err == 0, "nvs_delete call failure: %d", err);
- zassert_true(ate_wra == fs.ate_wra && data_wra == fs.data_wra,
+ zassert_true(ate_wra == fixture->fs.ate_wra && data_wra == fixture->fs.data_wra,
"delete nonexistent entry should not make"
" any footprint in the storage");
}
@@ -609,7 +632,7 @@
* has an invalid crc8, the offset should not be used and a recover of the
* last ate should be done instead.
*/
-void test_nvs_gc_corrupt_close_ate(void)
+ZTEST_F(nvs, test_nvs_gc_corrupt_close_ate)
{
struct nvs_ate ate, close_ate;
uint32_t data;
@@ -617,7 +640,7 @@
int err;
close_ate.id = 0xffff;
- close_ate.offset = fs.sector_size - sizeof(struct nvs_ate) * 5;
+ close_ate.offset = fixture->fs.sector_size - sizeof(struct nvs_ate) * 5;
close_ate.len = 0;
close_ate.crc8 = 0xff; /* Incorrect crc8 */
@@ -628,34 +651,35 @@
offsetof(struct nvs_ate, crc8));
/* Mark sector 0 as closed */
- err = flash_write(flash_dev, fs.offset + fs.sector_size -
+ err = flash_write(fixture->fs.flash_device, fixture->fs.offset + fixture->fs.sector_size -
sizeof(struct nvs_ate), &close_ate,
sizeof(close_ate));
zassert_true(err == 0, "flash_write failed: %d", err);
/* Write valid ate at -6 */
- err = flash_write(flash_dev, fs.offset + fs.sector_size -
+ err = flash_write(fixture->fs.flash_device, fixture->fs.offset + fixture->fs.sector_size -
sizeof(struct nvs_ate) * 6, &ate, sizeof(ate));
zassert_true(err == 0, "flash_write failed: %d", err);
/* Write data for previous ate */
data = 0xaa55aa55;
- err = flash_write(flash_dev, fs.offset, &data, sizeof(data));
+ err = flash_write(fixture->fs.flash_device, fixture->fs.offset, &data, sizeof(data));
zassert_true(err == 0, "flash_write failed: %d", err);
/* Mark sector 1 as closed */
- err = flash_write(flash_dev, fs.offset + (2 * fs.sector_size) -
+ err = flash_write(fixture->fs.flash_device,
+ fixture->fs.offset + (2 * fixture->fs.sector_size) -
sizeof(struct nvs_ate), &close_ate,
sizeof(close_ate));
zassert_true(err == 0, "flash_write failed: %d", err);
- fs.sector_count = 3;
+ fixture->fs.sector_count = 3;
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
data = 0;
- len = nvs_read(&fs, 1, &data, sizeof(data));
+ len = nvs_read(&fixture->fs, 1, &data, sizeof(data));
zassert_true(len == sizeof(data),
"nvs_read should have read %d bytes", sizeof(data));
zassert_true(data == 0xaa55aa55, "unexpected value %d", data);
@@ -664,13 +688,13 @@
/*
* Test that garbage-collection correctly handles corrupt ate's.
*/
-void test_nvs_gc_corrupt_ate(void)
+ZTEST_F(nvs, test_nvs_gc_corrupt_ate)
{
struct nvs_ate corrupt_ate, close_ate;
int err;
close_ate.id = 0xffff;
- close_ate.offset = fs.sector_size / 2;
+ close_ate.offset = fixture->fs.sector_size / 2;
close_ate.len = 0;
close_ate.crc8 = crc8_ccitt(0xff, &close_ate,
offsetof(struct nvs_ate, crc8));
@@ -681,36 +705,38 @@
corrupt_ate.crc8 = 0xff; /* Incorrect crc8 */
/* Mark sector 0 as closed */
- err = flash_write(flash_dev, fs.offset + fs.sector_size -
+ err = flash_write(fixture->fs.flash_device, fixture->fs.offset + fixture->fs.sector_size -
sizeof(struct nvs_ate), &close_ate,
sizeof(close_ate));
zassert_true(err == 0, "flash_write failed: %d", err);
/* Write a corrupt ate */
- err = flash_write(flash_dev, fs.offset + (fs.sector_size / 2),
+ err = flash_write(fixture->fs.flash_device,
+ fixture->fs.offset + (fixture->fs.sector_size / 2),
&corrupt_ate, sizeof(corrupt_ate));
zassert_true(err == 0, "flash_write failed: %d", err);
/* Mark sector 1 as closed */
- err = flash_write(flash_dev, fs.offset + (2 * fs.sector_size) -
+ err = flash_write(fixture->fs.flash_device,
+ fixture->fs.offset + (2 * fixture->fs.sector_size) -
sizeof(struct nvs_ate), &close_ate,
sizeof(close_ate));
zassert_true(err == 0, "flash_write failed: %d", err);
- fs.sector_count = 3;
+ fixture->fs.sector_count = 3;
- err = nvs_mount(&fs);
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_mount call failure: %d", err);
}
#ifdef CONFIG_NVS_LOOKUP_CACHE
-static size_t num_matching_cache_entries(uint32_t addr, bool compare_sector_only)
+static size_t num_matching_cache_entries(uint32_t addr, bool compare_sector_only, struct nvs_fs *fs)
{
size_t i, num = 0;
uint32_t mask = compare_sector_only ? ADDR_SECT_MASK : UINT32_MAX;
for (i = 0; i < CONFIG_NVS_LOOKUP_CACHE_SIZE; i++) {
- if ((fs.lookup_cache[i] & mask) == addr) {
+ if ((fs->lookup_cache[i] & mask) == addr) {
num++;
}
}
@@ -723,7 +749,7 @@
* Test that NVS lookup cache is properly rebuilt on nvs_mount(), or initialized
* to NVS_LOOKUP_CACHE_NO_ADDR if the store is empty.
*/
-void test_nvs_cache_init(void)
+ZTEST_F(nvs, test_nvs_cache_init)
{
#ifdef CONFIG_NVS_LOOKUP_CACHE
int err;
@@ -733,35 +759,35 @@
/* Test cache initialization when the store is empty */
- fs.sector_count = 3;
- err = nvs_mount(&fs);
+ fixture->fs.sector_count = 3;
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_init call failure: %d", err);
- num = num_matching_cache_entries(NVS_LOOKUP_CACHE_NO_ADDR, false);
+ num = num_matching_cache_entries(NVS_LOOKUP_CACHE_NO_ADDR, false, &fixture->fs);
zassert_equal(num, CONFIG_NVS_LOOKUP_CACHE_SIZE, "uninitialized cache");
/* Test cache update after nvs_write() */
- ate_addr = fs.ate_wra;
- err = nvs_write(&fs, 1, &data, sizeof(data));
+ ate_addr = fixture->fs.ate_wra;
+ err = nvs_write(&fixture->fs, 1, &data, sizeof(data));
zassert_equal(err, sizeof(data), "nvs_write call failure: %d", err);
- num = num_matching_cache_entries(NVS_LOOKUP_CACHE_NO_ADDR, false);
+ num = num_matching_cache_entries(NVS_LOOKUP_CACHE_NO_ADDR, false, &fixture->fs);
zassert_equal(num, CONFIG_NVS_LOOKUP_CACHE_SIZE - 1, "cache not updated after write");
- num = num_matching_cache_entries(ate_addr, false);
+ num = num_matching_cache_entries(ate_addr, false, &fixture->fs);
zassert_equal(num, 1, "invalid cache entry after write");
/* Test cache initialization when the store is non-empty */
- memset(fs.lookup_cache, 0xAA, sizeof(fs.lookup_cache));
- err = nvs_mount(&fs);
+ memset(fixture->fs.lookup_cache, 0xAA, sizeof(fixture->fs.lookup_cache));
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_init call failure: %d", err);
- num = num_matching_cache_entries(NVS_LOOKUP_CACHE_NO_ADDR, false);
+ num = num_matching_cache_entries(NVS_LOOKUP_CACHE_NO_ADDR, false, &fixture->fs);
zassert_equal(num, CONFIG_NVS_LOOKUP_CACHE_SIZE - 1, "uninitialized cache after restart");
- num = num_matching_cache_entries(ate_addr, false);
+ num = num_matching_cache_entries(ate_addr, false, &fixture->fs);
zassert_equal(num, 1, "invalid cache entry after restart");
#endif
}
@@ -770,25 +796,25 @@
* Test that even after writing more NVS IDs than the number of NVS lookup cache
* entries they all can be read correctly.
*/
-void test_nvs_cache_collission(void)
+ZTEST_F(nvs, test_nvs_cache_collission)
{
#ifdef CONFIG_NVS_LOOKUP_CACHE
int err;
uint16_t id;
uint16_t data;
- fs.sector_count = 3;
- err = nvs_mount(&fs);
+ fixture->fs.sector_count = 3;
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_init call failure: %d", err);
for (id = 0; id < CONFIG_NVS_LOOKUP_CACHE_SIZE + 1; id++) {
data = id;
- err = nvs_write(&fs, id, &data, sizeof(data));
+ err = nvs_write(&fixture->fs, id, &data, sizeof(data));
zassert_equal(err, sizeof(data), "nvs_write call failure: %d", err);
}
for (id = 0; id < CONFIG_NVS_LOOKUP_CACHE_SIZE + 1; id++) {
- err = nvs_read(&fs, id, &data, sizeof(data));
+ err = nvs_read(&fixture->fs, id, &data, sizeof(data));
zassert_equal(err, sizeof(data), "nvs_read call failure: %d", err);
zassert_equal(data, id, "incorrect data read");
}
@@ -798,35 +824,35 @@
/*
* Test that NVS lookup cache does not contain any address from gc-ed sector
*/
-void test_nvs_cache_gc(void)
+ZTEST_F(nvs, test_nvs_cache_gc)
{
#ifdef CONFIG_NVS_LOOKUP_CACHE
int err;
size_t num;
uint16_t data = 0;
- fs.sector_count = 3;
- err = nvs_mount(&fs);
+ fixture->fs.sector_count = 3;
+ err = nvs_mount(&fixture->fs);
zassert_true(err == 0, "nvs_init call failure: %d", err);
/* Fill the first sector with writes of ID 1 */
- while (fs.data_wra + sizeof(data) <= fs.ate_wra) {
+ while (fixture->fs.data_wra + sizeof(data) <= fixture->fs.ate_wra) {
++data;
- err = nvs_write(&fs, 1, &data, sizeof(data));
+ err = nvs_write(&fixture->fs, 1, &data, sizeof(data));
zassert_equal(err, sizeof(data), "nvs_write call failure: %d", err);
}
/* Verify that cache contains a single entry for sector 0 */
- num = num_matching_cache_entries(0 << ADDR_SECT_SHIFT, true);
+ num = num_matching_cache_entries(0 << ADDR_SECT_SHIFT, true, &fixture->fs);
zassert_equal(num, 1, "invalid cache content after filling sector 0");
/* Fill the second sector with writes of ID 2 */
- while ((fs.ate_wra >> ADDR_SECT_SHIFT) != 2) {
+ while ((fixture->fs.ate_wra >> ADDR_SECT_SHIFT) != 2) {
++data;
- err = nvs_write(&fs, 2, &data, sizeof(data));
+ err = nvs_write(&fixture->fs, 2, &data, sizeof(data));
zassert_equal(err, sizeof(data), "nvs_write call failure: %d", err);
}
@@ -835,47 +861,10 @@
* reflected by the cache content.
*/
- num = num_matching_cache_entries(0 << ADDR_SECT_SHIFT, true);
+ num = num_matching_cache_entries(0 << ADDR_SECT_SHIFT, true, &fixture->fs);
zassert_equal(num, 0, "not invalidated cache entries aftetr gc");
- num = num_matching_cache_entries(2 << ADDR_SECT_SHIFT, true);
+ num = num_matching_cache_entries(2 << ADDR_SECT_SHIFT, true, &fixture->fs);
zassert_equal(num, 2, "invalid cache content after gc");
#endif
}
-
-void test_main(void)
-{
- __ASSERT_NO_MSG(device_is_ready(flash_dev));
-
- ztest_test_suite(test_nvs,
- ztest_unit_test_setup_teardown(test_nvs_mount, setup,
- teardown),
- ztest_unit_test_setup_teardown(test_nvs_write, setup,
- teardown),
- ztest_unit_test_setup_teardown(
- test_nvs_corrupted_write, setup, teardown),
- ztest_unit_test_setup_teardown(
- test_nvs_gc, setup, teardown),
- ztest_unit_test_setup_teardown(
- test_nvs_gc_3sectors, setup, teardown),
- ztest_unit_test_setup_teardown(
- test_nvs_corrupted_sector_close_operation,
- setup, teardown),
- ztest_unit_test_setup_teardown(test_nvs_full_sector,
- setup, teardown),
- ztest_unit_test_setup_teardown(test_delete, setup,
- teardown),
- ztest_unit_test_setup_teardown(
- test_nvs_gc_corrupt_close_ate, setup, teardown),
- ztest_unit_test_setup_teardown(
- test_nvs_gc_corrupt_ate, setup, teardown),
- ztest_unit_test_setup_teardown(
- test_nvs_cache_init, setup, teardown),
- ztest_unit_test_setup_teardown(
- test_nvs_cache_collission, setup, teardown),
- ztest_unit_test_setup_teardown(
- test_nvs_cache_gc, setup, teardown)
- );
-
- ztest_run_test_suite(test_nvs);
-}