#!/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"