diff --git a/tests/stress_tests/fsstress-encfs.sh b/tests/stress_tests/fsstress-encfs.sh new file mode 100755 index 0000000..2ec52d3 --- /dev/null +++ b/tests/stress_tests/fsstress-encfs.sh @@ -0,0 +1,74 @@ +#!/bin/bash -eu +# +# Mount an EncFS filesystem in /tmp and run fsstress against it +# in an infinite loop, only exiting on errors. +# +# You need to have https://github.com/rfjakob/fuse-xfstests or +# https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git +# (which fsstress) downloaded and compiled at $HOME/fuse-xfststs . + +cd "$(dirname "$0")" +MYNAME=$(basename $0) + +# fsstress binary +FSSTRESS=$HOME/fuse-xfstests/ltp/fsstress +if [ ! -x $FSSTRESS ] +then + echo "$MYNAME: fsstress binary not found at $FSSTRESS" + echo "Please clone and compile https://github.com/rfjakob/fuse-xfstests" + exit 1 +fi + +# Backing directory +DIR=$(mktemp -d /tmp/fsstress-encfs.XXX) +# Mountpoint +MNT="$DIR.mnt" +mkdir $MNT + +# Mount +../../build/encfs -f --extpass "echo test" --standard $DIR $MNT & +disown + +sleep 0.5 +echo -n "Waiting for mount: " +while ! grep "$MNT fuse" /proc/self/mounts > /dev/null +do + sleep 1 + echo -n x +done +echo " ok" + +# Cleanup trap +trap "kill %1 ; cd / ; fusermount -u -z $MNT ; rm -rf $DIR $MNT" EXIT + +echo "Starting fsstress loop" +N=1 +while true +do + # Note: EncFS does not seem to support the FS_IOC_GETFLAGS ioctl that + # fsstress is using. To get rid of the error messages we set "-f getattr=0" + # in all fsstress calls. + echo $N + mkdir $MNT/fsstress.1 + echo -n " fsstress.1 " + $FSSTRESS -r -m 8 -n 1000 -d $MNT/fsstress.1 -f getattr=0 & + wait + + mkdir $MNT/fsstress.2 + echo -n " fsstress.2 " + $FSSTRESS -p 20 -r -m 8 -n 1000 -d $MNT/fsstress.2 -f getattr=0 & + wait + + mkdir $MNT/fsstress.3 + echo -n " fsstress.3 " + $FSSTRESS -p 4 -z -f rmdir=10 -f link=10 -f creat=10 -f mkdir=10 \ + -f rename=30 -f stat=30 -f unlink=30 -f truncate=20 -m 8 \ + -n 1000 -d $MNT/fsstress.3 -f getattr=0 & + wait + + echo " rm" + rm -R $MNT/* + + let N=$N+1 +done +