9aeb639a15
Send fsstress (which ignores Ctrl-C) into the background so the shell gets the signal. Manually kill fsstress in the cleanup handler. Also, use the build.bash script for gocryptfs.
95 lines
2.1 KiB
Bash
Executable File
95 lines
2.1 KiB
Bash
Executable File
#!/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
|
||
|