Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/littlefs-project/littlefs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Haster <chaster@utexas.edu>2019-07-24 22:19:39 +0300
committerChristopher Haster <chaster@utexas.edu>2019-07-27 03:50:17 +0300
commitef1c926940f176b20078e56ae4dddd268d9c0497 (patch)
tree36b86f76641e292c3e9f804c35fd0a8e2ff77fd5
parent649640c605a41fb1a8cb4cbaa4a620e9edbedbd6 (diff)
Increased testing to include geometries that can't be fully tested
This is primarily to get better test coverage over devices with very large erase/prog/read sizes. The unfortunate state of the tests is that most of them rely on a specific block device size, so that ENOSPC and ECORRUPT errors occur in specific situations. This should be improved in the future, but at least for now we can open up some of the simpler tests to run on these different configurations. Also added testing over both 0x00 and 0xff erase values in emubd. Also added a number of small file tests that expose issues prevalent on NAND devices.
-rw-r--r--.travis.yml12
-rw-r--r--emubd/lfs_emubd.c2
-rw-r--r--emubd/lfs_emubd.h16
-rw-r--r--tests/template.fmt2
-rwxr-xr-xtests/test_files.sh71
5 files changed, 81 insertions, 22 deletions
diff --git a/.travis.yml b/.travis.yml
index dcfedf6..04f8720 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -23,8 +23,20 @@ script:
- make test QUIET=1 CFLAGS+="-DLFS_BLOCK_COUNT=1023 -DLFS_LOOKAHEAD_SIZE=256"
- make clean test QUIET=1 CFLAGS+="-DLFS_INLINE_MAX=0"
+ - make clean test QUIET=1 CFLAGS+="-DLFS_EMUBD_ERASE_VALUE=0xff"
- make clean test QUIET=1 CFLAGS+="-DLFS_NO_INTRINSICS"
+ # additional configurations that don't support all tests (this should be
+ # fixed but at the moment it is what it is)
+ - make test_files QUIET=1
+ CFLAGS+="-DLFS_READ_SIZE=1 -DLFS_BLOCK_SIZE=4096"
+ - make test_files QUIET=1
+ CFLAGS+="-DLFS_READ_SIZE=\(2*1024\) -DLFS_BLOCK_SIZE=\(64*1024\)"
+ - make test_files QUIET=1
+ CFLAGS+="-DLFS_READ_SIZE=\(8*1024\) -DLFS_BLOCK_SIZE=\(64*1024\)"
+ - make test_files QUIET=1
+ CFLAGS+="-DLFS_READ_SIZE=11 -DLFS_BLOCK_SIZE=704"
+
# compile and find the code size with the smallest configuration
- make clean size
OBJ="$(ls lfs*.o | tr '\n' ' ')"
diff --git a/emubd/lfs_emubd.c b/emubd/lfs_emubd.c
index 3f31bfa..3c77945 100644
--- a/emubd/lfs_emubd.c
+++ b/emubd/lfs_emubd.c
@@ -83,7 +83,7 @@ int lfs_emubd_create(const struct lfs_config *cfg, const char *path) {
snprintf(emu->child, LFS_NAME_MAX, ".stats");
FILE *f = fopen(emu->path, "r");
if (!f) {
- memset(&emu->stats, 0, sizeof(emu->stats));
+ memset(&emu->stats, LFS_EMUBD_ERASE_VALUE, sizeof(emu->stats));
} else {
size_t res = fread(&emu->stats, sizeof(emu->stats), 1, f);
lfs_emubd_fromle32(emu);
diff --git a/emubd/lfs_emubd.h b/emubd/lfs_emubd.h
index 64afa3e..0fd78c1 100644
--- a/emubd/lfs_emubd.h
+++ b/emubd/lfs_emubd.h
@@ -17,20 +17,8 @@ extern "C"
// Config options
-#ifndef LFS_EMUBD_READ_SIZE
-#define LFS_EMUBD_READ_SIZE 1
-#endif
-
-#ifndef LFS_EMUBD_PROG_SIZE
-#define LFS_EMUBD_PROG_SIZE 1
-#endif
-
-#ifndef LFS_EMUBD_ERASE_SIZE
-#define LFS_EMUBD_ERASE_SIZE 512
-#endif
-
-#ifndef LFS_EMUBD_TOTAL_SIZE
-#define LFS_EMUBD_TOTAL_SIZE 524288
+#ifndef LFS_EMUBD_ERASE_VALUE
+#define LFS_EMUBD_ERASE_VALUE 0x00
#endif
diff --git a/tests/template.fmt b/tests/template.fmt
index 7fdec7c..b52d907 100644
--- a/tests/template.fmt
+++ b/tests/template.fmt
@@ -82,7 +82,7 @@ uintmax_t test;
#endif
#ifndef LFS_CACHE_SIZE
-#define LFS_CACHE_SIZE 64
+#define LFS_CACHE_SIZE (64 % LFS_PROG_SIZE == 0 ? 64 : LFS_PROG_SIZE)
#endif
#ifndef LFS_LOOKAHEAD_SIZE
diff --git a/tests/test_files.sh b/tests/test_files.sh
index 5251c61..950636a 100755
--- a/tests/test_files.sh
+++ b/tests/test_files.sh
@@ -135,20 +135,79 @@ tests/test.py << TEST
lfs_unmount(&lfs) => 0;
TEST
-echo "--- Many file test ---"
+echo "--- Many files test ---"
tests/test.py << TEST
lfs_format(&lfs, &cfg) => 0;
TEST
tests/test.py << TEST
- // Create 300 files of 6 bytes
+ // Create 300 files of 7 bytes
lfs_mount(&lfs, &cfg) => 0;
- lfs_mkdir(&lfs, "directory") => 0;
for (unsigned i = 0; i < 300; i++) {
snprintf((char*)buffer, sizeof(buffer), "file_%03d", i);
- lfs_file_open(&lfs, &file[0], (char*)buffer, LFS_O_WRONLY | LFS_O_CREAT) => 0;
- size = 6;
- memcpy(wbuffer, "Hello", size);
+ lfs_file_open(&lfs, &file[0], (char*)buffer,
+ LFS_O_RDWR | LFS_O_CREAT | LFS_O_EXCL) => 0;
+ size = 7;
+ snprintf((char*)wbuffer, size, "Hi %03d", i);
lfs_file_write(&lfs, &file[0], wbuffer, size) => size;
+ lfs_file_rewind(&lfs, &file[0]) => 0;
+ lfs_file_read(&lfs, &file[0], rbuffer, size) => size;
+ memcmp(wbuffer, rbuffer, size) => 0;
+ lfs_file_close(&lfs, &file[0]) => 0;
+ }
+ lfs_unmount(&lfs) => 0;
+TEST
+
+echo "--- Many files with flush test ---"
+tests/test.py << TEST
+ lfs_format(&lfs, &cfg) => 0;
+TEST
+tests/test.py << TEST
+ // Create 300 files of 7 bytes
+ lfs_mount(&lfs, &cfg) => 0;
+ for (unsigned i = 0; i < 300; i++) {
+ snprintf((char*)buffer, sizeof(buffer), "file_%03d", i);
+ lfs_file_open(&lfs, &file[0], (char*)buffer,
+ LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
+ size = 7;
+ snprintf((char*)wbuffer, size, "Hi %03d", i);
+ lfs_file_write(&lfs, &file[0], wbuffer, size) => size;
+ lfs_file_close(&lfs, &file[0]) => 0;
+
+ snprintf((char*)buffer, sizeof(buffer), "file_%03d", i);
+ lfs_file_open(&lfs, &file[0], (char*)buffer, LFS_O_RDONLY) => 0;
+ size = 7;
+ snprintf((char*)wbuffer, size, "Hi %03d", i);
+ lfs_file_read(&lfs, &file[0], rbuffer, size) => size;
+ memcmp(wbuffer, rbuffer, size) => 0;
+ lfs_file_close(&lfs, &file[0]) => 0;
+ }
+ lfs_unmount(&lfs) => 0;
+TEST
+
+echo "--- Many files with power cycle test ---"
+tests/test.py << TEST
+ lfs_format(&lfs, &cfg) => 0;
+TEST
+tests/test.py << TEST
+ // Create 300 files of 7 bytes
+ lfs_mount(&lfs, &cfg) => 0;
+ for (unsigned i = 0; i < 300; i++) {
+ snprintf((char*)buffer, sizeof(buffer), "file_%03d", i);
+ lfs_file_open(&lfs, &file[0], (char*)buffer,
+ LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
+ size = 7;
+ snprintf((char*)wbuffer, size, "Hi %03d", i);
+ lfs_file_write(&lfs, &file[0], wbuffer, size) => size;
+ lfs_file_close(&lfs, &file[0]) => 0;
+ lfs_unmount(&lfs) => 0;
+
+ lfs_mount(&lfs, &cfg) => 0;
+ snprintf((char*)buffer, sizeof(buffer), "file_%03d", i);
+ lfs_file_open(&lfs, &file[0], (char*)buffer, LFS_O_RDONLY) => 0;
+ size = 7;
+ snprintf((char*)wbuffer, size, "Hi %03d", i);
+ lfs_file_read(&lfs, &file[0], rbuffer, size) => size;
+ memcmp(wbuffer, rbuffer, size) => 0;
lfs_file_close(&lfs, &file[0]) => 0;
}
lfs_unmount(&lfs) => 0;