63 lines
1.7 KiB
Bash
Executable File
63 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Compare QDSPC with the backing filesystem's unprivileged free blocks and the
|
|
# configured Queue reserve. Two stat samples bracket QDSPC so unrelated small
|
|
# writes cannot turn a correct calculation into a false failure.
|
|
|
|
set -eu
|
|
|
|
queue_tool=${BONGO_QUEUE_TOOL:-/usr/bin/bongo-queuetool}
|
|
run_as=${BONGO_TEST_RUN_AS:-bongo}
|
|
|
|
if [ "$(id -un)" = "$run_as" ]; then
|
|
as_bongo=
|
|
else
|
|
as_bongo="sudo -n -u $run_as"
|
|
fi
|
|
|
|
set -- $($as_bongo "$queue_tool" space details)
|
|
if [ "$#" -ne 5 ]; then
|
|
echo "STQ-03: unexpected detailed space response" >&2
|
|
exit 1
|
|
fi
|
|
free_before=$1
|
|
free_after=$2
|
|
reserve=$3
|
|
reported=$4
|
|
block=$5
|
|
|
|
for value in "$free_before" "$free_after" "$reserve" "$reported" "$block"; do
|
|
case "$value" in
|
|
''|*[!0-9]*)
|
|
echo "STQ-03: detailed space response contains a non-integer" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
expected_before=$((free_before > reserve ? free_before - reserve : 0))
|
|
expected_after=$((free_after > reserve ? free_after - reserve : 0))
|
|
lower=$expected_before
|
|
upper=$expected_after
|
|
if [ "$lower" -gt "$upper" ]; then
|
|
lower=$expected_after
|
|
upper=$expected_before
|
|
fi
|
|
|
|
# Permit one allocation unit at either side of the bracket.
|
|
lower=$((lower > block ? lower - block : 0))
|
|
upper=$((upper + block))
|
|
|
|
if [ "$reported" -lt "$lower" ] || [ "$reported" -gt "$upper" ]; then
|
|
echo "STQ-03: QDSPC $reported is outside expected range $lower..$upper" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$free_before" -gt "$reserve" ] && [ "$reported" -ge "$free_before" ]; then
|
|
echo "STQ-03: configured reserve was not subtracted" >&2
|
|
exit 1
|
|
fi
|
|
|
|
printf 'STQ-03 PASS free-before=%s free-after=%s reserve=%s reported=%s block=%s\n' \
|
|
"$free_before" "$free_after" "$reserve" "$reported" "$block"
|