aboutsummaryrefslogtreecommitdiff
path: root/tests/stress_tests/fsstress-loopback.bash
diff options
context:
space:
mode:
authorJakob Unterwurzacher2016-06-06 23:57:42 +0200
committerJakob Unterwurzacher2016-06-07 00:08:56 +0200
commitc2a5303eebc84d616072163f74eef8483c9f5386 (patch)
tree181ffdbb956eb76351d137a4fa9f52ed98b8f242 /tests/stress_tests/fsstress-loopback.bash
parent0f4d3501369e13c8ba6ee4c9fc7df02a3cc698b1 (diff)
tests: split example_filesystems into its own package
Running these tests from integration_tests' TestMain() was awkward because they were run twice with unchanged settings. integration_tests tests everything with OpenSSL and with native Go crypto, but this does not take affect for the example filesystems. To make this work, test_helpers is also split into its own package.
Diffstat (limited to 'tests/stress_tests/fsstress-loopback.bash')
-rwxr-xr-xtests/stress_tests/fsstress-loopback.bash94
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/stress_tests/fsstress-loopback.bash b/tests/stress_tests/fsstress-loopback.bash
new file mode 100755
index 0000000..51c68db
--- /dev/null
+++ b/tests/stress_tests/fsstress-loopback.bash
@@ -0,0 +1,94 @@
+#!/bin/bash
+#
+# Mount a go-fuse loopback filesystem in /tmp and run fsstress against it
+# in an infinite loop, only exiting on errors.
+#
+# When called as "fsstress-gocryptfs.bash", a gocryptfs filesystem is tested
+# instead.
+#
+# This test used to fail on older go-fuse versions after a few iterations with
+# errors like this:
+# "rm: cannot remove ‘/tmp/b/fsstress.2/pd/d1XXX/f4a’: No such file or directory"
+#
+# Nowadays it should pass an indefinite number of iterations.
+
+set -eu
+
+# Backing directory
+DIR=$(mktemp -d /tmp/fsstress.XXX)
+# Mountpoint
+MNT="$DIR.mnt"
+# fsstress binary
+FSSTRESS=~/src/xfstests/ltp/fsstress
+
+if [ ! -x $FSSTRESS ]
+then
+ echo "fsstress binary not found, adjust FSSTRESS=$FSSTRESS"
+ exit 1
+fi
+
+# Setup
+fusermount -u -z $MNT &> /dev/null || true
+mkdir -p $DIR $MNT
+rm -Rf $DIR/*
+rm -Rf $MNT/*
+
+# FS-specific compile and mount
+MYNAME=$(basename $0)
+if [ $MYNAME = fsstress-loopback.bash ]; then
+ echo "Recompile go-fuse loopback"
+ cd $GOPATH/src/github.com/hanwen/go-fuse/example/loopback
+ go build && go install
+ $GOPATH/bin/loopback -l $MNT $DIR &
+ disown
+elif [ $MYNAME = fsstress-gocryptfs.bash ]; then
+ echo "Recompile gocryptfs"
+ cd $GOPATH/src/github.com/rfjakob/gocryptfs
+ ./build.bash
+ $GOPATH/bin/gocryptfs -q -init -extpass "echo test" -scryptn=10 $DIR
+ $GOPATH/bin/gocryptfs -q -extpass "echo test" -nosyslog $DIR $MNT
+else
+ echo Unknown mode: $MYNAME
+ exit 1
+fi
+
+echo -n "Waiting for mount: "
+sleep 0.5
+while ! grep "$MNT fuse" /proc/self/mounts > /dev/null
+do
+ sleep 1
+ echo -n x
+done
+echo
+
+# Cleanup trap
+trap "kill %1 ; cd /; fusermount -u -z $MNT; rm -rf $DIR $MNT" EXIT
+
+echo "Starting fsstress loop"
+N=1
+while true
+do
+ echo $N
+ mkdir $MNT/fsstress.1
+ echo -n " fsstress.1 "
+ $FSSTRESS -r -m 8 -n 1000 -d $MNT/fsstress.1 &
+ wait
+
+ mkdir $MNT/fsstress.2
+ echo -n " fsstress.2 "
+ $FSSTRESS -p 20 -r -m 8 -n 1000 -d $MNT/fsstress.2 &
+ 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 &
+ wait
+
+ echo " rm"
+ rm -R $MNT/*
+
+ let N=$N+1
+done
+