|
@@ -1,72 +1,14 @@
|
|
|
[[case]] # single bad blocks
|
|
[[case]] # single bad blocks
|
|
|
|
|
+define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster
|
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
|
-define.LFS_BADBLOCK_BEHAVIOR = 'LFS_TESTBD_BADBLOCK_NOPROG'
|
|
|
|
|
-define.NAMEMULT = 64
|
|
|
|
|
-define.FILEMULT = 1
|
|
|
|
|
-code = '''
|
|
|
|
|
- for (lfs_block_t badblock = 2; badblock < LFS_BLOCK_COUNT; badblock++) {
|
|
|
|
|
- lfs_testbd_setwear(&cfg, badblock-1, 0) => 0;
|
|
|
|
|
- lfs_testbd_setwear(&cfg, badblock, 0xffffffff) => 0;
|
|
|
|
|
-
|
|
|
|
|
- lfs_format(&lfs, &cfg) => 0;
|
|
|
|
|
-
|
|
|
|
|
- lfs_mount(&lfs, &cfg) => 0;
|
|
|
|
|
- for (int i = 1; i < 10; i++) {
|
|
|
|
|
- for (int j = 0; j < NAMEMULT; j++) {
|
|
|
|
|
- buffer[j] = '0'+i;
|
|
|
|
|
- }
|
|
|
|
|
- buffer[NAMEMULT] = '\0';
|
|
|
|
|
- lfs_mkdir(&lfs, (char*)buffer) => 0;
|
|
|
|
|
-
|
|
|
|
|
- buffer[NAMEMULT] = '/';
|
|
|
|
|
- for (int j = 0; j < NAMEMULT; j++) {
|
|
|
|
|
- buffer[j+NAMEMULT+1] = '0'+i;
|
|
|
|
|
- }
|
|
|
|
|
- buffer[2*NAMEMULT+1] = '\0';
|
|
|
|
|
- lfs_file_open(&lfs, &file, (char*)buffer,
|
|
|
|
|
- LFS_O_WRONLY | LFS_O_CREAT) => 0;
|
|
|
|
|
-
|
|
|
|
|
- size = NAMEMULT;
|
|
|
|
|
- for (int j = 0; j < i*FILEMULT; j++) {
|
|
|
|
|
- lfs_file_write(&lfs, &file, buffer, size) => size;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- lfs_file_close(&lfs, &file) => 0;
|
|
|
|
|
- }
|
|
|
|
|
- lfs_unmount(&lfs) => 0;
|
|
|
|
|
-
|
|
|
|
|
- lfs_mount(&lfs, &cfg) => 0;
|
|
|
|
|
- for (int i = 1; i < 10; i++) {
|
|
|
|
|
- for (int j = 0; j < NAMEMULT; j++) {
|
|
|
|
|
- buffer[j] = '0'+i;
|
|
|
|
|
- }
|
|
|
|
|
- buffer[NAMEMULT] = '\0';
|
|
|
|
|
- lfs_stat(&lfs, (char*)buffer, &info) => 0;
|
|
|
|
|
- info.type => LFS_TYPE_DIR;
|
|
|
|
|
-
|
|
|
|
|
- buffer[NAMEMULT] = '/';
|
|
|
|
|
- for (int j = 0; j < NAMEMULT; j++) {
|
|
|
|
|
- buffer[j+NAMEMULT+1] = '0'+i;
|
|
|
|
|
- }
|
|
|
|
|
- buffer[2*NAMEMULT+1] = '\0';
|
|
|
|
|
- lfs_file_open(&lfs, &file, (char*)buffer, LFS_O_RDONLY) => 0;
|
|
|
|
|
-
|
|
|
|
|
- size = NAMEMULT;
|
|
|
|
|
- for (int j = 0; j < i*FILEMULT; j++) {
|
|
|
|
|
- uint8_t rbuffer[1024];
|
|
|
|
|
- lfs_file_read(&lfs, &file, rbuffer, size) => size;
|
|
|
|
|
- memcmp(buffer, rbuffer, size) => 0;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- lfs_file_close(&lfs, &file) => 0;
|
|
|
|
|
- }
|
|
|
|
|
- lfs_unmount(&lfs) => 0;
|
|
|
|
|
- }
|
|
|
|
|
-'''
|
|
|
|
|
-
|
|
|
|
|
-[[case]] # single persistent blocks (can't erase)
|
|
|
|
|
-define.LFS_ERASE_CYCLES = 0xffffffff
|
|
|
|
|
-define.LFS_BADBLOCK_BEHAVIOR = 'LFS_TESTBD_BADBLOCK_NOERASE'
|
|
|
|
|
|
|
+define.LFS_ERASE_VALUE = [0x00, 0xff, -1]
|
|
|
|
|
+define.LFS_BADBLOCK_BEHAVIOR = [
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_PROGERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_ERASEERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_READERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_PROGNOOP',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_ERASENOOP',
|
|
|
|
|
+]
|
|
|
define.NAMEMULT = 64
|
|
define.NAMEMULT = 64
|
|
|
define.FILEMULT = 1
|
|
define.FILEMULT = 1
|
|
|
code = '''
|
|
code = '''
|
|
@@ -130,78 +72,16 @@ code = '''
|
|
|
}
|
|
}
|
|
|
'''
|
|
'''
|
|
|
|
|
|
|
|
-[[case]] # single unreadable blocks (can't read)
|
|
|
|
|
-define.LFS_ERASE_CYCLES = 0xffffffff
|
|
|
|
|
-define.LFS_BADBLOCK_BEHAVIOR = 'LFS_TESTBD_BADBLOCK_NOREAD'
|
|
|
|
|
-define.NAMEMULT = 64
|
|
|
|
|
-define.FILEMULT = 1
|
|
|
|
|
-code = '''
|
|
|
|
|
- for (lfs_block_t badblock = 2; badblock < LFS_BLOCK_COUNT/2; badblock++) {
|
|
|
|
|
- lfs_testbd_setwear(&cfg, badblock-1, 0) => 0;
|
|
|
|
|
- lfs_testbd_setwear(&cfg, badblock, 0xffffffff) => 0;
|
|
|
|
|
-
|
|
|
|
|
- lfs_format(&lfs, &cfg) => 0;
|
|
|
|
|
-
|
|
|
|
|
- lfs_mount(&lfs, &cfg) => 0;
|
|
|
|
|
- for (int i = 1; i < 10; i++) {
|
|
|
|
|
- for (int j = 0; j < NAMEMULT; j++) {
|
|
|
|
|
- buffer[j] = '0'+i;
|
|
|
|
|
- }
|
|
|
|
|
- buffer[NAMEMULT] = '\0';
|
|
|
|
|
- lfs_mkdir(&lfs, (char*)buffer) => 0;
|
|
|
|
|
-
|
|
|
|
|
- buffer[NAMEMULT] = '/';
|
|
|
|
|
- for (int j = 0; j < NAMEMULT; j++) {
|
|
|
|
|
- buffer[j+NAMEMULT+1] = '0'+i;
|
|
|
|
|
- }
|
|
|
|
|
- buffer[2*NAMEMULT+1] = '\0';
|
|
|
|
|
- lfs_file_open(&lfs, &file, (char*)buffer,
|
|
|
|
|
- LFS_O_WRONLY | LFS_O_CREAT) => 0;
|
|
|
|
|
-
|
|
|
|
|
- size = NAMEMULT;
|
|
|
|
|
- for (int j = 0; j < i*FILEMULT; j++) {
|
|
|
|
|
- lfs_file_write(&lfs, &file, buffer, size) => size;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- lfs_file_close(&lfs, &file) => 0;
|
|
|
|
|
- }
|
|
|
|
|
- lfs_unmount(&lfs) => 0;
|
|
|
|
|
-
|
|
|
|
|
- lfs_mount(&lfs, &cfg) => 0;
|
|
|
|
|
- for (int i = 1; i < 10; i++) {
|
|
|
|
|
- for (int j = 0; j < NAMEMULT; j++) {
|
|
|
|
|
- buffer[j] = '0'+i;
|
|
|
|
|
- }
|
|
|
|
|
- buffer[NAMEMULT] = '\0';
|
|
|
|
|
- lfs_stat(&lfs, (char*)buffer, &info) => 0;
|
|
|
|
|
- info.type => LFS_TYPE_DIR;
|
|
|
|
|
-
|
|
|
|
|
- buffer[NAMEMULT] = '/';
|
|
|
|
|
- for (int j = 0; j < NAMEMULT; j++) {
|
|
|
|
|
- buffer[j+NAMEMULT+1] = '0'+i;
|
|
|
|
|
- }
|
|
|
|
|
- buffer[2*NAMEMULT+1] = '\0';
|
|
|
|
|
- lfs_file_open(&lfs, &file, (char*)buffer, LFS_O_RDONLY) => 0;
|
|
|
|
|
-
|
|
|
|
|
- size = NAMEMULT;
|
|
|
|
|
- for (int j = 0; j < i*FILEMULT; j++) {
|
|
|
|
|
- uint8_t rbuffer[1024];
|
|
|
|
|
- lfs_file_read(&lfs, &file, rbuffer, size) => size;
|
|
|
|
|
- memcmp(buffer, rbuffer, size) => 0;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- lfs_file_close(&lfs, &file) => 0;
|
|
|
|
|
- }
|
|
|
|
|
- lfs_unmount(&lfs) => 0;
|
|
|
|
|
- }
|
|
|
|
|
-'''
|
|
|
|
|
-
|
|
|
|
|
[[case]] # region corruption (causes cascading failures)
|
|
[[case]] # region corruption (causes cascading failures)
|
|
|
|
|
+define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster
|
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
|
|
|
+define.LFS_ERASE_VALUE = [0x00, 0xff, -1]
|
|
|
define.LFS_BADBLOCK_BEHAVIOR = [
|
|
define.LFS_BADBLOCK_BEHAVIOR = [
|
|
|
- 'LFS_TESTBD_BADBLOCK_NOPROG',
|
|
|
|
|
- 'LFS_TESTBD_BADBLOCK_NOERASE',
|
|
|
|
|
- 'LFS_TESTBD_BADBLOCK_NOREAD',
|
|
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_PROGERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_ERASEERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_READERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_PROGNOOP',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_ERASENOOP',
|
|
|
]
|
|
]
|
|
|
define.NAMEMULT = 64
|
|
define.NAMEMULT = 64
|
|
|
define.FILEMULT = 1
|
|
define.FILEMULT = 1
|
|
@@ -266,11 +146,15 @@ code = '''
|
|
|
'''
|
|
'''
|
|
|
|
|
|
|
|
[[case]] # alternating corruption (causes cascading failures)
|
|
[[case]] # alternating corruption (causes cascading failures)
|
|
|
|
|
+define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster
|
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
|
|
|
+define.LFS_ERASE_VALUE = [0x00, 0xff, -1]
|
|
|
define.LFS_BADBLOCK_BEHAVIOR = [
|
|
define.LFS_BADBLOCK_BEHAVIOR = [
|
|
|
- 'LFS_TESTBD_BADBLOCK_NOPROG',
|
|
|
|
|
- 'LFS_TESTBD_BADBLOCK_NOERASE',
|
|
|
|
|
- 'LFS_TESTBD_BADBLOCK_NOREAD',
|
|
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_PROGERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_ERASEERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_READERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_PROGNOOP',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_ERASENOOP',
|
|
|
]
|
|
]
|
|
|
define.NAMEMULT = 64
|
|
define.NAMEMULT = 64
|
|
|
define.FILEMULT = 1
|
|
define.FILEMULT = 1
|
|
@@ -337,10 +221,13 @@ code = '''
|
|
|
# other corner cases
|
|
# other corner cases
|
|
|
[[case]] # bad superblocks (corrupt 1 or 0)
|
|
[[case]] # bad superblocks (corrupt 1 or 0)
|
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
|
|
|
+define.LFS_ERASE_VALUE = [0x00, 0xff, -1]
|
|
|
define.LFS_BADBLOCK_BEHAVIOR = [
|
|
define.LFS_BADBLOCK_BEHAVIOR = [
|
|
|
- 'LFS_TESTBD_BADBLOCK_NOPROG',
|
|
|
|
|
- 'LFS_TESTBD_BADBLOCK_NOERASE',
|
|
|
|
|
- 'LFS_TESTBD_BADBLOCK_NOREAD',
|
|
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_PROGERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_ERASEERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_READERROR',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_PROGNOOP',
|
|
|
|
|
+ 'LFS_TESTBD_BADBLOCK_ERASENOOP',
|
|
|
]
|
|
]
|
|
|
code = '''
|
|
code = '''
|
|
|
lfs_testbd_setwear(&cfg, 0, 0xffffffff) => 0;
|
|
lfs_testbd_setwear(&cfg, 0, 0xffffffff) => 0;
|