tests: add combined userquota dual backend smoke
All checks were successful
Source release / source-package (push) Successful in 1m3s

This commit is contained in:
Mario Fetka
2026-06-11 09:03:28 +00:00
parent d16599f1db
commit 04507bea5f
2 changed files with 98 additions and 1 deletions

View File

@@ -30,6 +30,7 @@ if(NCPFS_INCLUDE_DIR AND NCPFS_LIBRARY)
target_include_directories(nwfs_ncpfs_userquota PRIVATE ${NCPFS_INCLUDE_DIR})
target_link_libraries(nwfs_ncpfs_userquota PRIVATE ${NCPFS_LIBRARY})
set(NWFS_NCPFS_USERQUOTA_HELPER "${CMAKE_CURRENT_BINARY_DIR}/nwfs_ncpfs_userquota")
set(NWFS_NCPFS_USERQUOTA_FILL_SMOKE "${CMAKE_CURRENT_BINARY_DIR}/nwfs_ncpfs_userquota_fill_smoke.sh")
add_executable(nwfs_ncpfs_rights nwfs_ncpfs_rights.c)
target_include_directories(nwfs_ncpfs_rights PRIVATE ${NCPFS_INCLUDE_DIR})
@@ -57,11 +58,13 @@ configure_file(nwfs_ncpfs_metadata_smoke.sh.in nwfs_ncpfs_metadata_smoke.sh @ONL
configure_file(nwfs_ncpfs_novell_quota_reference.sh.in nwfs_ncpfs_novell_quota_reference.sh @ONLY)
configure_file(nwfs_ncpfs_userquota_fill_smoke.sh.in nwfs_ncpfs_userquota_fill_smoke.sh @ONLY)
configure_file(nwfs_ncpfs_userquota_dual_smoke.sh.in nwfs_ncpfs_userquota_dual_smoke.sh @ONLY)
foreach(NWFS_NCPFS_SMOKE_SCRIPT
nwfs_ncpfs_metadata_smoke.sh
nwfs_ncpfs_novell_quota_reference.sh
nwfs_ncpfs_userquota_fill_smoke.sh)
nwfs_ncpfs_userquota_fill_smoke.sh
nwfs_ncpfs_userquota_dual_smoke.sh)
file(CHMOD "${CMAKE_CURRENT_BINARY_DIR}/${NWFS_NCPFS_SMOKE_SCRIPT}"
PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE

View File

@@ -0,0 +1,94 @@
#!/bin/sh
# Manual combined user-volume quota smoke for mars-nwe.
#
# Runs the same NetWare-style fill test against both quota implementations:
# a Linux-quota backed volume (normally QUOTA) and the mars-nwe NWQUOTA/
# metadata-backed SYS path. The terminal output is intentionally short; each
# per-volume fill smoke writes its full transcript to a separate log file.
set -u
if [ "$#" -lt 7 ]; then
echo "usage: $0 SERVER ADMIN PASSWORD QUOTA_SYSROOT QUOTA_MOUNT SYS_SYSROOT SYS_MOUNT [TESTDIR] [QUOTA_VOLUME] [SYS_VOLUME]" >&2
echo "example: $0 MARS SUPERVISOR secret /mnt/marsquota /mnt/nw-quota /var/mars_nwe/SYS /mnt/nw-sys NWFSTEST QUOTA SYS" >&2
echo "Set NWFS_NCPFS_QUOTA_LOG_DIR to choose the log directory; default: temporary directory." >&2
echo "Pass-through tuning: NWFS_NCPFS_FILL_USER/PASSWORD/OBJECT/TYPE/RIGHTS/LIMIT_4K/FILE_4K/GOOD_FILES." >&2
exit 2
fi
SERVER=$1
ADMIN_USER=$2
ADMIN_PASSWORD=$3
QUOTA_SYSROOT=$4
QUOTA_MOUNT=$5
SYS_SYSROOT=$6
SYS_MOUNT=$7
TESTDIR=${8:-${NWFS_NCPFS_TESTDIR:-NWFSTEST}}
QUOTA_VOLUME=${9:-${NWFS_NCPFS_QUOTA_VOLUME:-QUOTA}}
SYS_VOLUME=${10:-${NWFS_NCPFS_SYS_VOLUME:-SYS}}
FILL_SMOKE="@NWFS_NCPFS_USERQUOTA_FILL_SMOKE@"
if [ -z "$FILL_SMOKE" ] || [ ! -x "$FILL_SMOKE" ]; then
echo "nwfs_ncpfs_userquota_fill_smoke.sh not built or not executable: $FILL_SMOKE" >&2
exit 1
fi
if [ -n "${NWFS_NCPFS_QUOTA_LOG_DIR:-}" ]; then
LOG_DIR=$NWFS_NCPFS_QUOTA_LOG_DIR
mkdir -p "$LOG_DIR" || exit 1
CLEAN_LOG_DIR=0
else
LOG_DIR=$(mktemp -d "${TMPDIR:-/tmp}/nwfs-quota-dual.XXXXXX") || exit 1
CLEAN_LOG_DIR=0
fi
TS=$(date +%Y%m%d-%H%M%S 2>/dev/null || echo now)
run_one() {
label=$1
expect=$2
sysroot=$3
mountpoint=$4
volume=$5
log=$LOG_DIR/${TS}-${label}.log
printf '[RUN ] %-5s volume=%s mount=%s log=%s\n' "$label" "$volume" "$mountpoint" "$log"
(
echo "# $label userquota fill smoke"
echo "# server=$SERVER admin=$ADMIN_USER volume=$volume sysroot=$sysroot mount=$mountpoint testdir=$TESTDIR expect=$expect"
date 2>/dev/null || true
NWFS_NCPFS_USER_QUOTA_EXPECT=$expect \
"$FILL_SMOKE" "$SERVER" "$ADMIN_USER" "$ADMIN_PASSWORD" \
"$sysroot" "$mountpoint" "$TESTDIR" "$volume"
rc=$?
date 2>/dev/null || true
echo "# rc=$rc"
exit "$rc"
) >"$log" 2>&1
rc=$?
if [ "$rc" -eq 0 ]; then
summary=$(grep -E 'user quota fill smoke completed|allowed=.*denied_next=' "$log" | tail -n 1)
if [ -z "$summary" ]; then
summary="completed"
fi
printf '[PASS] %-5s %s\n' "$label" "$summary"
else
printf '[FAIL] %-5s rc=%s log=%s\n' "$label" "$rc" "$log"
echo "----- last 30 lines of $label log -----"
tail -n 30 "$log" 2>/dev/null || true
echo "----- end $label log tail -----"
fi
return "$rc"
}
fail=0
run_one QUOTA linux "$QUOTA_SYSROOT" "$QUOTA_MOUNT" "$QUOTA_VOLUME" || fail=1
run_one SYS nwquota "$SYS_SYSROOT" "$SYS_MOUNT" "$SYS_VOLUME" || fail=1
printf 'logs: %s\n' "$LOG_DIR"
if [ "$fail" -ne 0 ]; then
echo "combined userquota smoke FAILED: NetWare-style deny-before-data must pass on both quota backends" >&2
exit 1
fi
echo "combined userquota smoke PASSED: QUOTA and SYS both match NetWare-style fill/deny behavior"
exit 0