Files
bongo/contrib/testing/queue-disk-space-check.sh
Mario Fetka 78c2593042
Debian Trixie package bundle / packages (push) Successful in 20m57s
Harden Queue free space reservation
2026-07-23 08:38:38 +02:00

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"