libgocryptfs/stress_tests/fsstress-loopback.bash
Jakob Unterwurzacher 30f0ae3720 fsstress-loopback: use random directory names
This allows to run more than one instance of
the script in parallel.

Also, properly clean up on exit.
2016-05-25 00:18:51 +02:00

89 lines
2.1 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 &
elif [ $MYNAME = fsstress-gocryptfs.bash ]; then
echo "Recompile gocryptfs"
cd $GOPATH/src/github.com/rfjakob/gocryptfs
go build && go install
$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 "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
mkdir $MNT/fsstress.2
echo -n " fsstress.2 "
$FSSTRESS -p 20 -r -m 8 -n 1000 -d $MNT/fsstress.2
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
echo " rm"
rm -R $MNT/*
let N=$N+1
done