tests: add Novell DOS tool baseline suite
Add DOS-side baseline scripts for the Novell tools used to compare the reimplemented public utilities. The suite covers the current baseline set: MAP SLIST WHOAMI LOGIN / LOGOUT NDIR NCOPY FLAG FLAGDIR CREATOR RIGHTS GRANT REVOKE REMOVE It also includes supporting trustee, rights, rename, move, delete and file-operation tests. Each test writes reproducible output into a per-tool CMP directory and provides a matching ZIP helper for collecting the results. The ZIP helpers clean generated test trees afterwards so SYS: does not keep accumulating temporary directories. This is the Novell baseline layer only. A later change can extend the same scripts to run the full comparison cycle: NPUBLIC baseline -> PUBLIC implementation -> NPUBLIC control
This commit is contained in:
161
test/mars_packtest_v3.sh
Normal file
161
test/mars_packtest_v3.sh
Normal file
@@ -0,0 +1,161 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# mars_packtest.sh v3
|
||||
#
|
||||
# Collect a MARS NWE DOS test ZIP, append recent nw.log lines,
|
||||
# copy final package to /tmp, and fix ownership/permissions.
|
||||
#
|
||||
# Usage:
|
||||
# mars_packtest.sh <testname> [minutes] [upload_user]
|
||||
#
|
||||
# Example:
|
||||
# sudo ./mars_packtest.sh ncptsta 5 mario
|
||||
#
|
||||
|
||||
set -eu
|
||||
|
||||
TEST_IN="${1:-}"
|
||||
MINUTES="${2:-5}"
|
||||
UPLOAD_USER="${3:-${SUDO_USER:-$(id -un)}}"
|
||||
|
||||
LOG_FILE="/var/log/mars_nwe/nw.log"
|
||||
SYS_DIR="/var/mars_nwe/SYS"
|
||||
OUT_DIR="/tmp"
|
||||
|
||||
if [ -z "$TEST_IN" ]; then
|
||||
echo "Usage: $0 <testname> [minutes] [upload_user]" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
TEST="$(printf '%s' "$TEST_IN" | tr '[:lower:]' '[:upper:]')"
|
||||
|
||||
TEST_DIR="$TEST"
|
||||
ZIP_NAME="$TEST.ZIP"
|
||||
|
||||
case "$TEST" in
|
||||
NCPTSTA)
|
||||
TEST_DIR="NCMP"
|
||||
ZIP_NAME="NCPTSTA.ZIP"
|
||||
;;
|
||||
FILTSTN|FILPREN|FILPOSTN|FILCMPN)
|
||||
TEST_DIR="TFILE"
|
||||
ZIP_NAME="$TEST.ZIP"
|
||||
;;
|
||||
NDIRTSTN|NDIRTSTM|NDIRCMP)
|
||||
TEST_DIR="TNDIR"
|
||||
ZIP_NAME="$TEST.ZIP"
|
||||
;;
|
||||
esac
|
||||
|
||||
SRC_ZIP="$SYS_DIR/$TEST_DIR/$ZIP_NAME"
|
||||
|
||||
if [ ! -f "$SRC_ZIP" ]; then
|
||||
FOUND="$(find "$SYS_DIR" -maxdepth 3 -type f -iname "$TEST.zip" -print 2>/dev/null | head -n 1 || true)"
|
||||
if [ -n "$FOUND" ]; then
|
||||
SRC_ZIP="$FOUND"
|
||||
ZIP_NAME="$(basename "$SRC_ZIP")"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -f "$SRC_ZIP" ]; then
|
||||
echo "ERROR: ZIP not found for test '$TEST_IN'." >&2
|
||||
echo "Tried: $SRC_ZIP" >&2
|
||||
echo "Also searched: $SYS_DIR -maxdepth 3 -iname $TEST.zip" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$LOG_FILE" ]; then
|
||||
echo "ERROR: log file not found: $LOG_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
STAMP="$(date '+%Y%m%d-%H%M%S')"
|
||||
WORK="/tmp/mars_packtest_${TEST}_$$"
|
||||
FINAL="$OUT_DIR/${TEST}_${STAMP}_with_log.zip"
|
||||
LOG_OUT="$WORK/nw_last_${MINUTES}min.log"
|
||||
INFO_OUT="$WORK/package_info.txt"
|
||||
|
||||
mkdir -p "$WORK"
|
||||
|
||||
# Copy original ZIP first, so the original test result remains untouched.
|
||||
cp "$SRC_ZIP" "$FINAL"
|
||||
|
||||
NOW_EPOCH="$(date '+%s')"
|
||||
FROM_EPOCH="$((NOW_EPOCH - MINUTES * 60))"
|
||||
|
||||
# Compute comparable keys outside awk. This avoids running date(1) once per
|
||||
# log line, which is very slow for large nw.log files.
|
||||
#
|
||||
# Key format:
|
||||
# MMDD * 86400 + seconds_since_midnight
|
||||
#
|
||||
# This is intended for short windows like 5-60 minutes. It also handles
|
||||
# midnight wrap for the normal "last few minutes" case.
|
||||
FROM_MD="$(date -d "@$FROM_EPOCH" '+%m%d')"
|
||||
FROM_SOD="$(date -d "@$FROM_EPOCH" '+%H:%M:%S' | awk -F: '{print ($1*3600)+($2*60)+$3}')"
|
||||
NOW_MD="$(date -d "@$NOW_EPOCH" '+%m%d')"
|
||||
NOW_SOD="$(date -d "@$NOW_EPOCH" '+%H:%M:%S' | awk -F: '{print ($1*3600)+($2*60)+$3}')"
|
||||
|
||||
FROM_KEY="$((10#$FROM_MD * 86400 + FROM_SOD))"
|
||||
NOW_KEY="$((10#$NOW_MD * 86400 + NOW_SOD))"
|
||||
|
||||
# Force byte/C locale. nw.log can contain CP437/Latin-1/debug bytes.
|
||||
LC_ALL=C awk -v from_key="$FROM_KEY" -v now_key="$NOW_KEY" '
|
||||
{
|
||||
# Log timestamp format:
|
||||
# 05.26,10:52:36 ...
|
||||
if (match($0, /^[0-9][0-9]\.[0-9][0-9],[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/)) {
|
||||
mon = substr($0, 1, 2) + 0
|
||||
day = substr($0, 4, 2) + 0
|
||||
hh = substr($0, 7, 2) + 0
|
||||
mm = substr($0, 10, 2) + 0
|
||||
ss = substr($0, 13, 2) + 0
|
||||
key = ((mon * 100) + day) * 86400 + (hh * 3600) + (mm * 60) + ss
|
||||
|
||||
if (from_key <= now_key) {
|
||||
if (key >= from_key && key <= now_key) print
|
||||
} else {
|
||||
# Midnight/month/year wrap for short recent windows.
|
||||
if (key >= from_key || key <= now_key) print
|
||||
}
|
||||
}
|
||||
}
|
||||
' "$LOG_FILE" > "$LOG_OUT"
|
||||
|
||||
{
|
||||
echo "MARS NWE test package"
|
||||
echo "====================="
|
||||
echo
|
||||
echo "Test input: $TEST_IN"
|
||||
echo "Test name: $TEST"
|
||||
echo "Source ZIP: $SRC_ZIP"
|
||||
echo "Final ZIP: $FINAL"
|
||||
echo "Log file: $LOG_FILE"
|
||||
echo "Log window: last $MINUTES minute(s)"
|
||||
echo "Created: $(date)"
|
||||
echo "Upload user: $UPLOAD_USER"
|
||||
echo "From key: $FROM_KEY"
|
||||
echo "Now key: $NOW_KEY"
|
||||
echo
|
||||
echo "Included extra files:"
|
||||
echo " nw_last_${MINUTES}min.log"
|
||||
echo " package_info.txt"
|
||||
} > "$INFO_OUT"
|
||||
|
||||
(
|
||||
cd "$WORK"
|
||||
zip -q "$FINAL" "$(basename "$LOG_OUT")" "$(basename "$INFO_OUT")"
|
||||
)
|
||||
|
||||
if id "$UPLOAD_USER" >/dev/null 2>&1; then
|
||||
chown "$UPLOAD_USER":"$(id -gn "$UPLOAD_USER")" "$FINAL" || true
|
||||
fi
|
||||
chmod 0644 "$FINAL"
|
||||
|
||||
rm -rf "$WORK"
|
||||
|
||||
echo "Created package:"
|
||||
echo " $FINAL"
|
||||
echo
|
||||
echo "Upload as user:"
|
||||
echo " $UPLOAD_USER"
|
||||
Reference in New Issue
Block a user