mirror of
https://github.com/mgree/ffs.git
synced 2024-08-16 14:50:35 +03:00
6ed74ee0c7
Benchmarks, in two flavors: real-world benchmarks and synthetic microbenchmarks. `--time` flag for benchmarking output on stderr. Using R to generate pretty graphs. Some overhaul of build scripts and artifacts, with the hope of simplifying the release system.
180 lines
4.2 KiB
Bash
Executable File
180 lines
4.2 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# from https://github.com/mgree/ffs/issues/42
|
|
|
|
fail() {
|
|
echo FAILED: $1
|
|
if [ "$MNT" ]
|
|
then
|
|
umount "$D"/single
|
|
rm -r "$D"
|
|
fi
|
|
exit 1
|
|
}
|
|
|
|
TESTS="$(pwd)"
|
|
TIMEOUT="$(cd ../utils; pwd)/timeout"
|
|
|
|
D=$(mktemp -d)
|
|
|
|
cp ../json/single.json "$D"/single.json
|
|
cp ../json/false.json "$D"/false.json
|
|
|
|
cd "$D"
|
|
|
|
cp single.json unreadable.json
|
|
chmod -r unreadable.json
|
|
|
|
mkdir unwriteable
|
|
chmod -w unwriteable
|
|
|
|
# in place mount, mountpoint exists
|
|
mkdir single
|
|
"$TIMEOUT" -t 2 ffs -i single.json 2>single.err
|
|
[ $? -eq 1 ] || fail imountstatus
|
|
[ -s single.err ] || fail imountmsg
|
|
rmdir single
|
|
rm single.err
|
|
|
|
# in place, can't make mountpoint
|
|
cd unwriteable
|
|
"$TIMEOUT" -t 2 ffs -i single.json 2>../single.err
|
|
[ $? -eq 1 ] || fail imkmountstatus
|
|
cd ..
|
|
[ -s single.err ] || fail imkmountmsg
|
|
rm single.err
|
|
|
|
# new, mountpoint exists
|
|
mkdir foo
|
|
"$TIMEOUT" -t 2 ffs --new foo.json 2>foo.err
|
|
[ $? -eq 1 ] || fail newmountstatus
|
|
[ -s foo.err ] || fail newmountmsg
|
|
rmdir foo
|
|
rm foo.err
|
|
|
|
# new, can't make mountpoint
|
|
cd unwriteable
|
|
"$TIMEOUT" -t 2 ffs --new foo.json 2>../foo.err
|
|
[ $? -eq 1 ] || fail newmkmountstatus
|
|
cd ..
|
|
[ -s foo.err ] || fail newmkmountmsg
|
|
rm foo.err
|
|
|
|
# input file, can't infer mountpoint
|
|
"$TIMEOUT" -t 2 ffs --new .. 2>dotdot.err
|
|
[ $? -eq 1 ] || fail newdotdotmountstatus
|
|
[ -s dotdot.err ] || fail newdotdotmountmsg
|
|
rm dotdot.err
|
|
|
|
# --new, output file exists
|
|
touch foo.yaml
|
|
"$TIMEOUT" -t 2 ffs --new foo.yaml 2>foo.err
|
|
[ $? -eq 1 ] || fail omountstatus
|
|
[ -s foo.err ] || fail omountmsg
|
|
rm foo.yaml
|
|
rm foo.err
|
|
|
|
# --new, mountpoint doesn't exist
|
|
"$TIMEOUT" -t 2 ffs -m notthere --new foo.json 2>foo.err
|
|
[ $? -eq 1 ] || fail mmountstatus1
|
|
[ -s foo.err ] || fail mmountmsg1
|
|
rm foo.err
|
|
|
|
# mountpoint doesn't exist
|
|
"$TIMEOUT" -t 2 ffs -m notthere single.json 2>single.err
|
|
[ $? -eq 1 ] || fail mmountstatus2
|
|
[ -s single.err ] || fail mmountmsg2
|
|
rm single.err
|
|
|
|
# input file doesn't exists
|
|
"$TIMEOUT" -t 2 ffs nonesuch.toml 2>nonesuch.err
|
|
[ $? -eq 1 ] || fail inputmountstatus1
|
|
[ -s nonesuch.err ] || fail inputmountmsg1
|
|
rm nonesuch.err
|
|
|
|
# input file, mountpoint exists
|
|
mkdir single
|
|
"$TIMEOUT" -t 2 ffs single.json 2>single.err
|
|
[ $? -eq 1 ] || fail inputmountstatus2
|
|
[ -s single.err ] || fail inputmountmsg2
|
|
rmdir single
|
|
rm single.err
|
|
|
|
# input file, can't make mount point
|
|
cd unwriteable
|
|
"$TIMEOUT" -t 2 ffs ../single.json 2>../single.err
|
|
[ $? -eq 1 ] || fail inputmkmountstatus
|
|
cd ..
|
|
[ -s single.err ] || fail inputmkmountmsg
|
|
rm single.err
|
|
|
|
# input file, can't infer mountpoint
|
|
"$TIMEOUT" -t 2 ffs .. 2>dotdot.err
|
|
[ $? -eq 1 ] || fail inputdotdotmountstatus
|
|
[ -s dotdot.err ] || fail inputdotdotmountmsg
|
|
rm dotdot.err
|
|
|
|
# unreadable input
|
|
"$TIMEOUT" -t 2 ffs unreadable.json 2>ur.err
|
|
[ $? -eq 1 ] || fail unreadablemountstatus
|
|
[ -s ur.err ] || fail unreadablemountmsg
|
|
rm ur.err
|
|
|
|
# plain value input
|
|
"$TIMEOUT" -t 2 ffs false.json 2>false.err
|
|
[ $? -eq 1 ] || fail falsemountstatus
|
|
[ -s false.err ] || fail falsemountmsg
|
|
rm false.err
|
|
|
|
# bad mount point (fuser is masking this error)
|
|
# "$TIMEOUT" -t 2 ffs /etc single.json 2>etc.err
|
|
# [ $? -eq 1 ] || fail etcmountstatus
|
|
# [ -s etc.err ] || fail etcmountmsg
|
|
# rm etc.err
|
|
|
|
# bad shell completion
|
|
"$TIMEOUT" -t 2 ffs --completions smoosh 2>comp.err
|
|
[ $? -eq 2 ] || fail compmountstatus
|
|
[ -s comp.err ] || fail compmountmsg
|
|
rm comp.err
|
|
|
|
# bad mode
|
|
"$TIMEOUT" -t 2 ffs --mode 888 2>mode.err
|
|
[ $? -eq 2 ] || fail modemountstatus
|
|
[ -s mode.err ] || fail modemountmsg
|
|
rm mode.err
|
|
|
|
# bad dirmode
|
|
"$TIMEOUT" -t 2 ffs --dirmode 888 2>dirmode.err
|
|
[ $? -eq 2 ] || fail dirmodemountstatus
|
|
[ -s dirmode.err ] || fail dirmodemountmsg
|
|
rm dirmode.err
|
|
|
|
# new and input file
|
|
"$TIMEOUT" -t 2 ffs --new foo.json single.json 2>ni.err
|
|
[ $? -eq 2 ] || fail nimountstatus
|
|
[ -s ni.err ] || fail nimountmsg
|
|
rm ni.err
|
|
|
|
# unknown --source
|
|
"$TIMEOUT" -t 2 ffs --source hieratic single.json 2>source.err
|
|
[ $? -eq 2 ] || fail sourcemountstatus
|
|
[ -s source.err ] || fail sourcemountmsg
|
|
rm source.err
|
|
|
|
# unknown --target
|
|
"$TIMEOUT" -t 2 ffs --target hieratic single.json 2>target.err
|
|
[ $? -eq 2 ] || fail targetmountstatus
|
|
[ -s target.err ] || fail targetmountmsg
|
|
rm target.err
|
|
|
|
# stdin read, no mountpoint
|
|
"$TIMEOUT" -t 2 ffs 2>im.err
|
|
[ $? -eq 2 ] || fail immountstatus
|
|
[ -s im.err ] || fail immountmsg
|
|
rm im.err
|
|
|
|
chmod +w unwriteable
|
|
cd "$TESTS"
|
|
rm -r "$D" || fail cleanup
|