2021-07-21 18:10:42 +03:00
|
|
|
#!/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)"
|
2021-07-30 03:55:53 +03:00
|
|
|
TIMEOUT="$(cd ../utils; pwd)/timeout"
|
2021-07-21 18:10:42 +03:00
|
|
|
|
|
|
|
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
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs -i single.json 2>single.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail imountstatus
|
|
|
|
[ -s single.err ] || fail imountmsg
|
|
|
|
rmdir single
|
|
|
|
rm single.err
|
|
|
|
|
|
|
|
# in place, can't make mountpoint
|
|
|
|
cd unwriteable
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs -i single.json 2>../single.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail imkmountstatus
|
|
|
|
cd ..
|
|
|
|
[ -s single.err ] || fail imkmountmsg
|
|
|
|
rm single.err
|
|
|
|
|
|
|
|
# new, mountpoint exists
|
|
|
|
mkdir foo
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs --new foo.json 2>foo.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail newmountstatus
|
|
|
|
[ -s foo.err ] || fail newmountmsg
|
|
|
|
rmdir foo
|
|
|
|
rm foo.err
|
|
|
|
|
|
|
|
# new, can't make mountpoint
|
|
|
|
cd unwriteable
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs --new foo.json 2>../foo.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail newmkmountstatus
|
|
|
|
cd ..
|
|
|
|
[ -s foo.err ] || fail newmkmountmsg
|
|
|
|
rm foo.err
|
|
|
|
|
|
|
|
# input file, can't infer mountpoint
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs --new .. 2>dotdot.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail newdotdotmountstatus
|
|
|
|
[ -s dotdot.err ] || fail newdotdotmountmsg
|
|
|
|
rm dotdot.err
|
|
|
|
|
|
|
|
# --new, output file exists
|
|
|
|
touch foo.yaml
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs --new foo.yaml 2>foo.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail omountstatus
|
|
|
|
[ -s foo.err ] || fail omountmsg
|
|
|
|
rm foo.yaml
|
|
|
|
rm foo.err
|
|
|
|
|
|
|
|
# --new, mountpoint doesn't exist
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs -m notthere --new foo.json 2>foo.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail mmountstatus1
|
|
|
|
[ -s foo.err ] || fail mmountmsg1
|
|
|
|
rm foo.err
|
|
|
|
|
|
|
|
# mountpoint doesn't exist
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs -m notthere single.json 2>single.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail mmountstatus2
|
|
|
|
[ -s single.err ] || fail mmountmsg2
|
|
|
|
rm single.err
|
|
|
|
|
|
|
|
# input file doesn't exists
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs nonesuch.toml 2>nonesuch.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail inputmountstatus1
|
|
|
|
[ -s nonesuch.err ] || fail inputmountmsg1
|
|
|
|
rm nonesuch.err
|
|
|
|
|
|
|
|
# input file, mountpoint exists
|
|
|
|
mkdir single
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs single.json 2>single.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail inputmountstatus2
|
|
|
|
[ -s single.err ] || fail inputmountmsg2
|
|
|
|
rmdir single
|
|
|
|
rm single.err
|
|
|
|
|
|
|
|
# input file, can't make mount point
|
|
|
|
cd unwriteable
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs ../single.json 2>../single.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail inputmkmountstatus
|
|
|
|
cd ..
|
|
|
|
[ -s single.err ] || fail inputmkmountmsg
|
|
|
|
rm single.err
|
|
|
|
|
|
|
|
# input file, can't infer mountpoint
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs .. 2>dotdot.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail inputdotdotmountstatus
|
|
|
|
[ -s dotdot.err ] || fail inputdotdotmountmsg
|
|
|
|
rm dotdot.err
|
|
|
|
|
|
|
|
# unreadable input
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs unreadable.json 2>ur.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail unreadablemountstatus
|
|
|
|
[ -s ur.err ] || fail unreadablemountmsg
|
|
|
|
rm ur.err
|
|
|
|
|
|
|
|
# plain value input
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs false.json 2>false.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 1 ] || fail falsemountstatus
|
|
|
|
[ -s false.err ] || fail falsemountmsg
|
|
|
|
rm false.err
|
|
|
|
|
|
|
|
# bad mount point (fuser is masking this error)
|
2021-07-30 03:55:53 +03:00
|
|
|
# "$TIMEOUT" -t 2 ffs /etc single.json 2>etc.err
|
2021-07-21 18:10:42 +03:00
|
|
|
# [ $? -eq 1 ] || fail etcmountstatus
|
|
|
|
# [ -s etc.err ] || fail etcmountmsg
|
|
|
|
# rm etc.err
|
|
|
|
|
|
|
|
# bad shell completion
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs --completions smoosh 2>comp.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 2 ] || fail compmountstatus
|
|
|
|
[ -s comp.err ] || fail compmountmsg
|
|
|
|
rm comp.err
|
|
|
|
|
|
|
|
# bad mode
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs --mode 888 2>mode.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 2 ] || fail modemountstatus
|
|
|
|
[ -s mode.err ] || fail modemountmsg
|
|
|
|
rm mode.err
|
|
|
|
|
|
|
|
# bad dirmode
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs --dirmode 888 2>dirmode.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 2 ] || fail dirmodemountstatus
|
|
|
|
[ -s dirmode.err ] || fail dirmodemountmsg
|
|
|
|
rm dirmode.err
|
|
|
|
|
|
|
|
# new and input file
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs --new foo.json single.json 2>ni.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 2 ] || fail nimountstatus
|
|
|
|
[ -s ni.err ] || fail nimountmsg
|
|
|
|
rm ni.err
|
|
|
|
|
|
|
|
# unknown --source
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs --source hieratic single.json 2>source.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 2 ] || fail sourcemountstatus
|
|
|
|
[ -s source.err ] || fail sourcemountmsg
|
|
|
|
rm source.err
|
|
|
|
|
|
|
|
# unknown --target
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs --target hieratic single.json 2>target.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 2 ] || fail targetmountstatus
|
|
|
|
[ -s target.err ] || fail targetmountmsg
|
|
|
|
rm target.err
|
|
|
|
|
|
|
|
# stdin read, no mountpoint
|
2021-07-30 03:55:53 +03:00
|
|
|
"$TIMEOUT" -t 2 ffs 2>im.err
|
2021-07-21 18:10:42 +03:00
|
|
|
[ $? -eq 2 ] || fail immountstatus
|
|
|
|
[ -s im.err ] || fail immountmsg
|
|
|
|
rm im.err
|
|
|
|
|
|
|
|
chmod +w unwriteable
|
|
|
|
cd "$TESTS"
|
|
|
|
rm -r "$D" || fail cleanup
|