1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#!/bin/bash
fail () {
echo Test failed because: "$@" >&2
kill %coproc 2>/dev/null || true
exit 1
}
t=$(mktemp -d ${AUTOPKGTEST_TMP:+-p $AUTOPKGTEST_TMP})
lock="$t/lock"
trap "{ rm -rf $t; kill %1 %2 2>/dev/null || true; }" EXIT
coproc XCHPST { exec xchpst -l $t/lock bash -c "echo READY; read -s;"; }
read -u ${XCHPST[0]}
echo "XCHPST: $REPLY"
timeout 4 xchpst -L $lock uname 2>&1
[ $? -eq 111 ] || fail "didn't bail on taken lock"
echo "'xchpst -L' correctly bailed out with error on lock already taken"
timeout 4 xchpst -bsetlock xchpst -xn $lock uname || fail "didn't bail silently on taken lock"
echo "'setlock -xn' emulation correctly bailed out silently on lock already taken"
timeout 4 xchpst -l $lock uname
[ $? -eq 124 ] || fail "didn't block on taken lock"
echo "'xchpst -l' correctly blocked on lock already taken"
echo "EXIT" >&${XCHPST[1]}
wait %coproc
timeout 4 xchpst -L $lock uname
[ $? -eq 0 ] || fail "didn't succeed on free lock"
echo "'xchpst -L' correctly succeeded taking a free lock"
timeout 4 xchpst -bsetlock xchpst -xn $lock uname || fail "didn't succeed on free lock"
echo "'setlock -xn' emulation correctly succeeded taking a free lock"
timeout 4 xchpst -l $lock uname
[ $? -eq 0 ] || fail "waited on free lock"
echo "'xchpst -l' correctly succeeded waiting on a free lock"
xchpst -l $lock sleep 12 &
sleep 4
timeout 16 xchpst -l $lock uname
echo "'xchpst -l' correctly waited for lock then succeeded"
|