forked from espressif/esp-idf
nvs_flash: introduce write failures after each word written
Previously the test bench would check failure recovery by introducing error after each write operation. This makes checks a bit more extensive (and much longer) by failing after every word written. Surprisingly, this change didn't expose any bugs.
This commit is contained in:
@@ -74,11 +74,11 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < size / 4; ++i) {
|
||||||
if (mFailCountdown != SIZE_MAX && mFailCountdown-- == 0) {
|
if (mFailCountdown != SIZE_MAX && mFailCountdown-- == 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < size / 4; ++i) {
|
|
||||||
uint32_t sv = src[i];
|
uint32_t sv = src[i];
|
||||||
size_t pos = dstAddr / 4 + i;
|
size_t pos = dstAddr / 4 + i;
|
||||||
uint32_t& dv = mData[pos];
|
uint32_t& dv = mData[pos];
|
||||||
|
@@ -894,7 +894,7 @@ TEST_CASE("test recovery from sudden poweroff", "[.][long][nvs][recovery][monkey
|
|||||||
|
|
||||||
size_t totalOps = 0;
|
size_t totalOps = 0;
|
||||||
int lastPercent = -1;
|
int lastPercent = -1;
|
||||||
for (uint32_t errDelay = 4; ; ++errDelay) {
|
for (uint32_t errDelay = 0; ; ++errDelay) {
|
||||||
INFO(errDelay);
|
INFO(errDelay);
|
||||||
emu.randomize(seed);
|
emu.randomize(seed);
|
||||||
emu.clearStats();
|
emu.clearStats();
|
||||||
@@ -903,23 +903,25 @@ TEST_CASE("test recovery from sudden poweroff", "[.][long][nvs][recovery][monkey
|
|||||||
|
|
||||||
if (totalOps != 0) {
|
if (totalOps != 0) {
|
||||||
int percent = errDelay * 100 / totalOps;
|
int percent = errDelay * 100 / totalOps;
|
||||||
if (percent != lastPercent) {
|
if (percent > lastPercent) {
|
||||||
printf("%d/%d (%d%%)\r\n", errDelay, static_cast<int>(totalOps), percent);
|
printf("%d/%d (%d%%)\r\n", errDelay, static_cast<int>(totalOps), percent);
|
||||||
lastPercent = percent;
|
lastPercent = percent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_ESP_OK(nvs_flash_init_custom(NVS_FLASH_SECTOR, NVS_FLASH_SECTOR_COUNT_MIN));
|
|
||||||
|
|
||||||
nvs_handle handle;
|
nvs_handle handle;
|
||||||
TEST_ESP_OK(nvs_open("namespace1", NVS_READWRITE, &handle));
|
|
||||||
|
|
||||||
size_t count = iter_count;
|
size_t count = iter_count;
|
||||||
|
|
||||||
|
if (nvs_flash_init_custom(NVS_FLASH_SECTOR, NVS_FLASH_SECTOR_COUNT_MIN) == ESP_OK) {
|
||||||
|
if (nvs_open("namespace1", NVS_READWRITE, &handle) == ESP_OK) {
|
||||||
if(test.doRandomThings(handle, gen, count) != ESP_ERR_FLASH_OP_FAIL) {
|
if(test.doRandomThings(handle, gen, count) != ESP_ERR_FLASH_OP_FAIL) {
|
||||||
nvs_close(handle);
|
nvs_close(handle);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
nvs_close(handle);
|
nvs_close(handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TEST_ESP_OK(nvs_flash_init_custom(NVS_FLASH_SECTOR, NVS_FLASH_SECTOR_COUNT_MIN));
|
TEST_ESP_OK(nvs_flash_init_custom(NVS_FLASH_SECTOR, NVS_FLASH_SECTOR_COUNT_MIN));
|
||||||
TEST_ESP_OK(nvs_open("namespace1", NVS_READWRITE, &handle));
|
TEST_ESP_OK(nvs_open("namespace1", NVS_READWRITE, &handle));
|
||||||
@@ -929,7 +931,7 @@ TEST_CASE("test recovery from sudden poweroff", "[.][long][nvs][recovery][monkey
|
|||||||
CHECK(0);
|
CHECK(0);
|
||||||
}
|
}
|
||||||
nvs_close(handle);
|
nvs_close(handle);
|
||||||
totalOps = emu.getEraseOps() + emu.getWriteOps();
|
totalOps = emu.getEraseOps() + emu.getWriteBytes() / 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user