mirror of
https://gitee.com/openharmony/third_party_littlefs
synced 2024-11-23 14:59:50 +00:00
9f546f154f
Moved .travis.yml over to use the new test framework. A part of this involved testing all of the configurations ran on the old framework and deciding which to carry over. The new framework duplicates some of the cases tested by the configurations so some configurations could be dropped. The .travis.yml includes some extreme ones, such as no inline files, relocations every cycle, no intrinsics, power-loss every byte, unaligned block_count and lookahead, and odd read_sizes. There were several configurations were some tests failed because of limitations in the tests themselves, so many conditions were added to make sure the configurations can run on as many tests as possible.
242 lines
7.3 KiB
TOML
242 lines
7.3 KiB
TOML
# bad blocks with block cycles should be tested in test_relocations
|
|
if = 'LFS_BLOCK_CYCLES == -1'
|
|
|
|
[[case]] # single bad blocks
|
|
define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
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.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]] # region corruption (causes cascading failures)
|
|
define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
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.FILEMULT = 1
|
|
code = '''
|
|
for (lfs_block_t i = 0; i < (LFS_BLOCK_COUNT-2)/2; i++) {
|
|
lfs_testbd_setwear(&cfg, i+2, 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]] # alternating corruption (causes cascading failures)
|
|
define.LFS_BLOCK_COUNT = 256 # small bd so test runs faster
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
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.FILEMULT = 1
|
|
code = '''
|
|
for (lfs_block_t i = 0; i < (LFS_BLOCK_COUNT-2)/2; i++) {
|
|
lfs_testbd_setwear(&cfg, (2*i) + 2, 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;
|
|
'''
|
|
|
|
# other corner cases
|
|
[[case]] # bad superblocks (corrupt 1 or 0)
|
|
define.LFS_ERASE_CYCLES = 0xffffffff
|
|
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',
|
|
]
|
|
code = '''
|
|
lfs_testbd_setwear(&cfg, 0, 0xffffffff) => 0;
|
|
lfs_testbd_setwear(&cfg, 1, 0xffffffff) => 0;
|
|
|
|
lfs_format(&lfs, &cfg) => LFS_ERR_NOSPC;
|
|
lfs_mount(&lfs, &cfg) => LFS_ERR_CORRUPT;
|
|
'''
|