From 04507bea5ff6282bf344cd06a400a5b6673fbc24 Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Thu, 11 Jun 2026 09:03:28 +0000 Subject: [PATCH] tests: add combined userquota dual backend smoke --- tests/nwfs/CMakeLists.txt | 5 +- .../nwfs_ncpfs_userquota_dual_smoke.sh.in | 94 +++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 tests/nwfs/nwfs_ncpfs_userquota_dual_smoke.sh.in diff --git a/tests/nwfs/CMakeLists.txt b/tests/nwfs/CMakeLists.txt index 2acdf73..fa0e0b7 100644 --- a/tests/nwfs/CMakeLists.txt +++ b/tests/nwfs/CMakeLists.txt @@ -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 diff --git a/tests/nwfs/nwfs_ncpfs_userquota_dual_smoke.sh.in b/tests/nwfs/nwfs_ncpfs_userquota_dual_smoke.sh.in new file mode 100644 index 0000000..75a38a8 --- /dev/null +++ b/tests/nwfs/nwfs_ncpfs_userquota_dual_smoke.sh.in @@ -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