t: Added a couple idempotent traversal mutation tests
Just to makes sure this works as expected. Though internally the logic is pretty simple.
This commit is contained in:
@@ -1782,6 +1782,112 @@ done:;
|
|||||||
lfsr_unmount(&lfs) => 0;
|
lfsr_unmount(&lfs) => 0;
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
# test that we don't get extra anything after end of traversal
|
||||||
|
[cases.test_traversal_mutation_idempotent]
|
||||||
|
defines.CKMETADATA = [false, true]
|
||||||
|
defines.CKDATA = [false, true]
|
||||||
|
defines.LOOKAHEAD = [false, true]
|
||||||
|
code = '''
|
||||||
|
lfs_t lfs;
|
||||||
|
lfsr_format(&lfs, CFG) => 0;
|
||||||
|
lfsr_mount(&lfs, CFG) => 0;
|
||||||
|
|
||||||
|
// try traversing
|
||||||
|
lfsr_traversal_t t;
|
||||||
|
lfsr_traversal_open(&lfs, &t,
|
||||||
|
((CKMETADATA) ? LFS_T_CKMETADATA : 0)
|
||||||
|
| ((CKDATA) ? LFS_T_CKDATA : 0)
|
||||||
|
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)) => 0;
|
||||||
|
struct lfs_tinfo tinfo;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => 0;
|
||||||
|
assert(tinfo.btype == LFS_BTYPE_MDIR);
|
||||||
|
assert(tinfo.block == 0 || tinfo.block == 1);
|
||||||
|
|
||||||
|
// mutate
|
||||||
|
lfsr_file_t file;
|
||||||
|
lfsr_file_open(&lfs, &file, "spider",
|
||||||
|
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
|
||||||
|
lfsr_file_close(&lfs, &file) => 0;
|
||||||
|
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
|
||||||
|
// try another mutation just for good measure
|
||||||
|
lfsr_file_open(&lfs, &file, "tarantula",
|
||||||
|
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
|
||||||
|
lfsr_file_close(&lfs, &file) => 0;
|
||||||
|
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_NOENT;
|
||||||
|
|
||||||
|
lfsr_traversal_close(&lfs, &t) => 0;
|
||||||
|
|
||||||
|
lfsr_unmount(&lfs) => 0;
|
||||||
|
'''
|
||||||
|
|
||||||
|
[cases.test_traversal_mutation_excl_idempotent]
|
||||||
|
defines.CKMETADATA = [false, true]
|
||||||
|
defines.CKDATA = [false, true]
|
||||||
|
defines.LOOKAHEAD = [false, true]
|
||||||
|
code = '''
|
||||||
|
lfs_t lfs;
|
||||||
|
lfsr_format(&lfs, CFG) => 0;
|
||||||
|
lfsr_mount(&lfs, CFG) => 0;
|
||||||
|
|
||||||
|
// try traversing
|
||||||
|
lfsr_traversal_t t;
|
||||||
|
lfsr_traversal_open(&lfs, &t,
|
||||||
|
LFS_T_EXCL
|
||||||
|
| ((CKMETADATA) ? LFS_T_CKMETADATA : 0)
|
||||||
|
| ((CKDATA) ? LFS_T_CKDATA : 0)
|
||||||
|
| ((LOOKAHEAD) ? LFS_T_LOOKAHEAD : 0)) => 0;
|
||||||
|
struct lfs_tinfo tinfo;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => 0;
|
||||||
|
assert(tinfo.btype == LFS_BTYPE_MDIR);
|
||||||
|
assert(tinfo.block == 0 || tinfo.block == 1);
|
||||||
|
|
||||||
|
// mutate
|
||||||
|
lfsr_file_t file;
|
||||||
|
lfsr_file_open(&lfs, &file, "spider",
|
||||||
|
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
|
||||||
|
lfsr_file_close(&lfs, &file) => 0;
|
||||||
|
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
|
||||||
|
// try another mutation just for good measure
|
||||||
|
lfsr_file_open(&lfs, &file, "tarantula",
|
||||||
|
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
|
||||||
|
lfsr_file_close(&lfs, &file) => 0;
|
||||||
|
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
lfsr_traversal_read(&lfs, &t, &tinfo) => LFS_ERR_BUSY;
|
||||||
|
|
||||||
|
lfsr_traversal_close(&lfs, &t) => 0;
|
||||||
|
|
||||||
|
lfsr_unmount(&lfs) => 0;
|
||||||
|
'''
|
||||||
|
|
||||||
[cases.test_traversal_mutation_mkdir]
|
[cases.test_traversal_mutation_mkdir]
|
||||||
defines.WHEN = [0, 1, 2]
|
defines.WHEN = [0, 1, 2]
|
||||||
defines.EXCL = [false, true]
|
defines.EXCL = [false, true]
|
||||||
|
|||||||
Reference in New Issue
Block a user