
On Sun, Sep 24, 2017 at 5:07 PM, Tuomas Tynkkynen tuomas.tynkkynen@iki.fi wrote:
Currently we can only test FAT32 which is the default FAT version that mkfs.vfat creates by default. Instead make it explicitly create either a FAT16 or a FAT32 volume. This allows us to exercise more code, for instance the root directory handling is done differently in FAT32 than the older FATs.
Adding FAT12 support is a much bigger job since the test creates a 2.5GB file and the FAT12 maximum partition size is way smaller than that.
Thanks
Note that fat12 and fat16 work more similar to each other (other than file allocation table size) compared to fat32. (fat12 and fat16 have a single contiguous root directory, whereas fat32 has a root directory constructed from a chain of clusters, more like how subdirectories work on earlier fat versions).
That said, I think we could probably increase test coverage w/ much smaller filesys image sizes.. my current wishlist:
+ bunch of small files w/ long vfat names, enough that the directory spans multiple clusters.. depends a bit on sector/cluster size but
128 should do the trick.. there might end up being a lower limit on
root directory in fat12/fat16 so this could be a subdir
+ we don't need huge files, but something bigger than cluster size.. 1MB should be sufficient
BR, -R
Signed-off-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi
test/fs/fs-test.sh | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-)
diff --git a/test/fs/fs-test.sh b/test/fs/fs-test.sh index b19486419e..2ddac50f90 100755 --- a/test/fs/fs-test.sh +++ b/test/fs/fs-test.sh @@ -41,7 +41,7 @@ SMALL_FILE="1MB.file" BIG_FILE="2.5GB.file"
# $MD5_FILE will have the expected md5s when we do the test -# They shall have a suffix which represents their file system (ext4/fat) +# They shall have a suffix which represents their file system (ext4/fat16/...) MD5_FILE="${OUT_DIR}/md5s.list"
# $OUT shall be the prefix of the test output. Their suffix will be .out @@ -104,15 +104,25 @@ function prepare_env() { }
# 1st parameter is the name of the image file to be created -# 2nd parameter is the filesystem - fat ext4 etc +# 2nd parameter is the filesystem - fat16 ext4 etc # -F cant be used with fat as it means something else. function create_image() { # Create image if not already present - saves time, while debugging
if [ "$2" = "ext4" ]; then
case "$2" in
fat16)
MKFS_OPTION="-F 16"
FS_TYPE="fat"
;;
fat32)
MKFS_OPTION="-F 32"
FS_TYPE="fat"
;;
ext4) MKFS_OPTION="-F"
else
MKFS_OPTION=""
fi
FS_TYPE="ext4"
;;
esac
if [ ! -f "$1" ]; then fallocate -l 3G "$1" &> /dev/null if [ $? -ne 0 ]; then
@@ -123,8 +133,8 @@ function create_image() { exit $? fi fi
mkfs -t "$2" $MKFS_OPTION "$1" &> /dev/null
if [ $? -ne 0 -a "$2" = "fat" ]; then
mkfs -t "$FS_TYPE" $MKFS_OPTION "$1" &> /dev/null
if [ $? -ne 0 -a "$FS_TYPE" = "fat" ]; then # If we fail and we did fat, try vfat. mkfs -t vfat $MKFS_OPTION "$1" &> /dev/null fi
@@ -136,7 +146,7 @@ function create_image() { }
# 1st parameter is image file -# 2nd parameter is file system type - fat/ext4 +# 2nd parameter is file system type - fat16/ext4/... # 3rd parameter is name of small file # 4th parameter is name of big file # 5th parameter is fs/nonfs/sb - to dictate generic fs commands or @@ -149,7 +159,7 @@ function test_image() { length="0x00100000"
case "$2" in
fat)
fat*) FPATH="" PREFIX="fat" WRITE="write"
@@ -550,7 +560,7 @@ TOTAL_PASS=0 # In each loop, for a given file system image, we test both the # fs command, like load/size/write, the file system specific command # like: ext4load/ext4size/ext4write and the sb load/ls/save commands. -for fs in ext4 fat; do +for fs in ext4 fat16 fat32; do
echo "Creating $fs image if not already present." IMAGE=${IMG}.${fs}.img
@@ -563,11 +573,14 @@ for fs in ext4 fat; do
# Lets mount the image and test sb hostfs commands mkdir -p "$MOUNT_DIR"
if [ "$fs" = "fat" ]; then
case "$fs" in
fat*) uid="uid=`id -u`"
else
;;
*) uid=""
fi
;;
esac sudo mount -o loop,rw,$uid "$IMAGE" "$MOUNT_DIR" sudo chmod 777 "$MOUNT_DIR"
-- 2.13.0