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
path: root/tests
diff options
context:
space:
mode:
authorChristopher Haster <chaster@utexas.edu>2017-04-23 07:11:13 +0300
committerChristopher Haster <chaster@utexas.edu>2017-04-23 10:06:48 +0300
commitba8afb9d924ff40054c73f8430aa16b6eb7b1bac (patch)
tree2b65dd24398bee219554f3aa13965e28fa145a12 /tests
parenta1d8a76b36890506bf1a49056e25443f06ccd13c (diff)
Added support for full seek operations
A rather involved upgrade for both files and directories, seek and related functions are now completely supported: - lfs_file_seek - lfs_file_tell - lfs_file_rewind - lfs_file_size - lfs_dir_seek - lfs_dir_tell - lfs_dir_rewind This change also highlighted the concern that lfs_off_t is unsigned, whereas off_t is traditionally signed. Unfortunately, lfs_off_t is already used intensively through the codebase, so in focusing on moving forward and avoiding getting bogged down by details, I'm going to keep it as is and use the signed type lfs_soff_t where necessary.
Diffstat (limited to 'tests')
-rwxr-xr-xtests/test_seek.sh281
1 files changed, 281 insertions, 0 deletions
diff --git a/tests/test_seek.sh b/tests/test_seek.sh
new file mode 100755
index 0000000..b385e8b
--- /dev/null
+++ b/tests/test_seek.sh
@@ -0,0 +1,281 @@
+#!/bin/bash
+set -eu
+
+SMALLSIZE=4
+MEDIUMSIZE=128
+LARGESIZE=132
+
+echo "=== Seek tests ==="
+rm -rf blocks
+tests/test.py << TEST
+ lfs_format(&lfs, &cfg) => 0;
+ lfs_mount(&lfs, &cfg) => 0;
+ lfs_mkdir(&lfs, "hello") => 0;
+ for (int i = 0; i < $LARGESIZE; i++) {
+ sprintf((char*)buffer, "hello/kitty%d", i);
+ lfs_file_open(&lfs, &file[0], (char*)buffer,
+ LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0;
+
+ size = strlen("kittycatcat");
+ memcpy(buffer, "kittycatcat", size);
+ for (int j = 0; j < $LARGESIZE; j++) {
+ lfs_file_write(&lfs, &file[0], buffer, size);
+ }
+
+ lfs_file_close(&lfs, &file[0]) => 0;
+ }
+ lfs_unmount(&lfs) => 0;
+TEST
+
+echo "--- Simple dir seek ---"
+tests/test.py << TEST
+ lfs_mount(&lfs, &cfg) => 0;
+ lfs_dir_open(&lfs, &dir[0], "hello") => 0;
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, ".") => 0;
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, "..") => 0;
+
+ lfs_soff_t pos;
+ int i;
+ for (i = 0; i < $SMALLSIZE; i++) {
+ sprintf((char*)buffer, "kitty%d", i);
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, (char*)buffer) => 0;
+ pos = lfs_dir_tell(&lfs, &dir[0]);
+ }
+ pos >= 0 => 1;
+
+ lfs_dir_seek(&lfs, &dir[0], pos) => 0;
+ sprintf((char*)buffer, "kitty%d", i);
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, (char*)buffer) => 0;
+
+ lfs_dir_rewind(&lfs, &dir[0]) => 0;
+ sprintf((char*)buffer, "kitty%d", 0);
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, ".") => 0;
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, "..") => 0;
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, (char*)buffer) => 0;
+
+ lfs_dir_seek(&lfs, &dir[0], pos) => 0;
+ sprintf((char*)buffer, "kitty%d", i);
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, (char*)buffer) => 0;
+
+ lfs_dir_close(&lfs, &dir[0]) => 0;
+ lfs_unmount(&lfs) => 0;
+TEST
+
+echo "--- Large dir seek ---"
+tests/test.py << TEST
+ lfs_mount(&lfs, &cfg) => 0;
+ lfs_dir_open(&lfs, &dir[0], "hello") => 0;
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, ".") => 0;
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, "..") => 0;
+
+ lfs_soff_t pos;
+ int i;
+ for (i = 0; i < $MEDIUMSIZE; i++) {
+ sprintf((char*)buffer, "kitty%d", i);
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, (char*)buffer) => 0;
+ pos = lfs_dir_tell(&lfs, &dir[0]);
+ }
+ pos >= 0 => 1;
+
+ lfs_dir_seek(&lfs, &dir[0], pos) => 0;
+ sprintf((char*)buffer, "kitty%d", i);
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, (char*)buffer) => 0;
+
+ lfs_dir_rewind(&lfs, &dir[0]) => 0;
+ sprintf((char*)buffer, "kitty%d", 0);
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, ".") => 0;
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, "..") => 0;
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, (char*)buffer) => 0;
+
+ lfs_dir_seek(&lfs, &dir[0], pos) => 0;
+ sprintf((char*)buffer, "kitty%d", i);
+ lfs_dir_read(&lfs, &dir[0], &info) => 1;
+ strcmp(info.name, (char*)buffer) => 0;
+
+ lfs_dir_close(&lfs, &dir[0]) => 0;
+ lfs_unmount(&lfs) => 0;
+TEST
+
+echo "--- Simple file seek ---"
+tests/test.py << TEST
+ lfs_mount(&lfs, &cfg) => 0;
+ lfs_file_open(&lfs, &file[0], "hello/kitty42", LFS_O_RDONLY) => 0;
+
+ lfs_soff_t pos;
+ size = strlen("kittycatcat");
+ for (int i = 0; i < $SMALLSIZE; i++) {
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+ pos = lfs_file_tell(&lfs, &file[0]);
+ }
+ pos >= 0 => 1;
+
+ lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_file_rewind(&lfs, &file[0]) => 0;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_CUR) => pos+size;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_size_t size = lfs_file_size(&lfs, &file[0]);
+ lfs_file_seek(&lfs, &file[0], 0, LFS_SEEK_CUR) => size;
+
+ lfs_file_close(&lfs, &file[0]) => 0;
+ lfs_unmount(&lfs) => 0;
+TEST
+
+echo "--- Large file seek ---"
+tests/test.py << TEST
+ lfs_mount(&lfs, &cfg) => 0;
+ lfs_file_open(&lfs, &file[0], "hello/kitty42", LFS_O_RDONLY) => 0;
+
+ lfs_soff_t pos;
+ size = strlen("kittycatcat");
+ for (int i = 0; i < $MEDIUMSIZE; i++) {
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+ pos = lfs_file_tell(&lfs, &file[0]);
+ }
+ pos >= 0 => 1;
+
+ lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_file_rewind(&lfs, &file[0]) => 0;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_CUR) => pos+size;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_size_t size = lfs_file_size(&lfs, &file[0]);
+ lfs_file_seek(&lfs, &file[0], 0, LFS_SEEK_CUR) => size;
+
+ lfs_file_close(&lfs, &file[0]) => 0;
+ lfs_unmount(&lfs) => 0;
+TEST
+
+echo "--- Simple file seek and write ---"
+tests/test.py << TEST
+ lfs_mount(&lfs, &cfg) => 0;
+ lfs_file_open(&lfs, &file[0], "hello/kitty42", LFS_O_RDWR) => 0;
+
+ lfs_soff_t pos;
+ size = strlen("kittycatcat");
+ for (int i = 0; i < $SMALLSIZE; i++) {
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+ pos = lfs_file_tell(&lfs, &file[0]);
+ }
+ pos >= 0 => 1;
+
+ memcpy(buffer, "doggodogdog", size);
+ lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
+ lfs_file_write(&lfs, &file[0], buffer, size) => size;
+
+ lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "doggodogdog", size) => 0;
+
+ lfs_file_rewind(&lfs, &file[0]) => 0;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "doggodogdog", size) => 0;
+
+ lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_size_t size = lfs_file_size(&lfs, &file[0]);
+ lfs_file_seek(&lfs, &file[0], 0, LFS_SEEK_CUR) => size;
+
+ lfs_file_close(&lfs, &file[0]) => 0;
+ lfs_unmount(&lfs) => 0;
+TEST
+
+echo "--- Large file seek and write ---"
+tests/test.py << TEST
+ lfs_mount(&lfs, &cfg) => 0;
+ lfs_file_open(&lfs, &file[0], "hello/kitty42", LFS_O_RDWR) => 0;
+
+ lfs_soff_t pos;
+ size = strlen("kittycatcat");
+ for (int i = 0; i < $MEDIUMSIZE; i++) {
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ if (i != $SMALLSIZE) {
+ memcmp(buffer, "kittycatcat", size) => 0;
+ }
+ pos = lfs_file_tell(&lfs, &file[0]);
+ }
+ pos >= 0 => 1;
+
+ memcpy(buffer, "doggodogdog", size);
+ lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
+ lfs_file_write(&lfs, &file[0], buffer, size) => size;
+
+ lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => pos;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "doggodogdog", size) => 0;
+
+ lfs_file_rewind(&lfs, &file[0]) => 0;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_file_seek(&lfs, &file[0], pos, LFS_SEEK_SET) => size;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "doggodogdog", size) => 0;
+
+ lfs_file_seek(&lfs, &file[0], -size, LFS_SEEK_END) => pos+size;
+ lfs_file_read(&lfs, &file[0], buffer, size) => size;
+ memcmp(buffer, "kittycatcat", size) => 0;
+
+ lfs_size_t size = lfs_file_size(&lfs, &file[0]);
+ lfs_file_seek(&lfs, &file[0], 0, LFS_SEEK_CUR) => size;
+
+ lfs_file_close(&lfs, &file[0]) => 0;
+ lfs_unmount(&lfs) => 0;
+TEST
+
+echo "--- Results ---"
+tests/stats.py