0781f50edb
This mostly required names for each test case, declarations of previously-implicit variables since the new test framework is more conservative with what it declares (the small extra effort to add declarations is well worth the simplicity and improved readability), and tweaks to work with not-really-constant defines. Also renamed test_ -> test, replacing the old ./scripts/test.py, unfortunately git seems to have had a hard time with this.
271 lines
8.1 KiB
TOML
271 lines
8.1 KiB
TOML
|
|
[cases.interspersed_files]
|
|
defines.SIZE = [10, 100]
|
|
defines.FILES = [4, 10, 26]
|
|
code = '''
|
|
lfs_t lfs;
|
|
lfs_file_t files[FILES];
|
|
const char alphas[] = "abcdefghijklmnopqrstuvwxyz";
|
|
lfs_format(&lfs, cfg) => 0;
|
|
lfs_mount(&lfs, cfg) => 0;
|
|
for (int j = 0; j < FILES; j++) {
|
|
char path[1024];
|
|
sprintf(path, "%c", alphas[j]);
|
|
lfs_file_open(&lfs, &files[j], path,
|
|
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
|
|
}
|
|
|
|
for (int i = 0; i < SIZE; i++) {
|
|
for (int j = 0; j < FILES; j++) {
|
|
lfs_file_write(&lfs, &files[j], &alphas[j], 1) => 1;
|
|
}
|
|
}
|
|
|
|
for (int j = 0; j < FILES; j++) {
|
|
lfs_file_close(&lfs, &files[j]);
|
|
}
|
|
|
|
lfs_dir_t dir;
|
|
lfs_dir_open(&lfs, &dir, "/") => 0;
|
|
struct lfs_info info;
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, ".") == 0);
|
|
assert(info.type == LFS_TYPE_DIR);
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, "..") == 0);
|
|
assert(info.type == LFS_TYPE_DIR);
|
|
for (int j = 0; j < FILES; j++) {
|
|
char path[1024];
|
|
sprintf(path, "%c", alphas[j]);
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, path) == 0);
|
|
assert(info.type == LFS_TYPE_REG);
|
|
assert(info.size == SIZE);
|
|
}
|
|
lfs_dir_read(&lfs, &dir, &info) => 0;
|
|
lfs_dir_close(&lfs, &dir) => 0;
|
|
|
|
for (int j = 0; j < FILES; j++) {
|
|
char path[1024];
|
|
sprintf(path, "%c", alphas[j]);
|
|
lfs_file_open(&lfs, &files[j], path, LFS_O_RDONLY) => 0;
|
|
}
|
|
|
|
for (int i = 0; i < 10; i++) {
|
|
for (int j = 0; j < FILES; j++) {
|
|
uint8_t buffer[1024];
|
|
lfs_file_read(&lfs, &files[j], buffer, 1) => 1;
|
|
assert(buffer[0] == alphas[j]);
|
|
}
|
|
}
|
|
|
|
for (int j = 0; j < FILES; j++) {
|
|
lfs_file_close(&lfs, &files[j]);
|
|
}
|
|
|
|
lfs_unmount(&lfs) => 0;
|
|
'''
|
|
|
|
[cases.interspersed_remove_files]
|
|
defines.SIZE = [10, 100]
|
|
defines.FILES = [4, 10, 26]
|
|
code = '''
|
|
lfs_t lfs;
|
|
const char alphas[] = "abcdefghijklmnopqrstuvwxyz";
|
|
lfs_format(&lfs, cfg) => 0;
|
|
lfs_mount(&lfs, cfg) => 0;
|
|
for (int j = 0; j < FILES; j++) {
|
|
char path[1024];
|
|
sprintf(path, "%c", alphas[j]);
|
|
lfs_file_t file;
|
|
lfs_file_open(&lfs, &file, path,
|
|
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
|
|
for (int i = 0; i < SIZE; i++) {
|
|
lfs_file_write(&lfs, &file, &alphas[j], 1) => 1;
|
|
}
|
|
lfs_file_close(&lfs, &file);
|
|
}
|
|
lfs_unmount(&lfs) => 0;
|
|
|
|
lfs_mount(&lfs, cfg) => 0;
|
|
lfs_file_t file;
|
|
lfs_file_open(&lfs, &file, "zzz", LFS_O_WRONLY | LFS_O_CREAT) => 0;
|
|
for (int j = 0; j < FILES; j++) {
|
|
lfs_file_write(&lfs, &file, (const void*)"~", 1) => 1;
|
|
lfs_file_sync(&lfs, &file) => 0;
|
|
|
|
char path[1024];
|
|
sprintf(path, "%c", alphas[j]);
|
|
lfs_remove(&lfs, path) => 0;
|
|
}
|
|
lfs_file_close(&lfs, &file);
|
|
|
|
lfs_dir_t dir;
|
|
lfs_dir_open(&lfs, &dir, "/") => 0;
|
|
struct lfs_info info;
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, ".") == 0);
|
|
assert(info.type == LFS_TYPE_DIR);
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, "..") == 0);
|
|
assert(info.type == LFS_TYPE_DIR);
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, "zzz") == 0);
|
|
assert(info.type == LFS_TYPE_REG);
|
|
assert(info.size == FILES);
|
|
lfs_dir_read(&lfs, &dir, &info) => 0;
|
|
lfs_dir_close(&lfs, &dir) => 0;
|
|
|
|
lfs_file_open(&lfs, &file, "zzz", LFS_O_RDONLY) => 0;
|
|
for (int i = 0; i < FILES; i++) {
|
|
uint8_t buffer[1024];
|
|
lfs_file_read(&lfs, &file, buffer, 1) => 1;
|
|
assert(buffer[0] == '~');
|
|
}
|
|
lfs_file_close(&lfs, &file);
|
|
|
|
lfs_unmount(&lfs) => 0;
|
|
'''
|
|
|
|
[cases.remove_inconveniently]
|
|
defines.SIZE = [10, 100]
|
|
code = '''
|
|
lfs_t lfs;
|
|
lfs_format(&lfs, cfg) => 0;
|
|
lfs_mount(&lfs, cfg) => 0;
|
|
lfs_file_t files[3];
|
|
lfs_file_open(&lfs, &files[0], "e", LFS_O_WRONLY | LFS_O_CREAT) => 0;
|
|
lfs_file_open(&lfs, &files[1], "f", LFS_O_WRONLY | LFS_O_CREAT) => 0;
|
|
lfs_file_open(&lfs, &files[2], "g", LFS_O_WRONLY | LFS_O_CREAT) => 0;
|
|
|
|
for (int i = 0; i < SIZE/2; i++) {
|
|
lfs_file_write(&lfs, &files[0], (const void*)"e", 1) => 1;
|
|
lfs_file_write(&lfs, &files[1], (const void*)"f", 1) => 1;
|
|
lfs_file_write(&lfs, &files[2], (const void*)"g", 1) => 1;
|
|
}
|
|
|
|
lfs_remove(&lfs, "f") => 0;
|
|
|
|
for (int i = 0; i < SIZE/2; i++) {
|
|
lfs_file_write(&lfs, &files[0], (const void*)"e", 1) => 1;
|
|
lfs_file_write(&lfs, &files[1], (const void*)"f", 1) => 1;
|
|
lfs_file_write(&lfs, &files[2], (const void*)"g", 1) => 1;
|
|
}
|
|
|
|
lfs_file_close(&lfs, &files[0]);
|
|
lfs_file_close(&lfs, &files[1]);
|
|
lfs_file_close(&lfs, &files[2]);
|
|
|
|
lfs_dir_t dir;
|
|
lfs_dir_open(&lfs, &dir, "/") => 0;
|
|
struct lfs_info info;
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, ".") == 0);
|
|
assert(info.type == LFS_TYPE_DIR);
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, "..") == 0);
|
|
assert(info.type == LFS_TYPE_DIR);
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, "e") == 0);
|
|
assert(info.type == LFS_TYPE_REG);
|
|
assert(info.size == SIZE);
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, "g") == 0);
|
|
assert(info.type == LFS_TYPE_REG);
|
|
assert(info.size == SIZE);
|
|
lfs_dir_read(&lfs, &dir, &info) => 0;
|
|
lfs_dir_close(&lfs, &dir) => 0;
|
|
|
|
lfs_file_open(&lfs, &files[0], "e", LFS_O_RDONLY) => 0;
|
|
lfs_file_open(&lfs, &files[1], "g", LFS_O_RDONLY) => 0;
|
|
for (int i = 0; i < SIZE; i++) {
|
|
uint8_t buffer[1024];
|
|
lfs_file_read(&lfs, &files[0], buffer, 1) => 1;
|
|
assert(buffer[0] == 'e');
|
|
lfs_file_read(&lfs, &files[1], buffer, 1) => 1;
|
|
assert(buffer[0] == 'g');
|
|
}
|
|
lfs_file_close(&lfs, &files[0]);
|
|
lfs_file_close(&lfs, &files[1]);
|
|
|
|
lfs_unmount(&lfs) => 0;
|
|
'''
|
|
|
|
[cases.reentrant_interspersed_files]
|
|
defines.SIZE = [10, 100]
|
|
defines.FILES = [4, 10, 26]
|
|
reentrant = true
|
|
code = '''
|
|
lfs_t lfs;
|
|
lfs_file_t files[FILES];
|
|
const char alphas[] = "abcdefghijklmnopqrstuvwxyz";
|
|
|
|
int err = lfs_mount(&lfs, cfg);
|
|
if (err) {
|
|
lfs_format(&lfs, cfg) => 0;
|
|
lfs_mount(&lfs, cfg) => 0;
|
|
}
|
|
|
|
for (int j = 0; j < FILES; j++) {
|
|
char path[1024];
|
|
sprintf(path, "%c", alphas[j]);
|
|
lfs_file_open(&lfs, &files[j], path,
|
|
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0;
|
|
}
|
|
|
|
for (int i = 0; i < SIZE; i++) {
|
|
for (int j = 0; j < FILES; j++) {
|
|
lfs_ssize_t size = lfs_file_size(&lfs, &files[j]);
|
|
assert(size >= 0);
|
|
if ((int)size <= i) {
|
|
lfs_file_write(&lfs, &files[j], &alphas[j], 1) => 1;
|
|
lfs_file_sync(&lfs, &files[j]) => 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
for (int j = 0; j < FILES; j++) {
|
|
lfs_file_close(&lfs, &files[j]);
|
|
}
|
|
|
|
lfs_dir_t dir;
|
|
lfs_dir_open(&lfs, &dir, "/") => 0;
|
|
struct lfs_info info;
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, ".") == 0);
|
|
assert(info.type == LFS_TYPE_DIR);
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, "..") == 0);
|
|
assert(info.type == LFS_TYPE_DIR);
|
|
for (int j = 0; j < FILES; j++) {
|
|
char path[1024];
|
|
sprintf(path, "%c", alphas[j]);
|
|
lfs_dir_read(&lfs, &dir, &info) => 1;
|
|
assert(strcmp(info.name, path) == 0);
|
|
assert(info.type == LFS_TYPE_REG);
|
|
assert(info.size == SIZE);
|
|
}
|
|
lfs_dir_read(&lfs, &dir, &info) => 0;
|
|
lfs_dir_close(&lfs, &dir) => 0;
|
|
|
|
for (int j = 0; j < FILES; j++) {
|
|
char path[1024];
|
|
sprintf(path, "%c", alphas[j]);
|
|
lfs_file_open(&lfs, &files[j], path, LFS_O_RDONLY) => 0;
|
|
}
|
|
|
|
for (int i = 0; i < 10; i++) {
|
|
for (int j = 0; j < FILES; j++) {
|
|
uint8_t buffer[1024];
|
|
lfs_file_read(&lfs, &files[j], buffer, 1) => 1;
|
|
assert(buffer[0] == alphas[j]);
|
|
}
|
|
}
|
|
|
|
for (int j = 0; j < FILES; j++) {
|
|
lfs_file_close(&lfs, &files[j]);
|
|
}
|
|
|
|
lfs_unmount(&lfs) => 0;
|
|
'''
|