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
162 lines
4.0 KiB
Bash
162 lines
4.0 KiB
Bash
#!/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"
|