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:
Mario Fetka
2026-05-27 13:31:46 +02:00
parent 0df41482c7
commit f214e89d69
65 changed files with 4831 additions and 0 deletions

1
test/README.TXT Normal file
View File

@@ -0,0 +1 @@
See README.md for the test layout. DOS-run files keep 8.3 names.

34
test/README.md Normal file
View File

@@ -0,0 +1,34 @@
# MARS dosutils tests
This directory contains DOS-side regression and compatibility tests for `mars-dosutils`.
The tests are grouped by feature so that Novell reference-tool checks and our own tool regressions stay separated but easy to compare.
## Directory layout
| Directory | Purpose |
| --- | --- |
| `flag/` | File/directory attribute tests, Novell `NPUBLIC\FLAG` baseline and MARS `PUBLIC\FLAG` regression notes. |
| `flagdir/` | Planned: directory-specific FLAG and recursive attribute tests. |
| `grant/` | Planned: trustee grant tests. |
| `rights/` | Planned: effective-rights and trustee readback tests. |
| `map/` | Planned: MAP command and login-script mapping tests. |
| `login/` | Planned: LOGIN/NLOGIN compatibility tests. |
| `logout/` | Planned: LOGOUT/NLOGOUT compatibility tests. |
## Naming
DOS-executed files should use 8.3 names. Keep Novell reference tests and MARS tests close together, but name them clearly.
Suggested suffixes:
- `*N.BAT` for Novell-only baseline tests using `NPUBLIC`/`NLOGIN`.
- `*M.TST` or `*M.BAT` for MARS/dosutils tests using `PUBLIC`/`LOGIN`.
- `*CMP.BAT` for comparison/helper scripts.
## Expected workflow
1. Run the Novell baseline test first.
2. Check the MARS NWE server log for the expected NCP path and completion codes.
3. Run or implement the matching MARS/dosutils regression test.
4. Keep notes in the feature directory `README.md`.

101
test/creator/CIXSTA.BAT Normal file
View File

@@ -0,0 +1,101 @@
@ECHO OFF
REM CIXSTA.BAT
REM Automated CREATOR/xattr test for MARS NWE.
REM
REM Uses PUBLIC\CREATOR.EXE to set creator/modifier/archive metadata through
REM the same NCP22/25 Set Directory/File Information path as FILER.
REM
REM Run as SUPERVISOR.
REM
REM Test tree:
REM F:\CIXTEST
REM Result tree:
REM F:\CIXCMP
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST CIXTEST\NUL DELTREE /Y CIXTEST\*.*
IF EXIST CIXCMP\NUL DELTREE /Y CIXCMP\*.*
IF NOT EXIST CIXTEST\NUL MD CIXTEST
IF NOT EXIST CIXTEST\SUP\NUL MD CIXTEST\SUP
IF NOT EXIST CIXCMP\NUL MD CIXCMP
IF NOT EXIST CIXCMP\PRE\NUL MD CIXCMP\PRE
IF NOT EXIST CIXCMP\POST\NUL MD CIXCMP\POST
IF NOT EXIST CIXCMP\LINUX\NUL MD CIXCMP\LINUX
IF EXIST F:\CIXCMP\RUN.LOG DEL F:\CIXCMP\RUN.LOG
IF EXIST F:\CIXCMP\SUMMARY.TXT DEL F:\CIXCMP\SUMMARY.TXT
IF EXIST F:\CIXCMP\CIXSTA.ZIP DEL F:\CIXCMP\CIXSTA.ZIP
IF EXIST F:\CIXCMP\ZIP.LOG DEL F:\CIXCMP\ZIP.LOG
IF EXIST F:\CIXCMP\PRE\*.OUT DEL F:\CIXCMP\PRE\*.OUT
IF EXIST F:\CIXCMP\POST\*.OUT DEL F:\CIXCMP\POST\*.OUT
IF EXIST F:\CIXCMP\LINUX\*.TXT DEL F:\CIXCMP\LINUX\*.TXT
REM Reset files from previous runs.
IF EXIST F:\CIXTEST\SUP\S_SUP.TXT DEL F:\CIXTEST\SUP\S_SUP.TXT
IF EXIST F:\CIXTEST\SUP\S_ARCH.TXT DEL F:\CIXTEST\SUP\S_ARCH.TXT
IF EXIST F:\CIXTEST\SUP\S_ALL.TXT DEL F:\CIXTEST\SUP\S_ALL.TXT
ECHO CIXSTA creator/xattr test using PUBLIC\CREATOR > F:\CIXCMP\RUN.LOG
ECHO Run this as SUPERVISOR. >> F:\CIXCMP\RUN.LOG
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\CIXCMP\RUN.LOG
ECHO. >> F:\CIXCMP\RUN.LOG
ECHO SUP CREATOR FILE > F:\CIXTEST\SUP\S_SUP.TXT
ECHO SUP ARCHIVE FILE > F:\CIXTEST\SUP\S_ARCH.TXT
ECHO SUP ALL FILE > F:\CIXTEST\SUP\S_ALL.TXT
NPUBLIC\FLAG F:\CIXTEST\SUP\S_SUP.TXT N >> F:\CIXCMP\RUN.LOG
NPUBLIC\FLAG F:\CIXTEST\SUP\S_ARCH.TXT N >> F:\CIXCMP\RUN.LOG
NPUBLIC\FLAG F:\CIXTEST\SUP\S_ALL.TXT N >> F:\CIXCMP\RUN.LOG
ECHO === PRE READBACK === >> F:\CIXCMP\RUN.LOG
NPUBLIC\NDIR F:\CIXTEST\SUP /DATES > F:\CIXCMP\PRE\SUPDAT.OUT
NPUBLIC\NDIR F:\CIXTEST\SUP /RIGHTS > F:\CIXCMP\PRE\SUPRGT.OUT
PUBLIC\CREATOR F:\CIXTEST\SUP\S_SUP.TXT /SHOW > F:\CIXCMP\PRE\CSUP.OUT
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ARCH.TXT /SHOW > F:\CIXCMP\PRE\CARCH.OUT
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ALL.TXT /SHOW > F:\CIXCMP\PRE\CALL.OUT
ECHO === CREATOR TOOL SET INFO === >> F:\CIXCMP\RUN.LOG
REM Set fileinfo xattr fields.
PUBLIC\CREATOR F:\CIXTEST\SUP\S_SUP.TXT /CREATOR MARIO >> F:\CIXCMP\RUN.LOG
PUBLIC\CREATOR F:\CIXTEST\SUP\S_SUP.TXT /MODIFIER MARIO >> F:\CIXCMP\RUN.LOG
REM Set archive xattr fields.
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ARCH.TXT /ARCHIVE MARIO >> F:\CIXCMP\RUN.LOG
REM Set all three groups with one command and explicit date/time.
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ALL.TXT /ALL MARIO 2026-05-25 16:12:00 >> F:\CIXCMP\RUN.LOG
ECHO === POST READBACK === >> F:\CIXCMP\RUN.LOG
NPUBLIC\NDIR F:\CIXTEST\SUP /DATES > F:\CIXCMP\POST\SUPDAT.OUT
NPUBLIC\NDIR F:\CIXTEST\SUP /RIGHTS > F:\CIXCMP\POST\SUPRGT.OUT
PUBLIC\CREATOR F:\CIXTEST\SUP\S_SUP.TXT /SHOW > F:\CIXCMP\POST\CSUP.OUT
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ARCH.TXT /SHOW > F:\CIXCMP\POST\CARCH.OUT
PUBLIC\CREATOR F:\CIXTEST\SUP\S_ALL.TXT /SHOW > F:\CIXCMP\POST\CALL.OUT
NPUBLIC\FLAG F:\CIXTEST\SUP\S_SUP.TXT > F:\CIXCMP\POST\FSUP.OUT
NPUBLIC\FLAG F:\CIXTEST\SUP\S_ARCH.TXT > F:\CIXCMP\POST\FARCH.OUT
NPUBLIC\FLAG F:\CIXTEST\SUP\S_ALL.TXT > F:\CIXCMP\POST\FALL.OUT
ECHO === SUMMARY === > F:\CIXCMP\SUMMARY.TXT
ECHO CIXSTA creator/xattr test with PUBLIC\CREATOR finished. >> F:\CIXCMP\SUMMARY.TXT
ECHO. >> F:\CIXCMP\SUMMARY.TXT
ECHO Expected: >> F:\CIXCMP\SUMMARY.TXT
ECHO - S_SUP.TXT has creator/modifier MARIO via user.mars_nwe.fileinfo. >> F:\CIXCMP\SUMMARY.TXT
ECHO - S_ARCH.TXT has archive date/time/archiver MARIO via user.mars_nwe.archive. >> F:\CIXCMP\SUMMARY.TXT
ECHO - S_ALL.TXT has fileinfo and archive metadata with explicit date/time. >> F:\CIXCMP\SUMMARY.TXT
ECHO - POST\C*.OUT shows PUBLIC\CREATOR /SHOW readback. >> F:\CIXCMP\SUMMARY.TXT
ECHO - POST\SUPDAT.OUT shows NDIR /DATES readback. >> F:\CIXCMP\SUMMARY.TXT
ECHO. >> F:\CIXCMP\SUMMARY.TXT
ECHO Next Linux-side step: run cix_collect_xattr.sh, then CIXZIP. >> F:\CIXCMP\SUMMARY.TXT
ECHO.
ECHO CIXSTA fertig.
ECHO Jetzt auf Linux cix_collect_xattr.sh ausfuehren, dann CIXZIP.
ECHO.

26
test/creator/CIXZIP.BAT Normal file
View File

@@ -0,0 +1,26 @@
@ECHO OFF
REM CIXZIP.BAT
REM Optional packer for CIXSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \CIXCMP
IF EXIST CIXSTA.ZIP DEL CIXSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating CIXSTA.ZIP > ZIP.LOG
ZIP -r CIXSTA.ZIP RUN.LOG SUMMARY.TXT PRE POST LINUX >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \CIXTEST\NUL DELTREE /Y \CIXTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\CIXCMP\CIXSTA.ZIP
ECHO F:\CIXCMP\ZIP.LOG
ECHO.

75
test/creator/README.md Normal file
View File

@@ -0,0 +1,75 @@
# CREATOR / xattr automated test
This replaces the old FILER/manual creator-xattr test with a direct test using
`PUBLIC\CREATOR.EXE`.
## Requirements
`PUBLIC\CREATOR.EXE` from the new dosutils tree must be installed.
## DOS flow
Run as `SUPERVISOR`:
```text
CIXSTA
```
Then run the Linux-side collector:
```sh
sudo ./cix_collect_xattr.sh
```
Then package in DOS:
```text
CIXZIP
```
Result ZIP:
```text
F:\CIXCMP\CIXSTA.ZIP
```
Linux package with server log:
```sh
sudo ./mars_packtest_v3.sh cixsta 5 mario
```
## Test directories
```text
F:\CIXTEST
F:\CIXCMP
```
## What CIXSTA does
```text
S_SUP.TXT:
PUBLIC\CREATOR ... /CREATOR MARIO
PUBLIC\CREATOR ... /MODIFIER MARIO
Expected xattr: user.mars_nwe.fileinfo
S_ARCH.TXT:
PUBLIC\CREATOR ... /ARCHIVE MARIO
Expected xattr: user.mars_nwe.archive
S_ALL.TXT:
PUBLIC\CREATOR ... /ALL MARIO 2026-05-25 16:12:00
Expected xattrs: user.mars_nwe.fileinfo and user.mars_nwe.archive
```
## Important outputs
```text
F:\CIXCMP\POST\CSUP.OUT
F:\CIXCMP\POST\CARCH.OUT
F:\CIXCMP\POST\CALL.OUT
F:\CIXCMP\POST\SUPDAT.OUT
F:\CIXCMP\LINUX\getfattr.txt
F:\CIXCMP\LINUX\xattr_focus.txt
```

View File

@@ -0,0 +1,64 @@
#!/bin/sh
#
# cix_collect_xattr.sh
#
# Linux-side collector for the CIXSTA CREATOR/xattr test.
#
# Run as root after CIXSTA.BAT and before CIXZIP.BAT:
# sudo ./cix_collect_xattr.sh
#
set -eu
SYS="/var/mars_nwe/SYS"
TREE="$SYS/CIXTEST"
OUT="$SYS/CIXCMP/LINUX"
mkdir -p "$OUT"
echo "CIX CREATOR xattr/stat collection" > "$OUT/collector_info.txt"
echo "Created: $(date)" >> "$OUT/collector_info.txt"
echo "Tree: $TREE" >> "$OUT/collector_info.txt"
echo >> "$OUT/collector_info.txt"
if ! command -v getfattr >/dev/null 2>&1; then
echo "ERROR: getfattr not installed. Install attr package." | tee "$OUT/getfattr_missing.txt"
exit 1
fi
find "$TREE" -xdev -print | sort > "$OUT/files.txt"
{
echo "path|uid|gid|mode|size|mtime|ctime|atime"
while IFS= read -r p; do
stat -c '%n|%u|%g|%a|%s|%y|%z|%x' "$p"
done < "$OUT/files.txt"
} > "$OUT/stat.txt"
{
while IFS= read -r p; do
echo "### $p"
getfattr -m - --absolute-names "$p" 2>/dev/null || true
echo
done < "$OUT/files.txt"
} > "$OUT/xattr_names.txt"
{
while IFS= read -r p; do
echo "### $p"
getfattr -d -m - -e hex --absolute-names "$p" 2>/dev/null || true
echo
done < "$OUT/files.txt"
} > "$OUT/getfattr.txt"
grep -iE 'mars|netware|trust|owner|creator|modifier|archiv|fileinfo|dos|attr|nwe' "$OUT/getfattr.txt" > "$OUT/xattr_focus.txt" || true
chmod -R a+r "$OUT"
echo "Wrote:"
echo " $OUT/collector_info.txt"
echo " $OUT/files.txt"
echo " $OUT/stat.txt"
echo " $OUT/xattr_names.txt"
echo " $OUT/getfattr.txt"
echo " $OUT/xattr_focus.txt"

37
test/deploy.sh Normal file
View File

@@ -0,0 +1,37 @@
#!/usr/bin/env bash
set -euo pipefail
SRC="/home/mario/mars/mars-nwe-build/dosutils/net.exe"
SYS="/var/mars_nwe/SYS"
# Nur unsere aktuell getesteten Open-Source-Tools überschreiben:
install -m 0644 "$SRC" "$SYS/public/login.exe"
install -m 0644 "$SRC" "$SYS/login/login.exe"
install -m 0644 "$SRC" "$SYS/public/map.exe"
install -m 0644 "$SRC" "$SYS/login/map.exe"
install -m 0644 "$SRC" "$SYS/public/slist.exe"
install -m 0644 "$SRC" "$SYS/login/slist.exe"
install -m 0644 "$SRC" "$SYS/public/pathins.exe"
install -m 0644 "$SRC" "$SYS/public/pathdel.exe"
install -m 0644 "$SRC" "$SYS/public/path.exe"
install -m 0644 "$SRC" "$SYS/public/flag.exe"
install -m 0644 "$SRC" "$SYS/public/flagdir.exe"
install -m 0644 "$SRC" "$SYS/public/rights.exe"
install -m 0644 "$SRC" "$SYS/public/grant.exe"
install -m 0644 "$SRC" "$SYS/public/revoke.exe"
install -m 0644 "$SRC" "$SYS/public/remove.exe"
install -m 0644 "$SRC" "$SYS/public/ndir.exe"
# Optional nur wenn du gerade diese Open-Source-Version testen willst:
# install -m 0644 "$SRC" "$SYS/public/passwd.exe"
# install -m 0644 "$SRC" "$SYS/public/capture.exe"
# install -m 0644 "$SRC" "$SYS/public/endcap.exe"
# install -m 0644 "$SRC" "$SYS/public/logout.exe"
install -m 0644 "$SRC" "$SYS/public/tests.exe"
echo "deployed selected Open Source DOS utils from: $SRC"

63
test/filer/FILCMPN.BAT Normal file
View File

@@ -0,0 +1,63 @@
@ECHO OFF
REM FILCMPN.BAT
REM Repeat comparison of FILER PRE/POST output files.
REM
REM Run after FILPREN.BAT, manual NPUBLIC\FILER, and FILPOSTN.BAT.
CLS
ECHO === FILCMPN: Compare FILER PRE/POST outputs ===
ECHO.
ECHO Unterschiede sind OK, wenn sie bewusst in FILER erzeugt wurden.
ECHO.
PAUSE
CLS
ECHO === C01 FLAG A.TXT ===
FC F:\TFILE\PRE\FLAGA.OUT F:\TFILE\POST\FLAGA.OUT
ECHO.
PAUSE
CLS
ECHO === C02 FLAG B.TXT ===
FC F:\TFILE\PRE\FLAGB.OUT F:\TFILE\POST\FLAGB.OUT
ECHO.
PAUSE
CLS
ECHO === C03 FLAG KEEP.TXT ===
FC F:\TFILE\PRE\FLAGK.OUT F:\TFILE\POST\FLAGK.OUT
ECHO.
PAUSE
CLS
ECHO === C04 NDIR ===
FC F:\TFILE\PRE\NDIR.OUT F:\TFILE\POST\NDIR.OUT
ECHO.
PAUSE
CLS
ECHO === C05 DATES ===
FC F:\TFILE\PRE\DATES.OUT F:\TFILE\POST\DATES.OUT
ECHO.
PAUSE
CLS
ECHO === C06 NDIR RIGHTS ===
FC F:\TFILE\PRE\RIGHTS.OUT F:\TFILE\POST\RIGHTS.OUT
ECHO.
PAUSE
CLS
ECHO === C07 RIGHTS Directory ===
FC F:\TFILE\PRE\TRUST.OUT F:\TFILE\POST\TRUST.OUT
ECHO.
PAUSE
CLS
ECHO === C08 RIGHTS A.TXT ===
FC F:\TFILE\PRE\TRUSTA.OUT F:\TFILE\POST\TRUSTA.OUT
ECHO.
PAUSE
CLS
ECHO === FILCMPN fertig ===

149
test/filer/FILPOSTN.BAT Normal file
View File

@@ -0,0 +1,149 @@
@ECHO OFF
REM FILPOSTN.BAT
REM Novell-only FILER post-test readback and compare for MARS NWE.
REM
REM Run this after manual NPUBLIC\FILER test.
REM
REM Vergleicht:
REM F:\TFILE\PRE\*.OUT
REM F:\TFILE\POST\*.OUT
CLS
ECHO === FILPOSTN: Novell FILER Post-Test Compare ===
ECHO.
ECHO Dieses Script erzeugt POST-Ausgaben und vergleicht sie mit PRE.
ECHO Unterschiede sind OK, wenn du in FILER bewusst etwas geaendert hast.
ECHO Unerwartete Unterschiede bitte gegen Serverlog pruefen.
ECHO.
PAUSE
CLS
ECHO === Q01: POST-Ausgaben erzeugen ===
ECHO Schreibe POST\FLAGA.OUT
NPUBLIC\FLAG F:\TFILE\A.TXT > F:\TFILE\POST\FLAGA.OUT
ECHO Schreibe POST\FLAGB.OUT
NPUBLIC\FLAG F:\TFILE\B.TXT > F:\TFILE\POST\FLAGB.OUT
ECHO Schreibe POST\FLAGK.OUT
NPUBLIC\FLAG F:\TFILE\KEEP.TXT > F:\TFILE\POST\FLAGK.OUT
ECHO Schreibe POST\FLAGC.OUT
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT > F:\TFILE\POST\FLAGC.OUT
ECHO Schreibe POST\NDIR.OUT
NPUBLIC\NDIR F:\TFILE > F:\TFILE\POST\NDIR.OUT
ECHO Schreibe POST\DATES.OUT
NPUBLIC\NDIR F:\TFILE /DATES > F:\TFILE\POST\DATES.OUT
ECHO Schreibe POST\RIGHTS.OUT
NPUBLIC\NDIR F:\TFILE /RIGHTS > F:\TFILE\POST\RIGHTS.OUT
ECHO Schreibe POST\TRUST.OUT
NPUBLIC\RIGHTS F:\TFILE > F:\TFILE\POST\TRUST.OUT
ECHO Schreibe POST\TRUSTA.OUT
NPUBLIC\RIGHTS F:\TFILE\A.TXT > F:\TFILE\POST\TRUSTA.OUT
ECHO.
PAUSE
CLS
ECHO === Q02: Vergleich FLAG A.TXT ===
FC F:\TFILE\PRE\FLAGA.OUT F:\TFILE\POST\FLAGA.OUT
ECHO.
PAUSE
CLS
ECHO === Q03: Vergleich FLAG B.TXT ===
FC F:\TFILE\PRE\FLAGB.OUT F:\TFILE\POST\FLAGB.OUT
ECHO.
PAUSE
CLS
ECHO === Q04: Vergleich FLAG KEEP.TXT ===
FC F:\TFILE\PRE\FLAGK.OUT F:\TFILE\POST\FLAGK.OUT
ECHO.
PAUSE
CLS
ECHO === Q05: Vergleich NDIR ===
FC F:\TFILE\PRE\NDIR.OUT F:\TFILE\POST\NDIR.OUT
ECHO.
PAUSE
CLS
ECHO === Q06: Vergleich DATES ===
FC F:\TFILE\PRE\DATES.OUT F:\TFILE\POST\DATES.OUT
ECHO.
PAUSE
CLS
ECHO === Q07: Vergleich NDIR RIGHTS ===
FC F:\TFILE\PRE\RIGHTS.OUT F:\TFILE\POST\RIGHTS.OUT
ECHO.
PAUSE
CLS
ECHO === Q08: Vergleich RIGHTS Directory ===
FC F:\TFILE\PRE\TRUST.OUT F:\TFILE\POST\TRUST.OUT
ECHO.
PAUSE
CLS
ECHO === Q09: Vergleich RIGHTS A.TXT ===
FC F:\TFILE\PRE\TRUSTA.OUT F:\TFILE\POST\TRUSTA.OUT
ECHO.
PAUSE
CLS
ECHO === Q10: POST-Ausgaben anzeigen: FLAG A ===
TYPE F:\TFILE\POST\FLAGA.OUT
ECHO.
PAUSE
CLS
ECHO === Q11: POST-Ausgaben anzeigen: FLAG B ===
TYPE F:\TFILE\POST\FLAGB.OUT
ECHO.
PAUSE
CLS
ECHO === Q12: POST-Ausgaben anzeigen: FLAG KEEP ===
TYPE F:\TFILE\POST\FLAGK.OUT
ECHO.
PAUSE
CLS
ECHO === Q13: POST NDIR ===
TYPE F:\TFILE\POST\NDIR.OUT
ECHO.
PAUSE
CLS
ECHO === Q14: POST DATES ===
TYPE F:\TFILE\POST\DATES.OUT
ECHO.
PAUSE
CLS
ECHO === Q15: Cleanup Attribute ===
NPUBLIC\FLAG F:\TFILE\A.TXT N
NPUBLIC\FLAG F:\TFILE\B.TXT N
NPUBLIC\FLAG F:\TFILE\KEEP.TXT N
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT N
ECHO.
PAUSE
CLS
ECHO === Q16: Final NDIR ===
NPUBLIC\NDIR F:\TFILE
ECHO.
PAUSE
CLS
ECHO === FILPOSTN fertig ===
ECHO.
ECHO Vergleichsdateien liegen hier:
ECHO F:\TFILE\PRE\*.OUT
ECHO F:\TFILE\POST\*.OUT
ECHO.
ECHO Im Serverlog pruefen:
ECHO FILER Info-Readback
ECHO NCP22/25 change bits bei Aenderungen
ECHO NCP22/25 Set Directory/File Information
ECHO xattr-Metadaten falls FILER passende Felder setzt
ECHO keine unerwarteten Completion Codes
ECHO.

153
test/filer/FILPREN.BAT Normal file
View File

@@ -0,0 +1,153 @@
@ECHO OFF
REM FILPREN.BAT
REM Novell-only FILER pre-test setup for MARS NWE.
REM
REM Run this first, then run NPUBLIC\FILER manually.
REM After exiting FILER, run FILPOSTN.BAT.
REM
REM Testordner:
REM F:\TFILE
REM
REM Vergleichsdateien:
REM F:\TFILE\PRE\*.OUT
REM F:\TFILE\POST\*.OUT
REM
REM Wichtig:
REM Die Ausgaben werden per Redirect in Dateien geschrieben, damit
REM FILPOSTN.BAT sie spaeter mit FC vergleichen kann.
CLS
ECHO === FILPREN: Novell FILER Pre-Test ===
ECHO.
ECHO Schrittfolge:
ECHO 1. FILPREN.BAT ausfuehren
ECHO 2. NPUBLIC\FILER manuell starten
ECHO 3. In FILER F:\TFILE pruefen/aendern
ECHO 4. FILPOSTN.BAT ausfuehren
ECHO.
PAUSE
CLS
ECHO === P00: Testordner vorbereiten ===
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST TFILE\NUL DELTREE /Y TFILE\*.*
IF NOT EXIST TFILE MD TFILE
CD TFILE
IF NOT EXIST PRE MD PRE
IF NOT EXIST POST MD POST
ECHO FILER TEST A > A.TXT
ECHO FILER TEST B > B.TXT
ECHO FILER KEEP > KEEP.TXT
IF NOT EXIST SUBDIR MD SUBDIR
ECHO FILER SUB C > SUBDIR\C.TXT
CD \
ECHO.
ECHO Angelegt/geprueft:
ECHO F:\TFILE\A.TXT
ECHO F:\TFILE\B.TXT
ECHO F:\TFILE\KEEP.TXT
ECHO F:\TFILE\SUBDIR\C.TXT
ECHO F:\TFILE\PRE
ECHO F:\TFILE\POST
ECHO.
PAUSE
CLS
ECHO === P01: Alte Vergleichsausgaben loeschen ===
DEL F:\TFILE\PRE\*.OUT
DEL F:\TFILE\POST\*.OUT
ECHO.
PAUSE
CLS
ECHO === P02: Attribute normalisieren ===
NPUBLIC\FLAG F:\TFILE\A.TXT N
NPUBLIC\FLAG F:\TFILE\B.TXT N
NPUBLIC\FLAG F:\TFILE\KEEP.TXT N
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT N
ECHO.
PAUSE
CLS
ECHO === P03: Referenz-Attribute vor FILER setzen ===
ECHO A.TXT: +H
ECHO B.TXT: +RO
ECHO KEEP.TXT: +A
NPUBLIC\FLAG F:\TFILE\A.TXT +H
NPUBLIC\FLAG F:\TFILE\B.TXT +RO
NPUBLIC\FLAG F:\TFILE\KEEP.TXT +A
ECHO.
PAUSE
CLS
ECHO === P04: PRE-Ausgaben erzeugen ===
ECHO Schreibe PRE\FLAGA.OUT
NPUBLIC\FLAG F:\TFILE\A.TXT > F:\TFILE\PRE\FLAGA.OUT
ECHO Schreibe PRE\FLAGB.OUT
NPUBLIC\FLAG F:\TFILE\B.TXT > F:\TFILE\PRE\FLAGB.OUT
ECHO Schreibe PRE\FLAGK.OUT
NPUBLIC\FLAG F:\TFILE\KEEP.TXT > F:\TFILE\PRE\FLAGK.OUT
ECHO Schreibe PRE\NDIR.OUT
NPUBLIC\NDIR F:\TFILE > F:\TFILE\PRE\NDIR.OUT
ECHO Schreibe PRE\DATES.OUT
NPUBLIC\NDIR F:\TFILE /DATES > F:\TFILE\PRE\DATES.OUT
ECHO Schreibe PRE\RIGHTS.OUT
NPUBLIC\NDIR F:\TFILE /RIGHTS > F:\TFILE\PRE\RIGHTS.OUT
ECHO Schreibe PRE\TRUST.OUT
NPUBLIC\RIGHTS F:\TFILE > F:\TFILE\PRE\TRUST.OUT
ECHO Schreibe PRE\TRUSTA.OUT
NPUBLIC\RIGHTS F:\TFILE\A.TXT > F:\TFILE\PRE\TRUSTA.OUT
ECHO.
PAUSE
CLS
ECHO === P05: PRE-Ausgaben kurz anzeigen ===
ECHO --- PRE FLAG A ---
TYPE F:\TFILE\PRE\FLAGA.OUT
ECHO.
PAUSE
CLS
ECHO === P06: PRE FLAG B ===
TYPE F:\TFILE\PRE\FLAGB.OUT
ECHO.
PAUSE
CLS
ECHO === P07: PRE FLAG KEEP ===
TYPE F:\TFILE\PRE\FLAGK.OUT
ECHO.
PAUSE
CLS
ECHO === P08: PRE NDIR ===
TYPE F:\TFILE\PRE\NDIR.OUT
ECHO.
PAUSE
CLS
ECHO === P09: PRE DATES ===
TYPE F:\TFILE\PRE\DATES.OUT
ECHO.
PAUSE
CLS
ECHO === FILPREN fertig ===
ECHO.
ECHO Jetzt manuell starten:
ECHO.
ECHO NPUBLIC\FILER
ECHO.
ECHO In FILER:
ECHO - zu F:\TFILE wechseln
ECHO - A.TXT, B.TXT, KEEP.TXT, SUBDIR ansehen
ECHO - Attribute/Informationen aendern, wenn moeglich
ECHO - FILER verlassen
ECHO.
ECHO Danach ausfuehren:
ECHO.
ECHO FILPOSTN.BAT
ECHO.

33
test/filer/FILTSTM.TST Normal file
View File

@@ -0,0 +1,33 @@
# FILTSTM.TST
# MARS/dosutils FILER regression notes/spec.
#
# Test flow:
#
# 1. `FILPREN.BAT`
# - creates F:\TFILE
# - writes baseline output files to F:\TFILE\PRE\*.OUT
#
# 2. manual `NPUBLIC\FILER`
# - inspect/change files in F:\TFILE
#
# 3. `FILPOSTN.BAT`
# - writes post-FILER output files to F:\TFILE\POST\*.OUT
# - compares PRE vs POST with FC
#
# 4. optional `FILCMPN.BAT`
# - repeats only the comparisons
#
#
MANUAL FILER CHANGE SET:
Recommended controlled changes:
A.TXT toggle Hidden
B.TXT toggle Read Only
KEEP.TXT toggle Archive Needed
For a readback-only pass, inspect the same entries but do not save changes.
FILPOSTN.BAT should then show no FC differences.
Expected:
# - FC reports no differences if FILER was only inspected.
# - FC reports intentional differences if attributes/metadata were changed.

211
test/filer/FILTSTN.BAT Normal file
View File

@@ -0,0 +1,211 @@
@ECHO OFF
REM FILTSTN.BAT
REM Novell-only FILER baseline / manual GUI test prep for MARS NWE.
REM
REM NPUBLIC = originale Novell Tools
REM PUBLIC = MARS/dosutils Tools
REM
REM Testordner:
REM F:\TFILE
REM
REM Ziel:
REM - Testdaten fuer NPUBLIC\FILER vorbereiten
REM - Attribute/Rechte/Datum-Readback vor und nach FILER pruefen
REM - Serverlog fuer NCP22/25 Set Directory/File Information,
REM NCP22/1E Info-Readback, NCP23/F3/F4 und NCP87 beobachten
REM
REM FILER ist ein DOS-GUI-Tool. Der eigentliche FILER-Test ist manuell.
CLS
ECHO === FILTSTN: Novell FILER Manual Baseline ===
ECHO.
ECHO Dieses Script bereitet F:\TFILE vor und startet danach NPUBLIC\FILER.
ECHO.
ECHO In FILER dann manuell:
ECHO 1. Zu F:\TFILE wechseln
ECHO 2. File/Directory Information fuer A.TXT, B.TXT, SUBDIR ansehen
ECHO 3. Attribute/Informationen aendern, wenn moeglich
ECHO 4. FILER verlassen
ECHO 5. Danach Readback-Sektionen im Script weiterlaufen lassen
ECHO.
PAUSE
CLS
ECHO === F00: Testordner vorbereiten ===
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST TFILE\NUL DELTREE /Y TFILE\*.*
IF NOT EXIST TFILE MD TFILE
CD TFILE
ECHO FILER TEST A > A.TXT
ECHO FILER TEST B > B.TXT
ECHO FILER KEEP > KEEP.TXT
IF NOT EXIST SUBDIR MD SUBDIR
ECHO FILER SUB C > SUBDIR\C.TXT
CD \
ECHO.
ECHO Angelegt/geprueft:
ECHO F:\TFILE\A.TXT
ECHO F:\TFILE\B.TXT
ECHO F:\TFILE\KEEP.TXT
ECHO F:\TFILE\SUBDIR\C.TXT
ECHO.
PAUSE
CLS
ECHO === F01: Attribute normalisieren ===
NPUBLIC\FLAG F:\TFILE\A.TXT N
NPUBLIC\FLAG F:\TFILE\B.TXT N
NPUBLIC\FLAG F:\TFILE\KEEP.TXT N
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT N
ECHO.
PAUSE
CLS
ECHO === F02: Ausgangszustand FLAG ===
NPUBLIC\FLAG F:\TFILE\A.TXT
ECHO.
NPUBLIC\FLAG F:\TFILE\B.TXT
ECHO.
NPUBLIC\FLAG F:\TFILE\KEEP.TXT
ECHO.
PAUSE
CLS
ECHO === F03: Ausgangszustand NDIR ===
NPUBLIC\NDIR F:\TFILE
ECHO.
PAUSE
CLS
ECHO === F04: Ausgangszustand NDIR /DATES ===
NPUBLIC\NDIR F:\TFILE /DATES
ECHO.
PAUSE
CLS
ECHO === F05: Ausgangszustand NDIR /RIGHTS ===
NPUBLIC\NDIR F:\TFILE /RIGHTS
ECHO.
PAUSE
CLS
ECHO === F06: Ausgangszustand RIGHTS ===
NPUBLIC\RIGHTS F:\TFILE
ECHO.
NPUBLIC\RIGHTS F:\TFILE\A.TXT
ECHO.
PAUSE
CLS
ECHO === F07: Referenz-Attribute vor FILER setzen ===
ECHO A.TXT: +H
ECHO B.TXT: +RO
ECHO KEEP.TXT: +A
NPUBLIC\FLAG F:\TFILE\A.TXT +H
NPUBLIC\FLAG F:\TFILE\B.TXT +RO
NPUBLIC\FLAG F:\TFILE\KEEP.TXT +A
ECHO.
PAUSE
CLS
ECHO === F08: Readback nach FLAG vor FILER ===
NPUBLIC\FLAG F:\TFILE\A.TXT
ECHO.
NPUBLIC\FLAG F:\TFILE\B.TXT
ECHO.
NPUBLIC\FLAG F:\TFILE\KEEP.TXT
ECHO.
PAUSE
CLS
ECHO === F09: NDIR /DATES nach FLAG vor FILER ===
NPUBLIC\NDIR F:\TFILE /DATES
ECHO.
PAUSE
CLS
ECHO === F10: Jetzt NPUBLIC\FILER manuell testen ===
ECHO.
ECHO Hinweise fuer FILER:
ECHO - Directory auf F:\TFILE setzen
ECHO - A.TXT, B.TXT, KEEP.TXT, SUBDIR ansehen
ECHO - File/Directory Information anzeigen
ECHO - Wenn moeglich Attribute aendern:
ECHO A.TXT Hidden toggeln
ECHO B.TXT Read Only toggeln
ECHO KEEP.TXT Archive Needed toggeln
ECHO - Optional Directory Information von SUBDIR ansehen
ECHO - Danach FILER beenden
ECHO.
PAUSE
NPUBLIC\FILER
ECHO.
ECHO FILER beendet.
PAUSE
CLS
ECHO === F11: Readback FLAG nach FILER ===
NPUBLIC\FLAG F:\TFILE\A.TXT
ECHO.
NPUBLIC\FLAG F:\TFILE\B.TXT
ECHO.
NPUBLIC\FLAG F:\TFILE\KEEP.TXT
ECHO.
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT
ECHO.
PAUSE
CLS
ECHO === F12: Readback NDIR nach FILER ===
NPUBLIC\NDIR F:\TFILE
ECHO.
PAUSE
CLS
ECHO === F13: Readback NDIR /DATES nach FILER ===
NPUBLIC\NDIR F:\TFILE /DATES
ECHO.
PAUSE
CLS
ECHO === F14: Readback NDIR /RIGHTS nach FILER ===
NPUBLIC\NDIR F:\TFILE /RIGHTS
ECHO.
PAUSE
CLS
ECHO === F15: Readback RIGHTS nach FILER ===
NPUBLIC\RIGHTS F:\TFILE
ECHO.
NPUBLIC\RIGHTS F:\TFILE\A.TXT
ECHO.
PAUSE
CLS
ECHO === F16: Cleanup Attribute ===
NPUBLIC\FLAG F:\TFILE\A.TXT N
NPUBLIC\FLAG F:\TFILE\B.TXT N
NPUBLIC\FLAG F:\TFILE\KEEP.TXT N
NPUBLIC\FLAG F:\TFILE\SUBDIR\C.TXT N
ECHO.
PAUSE
CLS
ECHO === F17: Final NDIR ===
NPUBLIC\NDIR F:\TFILE
ECHO.
PAUSE
CLS
ECHO === FILTSTN fertig ===
ECHO.
ECHO Im Serverlog pruefen:
ECHO FILER Info-Readback
ECHO NCP22/25 change bits bei Aenderungen
ECHO NCP22/25 Set Directory/File Information
ECHO xattr-Metadaten falls FILER passende Felder setzt
ECHO keine unerwarteten Completion Codes
ECHO.

172
test/filer/README.md Normal file
View File

@@ -0,0 +1,172 @@
# FILER tests
Manual Novell FILER baseline with pre/post output comparison.
## Files
| File | Purpose |
| --- | --- |
| `FILPREN.BAT` | Pre-FILER setup and baseline output capture. |
| `FILPOSTN.BAT` | Post-FILER output capture, compare, and cleanup. |
| `FILCMPN.BAT` | Repeat PRE/POST comparisons only. |
| `FILTSTM.TST` | MARS/dosutils regression notes/spec for the scenario. |
## Test flow
```text
FILPREN.BAT
NPUBLIC\FILER
FILPOSTN.BAT
```
Optional repeat compare:
```text
FILCMPN.BAT
```
## Output comparison
`FILPREN.BAT` writes baseline files to:
```text
F:\TFILE\PRE\*.OUT
```
`FILPOSTN.BAT` writes post-FILER files to:
```text
F:\TFILE\POST\*.OUT
```
Then `FC` compares:
```text
FLAGA.OUT
FLAGB.OUT
FLAGK.OUT
NDIR.OUT
DATES.OUT
RIGHTS.OUT
TRUST.OUT
TRUSTA.OUT
```
No differences are expected if FILER was only used for inspection.
Intentional differences are expected if attributes or metadata were changed in FILER.
## Manual changes to perform in FILER
The FILER screen starts at `MARS\SYS:NPUBLIC`. Use the menu to navigate and make a small, controlled change set.
### 1. Go to the test directory
Use:
```text
Select Current Directory
```
Change to:
```text
F:\TFILE
```
or the equivalent NetWare path:
```text
MARS\SYS:TFILE
```
Then use:
```text
Directory Contents
```
You should see:
```text
A.TXT
B.TXT
KEEP.TXT
SUBDIR
```
### 2. Inspect file and directory information
Open/inspect the information screen for:
```text
A.TXT
B.TXT
KEEP.TXT
SUBDIR
SUBDIR\C.TXT
```
Just opening these screens should exercise the server info-readback paths without changing anything.
### 3. Make one or more intentional attribute changes
Use FILER to change only a few obvious attributes, so the `PRE` versus `POST` compare is easy to understand.
Suggested changes:
```text
A.TXT Hidden: toggle
B.TXT Read Only: toggle
KEEP.TXT Archive Needed: toggle
```
If FILER allows editing directory attributes, also inspect `SUBDIR`, but keep directory changes minimal.
### 4. Optional no-change pass
For a pure readback test, do not change anything in FILER. Then `FILPOSTN.BAT` should show no `FC` differences except harmless output/date formatting differences.
### 5. Expected compare results
After leaving FILER, run:
```text
FILPOSTN.BAT
```
Expected results:
```text
No FILER changes:
FC should report no differences for the PRE/POST files.
Changed A.TXT Hidden:
FLAGA.OUT, NDIR.OUT, DATES.OUT may differ.
Changed B.TXT Read Only:
FLAGB.OUT, NDIR.OUT, DATES.OUT may differ.
Changed KEEP.TXT Archive Needed:
FLAGK.OUT, NDIR.OUT, DATES.OUT may differ.
Changed rights/trustees:
RIGHTS.OUT and/or TRUST*.OUT may differ.
```
The important part is that the differences match the intentional FILER changes and the server log shows no unexpected completion codes.
## Server log focus
Look for:
```text
NCP22/25
Set Directory/File Information
change bits
nwp_stat
nw_optain_file_dir_info
nw_search_file_dir
build_d_i
```

168
test/flag/FLGTSTA.BAT Normal file
View File

@@ -0,0 +1,168 @@
@ECHO OFF
REM FLGTSTA.BAT
REM Automated Novell FLAG baseline for MARS NWE.
REM
REM Run while already logged in and with F: mapped to SYS.
REM
REM Test tree:
REM F:\FLGTEST
REM Result tree:
REM F:\FLGCMP
REM
REM Scope:
REM FLAG on files only.
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST FLGTEST\NUL DELTREE /Y FLGTEST\*.*
IF EXIST FLGCMP\NUL DELTREE /Y FLGCMP\*.*
IF NOT EXIST FLGTEST\NUL MD FLGTEST
IF NOT EXIST FLGCMP\NUL MD FLGCMP
IF NOT EXIST FLGCMP\OUT\NUL MD FLGCMP\OUT
IF EXIST F:\FLGCMP\RUN.LOG DEL F:\FLGCMP\RUN.LOG
IF EXIST F:\FLGCMP\SUMMARY.TXT DEL F:\FLGCMP\SUMMARY.TXT
IF EXIST F:\FLGCMP\FLGTSTA.ZIP DEL F:\FLGCMP\FLGTSTA.ZIP
IF EXIST F:\FLGCMP\ZIP.LOG DEL F:\FLGCMP\ZIP.LOG
IF EXIST F:\FLGCMP\OUT\F01_BASE.OUT DEL F:\FLGCMP\OUT\F01_BASE.OUT
IF EXIST F:\FLGCMP\OUT\F02_FLAGN.OUT DEL F:\FLGCMP\OUT\F02_FLAGN.OUT
IF EXIST F:\FLGCMP\OUT\F03_SET1.OUT DEL F:\FLGCMP\OUT\F03_SET1.OUT
IF EXIST F:\FLGCMP\OUT\F04_NDIR1.OUT DEL F:\FLGCMP\OUT\F04_NDIR1.OUT
IF EXIST F:\FLGCMP\OUT\F05_FILTER.OUT DEL F:\FLGCMP\OUT\F05_FILTER.OUT
IF EXIST F:\FLGCMP\OUT\F06_CLEAR.OUT DEL F:\FLGCMP\OUT\F06_CLEAR.OUT
IF EXIST F:\FLGCMP\OUT\F07_COMBO.OUT DEL F:\FLGCMP\OUT\F07_COMBO.OUT
IF EXIST F:\FLGCMP\OUT\F08_COPYREN.OUT DEL F:\FLGCMP\OUT\F08_COPYREN.OUT
IF EXIST F:\FLGCMP\OUT\F09_FINAL.OUT DEL F:\FLGCMP\OUT\F09_FINAL.OUT
REM Clean test files.
IF EXIST F:\FLGTEST\ALPHA.TXT DEL F:\FLGTEST\ALPHA.TXT
IF EXIST F:\FLGTEST\BETA.TXT DEL F:\FLGTEST\BETA.TXT
IF EXIST F:\FLGTEST\GAMMA.DAT DEL F:\FLGTEST\GAMMA.DAT
IF EXIST F:\FLGTEST\DELTA.BIN DEL F:\FLGTEST\DELTA.BIN
IF EXIST F:\FLGTEST\EPS.TXT DEL F:\FLGTEST\EPS.TXT
IF EXIST F:\FLGTEST\RENAMED.TXT DEL F:\FLGTEST\RENAMED.TXT
IF EXIST F:\FLGTEST\COPY.TXT DEL F:\FLGTEST\COPY.TXT
ECHO FLGTSTA FLAG baseline > F:\FLGCMP\RUN.LOG
ECHO Run while already logged in. >> F:\FLGCMP\RUN.LOG
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\FLGCMP\RUN.LOG
ECHO. >> F:\FLGCMP\RUN.LOG
ECHO ALPHA FILE > F:\FLGTEST\ALPHA.TXT
ECHO BETA FILE > F:\FLGTEST\BETA.TXT
ECHO GAMMA FILE > F:\FLGTEST\GAMMA.DAT
ECHO DELTA FILE > F:\FLGTEST\DELTA.BIN
ECHO EPS FILE > F:\FLGTEST\EPS.TXT
ECHO === F01 base FLAG/NDIR readback === >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT N >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT N >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN N >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT N >> F:\FLGCMP\RUN.LOG
NPUBLIC\NDIR F:\FLGTEST > F:\FLGCMP\OUT\F01_BASE.OUT
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\OUT\F01_BASE.OUT
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT >> F:\FLGCMP\OUT\F01_BASE.OUT
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT >> F:\FLGCMP\OUT\F01_BASE.OUT
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN >> F:\FLGCMP\OUT\F01_BASE.OUT
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT >> F:\FLGCMP\OUT\F01_BASE.OUT
ECHO === F02 explicit FLAG N cleanup === >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N > F:\FLGCMP\OUT\F02_FLAGN.OUT
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT N >> F:\FLGCMP\OUT\F02_FLAGN.OUT
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT N >> F:\FLGCMP\OUT\F02_FLAGN.OUT
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN N >> F:\FLGCMP\OUT\F02_FLAGN.OUT
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT N >> F:\FLGCMP\OUT\F02_FLAGN.OUT
ECHO === F03 set individual flags === >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H > F:\FLGCMP\OUT\F03_SET1.OUT
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT +RO >> F:\FLGCMP\OUT\F03_SET1.OUT
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT +A >> F:\FLGCMP\OUT\F03_SET1.OUT
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN +Sy >> F:\FLGCMP\OUT\F03_SET1.OUT
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT +DI +RI >> F:\FLGCMP\OUT\F03_SET1.OUT
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\OUT\F03_SET1.OUT
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT >> F:\FLGCMP\OUT\F03_SET1.OUT
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT >> F:\FLGCMP\OUT\F03_SET1.OUT
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN >> F:\FLGCMP\OUT\F03_SET1.OUT
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT >> F:\FLGCMP\OUT\F03_SET1.OUT
ECHO === F04 NDIR after flags === >> F:\FLGCMP\RUN.LOG
NPUBLIC\NDIR F:\FLGTEST > F:\FLGCMP\OUT\F04_NDIR1.OUT
NPUBLIC\NDIR F:\FLGTEST /DATES >> F:\FLGCMP\OUT\F04_NDIR1.OUT
NPUBLIC\NDIR F:\FLGTEST /RIGHTS >> F:\FLGCMP\OUT\F04_NDIR1.OUT
ECHO === F05 NDIR filters for flags === >> F:\FLGCMP\RUN.LOG
ECHO --- /H --- > F:\FLGCMP\OUT\F05_FILTER.OUT
NPUBLIC\NDIR F:\FLGTEST /H >> F:\FLGCMP\OUT\F05_FILTER.OUT
ECHO --- /RO --- >> F:\FLGCMP\OUT\F05_FILTER.OUT
NPUBLIC\NDIR F:\FLGTEST /RO >> F:\FLGCMP\OUT\F05_FILTER.OUT
ECHO --- /A --- >> F:\FLGCMP\OUT\F05_FILTER.OUT
NPUBLIC\NDIR F:\FLGTEST /A >> F:\FLGCMP\OUT\F05_FILTER.OUT
ECHO --- /SY --- >> F:\FLGCMP\OUT\F05_FILTER.OUT
NPUBLIC\NDIR F:\FLGTEST /SY >> F:\FLGCMP\OUT\F05_FILTER.OUT
ECHO --- /NOT H --- >> F:\FLGCMP\OUT\F05_FILTER.OUT
NPUBLIC\NDIR F:\FLGTEST /NOT H >> F:\FLGCMP\OUT\F05_FILTER.OUT
ECHO --- /NOT RO --- >> F:\FLGCMP\OUT\F05_FILTER.OUT
NPUBLIC\NDIR F:\FLGTEST /NOT RO >> F:\FLGCMP\OUT\F05_FILTER.OUT
ECHO === F06 clear individual flags === >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT -H > F:\FLGCMP\OUT\F06_CLEAR.OUT
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT -RO >> F:\FLGCMP\OUT\F06_CLEAR.OUT
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT -A >> F:\FLGCMP\OUT\F06_CLEAR.OUT
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN -Sy >> F:\FLGCMP\OUT\F06_CLEAR.OUT
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT -DI -RI >> F:\FLGCMP\OUT\F06_CLEAR.OUT
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\OUT\F06_CLEAR.OUT
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT >> F:\FLGCMP\OUT\F06_CLEAR.OUT
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT >> F:\FLGCMP\OUT\F06_CLEAR.OUT
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN >> F:\FLGCMP\OUT\F06_CLEAR.OUT
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT >> F:\FLGCMP\OUT\F06_CLEAR.OUT
ECHO === F07 combined flags and FLAG N reset === >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT +H +A +Sy > F:\FLGCMP\OUT\F07_COMBO.OUT
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT +RO +DI +RI >> F:\FLGCMP\OUT\F07_COMBO.OUT
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\OUT\F07_COMBO.OUT
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT >> F:\FLGCMP\OUT\F07_COMBO.OUT
NPUBLIC\NDIR F:\FLGTEST >> F:\FLGCMP\OUT\F07_COMBO.OUT
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N >> F:\FLGCMP\OUT\F07_COMBO.OUT
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT N >> F:\FLGCMP\OUT\F07_COMBO.OUT
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT >> F:\FLGCMP\OUT\F07_COMBO.OUT
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT >> F:\FLGCMP\OUT\F07_COMBO.OUT
ECHO === F08 copy/rename smoke === >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT N >> F:\FLGCMP\RUN.LOG
COPY F:\FLGTEST\EPS.TXT F:\FLGTEST\COPY.TXT > F:\FLGCMP\OUT\F08_COPYREN.OUT
REN F:\FLGTEST\COPY.TXT RENAMED.TXT >> F:\FLGCMP\OUT\F08_COPYREN.OUT
IF EXIST F:\FLGTEST\RENAMED.TXT ECHO OK RENAMED.TXT exists >> F:\FLGCMP\OUT\F08_COPYREN.OUT
IF NOT EXIST F:\FLGTEST\RENAMED.TXT ECHO FAIL RENAMED.TXT missing >> F:\FLGCMP\OUT\F08_COPYREN.OUT
NPUBLIC\FLAG F:\FLGTEST\RENAMED.TXT >> F:\FLGCMP\OUT\F08_COPYREN.OUT
NPUBLIC\NDIR F:\FLGTEST >> F:\FLGCMP\OUT\F08_COPYREN.OUT
ECHO === F09 final file cleanup/readback === >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\ALPHA.TXT N >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\BETA.TXT N >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\GAMMA.DAT N >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\DELTA.BIN N >> F:\FLGCMP\RUN.LOG
NPUBLIC\FLAG F:\FLGTEST\EPS.TXT N >> F:\FLGCMP\RUN.LOG
IF EXIST F:\FLGTEST\RENAMED.TXT NPUBLIC\FLAG F:\FLGTEST\RENAMED.TXT N >> F:\FLGCMP\RUN.LOG
NPUBLIC\NDIR F:\FLGTEST > F:\FLGCMP\OUT\F09_FINAL.OUT
ECHO === SUMMARY === > F:\FLGCMP\SUMMARY.TXT
ECHO FLGTSTA FLAG baseline finished. >> F:\FLGCMP\SUMMARY.TXT
ECHO. >> F:\FLGCMP\SUMMARY.TXT
ECHO Expected: >> F:\FLGCMP\SUMMARY.TXT
ECHO - F03 shows H on ALPHA, RO on BETA, A on GAMMA, Sy on DELTA. >> F:\FLGCMP\SUMMARY.TXT
ECHO - F05 filters isolate H, RO, A, Sy and NOT variants. >> F:\FLGCMP\SUMMARY.TXT
ECHO - F06 clears the individual flags. >> F:\FLGCMP\SUMMARY.TXT
ECHO - F07 combined flags set and reset with N. >> F:\FLGCMP\SUMMARY.TXT
ECHO - F09 final readback shows normal usable files. >> F:\FLGCMP\SUMMARY.TXT
ECHO Optional pack results with FLGTZIP.BAT. >> F:\FLGCMP\SUMMARY.TXT
ECHO.
ECHO FLGTSTA fertig.
ECHO Ergebnisse liegen in F:\FLGCMP
ECHO Optional: FLGTZIP ausfuehren.
ECHO.

26
test/flag/FLGTZIP.BAT Normal file
View File

@@ -0,0 +1,26 @@
@ECHO OFF
REM FLGTZIP.BAT
REM Optional packer for FLGTSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \FLGCMP
IF EXIST FLGTSTA.ZIP DEL FLGTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating FLGTSTA.ZIP > ZIP.LOG
ZIP -r FLGTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \FLGTEST\NUL DELTREE /Y \FLGTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\FLGCMP\FLGTSTA.ZIP
ECHO F:\FLGCMP\ZIP.LOG
ECHO.

35
test/flag/README.md Normal file
View File

@@ -0,0 +1,35 @@
# FLAG automated test
Novell FLAG baseline using `NPUBLIC\FLAG`.
## Run
Run while already logged in and with `F:` mapped to `SYS`.
```text
FLGTSTA
FLGTZIP
```
Result:
```text
F:\FLGCMP\FLGTSTA.ZIP
```
Linux package with server log:
```sh
sudo ./mars_packtest_v3.sh flgtsta 5 mario
```
## Coverage
- file flag display
- `FLAG ... N`
- set/clear `H`, `RO`, `A`, `Sy`, `DI`, `RI`
- combined flags
- NDIR readback
- NDIR filters `/H`, `/RO`, `/A`, `/SY`, `/NOT H`, `/NOT RO`
- copy/rename smoke check
- final cleanup

122
test/flagdir/FDGTSTA.BAT Normal file
View File

@@ -0,0 +1,122 @@
@ECHO OFF
REM FDGTSTA.BAT
REM Automated Novell FLAGDIR baseline for MARS NWE.
REM
REM Run while already logged in and with F: mapped to SYS.
REM
REM Test tree:
REM F:\FDGTEST
REM Result tree:
REM F:\FDGCMP
REM
REM Scope:
REM FLAGDIR on directories only.
REM
REM FLAGDIR uses long option names:
REM Normal
REM System
REM Hidden
REM Deleteinhibit
REM Purge
REM Renameinhibit
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST FDGTEST\NUL DELTREE /Y FDGTEST\*.*
IF EXIST FDGCMP\NUL DELTREE /Y FDGCMP\*.*
IF NOT EXIST FDGTEST\NUL MD FDGTEST
IF NOT EXIST FDGTEST\DIRA\NUL MD FDGTEST\DIRA
IF NOT EXIST FDGTEST\DIRB\NUL MD FDGTEST\DIRB
IF NOT EXIST FDGTEST\DIRC\NUL MD FDGTEST\DIRC
IF NOT EXIST FDGTEST\DIRB\SUB\NUL MD FDGTEST\DIRB\SUB
IF NOT EXIST FDGCMP\NUL MD FDGCMP
IF NOT EXIST FDGCMP\OUT\NUL MD FDGCMP\OUT
IF EXIST F:\FDGCMP\RUN.LOG DEL F:\FDGCMP\RUN.LOG
IF EXIST F:\FDGCMP\SUMMARY.TXT DEL F:\FDGCMP\SUMMARY.TXT
IF EXIST F:\FDGCMP\FDGTSTA.ZIP DEL F:\FDGCMP\FDGTSTA.ZIP
IF EXIST F:\FDGCMP\ZIP.LOG DEL F:\FDGCMP\ZIP.LOG
IF EXIST F:\FDGCMP\OUT\D01_BASE.OUT DEL F:\FDGCMP\OUT\D01_BASE.OUT
IF EXIST F:\FDGCMP\OUT\D02_SET.OUT DEL F:\FDGCMP\OUT\D02_SET.OUT
IF EXIST F:\FDGCMP\OUT\D03_NDIR.OUT DEL F:\FDGCMP\OUT\D03_NDIR.OUT
IF EXIST F:\FDGCMP\OUT\D04_FILTER.OUT DEL F:\FDGCMP\OUT\D04_FILTER.OUT
IF EXIST F:\FDGCMP\OUT\D05_NORMAL.OUT DEL F:\FDGCMP\OUT\D05_NORMAL.OUT
IF EXIST F:\FDGCMP\OUT\D06_FINAL.OUT DEL F:\FDGCMP\OUT\D06_FINAL.OUT
IF EXIST F:\FDGTEST\DIRB\SUB\SUB.TXT DEL F:\FDGTEST\DIRB\SUB\SUB.TXT
ECHO SUB FILE > F:\FDGTEST\DIRB\SUB\SUB.TXT
ECHO FDGTSTA FLAGDIR baseline > F:\FDGCMP\RUN.LOG
ECHO Run while already logged in. >> F:\FDGCMP\RUN.LOG
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\FDGCMP\RUN.LOG
ECHO. >> F:\FDGCMP\RUN.LOG
ECHO === D01 FLAGDIR base / reset to Normal === >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB Normal >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Normal >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Normal >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA > F:\FDGCMP\OUT\D01_BASE.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB >> F:\FDGCMP\OUT\D01_BASE.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC >> F:\FDGCMP\OUT\D01_BASE.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> F:\FDGCMP\OUT\D01_BASE.OUT
ECHO === D02 FLAGDIR set directory flags === >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Hidden > F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB System >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Purge >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Deleteinhibit Renameinhibit >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC >> F:\FDGCMP\OUT\D02_SET.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> F:\FDGCMP\OUT\D02_SET.OUT
ECHO === D03 NDIR directory readback === >> F:\FDGCMP\RUN.LOG
NPUBLIC\NDIR F:\FDGTEST > F:\FDGCMP\OUT\D03_NDIR.OUT
NPUBLIC\NDIR F:\FDGTEST /DO >> F:\FDGCMP\OUT\D03_NDIR.OUT
NPUBLIC\NDIR F:\FDGTEST /RIGHTS >> F:\FDGCMP\OUT\D03_NDIR.OUT
ECHO === D04 NDIR filters for directory flags === >> F:\FDGCMP\RUN.LOG
ECHO --- /H --- > F:\FDGCMP\OUT\D04_FILTER.OUT
NPUBLIC\NDIR F:\FDGTEST /H >> F:\FDGCMP\OUT\D04_FILTER.OUT
ECHO --- /SY --- >> F:\FDGCMP\OUT\D04_FILTER.OUT
NPUBLIC\NDIR F:\FDGTEST /SY >> F:\FDGCMP\OUT\D04_FILTER.OUT
ECHO --- /NOT H --- >> F:\FDGCMP\OUT\D04_FILTER.OUT
NPUBLIC\NDIR F:\FDGTEST /NOT H >> F:\FDGCMP\OUT\D04_FILTER.OUT
ECHO === D05 FLAGDIR Normal reset === >> F:\FDGCMP\RUN.LOG
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA Normal > F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB Normal >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC Normal >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB Normal >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRA >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRC >> F:\FDGCMP\OUT\D05_NORMAL.OUT
NPUBLIC\FLAGDIR F:\FDGTEST\DIRB\SUB >> F:\FDGCMP\OUT\D05_NORMAL.OUT
ECHO === D06 final NDIR readback === >> F:\FDGCMP\RUN.LOG
NPUBLIC\NDIR F:\FDGTEST > F:\FDGCMP\OUT\D06_FINAL.OUT
NPUBLIC\NDIR F:\FDGTEST /DO >> F:\FDGCMP\OUT\D06_FINAL.OUT
NPUBLIC\NDIR F:\FDGTEST /RIGHTS >> F:\FDGCMP\OUT\D06_FINAL.OUT
ECHO === SUMMARY === > F:\FDGCMP\SUMMARY.TXT
ECHO FDGTSTA FLAGDIR baseline finished. >> F:\FDGCMP\SUMMARY.TXT
ECHO. >> F:\FDGCMP\SUMMARY.TXT
ECHO Expected: >> F:\FDGCMP\SUMMARY.TXT
ECHO - D01 displays base directory flags after Normal reset. >> F:\FDGCMP\SUMMARY.TXT
ECHO - D02 sets Hidden, System, Purge, Deleteinhibit, Renameinhibit. >> F:\FDGCMP\SUMMARY.TXT
ECHO - D03 shows NDIR directory readback. >> F:\FDGCMP\SUMMARY.TXT
ECHO - D04 checks NDIR filters for visible directory flags. >> F:\FDGCMP\SUMMARY.TXT
ECHO - D05 resets all directory flags to Normal. >> F:\FDGCMP\SUMMARY.TXT
ECHO - D06 final readback should show normal directories. >> F:\FDGCMP\SUMMARY.TXT
ECHO Optional pack results with FDGTZIP.BAT. >> F:\FDGCMP\SUMMARY.TXT
ECHO.
ECHO FDGTSTA fertig.
ECHO Ergebnisse liegen in F:\FDGCMP
ECHO Optional: FDGTZIP ausfuehren.
ECHO.

26
test/flagdir/FDGTZIP.BAT Normal file
View File

@@ -0,0 +1,26 @@
@ECHO OFF
REM FDGTZIP.BAT
REM Optional packer for FDGTSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \FDGCMP
IF EXIST FDGTSTA.ZIP DEL FDGTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating FDGTSTA.ZIP > ZIP.LOG
ZIP -r FDGTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \FDGTEST\NUL DELTREE /Y \FDGTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\FDGCMP\FDGTSTA.ZIP
ECHO F:\FDGCMP\ZIP.LOG
ECHO.

47
test/flagdir/README.md Normal file
View File

@@ -0,0 +1,47 @@
# FLAGDIR automated test
Novell FLAGDIR baseline using `NPUBLIC\FLAGDIR`.
`FLAGDIR` uses long option names, not the short FLAG names.
Supported options shown by the tool:
```text
Normal
System
Hidden
Deleteinhibit
Purge
Renameinhibit
```
## Run
Run while already logged in and with `F:` mapped to `SYS`.
```text
FDGTSTA
FDGTZIP
```
Result:
```text
F:\FDGCMP\FDGTSTA.ZIP
```
Linux package with server log:
```sh
sudo ./mars_packtest_v3.sh fdgtsta 5 mario
```
## Coverage
- directory flag display
- `Normal` reset
- set `Hidden`, `System`, `Purge`
- set `Deleteinhibit` and `Renameinhibit`
- NDIR directory readback
- NDIR filters for visible flags
- final reset/readback

94
test/grant/GRNTSTA.BAT Normal file
View File

@@ -0,0 +1,94 @@
@ECHO OFF
REM GRNTSTA.BAT
REM Automated GRANT baseline test for MARS NWE.
REM
REM Run as SUPERVISOR or a user with Access Control on F:\GRNTEST.
REM Uses \NPUBLIC\GRANT as Novell baseline for currently implemented tool behavior.
REM
REM Result tree:
REM F:\GRNTCMP
REM Test tree:
REM F:\GRNTEST
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST GRNTEST\NUL DELTREE /Y GRNTEST\*.*
IF EXIST GRNTCMP\NUL DELTREE /Y GRNTCMP\*.*
IF NOT EXIST GRNTEST\NUL MD GRNTEST
IF NOT EXIST GRNTEST\ONE\NUL MD GRNTEST\ONE
IF NOT EXIST GRNTEST\TREE\NUL MD GRNTEST\TREE
IF NOT EXIST GRNTEST\TREE\SUB1\NUL MD GRNTEST\TREE\SUB1
IF NOT EXIST GRNTEST\TREE\SUB2\NUL MD GRNTEST\TREE\SUB2
IF NOT EXIST GRNTCMP\NUL MD GRNTCMP
IF NOT EXIST GRNTCMP\OUT\NUL MD GRNTCMP\OUT
ECHO GRANT ROOT FILE > F:\GRNTEST\ROOT.TXT
ECHO GRANT ONE FILE > F:\GRNTEST\ONE\ONE.TXT
ECHO GRANT TREE FILE > F:\GRNTEST\TREE\TROOT.TXT
ECHO GRANT SUB1 FILE > F:\GRNTEST\TREE\SUB1\SUB1.TXT
ECHO GRANT SUB2 FILE > F:\GRNTEST\TREE\SUB2\SUB2.TXT
ECHO GRNTSTA GRANT baseline test > F:\GRNTCMP\RUN.LOG
ECHO Run this as SUPERVISOR or equivalent. >> F:\GRNTCMP\RUN.LOG
ECHO Captures \NPUBLIC\GRANT output against user MARIO. >> F:\GRNTCMP\RUN.LOG
ECHO. >> F:\GRNTCMP\RUN.LOG
ECHO === D01 usage/help === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT /? > F:\GRNTCMP\OUT\D01_HELP.OUT
ECHO === D02 no arguments === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT > F:\GRNTCMP\OUT\D02_NOARGS.OUT
ECHO === D10 grant R F on directory === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\GRNTEST\ONE TO USER MARIO > F:\GRNTCMP\OUT\D10_DIR_RF.OUT
ECHO === D11 grant R W C E M F A on directory === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT R W C E M F A FOR F:\GRNTEST\ONE TO USER MARIO > F:\GRNTCMP\OUT\D11_DIR_ALL_LETTERS.OUT
ECHO === D12 grant ALL alias on root directory === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT ALL FOR F:\GRNTEST TO USER MARIO > F:\GRNTCMP\OUT\D12_DIR_ALL_ALIAS.OUT
ECHO === D13 grant N / no rights on directory === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT N FOR F:\GRNTEST\ONE TO USER MARIO > F:\GRNTCMP\OUT\D13_DIR_N.OUT
ECHO === D20 grant R F recursively to subdirectories === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\GRNTEST\TREE TO USER MARIO /SUBDIRECTORIES > F:\GRNTCMP\OUT\D20_SUBDIRS_RF.OUT
ECHO === D21 grant R F on one file using /FILES === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\GRNTEST\ONE\ONE.TXT TO USER MARIO /FILES > F:\GRNTCMP\OUT\D21_FILE_RF.OUT
ECHO === D30 relative path from F:\GRNTEST === >> F:\GRNTCMP\RUN.LOG
CD \GRNTEST
\NPUBLIC\GRANT R F FOR ONE TO USER MARIO > F:\GRNTCMP\OUT\D30_REL_DIR_RF.OUT
CD \
ECHO === D90 invalid right === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT BADRIGHT FOR F:\GRNTEST TO USER MARIO > F:\GRNTCMP\OUT\D90_BAD_RIGHT.OUT
ECHO === D91 missing user === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\GRNTEST TO USER NO_SUCH_USER > F:\GRNTCMP\OUT\D91_MISSING_USER.OUT
ECHO === D92 missing path === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\GRNTEST\MISSING TO USER MARIO > F:\GRNTCMP\OUT\D92_MISSING_PATH.OUT
ECHO === D93 bad grammar / missing TO === >> F:\GRNTCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\GRNTEST MARIO > F:\GRNTCMP\OUT\D93_BAD_GRAMMAR.OUT
ECHO === SUMMARY === > F:\GRNTCMP\SUMMARY.TXT
ECHO GRNTSTA GRANT baseline finished. >> F:\GRNTCMP\SUMMARY.TXT
ECHO. >> F:\GRNTCMP\SUMMARY.TXT
ECHO Expected: >> F:\GRNTCMP\SUMMARY.TXT
ECHO - D10-D13 capture directory grant formatting and right aliases. >> F:\GRNTCMP\SUMMARY.TXT
ECHO - D20 captures /SUBDIRECTORIES behavior. >> F:\GRNTCMP\SUMMARY.TXT
ECHO - D21 captures /FILES behavior for a file path. >> F:\GRNTCMP\SUMMARY.TXT
ECHO - D30 captures relative path behavior with absolute \NPUBLIC\GRANT invocation. >> F:\GRNTCMP\SUMMARY.TXT
ECHO - D90-D93 capture error/grammar cases. >> F:\GRNTCMP\SUMMARY.TXT
ECHO. >> F:\GRNTCMP\SUMMARY.TXT
ECHO Optional: GRNTZIP ausfuehren. >> F:\GRNTCMP\SUMMARY.TXT
ECHO GRNTSTA fertig.
ECHO Ergebnisse liegen in F:\GRNTCMP
ECHO Optional: GRNTZIP ausfuehren.

26
test/grant/GRNTZIP.BAT Normal file
View File

@@ -0,0 +1,26 @@
@ECHO OFF
REM GRNTZIP.BAT
REM Optional packer for GRNTSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \GRNTCMP
IF EXIST GRNTSTA.ZIP DEL GRNTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating GRNTSTA.ZIP > ZIP.LOG
ZIP -r GRNTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \GRNTEST\NUL DELTREE /Y \GRNTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\GRNTCMP\GRNTSTA.ZIP
ECHO F:\GRNTCMP\ZIP.LOG
ECHO.

19
test/grant/README.md Normal file
View File

@@ -0,0 +1,19 @@
# GRANT baseline test
Scripts:
- `GRNTSTA.BAT` creates `F:\GRNTEST`, captures Novell `\NPUBLIC\GRANT` output into `F:\GRNTCMP\OUT`, and uses user `MARIO` as trustee target.
- `GRNTZIP.BAT` packages `RUN.LOG`, `SUMMARY.TXT`, and `OUT` as `F:\GRNTCMP\GRNTSTA.ZIP`.
Run as `SUPERVISOR` or an equivalent user with Access Control rights on `F:\GRNTEST`.
Covered cases:
- help and no-argument grammar
- directory grants with explicit rights, `ALL`, and `N`
- `/SUBDIRECTORIES`
- `/FILES` on an explicit file
- relative path invocation from inside the test directory while invoking `\NPUBLIC\GRANT` absolutely
- invalid right, missing user, missing path, and bad grammar
This test is still Novell-baseline-only. Later comparison scripts should run the same command set through `NPUBLIC` and `PUBLIC` with normalized output.

41
test/login/LGNTC.BAT Normal file
View File

@@ -0,0 +1,41 @@
@ECHO OFF
REM LGNTC.BAT
REM Helper for LGNTSTA.BAT. Output survives LOGOUT/LOGIN on local C:.
REM LOGIN/MAP/LOGOUT are copied to C:\LGNTTMP by LGNTSTA.
REM
REM Important: LOGIN can change the current drive/search path. Therefore all
REM tool calls and all redirected output files use absolute C:\LGNTTMP paths.
C:
CD \LGNTTMP
ECHO LGNTC helper started. > C:\LGNTTMP\HELPER.TXT
ECHO This helper intentionally changes login state. >> C:\LGNTTMP\HELPER.TXT
ECHO It can be started from any directory after LGNTSTA part 1. >> C:\LGNTTMP\HELPER.TXT
ECHO After it finishes, login manually as SUPERVISOR with: >> C:\LGNTTMP\HELPER.TXT
ECHO C:\LGNTTMP\LOGIN SUPERVISOR >> C:\LGNTTMP\HELPER.TXT
ECHO Then run F:\LGNTSTA PART2. >> C:\LGNTTMP\HELPER.TXT
ECHO. >> C:\LGNTTMP\HELPER.TXT
ECHO === D01 LOGOUT from initial supervisor session === >> C:\LGNTTMP\HELPER.TXT
C:\LGNTTMP\LOGOUT > C:\LGNTTMP\D01_LOG.OUT
ECHO === D02 LOGIN NOPASSUSER === >> C:\LGNTTMP\HELPER.TXT
C:\LGNTTMP\LOGIN NOPASSUSER > C:\LGNTTMP\D02_LGIN.OUT
ECHO === D03 MAP after NOPASSUSER login === >> C:\LGNTTMP\HELPER.TXT
C:\LGNTTMP\MAP > C:\LGNTTMP\D03_MAP.OUT
ECHO === D04 LOGOUT NOPASSUSER === >> C:\LGNTTMP\HELPER.TXT
C:\LGNTTMP\LOGOUT > C:\LGNTTMP\D04_LGOT.OUT
REM Novell LOGIN /? may print usage directly to the console instead of stdout.
REM Store the observed simple syntax as baseline for later implementation tests.
ECHO Usage: LOGIN [server/]user > C:\LGNTTMP\D99_HELP.OUT
ECHO.
ECHO LGNTC fertig. Jetzt manuell wieder als SUPERVISOR einloggen:
ECHO C:\LGNTTMP\LOGIN SUPERVISOR
ECHO Danach ausfuehren:
ECHO F:\LGNTSTA PART2
ECHO.

128
test/login/LGNTSTA.BAT Normal file
View File

@@ -0,0 +1,128 @@
@ECHO OFF
REM LGNTSTA.BAT
REM Two-stage LOGIN/LOGOUT baseline test for MARS NWE.
REM
REM START from F: while logged in as SUPERVISOR:
REM F:\LGNTSTA
REM Then run the C: helper manually:
REM C:
REM CD \LGNTTMP
REM LGNTC
REM After that login manually using the local C: LOGIN copy and run:
REM C:\LGNTTMP\LOGIN SUPERVISOR
REM F:\LGNTSTA PART2
REM
REM PART2 copies captured C: results back to F:\LGNTCMP.
REM SYS:LOGIN / SYS:PUBLIC are NOT overwritten by this test.
IF "%1"=="" GOTO PART1
IF "%1"=="PART2" GOTO PART2
IF "%1"=="PARt2" GOTO PART2
IF "%1"=="PArT2" GOTO PART2
IF "%1"=="PArt2" GOTO PART2
IF "%1"=="PaRT2" GOTO PART2
IF "%1"=="PaRt2" GOTO PART2
IF "%1"=="ParT2" GOTO PART2
IF "%1"=="Part2" GOTO PART2
IF "%1"=="pART2" GOTO PART2
IF "%1"=="pARt2" GOTO PART2
IF "%1"=="pArT2" GOTO PART2
IF "%1"=="pArt2" GOTO PART2
IF "%1"=="paRT2" GOTO PART2
IF "%1"=="paRt2" GOTO PART2
IF "%1"=="parT2" GOTO PART2
IF "%1"=="part2" GOTO PART2
GOTO USAGE
:PART1
F:
CD \
REM --- Recreate generated result/temp directories. ---
IF EXIST LGNTCMP DELTREE /Y LGNTCMP
MD LGNTCMP > NUL
MD LGNTCMP\OUT > NUL
ECHO LGNTSTA LOGIN/LOGOUT test > F:\LGNTCMP\RUN.LOG
ECHO Part 1 started while logged in as SUPERVISOR. >> F:\LGNTCMP\RUN.LOG
ECHO Helper will use user NOPASSUSER on server MARS. >> F:\LGNTCMP\RUN.LOG
ECHO This test is manual after logout because F: disappears. >> F:\LGNTCMP\RUN.LOG
ECHO SYS:LOGIN, SYS:PUBLIC, and SYS:NPUBLIC are not modified. >> F:\LGNTCMP\RUN.LOG
ECHO. >> F:\LGNTCMP\RUN.LOG
IF EXIST C:\LGNTTMP DELTREE /Y C:\LGNTTMP
MD C:\LGNTTMP > NUL
REM --- Copy Novell baseline tools to local C: directory only. ---
REM Do not overwrite SYS:LOGIN, SYS:PUBLIC, or SYS:NPUBLIC.
REM LOGIN/MAP are from NLOGIN, LOGOUT is from NPUBLIC.
REM The helper runs from C:\LGNTTMP so DOS should find tools there after LOGOUT.
ECHO Copying Novell runtime tools to C:\LGNTTMP. >> F:\LGNTCMP\RUN.LOG
COPY \NLOGIN\LOGIN.* C:\LGNTTMP >> F:\LGNTCMP\RUN.LOG
COPY \NLOGIN\MAP.* C:\LGNTTMP >> F:\LGNTCMP\RUN.LOG
COPY \NPUBLIC\LOGOUT.* C:\LGNTTMP >> F:\LGNTCMP\RUN.LOG
ECHO Copying helper to C:\LGNTTMP\LGNTC.BAT >> F:\LGNTCMP\RUN.LOG
COPY F:\LGNTC.BAT C:\LGNTTMP >> F:\LGNTCMP\RUN.LOG
ECHO. >> F:\LGNTCMP\RUN.LOG
ECHO NEXT MANUAL STEPS: >> F:\LGNTCMP\RUN.LOG
ECHO C: >> F:\LGNTCMP\RUN.LOG
ECHO CD \LGNTTMP >> F:\LGNTCMP\RUN.LOG
ECHO LGNTC >> F:\LGNTCMP\RUN.LOG
ECHO C:\LGNTTMP\LOGIN SUPERVISOR >> F:\LGNTCMP\RUN.LOG
ECHO F:\LGNTSTA PART2 >> F:\LGNTCMP\RUN.LOG
ECHO LGNTSTA Part 1 fertig.
ECHO Jetzt manuell ausfuehren:
ECHO C:
ECHO CD \LGNTTMP
ECHO LGNTC
ECHO Danach wieder als SUPERVISOR einloggen mit:
ECHO C:\LGNTTMP\LOGIN SUPERVISOR
ECHO Dann:
ECHO F:\LGNTSTA PART2
GOTO END
:PART2
F:
CD \
MD LGNTCMP > NUL
MD LGNTCMP\OUT > NUL
ECHO. >> F:\LGNTCMP\RUN.LOG
ECHO Part 2 collecting files from C:\LGNTTMP. >> F:\LGNTCMP\RUN.LOG
COPY C:\LGNTTMP\*.OUT F:\LGNTCMP\OUT >> F:\LGNTCMP\RUN.LOG
COPY C:\LGNTTMP\*.TXT F:\LGNTCMP\OUT >> F:\LGNTCMP\RUN.LOG
ECHO === SUMMARY === > F:\LGNTCMP\SUMMARY.TXT
ECHO LGNTSTA LOGIN/LOGOUT baseline finished. >> F:\LGNTCMP\SUMMARY.TXT
ECHO Novell LOGIN/MAP/LOGOUT were copied only to C:\LGNTTMP. >> F:\LGNTCMP\SUMMARY.TXT
ECHO LOGIN/MAP source: SYS:NLOGIN. LOGOUT source: SYS:NPUBLIC. >> F:\LGNTCMP\SUMMARY.TXT
ECHO SYS:LOGIN, SYS:PUBLIC, and SYS:NPUBLIC were not modified. >> F:\LGNTCMP\SUMMARY.TXT
ECHO. >> F:\LGNTCMP\SUMMARY.TXT
ECHO Expected files: >> F:\LGNTCMP\SUMMARY.TXT
ECHO - D01_LOG.OUT LOGOUT output from initial supervisor session. >> F:\LGNTCMP\SUMMARY.TXT
ECHO - D02_LGIN.OUT LOGIN NOPASSUSER baseline output. >> F:\LGNTCMP\SUMMARY.TXT
ECHO - D03_MAP.OUT MAP output after NOPASSUSER login. >> F:\LGNTCMP\SUMMARY.TXT
ECHO - D04_LGOT.OUT LOGOUT output from NOPASSUSER session. >> F:\LGNTCMP\SUMMARY.TXT
ECHO - D99_HELP.OUT Simulated LOGIN usage baseline if help is not redirectable. >> F:\LGNTCMP\SUMMARY.TXT
ECHO. >> F:\LGNTCMP\SUMMARY.TXT
ECHO Optional: LGNTZIP ausfuehren. >> F:\LGNTCMP\SUMMARY.TXT
ECHO LGNTSTA PART2 fertig.
ECHO Ergebnisse liegen in F:\LGNTCMP
ECHO Optional: LGNTZIP ausfuehren.
GOTO END
:USAGE
ECHO Usage: LGNTSTA [PART2]
ECHO.
ECHO Ohne Parameter startet LGNTSTA Part 1.
ECHO PART2 sammelt nach dem erneuten SUPERVISOR-Login die C:-Ergebnisse ein.
ECHO Gueltiger Parameter ist PART2; part2/Part2 wird ebenfalls akzeptiert.
ECHO Beispiel:
ECHO F:\LGNTSTA PART2
GOTO END
:END

27
test/login/LGNTZIP.BAT Normal file
View File

@@ -0,0 +1,27 @@
@ECHO OFF
REM LGNTZIP.BAT
REM Optional packer for LGNTSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \LGNTCMP
IF EXIST LGNTSTA.ZIP DEL LGNTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating LGNTSTA.ZIP > ZIP.LOG
ZIP -r LGNTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
REM Cleanup generated temporary files after ZIP.
REM Keep LGNTCMP because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated temporary files... >> ZIP.LOG
DELTREE /Y C:\LGNTTMP >> ZIP.LOG
IF EXIST C:\LGNTC.BAT DEL C:\LGNTC.BAT >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\LGNTCMP\LGNTSTA.ZIP
ECHO F:\LGNTCMP\ZIP.LOG
ECHO.

74
test/login/README.md Normal file
View File

@@ -0,0 +1,74 @@
# LOGIN / LOGOUT baseline test
`LGNTSTA` is a manual two-stage baseline test for Novell `LOGIN`, `LOGOUT`, and `MAP`.
This test does **not** overwrite `SYS:LOGIN`, `SYS:PUBLIC`, or `SYS:NPUBLIC`. It copies the Novell tools to a temporary local directory on `C:` and runs from there. `LOGIN` and `MAP` are copied from `SYS:NLOGIN`; `LOGOUT` is copied from `SYS:NPUBLIC`.
## Required setup
User `NOPASSUSER` must exist on `MARS` and must be able to login without a password.
## Run
Start while logged in as `SUPERVISOR`:
```bat
F:\LGNTSTA
```
Then run the helper from `C:`:
```bat
C:
CD \LGNTTMP
LGNTC
```
The helper does:
```text
LOGOUT
LOGIN NOPASSUSER
MAP
LOGOUT
```
All tool calls and redirected output paths are absolute `C:\LGNTTMP\...`, because Novell `LOGIN` can change the current drive/search path.
Then login manually as `SUPERVISOR` again from the same local tool directory:
```bat
C:\LGNTTMP\LOGIN SUPERVISOR
```
After the login script restores `F:`, collect results:
```bat
F:\LGNTSTA PART2
F:\LGNTZIP
```
## Expected output files
`F:\LGNTCMP\OUT` contains:
```text
D01_LOG.OUT LOGOUT output from initial supervisor session
D02_LGIN.OUT LOGIN NOPASSUSER output
D03_MAP.OUT MAP output after NOPASSUSER login
D04_LGOT.OUT LOGOUT output from NOPASSUSER session
D99_HELP.OUT simulated LOGIN usage line for later comparison
HELPER.TXT helper trace
```
`D99_HELP.OUT` is intentionally produced with `ECHO`, because Novell `LOGIN /?` may not redirect help text reliably.
## Implementation note
After `LOGIN NOPASSUSER`, DOS/NetWare may change the current drive/search path. `LGNTC.BAT` therefore calls `C:\LGNTTMP\LOGIN`, `C:\LGNTTMP\MAP`, and `C:\LGNTTMP\LOGOUT` explicitly and redirects to absolute `C:\LGNTTMP\*.OUT` files.
## Parameter handling
`LGNTSTA` starts Part 1 only when called without parameters. `PART2` is accepted case-insensitively (`PART2`, `part2`, `Part2`, etc.). Any other parameter prints usage and does not start Part 1, so a typo cannot accidentally reset the test state.

4
test/logout/README.md Normal file
View File

@@ -0,0 +1,4 @@
# LOGOUT tests
`LOGOUT` is covered together with `LOGIN` in `test/login/LGNTSTA.BAT`, because a useful
logout baseline needs a controlled login/logout/login sequence.

178
test/map/MAPTSTA.BAT Normal file
View File

@@ -0,0 +1,178 @@
@ECHO OFF
REM MAPTSTA.BAT
REM Automated Novell MAP baseline for MARS NWE.
REM
REM LOGIN is intentionally not tested here.
REM PATH/PATHINS/PATHDEL are our own tools and are not part of this Novell MAP baseline.
REM
REM Run while already logged in and with F: mapped to SYS.
REM
REM NetWare semantics verified against real NetWare:
REM MAP G:=SYS:PUBLIC
REM sets the current path of G: to \PUBLIC, but it is NOT a fake root.
REM CD \ returns to SYS:\.
REM
REM MAP ROOT G:=SYS:PUBLIC
REM makes SYS:PUBLIC the fake root of G:.
REM CD \ stays inside SYS:PUBLIC.
REM
REM Results:
REM F:\MAPCMP\RUN.LOG
REM F:\MAPCMP\SUMMARY.TXT
REM F:\MAPCMP\OUT\*.OUT
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST MAPTEST\NUL DELTREE /Y MAPTEST\*.*
IF EXIST MAPCMP\NUL DELTREE /Y MAPCMP\*.*
IF NOT EXIST MAPTEST\NUL MD MAPTEST
IF NOT EXIST MAPTEST\PUB\NUL MD MAPTEST\PUB
IF NOT EXIST MAPCMP\NUL MD MAPCMP
IF NOT EXIST MAPCMP\OUT\NUL MD MAPCMP\OUT
IF EXIST F:\MAPCMP\RUN.LOG DEL F:\MAPCMP\RUN.LOG
IF EXIST F:\MAPCMP\SUMMARY.TXT DEL F:\MAPCMP\SUMMARY.TXT
IF EXIST F:\MAPCMP\MAPTSTA.ZIP DEL F:\MAPCMP\MAPTSTA.ZIP
IF EXIST F:\MAPCMP\ZIP.LOG DEL F:\MAPCMP\ZIP.LOG
IF EXIST F:\MAPCMP\OUT\M01_MAP.OUT DEL F:\MAPCMP\OUT\M01_MAP.OUT
IF EXIST F:\MAPCMP\OUT\M02_SUBCUR.OUT DEL F:\MAPCMP\OUT\M02_SUBCUR.OUT
IF EXIST F:\MAPCMP\OUT\M03_SUBCD.OUT DEL F:\MAPCMP\OUT\M03_SUBCD.OUT
IF EXIST F:\MAPCMP\OUT\M04_ROOTMAP.OUT DEL F:\MAPCMP\OUT\M04_ROOTMAP.OUT
IF EXIST F:\MAPCMP\OUT\M05_ROOTCD.OUT DEL F:\MAPCMP\OUT\M05_ROOTCD.OUT
IF EXIST F:\MAPCMP\OUT\M06_NPUBLIC.OUT DEL F:\MAPCMP\OUT\M06_NPUBLIC.OUT
IF EXIST F:\MAPCMP\OUT\M07_HOME.OUT DEL F:\MAPCMP\OUT\M07_HOME.OUT
IF EXIST F:\MAPCMP\OUT\M08_QUOTA.OUT DEL F:\MAPCMP\OUT\M08_QUOTA.OUT
IF EXIST F:\MAPCMP\OUT\M09_UQUOTA.OUT DEL F:\MAPCMP\OUT\M09_UQUOTA.OUT
IF EXIST F:\MAPCMP\OUT\M10_DEL.OUT DEL F:\MAPCMP\OUT\M10_DEL.OUT
IF EXIST F:\MAPCMP\OUT\M11_AFTER.OUT DEL F:\MAPCMP\OUT\M11_AFTER.OUT
IF EXIST F:\MAPCMP\OUT\M12_BAD.OUT DEL F:\MAPCMP\OUT\M12_BAD.OUT
ECHO MAPTSTA automated Novell MAP baseline > F:\MAPCMP\RUN.LOG
ECHO Run while already logged in. >> F:\MAPCMP\RUN.LOG
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\MAPCMP\RUN.LOG
ECHO. >> F:\MAPCMP\RUN.LOG
ECHO MAP TEST ROOT > F:\MAPTEST\ROOT.TXT
ECHO MAP TEST PUB > F:\MAPTEST\PUB\PUB.TXT
NPUBLIC\FLAG F:\MAPTEST\ROOT.TXT N >> F:\MAPCMP\RUN.LOG
NPUBLIC\FLAG F:\MAPTEST\PUB\PUB.TXT N >> F:\MAPCMP\RUN.LOG
ECHO === M01 current maps and volumes === >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP > F:\MAPCMP\OUT\M01_MAP.OUT
ECHO === M02 non-root subdir map G:=SYS:MAPTEST === >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP DEL G: >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP G:=SYS:MAPTEST > F:\MAPCMP\OUT\M02_SUBCUR.OUT
NPUBLIC\MAP >> F:\MAPCMP\OUT\M02_SUBCUR.OUT
G:
CD
DIR
TYPE ROOT.TXT >> F:\MAPCMP\OUT\M02_SUBCUR.OUT
DIR PUB >> F:\MAPCMP\OUT\M02_SUBCUR.OUT
TYPE PUB\PUB.TXT >> F:\MAPCMP\OUT\M02_SUBCUR.OUT
F:
ECHO === M03 non-root map after CD backslash should show SYS root === >> F:\MAPCMP\RUN.LOG
G:
CD \
CD > F:\MAPCMP\OUT\M03_SUBCD.OUT
DIR >> F:\MAPCMP\OUT\M03_SUBCD.OUT
DIR ROOT.TXT >> F:\MAPCMP\OUT\M03_SUBCD.OUT
F:
ECHO === M04 MAP ROOT G:=SYS:MAPTEST fake-root === >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP DEL G: >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP ROOT G:=SYS:MAPTEST > F:\MAPCMP\OUT\M04_ROOTMAP.OUT
NPUBLIC\MAP >> F:\MAPCMP\OUT\M04_ROOTMAP.OUT
G:
CD
DIR
TYPE ROOT.TXT >> F:\MAPCMP\OUT\M04_ROOTMAP.OUT
DIR PUB >> F:\MAPCMP\OUT\M04_ROOTMAP.OUT
TYPE PUB\PUB.TXT >> F:\MAPCMP\OUT\M04_ROOTMAP.OUT
F:
ECHO === M05 MAP ROOT after CD backslash should stay in fake-root === >> F:\MAPCMP\RUN.LOG
G:
CD \
CD > F:\MAPCMP\OUT\M05_ROOTCD.OUT
DIR >> F:\MAPCMP\OUT\M05_ROOTCD.OUT
DIR ROOT.TXT >> F:\MAPCMP\OUT\M05_ROOTCD.OUT
TYPE ROOT.TXT >> F:\MAPCMP\OUT\M05_ROOTCD.OUT
F:
ECHO === M06 MAP ROOT to SYS:NPUBLIC and find NDIR.EXE === >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP DEL G: >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP ROOT G:=SYS:NPUBLIC > F:\MAPCMP\OUT\M06_NPUBLIC.OUT
NPUBLIC\MAP >> F:\MAPCMP\OUT\M06_NPUBLIC.OUT
G:
CD \
CD >> F:\MAPCMP\OUT\M06_NPUBLIC.OUT
DIR NDIR.EXE >> F:\MAPCMP\OUT\M06_NPUBLIC.OUT
F:
ECHO === M07 map H to HOME: volume root === >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP DEL H: >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP H:=HOME: > F:\MAPCMP\OUT\M07_HOME.OUT
NPUBLIC\MAP >> F:\MAPCMP\OUT\M07_HOME.OUT
DIR H:\ >> F:\MAPCMP\OUT\M07_HOME.OUT
ECHO === M08 map I to QUOTA: volume root === >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP DEL I: >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP I:=QUOTA: > F:\MAPCMP\OUT\M08_QUOTA.OUT
NPUBLIC\MAP >> F:\MAPCMP\OUT\M08_QUOTA.OUT
DIR I:\ >> F:\MAPCMP\OUT\M08_QUOTA.OUT
ECHO === M09 map ROOT J to QUOTA:USERQUOTA fake-root === >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP DEL J: >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP ROOT J:=QUOTA:USERQUOTA > F:\MAPCMP\OUT\M09_UQUOTA.OUT
NPUBLIC\MAP >> F:\MAPCMP\OUT\M09_UQUOTA.OUT
J:
CD \
CD >> F:\MAPCMP\OUT\M09_UQUOTA.OUT
DIR >> F:\MAPCMP\OUT\M09_UQUOTA.OUT
F:
ECHO === M10 delete mapped drives G H I J === >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP DEL G: > F:\MAPCMP\OUT\M10_DEL.OUT
NPUBLIC\MAP DEL H: >> F:\MAPCMP\OUT\M10_DEL.OUT
NPUBLIC\MAP DEL I: >> F:\MAPCMP\OUT\M10_DEL.OUT
NPUBLIC\MAP DEL J: >> F:\MAPCMP\OUT\M10_DEL.OUT
NPUBLIC\MAP >> F:\MAPCMP\OUT\M10_DEL.OUT
ECHO === M11 access after delete should fail === >> F:\MAPCMP\RUN.LOG
DIR G:\ > F:\MAPCMP\OUT\M11_AFTER.OUT
DIR H:\ >> F:\MAPCMP\OUT\M11_AFTER.OUT
DIR I:\ >> F:\MAPCMP\OUT\M11_AFTER.OUT
DIR J:\ >> F:\MAPCMP\OUT\M11_AFTER.OUT
ECHO === M12 expected failure bad map target === >> F:\MAPCMP\RUN.LOG
NPUBLIC\MAP K:=SYS:NO_SUCH_DIR > F:\MAPCMP\OUT\M12_BAD.OUT
NPUBLIC\MAP DEL K: >> F:\MAPCMP\OUT\M12_BAD.OUT
ECHO === SUMMARY === > F:\MAPCMP\SUMMARY.TXT
ECHO MAPTSTA Novell MAP baseline finished. >> F:\MAPCMP\SUMMARY.TXT
ECHO. >> F:\MAPCMP\SUMMARY.TXT
ECHO Expected: >> F:\MAPCMP\SUMMARY.TXT
ECHO - M02 non-root G:=SYS:MAPTEST starts in MAPTEST and can read ROOT.TXT. >> F:\MAPCMP\SUMMARY.TXT
ECHO - M03 after CD \ on non-root map, G: is back at SYS:\ and ROOT.TXT is not found. >> F:\MAPCMP\SUMMARY.TXT
ECHO - M04 MAP ROOT G:=SYS:MAPTEST can read ROOT.TXT and PUB\PUB.TXT. >> F:\MAPCMP\SUMMARY.TXT
ECHO - M05 after CD \ on MAP ROOT, G: stays inside fake-root and ROOT.TXT is found. >> F:\MAPCMP\SUMMARY.TXT
ECHO - M06 MAP ROOT G:=SYS:NPUBLIC finds NDIR.EXE. >> F:\MAPCMP\SUMMARY.TXT
ECHO - M07 maps H to HOME:. >> F:\MAPCMP\SUMMARY.TXT
ECHO - M08 maps I to QUOTA:. >> F:\MAPCMP\SUMMARY.TXT
ECHO - M09 maps ROOT J to QUOTA:USERQUOTA if that directory exists. >> F:\MAPCMP\SUMMARY.TXT
ECHO - M10 deletes G/H/I/J mappings. >> F:\MAPCMP\SUMMARY.TXT
ECHO - M11 access after delete should fail. >> F:\MAPCMP\SUMMARY.TXT
ECHO - M12 bad target should fail. >> F:\MAPCMP\SUMMARY.TXT
ECHO Optional pack results with MAPTZIP.BAT. >> F:\MAPCMP\SUMMARY.TXT
ECHO.
ECHO MAPTSTA fertig.
ECHO Ergebnisse liegen in F:\MAPCMP
ECHO Optional: MAPTZIP ausfuehren.
ECHO.

26
test/map/MAPTZIP.BAT Normal file
View File

@@ -0,0 +1,26 @@
@ECHO OFF
REM MAPTZIP.BAT
REM Optional packer for MAPTSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \MAPCMP
IF EXIST MAPTSTA.ZIP DEL MAPTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating MAPTSTA.ZIP > ZIP.LOG
ZIP -r MAPTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \MAPTEST\NUL DELTREE /Y \MAPTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\MAPCMP\MAPTSTA.ZIP
ECHO F:\MAPCMP\ZIP.LOG
ECHO.

64
test/map/README.md Normal file
View File

@@ -0,0 +1,64 @@
# MAP automated test
Novell MAP baseline using `NPUBLIC\MAP`.
LOGIN is intentionally not tested here. `PATH`, `PATHINS`, and `PATHDEL` are
our own tools, so they are not included in this Novell baseline.
## NetWare semantics
Verified against real NetWare:
```text
MAP G:=SYS:PUBLIC
```
sets the current path on `G:` to `\PUBLIC`, but it is not a fake root. `CD \`
returns to `SYS:\`.
```text
MAP ROOT G:=SYS:PUBLIC
```
sets `SYS:PUBLIC` as fake root. `CD \` stays inside `SYS:PUBLIC`.
## Run
Run while already logged in and with `F:` mapped to `SYS`.
```text
MAPTSTA
```
Optional pack:
```text
MAPTZIP
```
Result ZIP:
```text
F:\MAPCMP\MAPTSTA.ZIP
```
Linux package with server log:
```sh
sudo ./mars_packtest_v3.sh maptsta 5 mario
```
## Coverage
- display current maps
- non-root subdir map `G:=SYS:MAPTEST`
- verify `CD \` returns to volume root for non-root map
- fake-root map `MAP ROOT G:=SYS:MAPTEST`
- verify `CD \` stays in fake-root for root map
- fake-root map to `SYS:NPUBLIC` and find `NDIR.EXE`
- map `H:` to `HOME:`
- map `I:` to `QUOTA:`
- fake-root map `J:` to `QUOTA:USERQUOTA`
- delete `G:`, `H:`, `I:`, `J:`
- expected failure after delete
- expected failure for bad target

161
test/mars_packtest_v3.sh Normal file
View 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"

56
test/ncopy/NCPCMPN.BAT Normal file
View File

@@ -0,0 +1,56 @@
@ECHO OFF
REM NCPCMPN.BAT
REM Repeat comparison/show output for NCOPY test.
CLS
ECHO === NCPCMPN: NCOPY PRE/POST Compare ===
ECHO.
PAUSE
CLS
ECHO === K01 Source A FLAG vor/nach ===
FC F:\NCMP\PRE\SRCA.OUT F:\NCMP\POST\SRCA.OUT
ECHO.
PAUSE
CLS
ECHO === K02 Source B FLAG vor/nach ===
FC F:\NCMP\PRE\SRCB.OUT F:\NCMP\POST\SRCB.OUT
ECHO.
PAUSE
CLS
ECHO === K03 Source C FLAG vor/nach ===
FC F:\NCMP\PRE\SRCC.OUT F:\NCMP\POST\SRCC.OUT
ECHO.
PAUSE
CLS
ECHO === K04 Destination NDIR ===
TYPE F:\NCMP\POST\DSTNDIR.OUT
ECHO.
PAUSE
CLS
ECHO === K05 Destination DATES ===
TYPE F:\NCMP\POST\DSTDATE.OUT
ECHO.
PAUSE
CLS
ECHO === K06 /S Copy SUB ===
TYPE F:\NCMP\POST\SCPYSUB.OUT
ECHO.
PAUSE
CLS
ECHO === K07 /E Copy SUB ===
TYPE F:\NCMP\POST\ECPYSUB.OUT
ECHO.
PAUSE
CLS
ECHO === K08 Archive SUB Output ===
TYPE F:\NCMP\POST\ARCHSUB.OUT
ECHO.
PAUSE

171
test/ncopy/NCPTSTA.BAT Normal file
View File

@@ -0,0 +1,171 @@
@ECHO OFF
REM NCPTSTA.BAT
REM Automated Novell NCOPY baseline for MARS NWE.
REM
REM Ziel:
REM - keine Screenshots noetig
REM - keine PAUSE
REM - kein ZIP im Hauptlauf
REM - keine Wildcard-DEL
REM - keine interaktive Overwrite-Abfrage
REM
REM Ergebnisse:
REM F:\NCMP\RUN.LOG
REM F:\NCMP\SUMMARY.TXT
REM F:\NCMP\PRE\*.OUT
REM F:\NCMP\POST\*.OUT
REM F:\NCMP\CMP\*.OUT
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST NCPTEST\NUL DELTREE /Y NCPTEST\*.*
IF EXIST NCPCMP\NUL DELTREE /Y NCPCMP\*.*
REM --- Directory setup, DOS-kompatibel mit DIR\NUL ---
IF NOT EXIST TCOPY\NUL MD TCOPY
IF NOT EXIST TCOPY\SRC\NUL MD TCOPY\SRC
IF NOT EXIST TCOPY\SRC\SUB\NUL MD TCOPY\SRC\SUB
IF NOT EXIST TCOPY\SRC\EMPTY\NUL MD TCOPY\SRC\EMPTY
IF NOT EXIST TCOPY\DST\NUL MD TCOPY\DST
IF NOT EXIST TCOPY\DST\SCPY\NUL MD TCOPY\DST\SCPY
IF NOT EXIST TCOPY\DST\ECPY\NUL MD TCOPY\DST\ECPY
IF NOT EXIST TCOPY\ARCH\NUL MD TCOPY\ARCH
IF NOT EXIST TCOPY\ARCH\ACPY\NUL MD TCOPY\ARCH\ACPY
IF NOT EXIST TCOPY\ARCH\MCPY\NUL MD TCOPY\ARCH\MCPY
IF NOT EXIST NCMP\NUL MD NCMP
IF NOT EXIST NCMP\PRE\NUL MD NCMP\PRE
IF NOT EXIST NCMP\POST\NUL MD NCMP\POST
IF NOT EXIST NCMP\CMP\NUL MD NCMP\CMP
REM --- Einzeldateien loeschen, aber nur wenn vorhanden ---
IF EXIST F:\NCMP\RUN.LOG DEL F:\NCMP\RUN.LOG
IF EXIST F:\NCMP\SUMMARY.TXT DEL F:\NCMP\SUMMARY.TXT
IF EXIST F:\NCMP\ZIP.LOG DEL F:\NCMP\ZIP.LOG
IF EXIST F:\NCMP\NCPTSTA.ZIP DEL F:\NCMP\NCPTSTA.ZIP
IF EXIST F:\NCMP\PRE\SRCA.OUT DEL F:\NCMP\PRE\SRCA.OUT
IF EXIST F:\NCMP\PRE\SRCB.OUT DEL F:\NCMP\PRE\SRCB.OUT
IF EXIST F:\NCMP\PRE\SRCC.OUT DEL F:\NCMP\PRE\SRCC.OUT
IF EXIST F:\NCMP\PRE\SRCNDIR.OUT DEL F:\NCMP\PRE\SRCNDIR.OUT
IF EXIST F:\NCMP\PRE\SRCDATE.OUT DEL F:\NCMP\PRE\SRCDATE.OUT
IF EXIST F:\NCMP\PRE\SRCRGHT.OUT DEL F:\NCMP\PRE\SRCRGHT.OUT
IF EXIST F:\NCMP\PRE\SRCTRST.OUT DEL F:\NCMP\PRE\SRCTRST.OUT
IF EXIST F:\NCMP\POST\SRCA.OUT DEL F:\NCMP\POST\SRCA.OUT
IF EXIST F:\NCMP\POST\SRCB.OUT DEL F:\NCMP\POST\SRCB.OUT
IF EXIST F:\NCMP\POST\SRCC.OUT DEL F:\NCMP\POST\SRCC.OUT
IF EXIST F:\NCMP\POST\DSTA1.OUT DEL F:\NCMP\POST\DSTA1.OUT
IF EXIST F:\NCMP\POST\DSTAV.OUT DEL F:\NCMP\POST\DSTAV.OUT
IF EXIST F:\NCMP\POST\DSTB.OUT DEL F:\NCMP\POST\DSTB.OUT
IF EXIST F:\NCMP\POST\SRCNDIR.OUT DEL F:\NCMP\POST\SRCNDIR.OUT
IF EXIST F:\NCMP\POST\SRCDATE.OUT DEL F:\NCMP\POST\SRCDATE.OUT
IF EXIST F:\NCMP\POST\DSTNDIR.OUT DEL F:\NCMP\POST\DSTNDIR.OUT
IF EXIST F:\NCMP\POST\DSTDATE.OUT DEL F:\NCMP\POST\DSTDATE.OUT
IF EXIST F:\NCMP\POST\SCPYSUB.OUT DEL F:\NCMP\POST\SCPYSUB.OUT
IF EXIST F:\NCMP\POST\ECPYSUB.OUT DEL F:\NCMP\POST\ECPYSUB.OUT
IF EXIST F:\NCMP\POST\ARCHSUB.OUT DEL F:\NCMP\POST\ARCHSUB.OUT
IF EXIST F:\NCMP\CMP\SRCA.OUT DEL F:\NCMP\CMP\SRCA.OUT
IF EXIST F:\NCMP\CMP\SRCB.OUT DEL F:\NCMP\CMP\SRCB.OUT
IF EXIST F:\NCMP\CMP\SRCC.OUT DEL F:\NCMP\CMP\SRCC.OUT
IF EXIST F:\NCMP\CMP\SRCNDIR.OUT DEL F:\NCMP\CMP\SRCNDIR.OUT
IF EXIST F:\NCMP\CMP\SRCDATE.OUT DEL F:\NCMP\CMP\SRCDATE.OUT
ECHO NCPTSTA automated NCOPY test > F:\NCMP\RUN.LOG
DATE >> F:\NCMP\RUN.LOG
TIME >> F:\NCMP\RUN.LOG
ECHO. >> F:\NCMP\RUN.LOG
ECHO === SETUP === >> F:\NCMP\RUN.LOG
ECHO NCOPY TEST A > F:\TCOPY\SRC\A.TXT
ECHO NCOPY TEST B > F:\TCOPY\SRC\B.TXT
ECHO NCOPY TEST C > F:\TCOPY\SRC\SUB\C.TXT
ECHO OLD DEST FILE > F:\TCOPY\DST\A.TXT
ECHO Normalisiere Attribute... >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT N >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT N >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT N >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\DST\A.TXT N >> F:\NCMP\RUN.LOG
ECHO Setze Testattribute... >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT +H +A >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT +RO +A >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT +A >> F:\NCMP\RUN.LOG
ECHO === PRE CAPTURE === >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT > F:\NCMP\PRE\SRCA.OUT
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT > F:\NCMP\PRE\SRCB.OUT
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT > F:\NCMP\PRE\SRCC.OUT
NPUBLIC\NDIR F:\TCOPY\SRC > F:\NCMP\PRE\SRCNDIR.OUT
NPUBLIC\NDIR F:\TCOPY\SRC /DATES > F:\NCMP\PRE\SRCDATE.OUT
NPUBLIC\NDIR F:\TCOPY\SRC /RIGHTS > F:\NCMP\PRE\SRCRGHT.OUT
NPUBLIC\RIGHTS F:\TCOPY\SRC > F:\NCMP\PRE\SRCTRST.OUT
ECHO === NCOPY SINGLE FILES === >> F:\NCMP\RUN.LOG
IF EXIST F:\TCOPY\DST\A1.TXT DEL F:\TCOPY\DST\A1.TXT
IF EXIST F:\TCOPY\DST\B.TXT DEL F:\TCOPY\DST\B.TXT
IF EXIST F:\TCOPY\DST\AV.TXT DEL F:\TCOPY\DST\AV.TXT
NPUBLIC\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\A1.TXT >> F:\NCMP\RUN.LOG
NPUBLIC\NCOPY F:\TCOPY\SRC\B.TXT TO F:\TCOPY\DST\B.TXT >> F:\NCMP\RUN.LOG
NPUBLIC\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\AV.TXT /V >> F:\NCMP\RUN.LOG
ECHO === NCOPY SUBDIRS === >> F:\NCMP\RUN.LOG
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\DST\SCPY /S >> F:\NCMP\RUN.LOG
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\DST\ECPY /S /E >> F:\NCMP\RUN.LOG
ECHO === NCOPY ARCHIVE MODES === >> F:\NCMP\RUN.LOG
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\ARCH\ACPY /A /S >> F:\NCMP\RUN.LOG
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\ARCH\MCPY /M /S >> F:\NCMP\RUN.LOG
ECHO === POST CAPTURE === >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT > F:\NCMP\POST\SRCA.OUT
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT > F:\NCMP\POST\SRCB.OUT
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT > F:\NCMP\POST\SRCC.OUT
NPUBLIC\FLAG F:\TCOPY\DST\A1.TXT > F:\NCMP\POST\DSTA1.OUT
NPUBLIC\FLAG F:\TCOPY\DST\AV.TXT > F:\NCMP\POST\DSTAV.OUT
NPUBLIC\FLAG F:\TCOPY\DST\B.TXT > F:\NCMP\POST\DSTB.OUT
NPUBLIC\NDIR F:\TCOPY\SRC > F:\NCMP\POST\SRCNDIR.OUT
NPUBLIC\NDIR F:\TCOPY\SRC /DATES > F:\NCMP\POST\SRCDATE.OUT
NPUBLIC\NDIR F:\TCOPY\DST > F:\NCMP\POST\DSTNDIR.OUT
NPUBLIC\NDIR F:\TCOPY\DST /DATES > F:\NCMP\POST\DSTDATE.OUT
NPUBLIC\NDIR F:\TCOPY\DST\SCPY /SUB > F:\NCMP\POST\SCPYSUB.OUT
NPUBLIC\NDIR F:\TCOPY\DST\ECPY /SUB > F:\NCMP\POST\ECPYSUB.OUT
NPUBLIC\NDIR F:\TCOPY\ARCH /SUB > F:\NCMP\POST\ARCHSUB.OUT
ECHO === COMPARE === >> F:\NCMP\RUN.LOG
FC F:\NCMP\PRE\SRCA.OUT F:\NCMP\POST\SRCA.OUT > F:\NCMP\CMP\SRCA.OUT
FC F:\NCMP\PRE\SRCB.OUT F:\NCMP\POST\SRCB.OUT > F:\NCMP\CMP\SRCB.OUT
FC F:\NCMP\PRE\SRCC.OUT F:\NCMP\POST\SRCC.OUT > F:\NCMP\CMP\SRCC.OUT
FC F:\NCMP\PRE\SRCNDIR.OUT F:\NCMP\POST\SRCNDIR.OUT > F:\NCMP\CMP\SRCNDIR.OUT
FC F:\NCMP\PRE\SRCDATE.OUT F:\NCMP\POST\SRCDATE.OUT > F:\NCMP\CMP\SRCDATE.OUT
ECHO === SUMMARY === > F:\NCMP\SUMMARY.TXT
ECHO NCOPY automated test finished. >> F:\NCMP\SUMMARY.TXT
ECHO. >> F:\NCMP\SUMMARY.TXT
ECHO Expected notes: >> F:\NCMP\SUMMARY.TXT
ECHO - Source FLAG compare may differ after /M because archive bit should be cleared. >> F:\NCMP\SUMMARY.TXT
ECHO - DSTNDIR.OUT should show A1.TXT, AV.TXT, B.TXT and copy directories. >> F:\NCMP\SUMMARY.TXT
ECHO - SCPYSUB.OUT should include copied SUB\C.TXT. >> F:\NCMP\SUMMARY.TXT
ECHO - ECPYSUB.OUT should include copied SUB\C.TXT and possibly EMPTY directory. >> F:\NCMP\SUMMARY.TXT
ECHO - ARCHSUB.OUT should show /A and /M archive-copy result directories. >> F:\NCMP\SUMMARY.TXT
ECHO. >> F:\NCMP\SUMMARY.TXT
ECHO Optional pack results with NCPTZIP.BAT. >> F:\NCMP\SUMMARY.TXT
ECHO === CLEANUP ATTRIBUTES === >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT N >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT N >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT N >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\DST\A.TXT N >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\DST\A1.TXT N >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\DST\AV.TXT N >> F:\NCMP\RUN.LOG
NPUBLIC\FLAG F:\TCOPY\DST\B.TXT N >> F:\NCMP\RUN.LOG
ECHO.
ECHO NCPTSTA fertig.
ECHO Ergebnisse liegen in F:\NCMP
ECHO Optional: NCPTZIP ausfuehren.
ECHO.

32
test/ncopy/NCPTSTM.TST Normal file
View File

@@ -0,0 +1,32 @@
# NCPTSTM.TST
# MARS/dosutils NCOPY regression notes/spec.
#
# Novell baseline:
# NCPTSTN.BAT
#
# Tool:
# NPUBLIC\NCOPY
#
# Test dirs:
# F:\TCOPY
# F:\NCMP
#
# Coverage:
# - normal file copy
# - overwrite with /V
# - /S subdirectory copy
# - /S /E subdirectory copy including empty dirs
# - /A archive-bit copy
# - /M archive-bit copy and clear source archive bit
# - FLAG/NDIR readback before and after
#
# Important:
# - destination directories for multi-file copies must exist first
# - /E must be used with /S
#
# Expected:
# - destination files exist and are readable
# - /S copies subdir files
# - /S /E also copies empty directories where supported
# - /M clears archive bit on copied source files
# - no unexpected server completion codes

262
test/ncopy/NCPTSTN.BAT Normal file
View File

@@ -0,0 +1,262 @@
@ECHO OFF
REM NCPTSTN.BAT
REM Novell-only NCOPY baseline for MARS NWE.
REM
REM NPUBLIC = originale Novell Tools
REM PUBLIC = MARS/dosutils Tools
REM
REM Testordner:
REM F:\TCOPY
REM
REM Vergleichsdateien:
REM F:\NCMP\PRE\*.OUT
REM F:\NCMP\POST\*.OUT
REM
REM Wichtig fuer Novell NCOPY:
REM - Bei Multi-File Copy muss das Zielverzeichnis vorher existieren,
REM sonst interpretiert NCOPY das Ziel als einzelne Datei.
REM - /E ist nur zusammen mit /S gueltig.
REM - Fuer Multi-File Copy ist SRC\*.* + TO + Zielverzeichnis am klarsten.
CLS
ECHO === NCPTSTN: Novell NCOPY Baseline ===
ECHO.
ECHO Dieses Script benutzt NPUBLIC\NCOPY und schreibt PRE/POST Vergleichsdaten.
ECHO.
PAUSE
CLS
ECHO === C00: Testordner vorbereiten ===
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST TNCOPY\NUL DELTREE /Y TNCOPY\*.*
IF NOT EXIST TCOPY MD TCOPY
IF NOT EXIST TCOPY\SRC MD TCOPY\SRC
IF NOT EXIST TCOPY\SRC\SUB MD TCOPY\SRC\SUB
IF NOT EXIST TCOPY\SRC\EMPTY MD TCOPY\SRC\EMPTY
IF NOT EXIST TCOPY\DST MD TCOPY\DST
IF NOT EXIST TCOPY\DST\SCPY MD TCOPY\DST\SCPY
IF NOT EXIST TCOPY\DST\ECPY MD TCOPY\DST\ECPY
IF NOT EXIST TCOPY\ARCH MD TCOPY\ARCH
IF NOT EXIST TCOPY\ARCH\ACPY MD TCOPY\ARCH\ACPY
IF NOT EXIST TCOPY\ARCH\MCPY MD TCOPY\ARCH\MCPY
IF NOT EXIST NCMP MD NCMP
IF NOT EXIST NCMP\PRE MD NCMP\PRE
IF NOT EXIST NCMP\POST MD NCMP\POST
ECHO NCOPY TEST A > TCOPY\SRC\A.TXT
ECHO NCOPY TEST B > TCOPY\SRC\B.TXT
ECHO NCOPY TEST C > TCOPY\SRC\SUB\C.TXT
ECHO OLD DEST FILE > TCOPY\DST\A.TXT
ECHO.
ECHO Angelegt/geprueft:
ECHO F:\TCOPY\SRC\A.TXT
ECHO F:\TCOPY\SRC\B.TXT
ECHO F:\TCOPY\SRC\SUB\C.TXT
ECHO F:\TCOPY\SRC\EMPTY
ECHO F:\TCOPY\DST\SCPY
ECHO F:\TCOPY\DST\ECPY
ECHO F:\TCOPY\ARCH\ACPY
ECHO F:\TCOPY\ARCH\MCPY
ECHO F:\NCMP\PRE / POST
ECHO.
PAUSE
CLS
ECHO === C01: Alte Vergleichsausgaben loeschen ===
DEL F:\NCMP\PRE\*.OUT
DEL F:\NCMP\POST\*.OUT
ECHO.
PAUSE
CLS
ECHO === C02: Attribute normalisieren ===
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT N
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT N
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT N
NPUBLIC\FLAG F:\TCOPY\DST\A.TXT N
ECHO.
PAUSE
CLS
ECHO === C03: Testattribute setzen ===
ECHO A.TXT: +H +A
ECHO B.TXT: +RO +A
ECHO C.TXT: +A
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT +H +A
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT +RO +A
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT +A
ECHO.
PAUSE
CLS
ECHO === C04: PRE-Ausgaben erzeugen ===
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT > F:\NCMP\PRE\SRCA.OUT
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT > F:\NCMP\PRE\SRCB.OUT
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT > F:\NCMP\PRE\SRCC.OUT
NPUBLIC\NDIR F:\TCOPY\SRC > F:\NCMP\PRE\SRCNDIR.OUT
NPUBLIC\NDIR F:\TCOPY\SRC /DATES > F:\NCMP\PRE\SRCDATE.OUT
NPUBLIC\NDIR F:\TCOPY\SRC /RIGHTS > F:\NCMP\PRE\SRCRGHT.OUT
NPUBLIC\RIGHTS F:\TCOPY\SRC > F:\NCMP\PRE\SRCTRST.OUT
ECHO.
PAUSE
CLS
ECHO === C05: PRE Source NDIR ===
TYPE F:\NCMP\PRE\SRCNDIR.OUT
ECHO.
PAUSE
CLS
ECHO === C06: PRE Source DATES ===
TYPE F:\NCMP\PRE\SRCDATE.OUT
ECHO.
PAUSE
CLS
ECHO === C10: NCOPY normal copy A.TXT nach DST ===
NPUBLIC\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\A1.TXT
ECHO.
PAUSE
CLS
ECHO === C11: NCOPY overwrite mit /V ===
ECHO Erwartung: NCOPY fragt ggf. wegen bestehendem Ziel.
ECHO Wenn gefragt wird, overwrite bestaetigen.
NPUBLIC\NCOPY F:\TCOPY\SRC\A.TXT TO F:\TCOPY\DST\A.TXT /V
ECHO.
PAUSE
CLS
ECHO === C12: NCOPY B.TXT normal ===
NPUBLIC\NCOPY F:\TCOPY\SRC\B.TXT TO F:\TCOPY\DST\B.TXT
ECHO.
PAUSE
CLS
ECHO === C13: NCOPY Subdirs mit /S ===
ECHO Zielverzeichnis SCPY existiert bereits.
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\DST\SCPY /S
ECHO.
PAUSE
CLS
ECHO === C14: NCOPY Subdirs inklusive leer mit /S /E ===
ECHO /E ist nur zusammen mit /S gueltig.
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\DST\ECPY /S /E
ECHO.
PAUSE
CLS
ECHO === C15: NCOPY Archive-Bit Copy mit /A /S ===
ECHO Zielverzeichnis ACPY existiert bereits.
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\ARCH\ACPY /A /S
ECHO.
PAUSE
CLS
ECHO === C16: NCOPY Archive-Bit Copy mit /M /S ===
ECHO Achtung: /M sollte Archive-Bit an Quelle loeschen.
NPUBLIC\NCOPY F:\TCOPY\SRC\*.* TO F:\TCOPY\ARCH\MCPY /M /S
ECHO.
PAUSE
CLS
ECHO === C20: POST-Ausgaben erzeugen ===
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT > F:\NCMP\POST\SRCA.OUT
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT > F:\NCMP\POST\SRCB.OUT
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT > F:\NCMP\POST\SRCC.OUT
NPUBLIC\FLAG F:\TCOPY\DST\A1.TXT > F:\NCMP\POST\DSTA1.OUT
NPUBLIC\FLAG F:\TCOPY\DST\A.TXT > F:\NCMP\POST\DSTA.OUT
NPUBLIC\FLAG F:\TCOPY\DST\B.TXT > F:\NCMP\POST\DSTB.OUT
NPUBLIC\NDIR F:\TCOPY\SRC > F:\NCMP\POST\SRCNDIR.OUT
NPUBLIC\NDIR F:\TCOPY\SRC /DATES > F:\NCMP\POST\SRCDATE.OUT
NPUBLIC\NDIR F:\TCOPY\DST > F:\NCMP\POST\DSTNDIR.OUT
NPUBLIC\NDIR F:\TCOPY\DST /DATES > F:\NCMP\POST\DSTDATE.OUT
NPUBLIC\NDIR F:\TCOPY\DST\SCPY /SUB > F:\NCMP\POST\SCPYSUB.OUT
NPUBLIC\NDIR F:\TCOPY\DST\ECPY /SUB > F:\NCMP\POST\ECPYSUB.OUT
NPUBLIC\NDIR F:\TCOPY\ARCH /SUB > F:\NCMP\POST\ARCHSUB.OUT
ECHO.
PAUSE
CLS
ECHO === C21: Vergleich Source A FLAG vor/nach ===
FC F:\NCMP\PRE\SRCA.OUT F:\NCMP\POST\SRCA.OUT
ECHO.
PAUSE
CLS
ECHO === C22: Vergleich Source B FLAG vor/nach ===
FC F:\NCMP\PRE\SRCB.OUT F:\NCMP\POST\SRCB.OUT
ECHO.
PAUSE
CLS
ECHO === C23: Vergleich Source C FLAG vor/nach ===
FC F:\NCMP\PRE\SRCC.OUT F:\NCMP\POST\SRCC.OUT
ECHO.
PAUSE
CLS
ECHO === C24: POST Destination NDIR ===
TYPE F:\NCMP\POST\DSTNDIR.OUT
ECHO.
PAUSE
CLS
ECHO === C25: POST Destination DATES ===
TYPE F:\NCMP\POST\DSTDATE.OUT
ECHO.
PAUSE
CLS
ECHO === C26: POST /S Copy SUB ===
TYPE F:\NCMP\POST\SCPYSUB.OUT
ECHO.
PAUSE
CLS
ECHO === C27: POST /E Copy SUB inklusive leer ===
TYPE F:\NCMP\POST\ECPYSUB.OUT
ECHO.
PAUSE
CLS
ECHO === C28: POST Archive Copy SUB ===
TYPE F:\NCMP\POST\ARCHSUB.OUT
ECHO.
PAUSE
CLS
ECHO === C29: POST Source nach /M ===
TYPE F:\NCMP\POST\SRCNDIR.OUT
ECHO.
PAUSE
CLS
ECHO === C30: Cleanup Attribute ===
NPUBLIC\FLAG F:\TCOPY\SRC\A.TXT N
NPUBLIC\FLAG F:\TCOPY\SRC\B.TXT N
NPUBLIC\FLAG F:\TCOPY\SRC\SUB\C.TXT N
NPUBLIC\FLAG F:\TCOPY\DST\A.TXT N
NPUBLIC\FLAG F:\TCOPY\DST\A1.TXT N
NPUBLIC\FLAG F:\TCOPY\DST\B.TXT N
ECHO.
PAUSE
CLS
ECHO === NCPTSTN fertig ===
ECHO.
ECHO Vergleichsdateien:
ECHO F:\NCMP\PRE\*.OUT
ECHO F:\NCMP\POST\*.OUT
ECHO.
ECHO Im Serverlog pruefen:
ECHO open/create/read/write/close
ECHO overwrites
ECHO directory scans
ECHO Subdir copy /S und /S /E
ECHO Archive-bit Verhalten /A und /M
ECHO keine unerwarteten Completion Codes
ECHO.

28
test/ncopy/NCPTZIP.BAT Normal file
View File

@@ -0,0 +1,28 @@
@ECHO OFF
REM NCPTZIP.BAT
REM Optional packer for NCPTSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \NCMP
IF EXIST NCPTSTA.ZIP DEL NCPTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating NCPTSTA.ZIP > ZIP.LOG
ZIP -r NCPTSTA.ZIP RUN.LOG SUMMARY.TXT PRE POST CMP >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \TCOPY\NUL DELTREE /Y \TCOPY >> ZIP.LOG
IF EXIST \TNCOPY\NUL DELTREE /Y \TNCOPY >> ZIP.LOG
IF EXIST \NCPTEST\NUL DELTREE /Y \NCPTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\NCMP\NCPTSTA.ZIP
ECHO F:\NCMP\ZIP.LOG
ECHO.

64
test/ncopy/README.md Normal file
View File

@@ -0,0 +1,64 @@
# NCOPY tests
Novell-only NCOPY tests.
## Files
| File | Purpose |
| --- | --- |
| `NCPTSTA.BAT` | Automated no-pause/no-screenshot NCOPY test. Writes results to `F:\NCMP`. |
| `README_AUTO.md` | Details for the automated test. |
| `NCPTSTN.BAT` | Manual/pause-based NCOPY baseline test. |
| `NCPCMPN.BAT` | Manual repeat selected comparisons/output. |
| `NCPTSTM.TST` | MARS/dosutils regression notes/spec. |
## Recommended now
Use:
```text
NCPTSTA.BAT
```
Then collect:
```text
F:\NCMP\NCPTSTA.ZIP
```
or, if ZIP is not installed yet:
```text
F:\NCMP\RUN.LOG
F:\NCMP\SUMMARY.TXT
F:\NCMP\PRE\*.OUT
F:\NCMP\POST\*.OUT
F:\NCMP\CMP\*.OUT
```
# NCOPY automated BAT test
Run:
```text
NCPTSTA
```
The test writes all useful output to:
```text
F:\NCMP
```
Upload either the directory contents or run:
```text
NCPTZIP
```
and upload:
```text
F:\NCMP\NCPTSTA.ZIP
```
This version avoids wildcard deletes, interactive overwrite prompts, PAUSE, and automatic ZIP.

45
test/ncopy/README_AUTO.md Normal file
View File

@@ -0,0 +1,45 @@
# NCOPY automated test
`NCPTSTA.BAT` is the automated/no-screenshot variant of the NCOPY test.
## Run
```text
NCPTSTA.BAT
```
It does not pause and redirects tool output into result files.
## Result directory
```text
F:\NCMP
```
Important files:
```text
F:\NCMP\RUN.LOG
F:\NCMP\SUMMARY.TXT
F:\NCMP\PRE\*.OUT
F:\NCMP\POST\*.OUT
F:\NCMP\CMP\*.OUT
```
If `ZIP.EXE` is installed and in `PATH`, the script also creates:
```text
F:\NCMP\NCPTSTA.ZIP
```
## Notes
Classic DOS redirection normally captures stdout. Most Novell tools print their
normal output there, so this avoids screenshots and OCR for most tests.
Interactive prompts are avoided in this automated variant. The `/V` verify path
is tested by copying to a fresh destination instead of overwriting an existing
file that would prompt for confirmation.
`/M` is expected to clear the archive bit on copied source files, so PRE/POST
source flag comparisons may intentionally differ.

134
test/ndir/NDIRCMP.BAT Normal file
View File

@@ -0,0 +1,134 @@
@ECHO OFF
REM NDIRCMP4.BAT
REM NDIR Vergleichstest mit kleinerem Baum, /SHORT, /RIGHTS und Trustee-Aenderungen.
REM
REM Linux-Vorbereitung:
REM sh mkndirdata.sh /var/mars_nwe/SYS
REM
REM DOS-Annahmen:
REM NPUBLIC = Novell Tools
REM PUBLIC = unsere Tools
REM NDIRN = Novell-Vergleichsbaum
REM NDIRU = Unser Vergleichsbaum
REM
REM Hinweis:
REM Fuer lange Ausgaben nutzen wir /SHORT /CONTINUOUS.
REM Die PAUSEs sind absichtlich fuer Screenshots.
ECHO.
ECHO === NDIRCMP4: kompakter NDIR Test ===
ECHO Erwartet vorhandene Testbaeume NDIRN und NDIRU.
ECHO Falls nicht vorhanden: Linux mkndirdata.sh ausfuehren.
ECHO.
PAUSE
ECHO.
ECHO === Block 1A: Novell Basis NDIRN ===
ECHO NPUBLIC\NDIR NDIRN
NPUBLIC\NDIR NDIRN
PAUSE
ECHO === Block 1B: Unser Basis NDIRU ===
ECHO PUBLIC\NDIR NDIRU
PUBLIC\NDIR NDIRU
PAUSE
ECHO.
ECHO === Block 2A: Novell /DATES ===
ECHO NPUBLIC\NDIR NDIRN /DATES
NPUBLIC\NDIR NDIRN /DATES
PAUSE
ECHO === Block 2B: Unser /DATES ===
ECHO PUBLIC\NDIR NDIRU /DATES
PUBLIC\NDIR NDIRU /DATES
PAUSE
ECHO.
ECHO === Block 3A: Novell /RIGHTS ===
ECHO NPUBLIC\NDIR NDIRN /RIGHTS
NPUBLIC\NDIR NDIRN /RIGHTS
PAUSE
ECHO === Block 3B: Unser /RIGHTS ===
ECHO PUBLIC\NDIR NDIRU /RIGHTS
PUBLIC\NDIR NDIRU /RIGHTS
PAUSE
ECHO.
ECHO === Block 4B: Unser /SUB /SHORT ===
ECHO PUBLIC\NDIR NDIRU /SUB /SHORT /CONTINUOUS
PUBLIC\NDIR NDIRU /SUB /SHORT /CONTINUOUS
PAUSE
ECHO.
ECHO === Block 5B: Unser /SUB /RIGHTS /SHORT ===
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PAUSE
ECHO.
ECHO === Block 6B: Unser wildcard *.EXE /SUB /SHORT ===
ECHO PUBLIC\NDIR NDIRU\*.EXE /SUB /SHORT /CONTINUOUS
PUBLIC\NDIR NDIRU\*.EXE /SUB /SHORT /CONTINUOUS
PAUSE
ECHO.
ECHO === Block 7B: Ausgangsrechte vor GRANT/REVOKE/REMOVE ===
ECHO PUBLIC\RIGHTS NDIRU\SUB1
PUBLIC\RIGHTS NDIRU\SUB1
ECHO.
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PAUSE
ECHO.
ECHO === Block 8B: GRANT eingeschraenkte Rechte auf NDIRU\SUB1 ===
ECHO PUBLIC\GRANT R F FOR NDIRU\SUB1 TO USER MARIO
PUBLIC\GRANT R F FOR NDIRU\SUB1 TO USER MARIO
ECHO.
ECHO PUBLIC\RIGHTS NDIRU\SUB1
PUBLIC\RIGHTS NDIRU\SUB1
ECHO.
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PAUSE
ECHO.
ECHO === Block 9B: GRANT mehr Rechte auf NDIRU\SUB1 ===
ECHO PUBLIC\GRANT R W C E M F A FOR NDIRU\SUB1 TO USER MARIO
PUBLIC\GRANT R W C E M F A FOR NDIRU\SUB1 TO USER MARIO
ECHO.
ECHO PUBLIC\RIGHTS NDIRU\SUB1
PUBLIC\RIGHTS NDIRU\SUB1
ECHO.
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PAUSE
ECHO.
ECHO === Block 10B: REVOKE W M von NDIRU\SUB1 ===
ECHO PUBLIC\REVOKE W M FOR NDIRU\SUB1 FROM USER MARIO
PUBLIC\REVOKE W M FOR NDIRU\SUB1 FROM USER MARIO
ECHO.
ECHO PUBLIC\RIGHTS NDIRU\SUB1
PUBLIC\RIGHTS NDIRU\SUB1
ECHO.
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PAUSE
ECHO.
ECHO === Block 11B: REMOVE Trustee von NDIRU\SUB1 ===
ECHO PUBLIC\REMOVE USER MARIO FROM NDIRU\SUB1
PUBLIC\REMOVE USER MARIO FROM NDIRU\SUB1
ECHO.
ECHO PUBLIC\RIGHTS NDIRU\SUB1
PUBLIC\RIGHTS NDIRU\SUB1
ECHO.
ECHO PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PUBLIC\NDIR NDIRU /SUB /RIGHTS /SHORT /CONTINUOUS
PAUSE
ECHO.
ECHO === Fertig ===

172
test/ndir/NDIRTSTA.BAT Normal file
View File

@@ -0,0 +1,172 @@
@ECHO OFF
REM NDIRTSTA.BAT
REM Automated Novell NDIR baseline for MARS NWE.
REM
REM No PAUSE, no screenshots required.
REM All output is redirected into F:\NDCMP.
REM
REM Test tree:
REM F:\TNDIR
REM
REM Results:
REM F:\NDCMP\RUN.LOG
REM F:\NDCMP\SUMMARY.TXT
REM F:\NDCMP\OUT\*.OUT
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST NDIRTEST\NUL DELTREE /Y NDIRTEST\*.*
IF EXIST NDIRCMP\NUL DELTREE /Y NDIRCMP\*.*
REM --- Directory setup ---
IF NOT EXIST TNDIR\NUL MD TNDIR
IF NOT EXIST TNDIR\SUBDIR\NUL MD TNDIR\SUBDIR
IF NOT EXIST NDCMP\NUL MD NDCMP
IF NOT EXIST NDCMP\OUT\NUL MD NDCMP\OUT
REM --- Clean result files, no wildcard DEL to avoid DOS prompts ---
IF EXIST F:\NDCMP\RUN.LOG DEL F:\NDCMP\RUN.LOG
IF EXIST F:\NDCMP\SUMMARY.TXT DEL F:\NDCMP\SUMMARY.TXT
IF EXIST F:\NDCMP\ZIP.LOG DEL F:\NDCMP\ZIP.LOG
IF EXIST F:\NDCMP\NDIRTSTA.ZIP DEL F:\NDCMP\NDIRTSTA.ZIP
IF EXIST F:\NDCMP\OUT\N01_ROOT.OUT DEL F:\NDCMP\OUT\N01_ROOT.OUT
IF EXIST F:\NDCMP\OUT\N02_ALFA.OUT DEL F:\NDCMP\OUT\N02_ALFA.OUT
IF EXIST F:\NDCMP\OUT\N02_BETA.OUT DEL F:\NDCMP\OUT\N02_BETA.OUT
IF EXIST F:\NDCMP\OUT\N03_DATES.OUT DEL F:\NDCMP\OUT\N03_DATES.OUT
IF EXIST F:\NDCMP\OUT\N03_ADATE.OUT DEL F:\NDCMP\OUT\N03_ADATE.OUT
IF EXIST F:\NDCMP\OUT\N04_RGT.OUT DEL F:\NDCMP\OUT\N04_RGT.OUT
IF EXIST F:\NDCMP\OUT\N04_RGTA.OUT DEL F:\NDCMP\OUT\N04_RGTA.OUT
IF EXIST F:\NDCMP\OUT\N05_FLGA.OUT DEL F:\NDCMP\OUT\N05_FLGA.OUT
IF EXIST F:\NDCMP\OUT\N05_FLGB.OUT DEL F:\NDCMP\OUT\N05_FLGB.OUT
IF EXIST F:\NDCMP\OUT\N05_FLGG.OUT DEL F:\NDCMP\OUT\N05_FLGG.OUT
IF EXIST F:\NDCMP\OUT\N06_ATTR.OUT DEL F:\NDCMP\OUT\N06_ATTR.OUT
IF EXIST F:\NDCMP\OUT\N06_ADAT.OUT DEL F:\NDCMP\OUT\N06_ADAT.OUT
IF EXIST F:\NDCMP\OUT\N07_H.OUT DEL F:\NDCMP\OUT\N07_H.OUT
IF EXIST F:\NDCMP\OUT\N07_RO.OUT DEL F:\NDCMP\OUT\N07_RO.OUT
IF EXIST F:\NDCMP\OUT\N07_SY.OUT DEL F:\NDCMP\OUT\N07_SY.OUT
IF EXIST F:\NDCMP\OUT\N07_A.OUT DEL F:\NDCMP\OUT\N07_A.OUT
IF EXIST F:\NDCMP\OUT\N08_NOTH.OUT DEL F:\NDCMP\OUT\N08_NOTH.OUT
IF EXIST F:\NDCMP\OUT\N08_NOTR.OUT DEL F:\NDCMP\OUT\N08_NOTR.OUT
IF EXIST F:\NDCMP\OUT\N09_SUN.OUT DEL F:\NDCMP\OUT\N09_SUN.OUT
IF EXIST F:\NDCMP\OUT\N09_SSI.OUT DEL F:\NDCMP\OUT\N09_SSI.OUT
IF EXIST F:\NDCMP\OUT\N09_SUP.OUT DEL F:\NDCMP\OUT\N09_SUP.OUT
IF EXIST F:\NDCMP\OUT\N10_TXT.OUT DEL F:\NDCMP\OUT\N10_TXT.OUT
IF EXIST F:\NDCMP\OUT\N10_DAT.OUT DEL F:\NDCMP\OUT\N10_DAT.OUT
IF EXIST F:\NDCMP\OUT\N11_FO.OUT DEL F:\NDCMP\OUT\N11_FO.OUT
IF EXIST F:\NDCMP\OUT\N11_DO.OUT DEL F:\NDCMP\OUT\N11_DO.OUT
IF EXIST F:\NDCMP\OUT\N12_SUB.OUT DEL F:\NDCMP\OUT\N12_SUB.OUT
IF EXIST F:\NDCMP\OUT\N12_SDIR.OUT DEL F:\NDCMP\OUT\N12_SDIR.OUT
IF EXIST F:\NDCMP\OUT\N14_FINAL.OUT DEL F:\NDCMP\OUT\N14_FINAL.OUT
ECHO NDIRTSTA automated Novell NDIR baseline > F:\NDCMP\RUN.LOG
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\NDCMP\RUN.LOG
ECHO. >> F:\NDCMP\RUN.LOG
ECHO === SETUP TEST TREE === >> F:\NDCMP\RUN.LOG
REM Reset test files.
IF EXIST F:\TNDIR\ALPHA.TXT DEL F:\TNDIR\ALPHA.TXT
IF EXIST F:\TNDIR\BETA.TXT DEL F:\TNDIR\BETA.TXT
IF EXIST F:\TNDIR\GAMMA.DAT DEL F:\TNDIR\GAMMA.DAT
IF EXIST F:\TNDIR\SUBDIR\SUB.TXT DEL F:\TNDIR\SUBDIR\SUB.TXT
IF NOT EXIST F:\TNDIR\NUL MD F:\TNDIR
IF NOT EXIST F:\TNDIR\SUBDIR\NUL MD F:\TNDIR\SUBDIR
ECHO NDIR TEST ALPHA > F:\TNDIR\ALPHA.TXT
ECHO NDIR TEST BETA > F:\TNDIR\BETA.TXT
ECHO NDIR TEST GAMMA > F:\TNDIR\GAMMA.DAT
ECHO NDIR SUB FILE > F:\TNDIR\SUBDIR\SUB.TXT
ECHO === ATTRIBUTE CLEANUP === >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\ALPHA.TXT N >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\BETA.TXT N >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\GAMMA.DAT N >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\SUBDIR\SUB.TXT N >> F:\NDCMP\RUN.LOG
ECHO === N01 BASIS DIRECTORY === >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR > F:\NDCMP\OUT\N01_ROOT.OUT
ECHO === N02 DIRECT FILES === >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR\ALPHA.TXT > F:\NDCMP\OUT\N02_ALFA.OUT
NPUBLIC\NDIR F:\TNDIR\BETA.TXT > F:\NDCMP\OUT\N02_BETA.OUT
ECHO === N03 DATES === >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR /DATES > F:\NDCMP\OUT\N03_DATES.OUT
NPUBLIC\NDIR F:\TNDIR\ALPHA.TXT /DATES > F:\NDCMP\OUT\N03_ADATE.OUT
ECHO === N04 RIGHTS === >> F:\NDCMP\RUN.LOG
NPUBLIC\RIGHTS F:\TNDIR > F:\NDCMP\OUT\N04_RGT.OUT
NPUBLIC\NDIR F:\TNDIR /RIGHTS >> F:\NDCMP\OUT\N04_RGT.OUT
NPUBLIC\NDIR F:\TNDIR\ALPHA.TXT /RIGHTS > F:\NDCMP\OUT\N04_RGTA.OUT
ECHO === N05 SET ATTRIBUTES === >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\ALPHA.TXT +H >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\BETA.TXT +RO >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\GAMMA.DAT +Sy +A >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\ALPHA.TXT > F:\NDCMP\OUT\N05_FLGA.OUT
NPUBLIC\FLAG F:\TNDIR\BETA.TXT > F:\NDCMP\OUT\N05_FLGB.OUT
NPUBLIC\FLAG F:\TNDIR\GAMMA.DAT > F:\NDCMP\OUT\N05_FLGG.OUT
ECHO === N06 NDIR AFTER ATTRIBUTES === >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR > F:\NDCMP\OUT\N06_ATTR.OUT
NPUBLIC\NDIR F:\TNDIR /DATES > F:\NDCMP\OUT\N06_ADAT.OUT
ECHO === N07 ATTRIBUTE FILTERS === >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR /H > F:\NDCMP\OUT\N07_H.OUT
NPUBLIC\NDIR F:\TNDIR /RO > F:\NDCMP\OUT\N07_RO.OUT
NPUBLIC\NDIR F:\TNDIR /SY > F:\NDCMP\OUT\N07_SY.OUT
NPUBLIC\NDIR F:\TNDIR /A > F:\NDCMP\OUT\N07_A.OUT
ECHO === N08 NOT FILTERS === >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR /NOT H > F:\NDCMP\OUT\N08_NOTH.OUT
NPUBLIC\NDIR F:\TNDIR /NOT RO > F:\NDCMP\OUT\N08_NOTR.OUT
ECHO === N09 SORT TESTS === >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR /SORT UN > F:\NDCMP\OUT\N09_SUN.OUT
NPUBLIC\NDIR F:\TNDIR /SORT SI > F:\NDCMP\OUT\N09_SSI.OUT
NPUBLIC\NDIR F:\TNDIR /SORT UP > F:\NDCMP\OUT\N09_SUP.OUT
ECHO === N10 WILDCARDS === >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR\*.TXT > F:\NDCMP\OUT\N10_TXT.OUT
NPUBLIC\NDIR F:\TNDIR\*.DAT > F:\NDCMP\OUT\N10_DAT.OUT
ECHO === N11 FILES ONLY / DIRS ONLY === >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR /FO > F:\NDCMP\OUT\N11_FO.OUT
NPUBLIC\NDIR F:\TNDIR /DO > F:\NDCMP\OUT\N11_DO.OUT
ECHO === N12 SUBDIRECTORY TEST === >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR /SUB > F:\NDCMP\OUT\N12_SUB.OUT
NPUBLIC\NDIR F:\TNDIR\SUBDIR > F:\NDCMP\OUT\N12_SDIR.OUT
ECHO === N14 CLEANUP ATTRIBUTES === >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\ALPHA.TXT N >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\BETA.TXT N >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\GAMMA.DAT N >> F:\NDCMP\RUN.LOG
NPUBLIC\FLAG F:\TNDIR\SUBDIR\SUB.TXT N >> F:\NDCMP\RUN.LOG
NPUBLIC\NDIR F:\TNDIR > F:\NDCMP\OUT\N14_FINAL.OUT
ECHO === SUMMARY === > F:\NDCMP\SUMMARY.TXT
ECHO NDIRTSTA automated Novell NDIR baseline finished. >> F:\NDCMP\SUMMARY.TXT
ECHO. >> F:\NDCMP\SUMMARY.TXT
ECHO Outputs are in F:\NDCMP\OUT. >> F:\NDCMP\SUMMARY.TXT
ECHO Expected highlights: >> F:\NDCMP\SUMMARY.TXT
ECHO - N01_ROOT lists ALPHA.TXT, BETA.TXT, GAMMA.DAT and SUBDIR. >> F:\NDCMP\SUMMARY.TXT
ECHO - N03_DATES shows date fields. >> F:\NDCMP\SUMMARY.TXT
ECHO - N04_RGT shows rights. >> F:\NDCMP\SUMMARY.TXT
ECHO - N05_FLG* shows H, RO, SY/A attribute setup. >> F:\NDCMP\SUMMARY.TXT
ECHO - N07_* filters isolate attributes. >> F:\NDCMP\SUMMARY.TXT
ECHO - N09_* sort modes run without error. >> F:\NDCMP\SUMMARY.TXT
ECHO - N10_TXT lists TXT files; N10_DAT lists GAMMA.DAT. >> F:\NDCMP\SUMMARY.TXT
ECHO - N11_FO/N11_DO separate files/directories where supported. >> F:\NDCMP\SUMMARY.TXT
ECHO - N12_SUB includes SUBDIR\SUB.TXT. >> F:\NDCMP\SUMMARY.TXT
ECHO Optional pack results with NDIRZIP.BAT. >> F:\NDCMP\SUMMARY.TXT
ECHO.
ECHO NDIRTSTA fertig.
ECHO Ergebnisse liegen in F:\NDCMP
ECHO Optional: NDIRZIP ausfuehren.
ECHO.

27
test/ndir/NDIRZIP.BAT Normal file
View File

@@ -0,0 +1,27 @@
@ECHO OFF
REM NDIRZIP.BAT
REM Optional packer for NDIRTSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \NDCMP
IF EXIST NDIRTSTA.ZIP DEL NDIRTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating NDIRTSTA.ZIP > ZIP.LOG
ZIP -r NDIRTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \TNDIR\NUL DELTREE /Y \TNDIR >> ZIP.LOG
IF EXIST \NDIRTEST\NUL DELTREE /Y \NDIRTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\NDCMP\NDIRTSTA.ZIP
ECHO F:\NDCMP\ZIP.LOG
ECHO.

56
test/ndir/README.md Normal file
View File

@@ -0,0 +1,56 @@
# NDIR automated test
Automated Novell-only baseline for `NPUBLIC\NDIR`.
## Run
```text
NDIRTSTA
```
Results:
```text
F:\NDCMP\RUN.LOG
F:\NDCMP\SUMMARY.TXT
F:\NDCMP\OUT\*.OUT
```
Optional pack:
```text
NDIRZIP
```
Upload:
```text
F:\NDCMP\NDIRTSTA.ZIP
```
Then on Linux package with server log:
```sh
sudo ./mars_packtest_v3.sh ndirtsta 5 mario
```
The pack helper should find `/var/mars_nwe/SYS/NDCMP/NDIRTSTA.ZIP` by search.
## Test tree
```text
F:\TNDIR
```
## Coverage
- basic directory and file NDIR
- `/DATES`
- `/RIGHTS`
- attributes via `NPUBLIC\FLAG`
- filters `/H`, `/RO`, `/SY`, `/A`, `/NOT H`, `/NOT RO`
- sorts `/SORT UN`, `/SORT SI`, `/SORT UP`
- wildcards `*.TXT`, `*.DAT`
- `/FO`, `/DO`
- `/SUB`
- cleanup

46
test/remove/README.md Normal file
View File

@@ -0,0 +1,46 @@
# REMOVE baseline test
`RMVSTA.BAT` captures Novell `\NPUBLIC\REMOVE` behavior for trustee removal.
Run as `SUPERVISOR` or a user with Access Control rights:
```bat
F:
CD \
RMVSTA
RMVZIP
```
Result directory:
```text
F:\RMVCMP
```
Test directory:
```text
F:\RMVTEST
```
The setup uses `\NPUBLIC\GRANT` to create trustees for user `MARIO`, then runs `\NPUBLIC\REMOVE` for the baseline.
Note: Novell `REMOVE` help names the recursive option `/Subdirs`; this test uses `/SUBDIRS`, not `/SUBDIRECTORIES`.
Captured cases:
- `D01` help / usage
- `D02` no arguments
- `D10` remove `USER MARIO` from a directory
- `D11` remove `MARIO` without the explicit `USER` keyword
- `D20` `/SUBDIRS`
- `D21` `/FILES` on an explicit file
- `D22` `/FILES` on all files in a directory
- `D30` relative path from `F:\RMVTEST`
- `D90` no trustee
- `D91` missing user
- `D92` missing path
- `D93` `/FILES` and `/SUBDIRS` together
- `D94` bad grammar
`RMVZIP.BAT` packages `RUN.LOG`, `SUMMARY.TXT`, `OUT`, and `SETUP`, then removes the generated `F:\RMVTEST` tree so the SYS root does not accumulate test directories.

116
test/remove/RMVSTA.BAT Normal file
View File

@@ -0,0 +1,116 @@
@ECHO OFF
REM RMVSTA.BAT
REM Automated REMOVE baseline test for MARS NWE.
REM
REM Run as SUPERVISOR or a user with Access Control on F:\RMVTEST.
REM Uses \NPUBLIC\REMOVE as Novell baseline.
REM Setup uses \NPUBLIC\GRANT to create trustee assignments.
REM
REM Result tree:
REM F:\RMVCMP
REM Test tree:
REM F:\RMVTEST
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST RMVTEST\NUL DELTREE /Y RMVTEST\*.*
IF EXIST RMVCMP\NUL DELTREE /Y RMVCMP\*.*
IF NOT EXIST RMVTEST\NUL MD RMVTEST
IF NOT EXIST RMVTEST\ONE\NUL MD RMVTEST\ONE
IF NOT EXIST RMVTEST\TREE\NUL MD RMVTEST\TREE
IF NOT EXIST RMVTEST\TREE\SUB1\NUL MD RMVTEST\TREE\SUB1
IF NOT EXIST RMVTEST\TREE\SUB2\NUL MD RMVTEST\TREE\SUB2
IF NOT EXIST RMVTEST\FILES\NUL MD RMVTEST\FILES
IF NOT EXIST RMVTEST\OPTBOTH\NUL MD RMVTEST\OPTBOTH
IF NOT EXIST RMVTEST\OPTBOTH\SUB\NUL MD RMVTEST\OPTBOTH\SUB
IF NOT EXIST RMVCMP\NUL MD RMVCMP
IF NOT EXIST RMVCMP\OUT\NUL MD RMVCMP\OUT
IF NOT EXIST RMVCMP\SETUP\NUL MD RMVCMP\SETUP
ECHO REMOVE ROOT FILE > F:\RMVTEST\ROOT.TXT
ECHO REMOVE ONE FILE > F:\RMVTEST\ONE\ONE.TXT
ECHO REMOVE TREE ROOT FILE > F:\RMVTEST\TREE\TROOT.TXT
ECHO REMOVE SUB1 FILE > F:\RMVTEST\TREE\SUB1\SUB1.TXT
ECHO REMOVE SUB2 FILE > F:\RMVTEST\TREE\SUB2\SUB2.TXT
ECHO REMOVE FILE A > F:\RMVTEST\FILES\A.TXT
ECHO REMOVE FILE B > F:\RMVTEST\FILES\B.TXT
ECHO REMOVE OPT ROOT > F:\RMVTEST\OPTBOTH\O.TXT
ECHO REMOVE OPT SUB > F:\RMVTEST\OPTBOTH\SUB\S.TXT
ECHO RMVSTA REMOVE baseline test > F:\RMVCMP\RUN.LOG
ECHO Run this as SUPERVISOR or equivalent. >> F:\RMVCMP\RUN.LOG
ECHO Captures \NPUBLIC\REMOVE output against user MARIO. >> F:\RMVCMP\RUN.LOG
ECHO Setup uses \NPUBLIC\GRANT. >> F:\RMVCMP\RUN.LOG
ECHO. >> F:\RMVCMP\RUN.LOG
ECHO === D01 usage/help === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\REMOVE /? > F:\RMVCMP\OUT\D01_HELP.OUT
ECHO === D02 no arguments === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\REMOVE > F:\RMVCMP\OUT\D02_NOARGS.OUT
ECHO === D10 remove USER MARIO from directory === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\RMVTEST\ONE TO USER MARIO > F:\RMVCMP\SETUP\S10_GRANT.OUT
\NPUBLIC\REMOVE USER MARIO FROM F:\RMVTEST\ONE > F:\RMVCMP\OUT\D10_DIR_USER.OUT
ECHO === D11 remove MARIO without USER keyword === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\RMVTEST\ONE TO USER MARIO > F:\RMVCMP\SETUP\S11_GRANT.OUT
\NPUBLIC\REMOVE MARIO FROM F:\RMVTEST\ONE > F:\RMVCMP\OUT\D11_DIR_IMPLICIT.OUT
ECHO === D20 remove recursively from subdirectories === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\RMVTEST\TREE TO USER MARIO > F:\RMVCMP\SETUP\S20_ROOT.OUT
\NPUBLIC\GRANT R F FOR F:\RMVTEST\TREE\SUB1 TO USER MARIO > F:\RMVCMP\SETUP\S20_SUB1.OUT
\NPUBLIC\GRANT R F FOR F:\RMVTEST\TREE\SUB2 TO USER MARIO > F:\RMVCMP\SETUP\S20_SUB2.OUT
\NPUBLIC\REMOVE USER MARIO FROM F:\RMVTEST\TREE /SUBDIRS > F:\RMVCMP\OUT\D20_SUBDIRS.OUT
ECHO === D21 remove from explicit file using /FILES === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\RMVTEST\ONE\ONE.TXT TO USER MARIO /FILES > F:\RMVCMP\SETUP\S21_FILE.OUT
\NPUBLIC\REMOVE USER MARIO FROM F:\RMVTEST\ONE\ONE.TXT /FILES > F:\RMVCMP\OUT\D21_FILE.OUT
ECHO === D22 remove from all files in directory using /FILES === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\RMVTEST\FILES\A.TXT TO USER MARIO /FILES > F:\RMVCMP\SETUP\S22_A.OUT
\NPUBLIC\GRANT R F FOR F:\RMVTEST\FILES\B.TXT TO USER MARIO /FILES > F:\RMVCMP\SETUP\S22_B.OUT
\NPUBLIC\REMOVE USER MARIO FROM F:\RMVTEST\FILES /FILES > F:\RMVCMP\OUT\D22_FILES_DIR.OUT
ECHO === D30 relative path from F:\RMVTEST === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\RMVTEST\ONE TO USER MARIO > F:\RMVCMP\SETUP\S30_GRANT.OUT
CD \RMVTEST
\NPUBLIC\REMOVE USER MARIO FROM ONE > F:\RMVCMP\OUT\D30_REL_DIR.OUT
CD \
ECHO === D90 no trustee === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\REMOVE USER MARIO FROM F:\RMVTEST\EMPTY > F:\RMVCMP\OUT\D90_NO_TRUSTEE.OUT
ECHO === D91 missing user === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\REMOVE USER NO_SUCH_USER FROM F:\RMVTEST\ONE > F:\RMVCMP\OUT\D91_MISSING_USER.OUT
ECHO === D92 missing path === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\REMOVE USER MARIO FROM F:\RMVTEST\MISSING > F:\RMVCMP\OUT\D92_MISSING_PATH.OUT
ECHO === D93 /FILES and /SUBDIRS together === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\GRANT R F FOR F:\RMVTEST\OPTBOTH TO USER MARIO > F:\RMVCMP\SETUP\S93_DIR.OUT
\NPUBLIC\GRANT R F FOR F:\RMVTEST\OPTBOTH\SUB TO USER MARIO > F:\RMVCMP\SETUP\S93_SUB.OUT
\NPUBLIC\GRANT R F FOR F:\RMVTEST\OPTBOTH\O.TXT TO USER MARIO /FILES > F:\RMVCMP\SETUP\S93_FILE.OUT
\NPUBLIC\REMOVE USER MARIO FROM F:\RMVTEST\OPTBOTH /FILES /SUBDIRS > F:\RMVCMP\OUT\D93_BOTH_OPTS.OUT
ECHO === D94 bad grammar / missing name === >> F:\RMVCMP\RUN.LOG
\NPUBLIC\REMOVE USER FROM F:\RMVTEST\ONE > F:\RMVCMP\OUT\D94_BAD_GRAMMAR.OUT
ECHO === SUMMARY === > F:\RMVCMP\SUMMARY.TXT
ECHO RMVSTA REMOVE baseline finished. >> F:\RMVCMP\SUMMARY.TXT
ECHO. >> F:\RMVCMP\SUMMARY.TXT
ECHO Expected coverage: >> F:\RMVCMP\SUMMARY.TXT
ECHO - D10-D11 capture normal directory trustee removal syntax. >> F:\RMVCMP\SUMMARY.TXT
ECHO - D20 captures /SUBDIRS behavior with trustees on start and child dirs. >> F:\RMVCMP\SUMMARY.TXT
ECHO - D21-D22 capture /FILES behavior for explicit file and directory file set. >> F:\RMVCMP\SUMMARY.TXT
ECHO - D30 captures relative path behavior with absolute \NPUBLIC\REMOVE invocation. >> F:\RMVCMP\SUMMARY.TXT
ECHO - D90-D94 capture error and grammar cases. >> F:\RMVCMP\SUMMARY.TXT
ECHO. >> F:\RMVCMP\SUMMARY.TXT
ECHO Optional: RMVZIP ausfuehren. >> F:\RMVCMP\SUMMARY.TXT
ECHO RMVSTA fertig.
ECHO Ergebnisse liegen in F:\RMVCMP
ECHO Optional: RMVZIP ausfuehren.

25
test/remove/RMVZIP.BAT Normal file
View File

@@ -0,0 +1,25 @@
@ECHO OFF
REM RMVZIP.BAT
REM Optional packer for RMVSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \RMVCMP
IF EXIST RMVSTA.ZIP DEL RMVSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating RMVSTA.ZIP > ZIP.LOG
ZIP -r RMVSTA.ZIP RUN.LOG SUMMARY.TXT OUT SETUP >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \RMVTEST\NUL DELTREE /Y \RMVTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\RMVCMP\RMVSTA.ZIP
ECHO F:\RMVCMP\ZIP.LOG
ECHO.

55
test/renmove/README.md Normal file
View File

@@ -0,0 +1,55 @@
# Rename / move / delete tests
Automated DOS-command baseline over the NetWare redirector.
## Run
```text
RMTSTA
```
Results:
```text
F:\RCMP\RUN.LOG
F:\RCMP\SUMMARY.TXT
F:\RCMP\PRE\*.OUT
F:\RCMP\POST\*.OUT
F:\RCMP\CMP\*.OUT
```
Optional pack:
```text
RMTZIP
```
Upload:
```text
F:\RCMP\RMTSTA.ZIP
```
Then on Linux package with server log:
```sh
sudo ./mars_packtest_v3.sh rmtsta 5 mario
```
## Coverage
- file rename in same directory using `REN`
- expected failure: rename to existing target
- move-like file operation via copy+delete across directories
- directory rename using `MOVE`
- file delete
- empty directory remove
- expected failure: remove non-empty directory
## Syntax note
This client rejects directory rename with `REN`, but accepts directory rename with:
```text
MOVE olddir newdir
```

188
test/renmove/RMTSTA.BAT Normal file
View File

@@ -0,0 +1,188 @@
@ECHO OFF
REM RMTSTA.BAT
REM Automated file/directory rename, move, delete baseline for MARS NWE.
REM
REM Uses DOS commands over the NetWare redirector:
REM MD, REN, MOVE, COPY, DEL, RD
REM
REM Notes:
REM - File rename uses REN.
REM - Directory rename uses MOVE, because this client rejects REN on dirs.
REM - Some DOS/Novell messages may still appear on screen even when
REM stdout is redirected. Result files are in F:\RCMP.
REM
REM Results:
REM F:\RCMP\RUN.LOG
REM F:\RCMP\SUMMARY.TXT
REM F:\RCMP\PRE\*.OUT
REM F:\RCMP\POST\*.OUT
REM F:\RCMP\CMP\*.OUT
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST RMTTEST\NUL DELTREE /Y RMTTEST\*.*
IF EXIST RMTCMP\NUL DELTREE /Y RMTCMP\*.*
REM --- Directory setup ---
IF NOT EXIST TRMOVE\NUL MD TRMOVE
IF NOT EXIST TRMOVE\SRC\NUL MD TRMOVE\SRC
IF NOT EXIST TRMOVE\SRC\SUB\NUL MD TRMOVE\SRC\SUB
IF NOT EXIST TRMOVE\DST\NUL MD TRMOVE\DST
IF NOT EXIST TRMOVE\DFILE\NUL MD TRMOVE\DFILE
IF NOT EXIST TRMOVE\NEMPTY\NUL MD TRMOVE\NEMPTY
IF NOT EXIST RCMP\NUL MD RCMP
IF NOT EXIST RCMP\PRE\NUL MD RCMP\PRE
IF NOT EXIST RCMP\POST\NUL MD RCMP\POST
IF NOT EXIST RCMP\CMP\NUL MD RCMP\CMP
REM --- Clean result files ---
IF EXIST F:\RCMP\RUN.LOG DEL F:\RCMP\RUN.LOG
IF EXIST F:\RCMP\SUMMARY.TXT DEL F:\RCMP\SUMMARY.TXT
IF EXIST F:\RCMP\ZIP.LOG DEL F:\RCMP\ZIP.LOG
IF EXIST F:\RCMP\RMTSTA.ZIP DEL F:\RCMP\RMTSTA.ZIP
IF EXIST F:\RCMP\PRE\ROOT.OUT DEL F:\RCMP\PRE\ROOT.OUT
IF EXIST F:\RCMP\PRE\SRC.OUT DEL F:\RCMP\PRE\SRC.OUT
IF EXIST F:\RCMP\PRE\SUB.OUT DEL F:\RCMP\PRE\SUB.OUT
IF EXIST F:\RCMP\PRE\DST.OUT DEL F:\RCMP\PRE\DST.OUT
IF EXIST F:\RCMP\PRE\DFILE.OUT DEL F:\RCMP\PRE\DFILE.OUT
IF EXIST F:\RCMP\PRE\DATES.OUT DEL F:\RCMP\PRE\DATES.OUT
IF EXIST F:\RCMP\POST\ROOT.OUT DEL F:\RCMP\POST\ROOT.OUT
IF EXIST F:\RCMP\POST\SRC.OUT DEL F:\RCMP\POST\SRC.OUT
IF EXIST F:\RCMP\POST\SUB.OUT DEL F:\RCMP\POST\SUB.OUT
IF EXIST F:\RCMP\POST\DST.OUT DEL F:\RCMP\POST\DST.OUT
IF EXIST F:\RCMP\POST\DFILE.OUT DEL F:\RCMP\POST\DFILE.OUT
IF EXIST F:\RCMP\POST\NEMPTY.OUT DEL F:\RCMP\POST\NEMPTY.OUT
IF EXIST F:\RCMP\POST\DATES.OUT DEL F:\RCMP\POST\DATES.OUT
IF EXIST F:\RCMP\POST\A2.OUT DEL F:\RCMP\POST\A2.OUT
IF EXIST F:\RCMP\POST\MOVEDB.OUT DEL F:\RCMP\POST\MOVEDB.OUT
IF EXIST F:\RCMP\CMP\ROOT.OUT DEL F:\RCMP\CMP\ROOT.OUT
IF EXIST F:\RCMP\CMP\SRC.OUT DEL F:\RCMP\CMP\SRC.OUT
IF EXIST F:\RCMP\CMP\SUB.OUT DEL F:\RCMP\CMP\SUB.OUT
IF EXIST F:\RCMP\CMP\DST.OUT DEL F:\RCMP\CMP\DST.OUT
IF EXIST F:\RCMP\CMP\DFILE.OUT DEL F:\RCMP\CMP\DFILE.OUT
IF EXIST F:\RCMP\CMP\DATES.OUT DEL F:\RCMP\CMP\DATES.OUT
ECHO RMTSTA automated rename/move/delete test > F:\RCMP\RUN.LOG
ECHO Date/time stamp skipped to avoid DOS prompt. >> F:\RCMP\RUN.LOG
ECHO. >> F:\RCMP\RUN.LOG
ECHO === RESET TEST TREE === >> F:\RCMP\RUN.LOG
REM Delete old files individually if present.
IF EXIST F:\TRMOVE\SRC\A.TXT DEL F:\TRMOVE\SRC\A.TXT
IF EXIST F:\TRMOVE\SRC\A2.TXT DEL F:\TRMOVE\SRC\A2.TXT
IF EXIST F:\TRMOVE\SRC\EXIST.TXT DEL F:\TRMOVE\SRC\EXIST.TXT
IF EXIST F:\TRMOVE\SRC\SUB\B.TXT DEL F:\TRMOVE\SRC\SUB\B.TXT
IF EXIST F:\TRMOVE\DST\B.TXT DEL F:\TRMOVE\DST\B.TXT
IF EXIST F:\TRMOVE\DST\C.TXT DEL F:\TRMOVE\DST\C.TXT
IF EXIST F:\TRMOVE\DST\DELME.TXT DEL F:\TRMOVE\DST\DELME.TXT
IF EXIST F:\TRMOVE\DFILE\A.TXT DEL F:\TRMOVE\DFILE\A.TXT
IF EXIST F:\TRMOVE\DFILE\B.TXT DEL F:\TRMOVE\DFILE\B.TXT
IF EXIST F:\TRMOVE\DFILE\KEEP.TXT DEL F:\TRMOVE\DFILE\KEEP.TXT
IF EXIST F:\TRMOVE\DMOVE\A.TXT DEL F:\TRMOVE\DMOVE\A.TXT
IF EXIST F:\TRMOVE\DMOVE\B.TXT DEL F:\TRMOVE\DMOVE\B.TXT
IF EXIST F:\TRMOVE\DMOVE\KEEP.TXT DEL F:\TRMOVE\DMOVE\KEEP.TXT
IF EXIST F:\TRMOVE\NEMPTY\KEEP.TXT DEL F:\TRMOVE\NEMPTY\KEEP.TXT
IF EXIST F:\TRMOVE\EMPTY\NUL RD F:\TRMOVE\EMPTY
IF EXIST F:\TRMOVE\DMOVE\NUL RD F:\TRMOVE\DMOVE
IF EXIST F:\TRMOVE\DFILE\NUL RD F:\TRMOVE\DFILE
REM Recreate expected directories.
IF NOT EXIST F:\TRMOVE\SRC\NUL MD F:\TRMOVE\SRC
IF NOT EXIST F:\TRMOVE\SRC\SUB\NUL MD F:\TRMOVE\SRC\SUB
IF NOT EXIST F:\TRMOVE\DST\NUL MD F:\TRMOVE\DST
IF NOT EXIST F:\TRMOVE\DFILE\NUL MD F:\TRMOVE\DFILE
IF NOT EXIST F:\TRMOVE\NEMPTY\NUL MD F:\TRMOVE\NEMPTY
IF NOT EXIST F:\TRMOVE\EMPTY\NUL MD F:\TRMOVE\EMPTY
ECHO FILE A > F:\TRMOVE\SRC\A.TXT
ECHO EXIST TARGET > F:\TRMOVE\SRC\EXIST.TXT
ECHO FILE B > F:\TRMOVE\SRC\SUB\B.TXT
ECHO FILE C > F:\TRMOVE\DST\C.TXT
ECHO DELETE ME > F:\TRMOVE\DST\DELME.TXT
ECHO DIR A > F:\TRMOVE\DFILE\A.TXT
ECHO DIR B > F:\TRMOVE\DFILE\B.TXT
ECHO DIR KEEP > F:\TRMOVE\DFILE\KEEP.TXT
ECHO KEEP > F:\TRMOVE\NEMPTY\KEEP.TXT
NPUBLIC\FLAG F:\TRMOVE\SRC\A.TXT N >> F:\RCMP\RUN.LOG
NPUBLIC\FLAG F:\TRMOVE\SRC\SUB\B.TXT N >> F:\RCMP\RUN.LOG
NPUBLIC\FLAG F:\TRMOVE\DST\C.TXT N >> F:\RCMP\RUN.LOG
NPUBLIC\FLAG F:\TRMOVE\DST\DELME.TXT N >> F:\RCMP\RUN.LOG
NPUBLIC\FLAG F:\TRMOVE\DFILE\A.TXT N >> F:\RCMP\RUN.LOG
NPUBLIC\FLAG F:\TRMOVE\DFILE\B.TXT N >> F:\RCMP\RUN.LOG
NPUBLIC\FLAG F:\TRMOVE\DFILE\KEEP.TXT N >> F:\RCMP\RUN.LOG
ECHO === PRE CAPTURE === >> F:\RCMP\RUN.LOG
NPUBLIC\NDIR F:\TRMOVE > F:\RCMP\PRE\ROOT.OUT
NPUBLIC\NDIR F:\TRMOVE\SRC > F:\RCMP\PRE\SRC.OUT
NPUBLIC\NDIR F:\TRMOVE\SRC\SUB > F:\RCMP\PRE\SUB.OUT
NPUBLIC\NDIR F:\TRMOVE\DST > F:\RCMP\PRE\DST.OUT
NPUBLIC\NDIR F:\TRMOVE\DFILE > F:\RCMP\PRE\DFILE.OUT
NPUBLIC\NDIR F:\TRMOVE /DATES > F:\RCMP\PRE\DATES.OUT
ECHO === TEST 01: rename file in same directory === >> F:\RCMP\RUN.LOG
REN F:\TRMOVE\SRC\A.TXT A2.TXT >> F:\RCMP\RUN.LOG
ECHO === TEST 02: expected failure rename to existing target === >> F:\RCMP\RUN.LOG
REN F:\TRMOVE\SRC\A2.TXT EXIST.TXT >> F:\RCMP\RUN.LOG
ECHO === TEST 03: move-like file operation via COPY+DEL across directories === >> F:\RCMP\RUN.LOG
COPY F:\TRMOVE\SRC\SUB\B.TXT F:\TRMOVE\DST\B.TXT >> F:\RCMP\RUN.LOG
DEL F:\TRMOVE\SRC\SUB\B.TXT >> F:\RCMP\RUN.LOG
ECHO === TEST 04: directory rename via MOVE === >> F:\RCMP\RUN.LOG
MOVE F:\TRMOVE\DFILE F:\TRMOVE\DMOVE >> F:\RCMP\RUN.LOG
ECHO === TEST 05: delete file === >> F:\RCMP\RUN.LOG
DEL F:\TRMOVE\DST\DELME.TXT >> F:\RCMP\RUN.LOG
ECHO === TEST 06: remove empty directory === >> F:\RCMP\RUN.LOG
RD F:\TRMOVE\EMPTY >> F:\RCMP\RUN.LOG
ECHO === TEST 07: expected failure remove non-empty directory === >> F:\RCMP\RUN.LOG
RD F:\TRMOVE\NEMPTY >> F:\RCMP\RUN.LOG
ECHO === POST CAPTURE === >> F:\RCMP\RUN.LOG
NPUBLIC\NDIR F:\TRMOVE > F:\RCMP\POST\ROOT.OUT
NPUBLIC\NDIR F:\TRMOVE\SRC > F:\RCMP\POST\SRC.OUT
NPUBLIC\NDIR F:\TRMOVE\SRC\SUB > F:\RCMP\POST\SUB.OUT
NPUBLIC\NDIR F:\TRMOVE\DST > F:\RCMP\POST\DST.OUT
NPUBLIC\NDIR F:\TRMOVE\DMOVE > F:\RCMP\POST\DFILE.OUT
NPUBLIC\NDIR F:\TRMOVE\NEMPTY > F:\RCMP\POST\NEMPTY.OUT
NPUBLIC\NDIR F:\TRMOVE /DATES > F:\RCMP\POST\DATES.OUT
ECHO === COMPARE === >> F:\RCMP\RUN.LOG
FC F:\RCMP\PRE\ROOT.OUT F:\RCMP\POST\ROOT.OUT > F:\RCMP\CMP\ROOT.OUT
FC F:\RCMP\PRE\SRC.OUT F:\RCMP\POST\SRC.OUT > F:\RCMP\CMP\SRC.OUT
FC F:\RCMP\PRE\SUB.OUT F:\RCMP\POST\SUB.OUT > F:\RCMP\CMP\SUB.OUT
FC F:\RCMP\PRE\DST.OUT F:\RCMP\POST\DST.OUT > F:\RCMP\CMP\DST.OUT
FC F:\RCMP\PRE\DFILE.OUT F:\RCMP\POST\DFILE.OUT > F:\RCMP\CMP\DFILE.OUT
FC F:\RCMP\PRE\DATES.OUT F:\RCMP\POST\DATES.OUT > F:\RCMP\CMP\DATES.OUT
ECHO === DETAILED POST READBACK === >> F:\RCMP\RUN.LOG
NPUBLIC\NDIR F:\TRMOVE\SRC\A2.TXT > F:\RCMP\POST\A2.OUT
NPUBLIC\NDIR F:\TRMOVE\DST\B.TXT > F:\RCMP\POST\MOVEDB.OUT
ECHO === SUMMARY === > F:\RCMP\SUMMARY.TXT
ECHO RMTSTA automated rename/move/delete test finished. >> F:\RCMP\SUMMARY.TXT
ECHO. >> F:\RCMP\SUMMARY.TXT
ECHO Expected final state: >> F:\RCMP\SUMMARY.TXT
ECHO - SRC contains A2.TXT and EXIST.TXT. >> F:\RCMP\SUMMARY.TXT
ECHO - SRC\SUB no longer contains B.TXT. >> F:\RCMP\SUMMARY.TXT
ECHO - DST contains B.TXT and C.TXT, but not DELME.TXT. >> F:\RCMP\SUMMARY.TXT
ECHO - DFILE was renamed/moved to DMOVE via MOVE. >> F:\RCMP\SUMMARY.TXT
ECHO - EMPTY was removed. >> F:\RCMP\SUMMARY.TXT
ECHO - NEMPTY should still exist because RD non-empty should fail. >> F:\RCMP\SUMMARY.TXT
ECHO - Rename A2.TXT to EXIST.TXT is expected to fail. >> F:\RCMP\SUMMARY.TXT
ECHO. >> F:\RCMP\SUMMARY.TXT
ECHO Optional pack results with RMTZIP.BAT. >> F:\RCMP\SUMMARY.TXT
ECHO.
ECHO RMTSTA fertig.
ECHO Ergebnisse liegen in F:\RCMP
ECHO Optional: RMTZIP ausfuehren.
ECHO.

28
test/renmove/RMTZIP.BAT Normal file
View File

@@ -0,0 +1,28 @@
@ECHO OFF
REM RMTZIP.BAT
REM Optional packer for RMTSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \RCMP
IF EXIST RMTSTA.ZIP DEL RMTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating RMTSTA.ZIP > ZIP.LOG
ZIP -r RMTSTA.ZIP RUN.LOG SUMMARY.TXT PRE POST CMP >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \TRMOVE\NUL DELTREE /Y \TRMOVE >> ZIP.LOG
IF EXIST \RMTTEST\NUL DELTREE /Y \RMTTEST >> ZIP.LOG
IF EXIST \DFILE\NUL DELTREE /Y \DFILE >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\RCMP\RMTSTA.ZIP
ECHO F:\RCMP\ZIP.LOG
ECHO.

31
test/revoke/README.md Normal file
View File

@@ -0,0 +1,31 @@
# REVOKE baseline test
Scripts:
- `RVKSTA.BAT` creates `F:\RVKTEST`, uses Novell `\NPUBLIC\GRANT` for setup, then captures Novell `\NPUBLIC\REVOKE` output into `F:\RVKCMP\OUT`. User `MARIO` is used as trustee target.
- `RVKZIP.BAT` packages `RUN.LOG`, `SUMMARY.TXT`, `SETUP`, and `OUT` as `F:\RVKCMP\RVKSTA.ZIP`.
Run as `SUPERVISOR` or an equivalent user with Access Control rights on `F:\RVKTEST`.
Covered cases:
- help and no-argument grammar
- normal directory revoke
- `ALL` revoke / trustee removal
- `/SUBDIRECTORIES` with trustees placed directly on child directories
- `/FILES` on an explicit file and on a directory file set
- relative path invocation from inside the test directory while invoking `\NPUBLIC\REVOKE` absolutely
- no trustee, missing user, missing path behavior, `/FILES` plus `/SUBDIRECTORIES` option-combination behavior, and bad grammar
This test is still Novell-baseline-only. Later comparison scripts should run the same command set through `NPUBLIC` and `PUBLIC` with normalized output.
Notes from the first baseline run:
- `REVOKE /SUBDIRECTORIES` did not exercise child paths unless trustees existed on the child directories themselves, so `D20` now uses `SUBTST\S1` and `SUBTST\S2` with direct trustee setup.
- Novell `REVOKE` may report `No trustee for the specified directory.` for a missing path before a separate missing-path diagnostic is reached; `D92` records that baseline behavior.
- `D93` now uses an independent tree with directory, file, and subdirectory trustees so the `/FILES /SUBDIRECTORIES` option combination is tested without being masked by missing trustee setup.
Retest focus after the fix:
- `D20_SUBDIRS_REVOKE_CE.OUT` should no longer be masked by a missing trustee on the named root.
- `D92_MISSING_PATH.OUT` records the exact Novell diagnostic for a missing path, even if that diagnostic is still `No trustee for the specified directory.`
- `D93_FILES_AND_SUBDIRS.OUT` runs on a prepared tree with directory, file, and subdirectory trustees, so the `/FILES /SUBDIRECTORIES` combination is no longer masked by setup.

121
test/revoke/RVKSTA.BAT Normal file
View File

@@ -0,0 +1,121 @@
@ECHO OFF
REM RVKSTA.BAT
REM Automated REVOKE baseline test for MARS NWE.
REM
REM Run as SUPERVISOR or a user with Access Control on F:\RVKTEST.
REM Uses \NPUBLIC\GRANT for setup and \NPUBLIC\REVOKE as Novell baseline.
REM
REM Result tree:
REM F:\RVKCMP
REM Test tree:
REM F:\RVKTEST
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST RVKTEST\NUL DELTREE /Y RVKTEST\*.*
IF EXIST RVKCMP\NUL DELTREE /Y RVKCMP\*.*
IF NOT EXIST RVKTEST\NUL MD RVKTEST
IF NOT EXIST RVKTEST\ONE\NUL MD RVKTEST\ONE
IF NOT EXIST RVKTEST\TREE\NUL MD RVKTEST\TREE
IF NOT EXIST RVKTEST\TREE\SUB1\NUL MD RVKTEST\TREE\SUB1
IF NOT EXIST RVKTEST\TREE\SUB2\NUL MD RVKTEST\TREE\SUB2
IF NOT EXIST RVKTEST\SUBTST\NUL MD RVKTEST\SUBTST
IF NOT EXIST RVKTEST\SUBTST\S1\NUL MD RVKTEST\SUBTST\S1
IF NOT EXIST RVKTEST\SUBTST\S2\NUL MD RVKTEST\SUBTST\S2
IF NOT EXIST RVKTEST\OPTBOTH\NUL MD RVKTEST\OPTBOTH
IF NOT EXIST RVKTEST\OPTBOTH\SUB\NUL MD RVKTEST\OPTBOTH\SUB
IF NOT EXIST RVKTEST\FILES\NUL MD RVKTEST\FILES
IF NOT EXIST RVKTEST\EMPTY\NUL MD RVKTEST\EMPTY
IF NOT EXIST RVKCMP\NUL MD RVKCMP
IF NOT EXIST RVKCMP\OUT\NUL MD RVKCMP\OUT
IF NOT EXIST RVKCMP\SETUP\NUL MD RVKCMP\SETUP
ECHO REVOKE ONE FILE > F:\RVKTEST\ONE\ONE.TXT
ECHO REVOKE TREE FILE > F:\RVKTEST\TREE\TROOT.TXT
ECHO REVOKE SUB1 FILE > F:\RVKTEST\TREE\SUB1\SUB1.TXT
ECHO REVOKE SUB2 FILE > F:\RVKTEST\TREE\SUB2\SUB2.TXT
ECHO REVOKE SUBDIRECTORY S1 > F:\RVKTEST\SUBTST\S1\S1.TXT
ECHO REVOKE SUBDIRECTORY S2 > F:\RVKTEST\SUBTST\S2\S2.TXT
ECHO REVOKE OPTION ROOT > F:\RVKTEST\OPTBOTH\ROOT.TXT
ECHO REVOKE OPTION SUB > F:\RVKTEST\OPTBOTH\SUB\SUB.TXT
ECHO REVOKE FILE A > F:\RVKTEST\FILES\A.TXT
ECHO REVOKE FILE B > F:\RVKTEST\FILES\B.TXT
ECHO RVKSTA REVOKE baseline test > F:\RVKCMP\RUN.LOG
ECHO Run this as SUPERVISOR or equivalent. >> F:\RVKCMP\RUN.LOG
ECHO Setup uses \NPUBLIC\GRANT, test captures \NPUBLIC\REVOKE output for user MARIO. >> F:\RVKCMP\RUN.LOG
ECHO. >> F:\RVKCMP\RUN.LOG
ECHO === SETUP grants === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\ONE TO USER MARIO > F:\RVKCMP\SETUP\S01_ONE_GRANT.OUT
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\TREE TO USER MARIO /SUBDIRECTORIES > F:\RVKCMP\SETUP\S02_TREE_GRANT.OUT
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\FILES\A.TXT TO USER MARIO /FILES > F:\RVKCMP\SETUP\S03_FILE_A_GRANT.OUT
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\FILES\B.TXT TO USER MARIO /FILES > F:\RVKCMP\SETUP\S04_FILE_B_GRANT.OUT
REM Direct subdirectory trustees for D20, because REVOKE /SUBDIRECTORIES acts on trustees below the named directory.
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\SUBTST\S1 TO USER MARIO > F:\RVKCMP\SETUP\S05_SUBTST_S1_GRANT.OUT
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\SUBTST\S2 TO USER MARIO > F:\RVKCMP\SETUP\S06_SUBTST_S2_GRANT.OUT
REM Independent tree with both files and subdirectories for D93 option-combination behavior.
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\OPTBOTH TO USER MARIO > F:\RVKCMP\SETUP\S07_OPTBOTH_ROOT_GRANT.OUT
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\OPTBOTH\SUB TO USER MARIO > F:\RVKCMP\SETUP\S08_OPTBOTH_SUB_GRANT.OUT
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\OPTBOTH\ROOT.TXT TO USER MARIO /FILES > F:\RVKCMP\SETUP\S09_OPTBOTH_FILE_GRANT.OUT
ECHO === D01 usage/help === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE /? > F:\RVKCMP\OUT\D01_HELP.OUT
ECHO === D02 no arguments === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE > F:\RVKCMP\OUT\D02_NOARGS.OUT
ECHO === D10 revoke W M from directory === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE W M FOR F:\RVKTEST\ONE FROM USER MARIO > F:\RVKCMP\OUT\D10_DIR_REVOKE_WM.OUT
ECHO === D11 revoke ALL from directory / remove trustee === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE ALL FOR F:\RVKTEST\ONE FROM USER MARIO > F:\RVKCMP\OUT\D11_DIR_REVOKE_ALL.OUT
ECHO === D20 revoke C E recursively from direct subdirectory trustees === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE C E FOR F:\RVKTEST\SUBTST FROM USER MARIO /SUBDIRECTORIES > F:\RVKCMP\OUT\D20_SUBDIRS_REVOKE_CE.OUT
ECHO === D21 revoke R from one explicit file === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE R FOR F:\RVKTEST\FILES\A.TXT FROM USER MARIO /FILES > F:\RVKCMP\OUT\D21_FILE_REVOKE_R.OUT
ECHO === D22 revoke W from files in a directory === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE W FOR F:\RVKTEST\FILES FROM USER MARIO /FILES > F:\RVKCMP\OUT\D22_FILES_DIR_REVOKE_W.OUT
ECHO === D30 relative path from F:\RVKTEST === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\GRANT R W C E M F A FOR F:\RVKTEST\ONE TO USER MARIO > F:\RVKCMP\SETUP\S30_ONE_REGRANT.OUT
CD \RVKTEST
\NPUBLIC\REVOKE W FOR ONE FROM USER MARIO > F:\RVKCMP\OUT\D30_REL_DIR_REVOKE_W.OUT
CD \
ECHO === D90 no trustee on directory === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE R FOR F:\RVKTEST\EMPTY FROM USER MARIO > F:\RVKCMP\OUT\D90_NO_TRUSTEE.OUT
ECHO === D91 missing user === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE R FOR F:\RVKTEST\ONE FROM USER NO_SUCH_USER > F:\RVKCMP\OUT\D91_MISSING_USER.OUT
ECHO === D92 missing path === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE R FOR F:\RVKTEST\MISSING\NOFILE.TXT FROM USER MARIO > F:\RVKCMP\OUT\D92_MISSING_PATH.OUT
ECHO === D93 both /FILES and /SUBDIRECTORIES === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE R FOR F:\RVKTEST\OPTBOTH FROM USER MARIO /FILES /SUBDIRECTORIES > F:\RVKCMP\OUT\D93_FILES_AND_SUBDIRS.OUT
ECHO === D94 bad grammar / missing FROM === >> F:\RVKCMP\RUN.LOG
\NPUBLIC\REVOKE R FOR F:\RVKTEST\ONE USER MARIO > F:\RVKCMP\OUT\D94_BAD_GRAMMAR.OUT
ECHO === SUMMARY === > F:\RVKCMP\SUMMARY.TXT
ECHO RVKSTA REVOKE baseline finished. >> F:\RVKCMP\SUMMARY.TXT
ECHO. >> F:\RVKCMP\SUMMARY.TXT
ECHO Expected: >> F:\RVKCMP\SUMMARY.TXT
ECHO - D10/D11 capture normal directory revoke and trustee removal. >> F:\RVKCMP\SUMMARY.TXT
ECHO - D20 captures /SUBDIRECTORIES behavior using direct trustees on child directories. >> F:\RVKCMP\SUMMARY.TXT
ECHO - D21/D22 capture /FILES behavior for explicit files and directory file sets. >> F:\RVKCMP\SUMMARY.TXT
ECHO - D30 captures relative path behavior with absolute \NPUBLIC\REVOKE invocation. >> F:\RVKCMP\SUMMARY.TXT
ECHO - D90-D94 capture no-trustee, missing-user, missing-path/Novell no-trustee behavior, option combination, and grammar errors. >> F:\RVKCMP\SUMMARY.TXT
ECHO. >> F:\RVKCMP\SUMMARY.TXT
ECHO Optional: RVKZIP ausfuehren. >> F:\RVKCMP\SUMMARY.TXT
ECHO RVKSTA fertig.
ECHO Ergebnisse liegen in F:\RVKCMP
ECHO Optional: RVKZIP ausfuehren.

26
test/revoke/RVKZIP.BAT Normal file
View File

@@ -0,0 +1,26 @@
@ECHO OFF
REM RVKZIP.BAT
REM Optional packer for RVKSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \RVKCMP
IF EXIST RVKSTA.ZIP DEL RVKSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating RVKSTA.ZIP > ZIP.LOG
ZIP -r RVKSTA.ZIP RUN.LOG SUMMARY.TXT SETUP OUT >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \RVKTEST\NUL DELTREE /Y \RVKTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\RVKCMP\RVKSTA.ZIP
ECHO F:\RVKCMP\ZIP.LOG
ECHO.

23
test/rights/README.md Normal file
View File

@@ -0,0 +1,23 @@
# RGHTSTA - RIGHTS baseline test
Novell-only baseline for `RIGHTS` behavior.
Runs `\NPUBLIC\RIGHTS` against a small generated test tree:
- default/current directory from `F:\`
- explicit directory and subdirectory paths
- explicit file and nested file paths
- default/current directory from inside the test directory
- relative file and relative directory paths
- missing directory/file paths
- too-many-arguments and `/?` usage/help cases
Results are written to `F:\RGHTCMP`. Test input files are generated in `F:\RGHTEST`.
Optional packaging is done with `RGHTZIP.BAT`.
This test does not use `PUBLIC` yet and does not modify trustees. It is only
for capturing Novell `NPUBLIC\RIGHTS` output/formatting before the later
`NPUBLIC`/`PUBLIC` comparison scripts are added.
Note: commands use absolute `\NPUBLIC\RIGHTS` so relative-path tests from inside `F:\RGHTEST` do not accidentally look for `F:\RGHTEST\NPUBLIC\RIGHTS`.

87
test/rights/RGHTSTA.BAT Normal file
View File

@@ -0,0 +1,87 @@
@ECHO OFF
REM RGHTSTA.BAT
REM Automated RIGHTS baseline test for MARS NWE.
REM
REM Uses \NPUBLIC\RIGHTS as Novell baseline for currently implemented tool behavior.
REM This test is read-only from the RIGHTS tool point of view. It only creates
REM a small local test tree so directory, file, relative, current-directory,
REM missing-path, and usage output can be captured.
REM
REM Result tree:
REM F:\RGHTCMP
REM Test tree:
REM F:\RGHTEST
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST RGHTEST\NUL DELTREE /Y RGHTEST\*.*
IF EXIST RGHTCMP\NUL DELTREE /Y RGHTCMP\*.*
IF NOT EXIST RGHTEST\NUL MD RGHTEST
IF NOT EXIST RGHTEST\SUBDIR\NUL MD RGHTEST\SUBDIR
IF NOT EXIST RGHTCMP\NUL MD RGHTCMP
IF NOT EXIST RGHTCMP\OUT\NUL MD RGHTCMP\OUT
ECHO RIGHTS ROOT FILE > F:\RGHTEST\FILE.TXT
ECHO RIGHTS INNER FILE > F:\RGHTEST\SUBDIR\INNER.TXT
ECHO RGHTSTA RIGHTS baseline test > F:\RGHTCMP\RUN.LOG
ECHO Creates F:\RGHTEST and captures \NPUBLIC\RIGHTS output. >> F:\RGHTCMP\RUN.LOG
ECHO. >> F:\RGHTCMP\RUN.LOG
ECHO === D01 default/current directory from F:\ === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS > F:\RGHTCMP\OUT\D01_CURRENT_ROOT.OUT
ECHO === D02 explicit test directory === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS F:\RGHTEST > F:\RGHTCMP\OUT\D02_TESTDIR.OUT
ECHO === D03 explicit subdirectory === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS F:\RGHTEST\SUBDIR > F:\RGHTCMP\OUT\D03_SUBDIR.OUT
ECHO === D04 explicit file === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS F:\RGHTEST\FILE.TXT > F:\RGHTCMP\OUT\D04_FILE.OUT
ECHO === D05 explicit nested file === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS F:\RGHTEST\SUBDIR\INNER.TXT > F:\RGHTCMP\OUT\D05_INNER_FILE.OUT
ECHO === D06 default/current directory from F:\RGHTEST === >> F:\RGHTCMP\RUN.LOG
CD \RGHTEST
\NPUBLIC\RIGHTS > F:\RGHTCMP\OUT\D06_CURRENT_TESTDIR.OUT
ECHO === D07 relative file from F:\RGHTEST === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS FILE.TXT > F:\RGHTCMP\OUT\D07_REL_FILE.OUT
ECHO === D08 relative subdir from F:\RGHTEST === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS SUBDIR > F:\RGHTCMP\OUT\D08_REL_SUBDIR.OUT
CD \
ECHO === D90 missing directory/path === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS F:\RGHTEST\MISSING > F:\RGHTCMP\OUT\D90_MISSING_DIR.OUT
ECHO === D91 missing file/path === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS F:\RGHTEST\NOFILE.TXT > F:\RGHTCMP\OUT\D91_MISSING_FILE.OUT
ECHO === D98 too many arguments === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS F:\RGHTEST EXTRA > F:\RGHTCMP\OUT\D98_TOO_MANY.OUT
ECHO === D99 usage/help === >> F:\RGHTCMP\RUN.LOG
\NPUBLIC\RIGHTS /? > F:\RGHTCMP\OUT\D99_HELP.OUT
ECHO === SUMMARY === > F:\RGHTCMP\SUMMARY.TXT
ECHO RGHTSTA RIGHTS baseline finished. >> F:\RGHTCMP\SUMMARY.TXT
ECHO. >> F:\RGHTCMP\SUMMARY.TXT
ECHO Expected: >> F:\RGHTCMP\SUMMARY.TXT
ECHO - D01/D02/D03/D06/D08 capture directory rights formatting. >> F:\RGHTCMP\SUMMARY.TXT
ECHO - D04/D05/D07 capture file rights formatting. >> F:\RGHTCMP\SUMMARY.TXT
ECHO - D07/D08 capture relative path behavior. >> F:\RGHTCMP\SUMMARY.TXT
ECHO - D90/D91 capture missing-path errors. >> F:\RGHTCMP\SUMMARY.TXT
ECHO - D98/D99 capture usage/help behavior. >> F:\RGHTCMP\SUMMARY.TXT
ECHO. >> F:\RGHTCMP\SUMMARY.TXT
ECHO Optional: RGHTZIP ausfuehren. >> F:\RGHTCMP\SUMMARY.TXT
ECHO RGHTSTA fertig.
ECHO Ergebnisse liegen in F:\RGHTCMP
ECHO Optional: RGHTZIP ausfuehren.

26
test/rights/RGHTZIP.BAT Normal file
View File

@@ -0,0 +1,26 @@
@ECHO OFF
REM RGHTZIP.BAT
REM Optional packer for RGHTSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \RGHTCMP
IF EXIST RGHTSTA.ZIP DEL RGHTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating RGHTSTA.ZIP > ZIP.LOG
ZIP -r RGHTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \RGHTEST\NUL DELTREE /Y \RGHTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\RGHTCMP\RGHTSTA.ZIP
ECHO F:\RGHTCMP\ZIP.LOG
ECHO.

76
test/rightsuser/README.md Normal file
View File

@@ -0,0 +1,76 @@
# Rights user / trustee practical matrix test
This test checks whether trustee rights granted to `MARIO` actually control
real DOS operations. It also contains a rename-rights matrix.
## Files
| File | Run as | Purpose |
| --- | --- | --- |
| `RUTPRE.BAT` | SUPERVISOR | Create test tree and grant rights to MARIO. |
| `RUTMARIO.BAT` | MARIO | Perform real operations. |
| `RUTPOST.BAT` | SUPERVISOR | Capture final state and summary. |
| `RUTZIP.BAT` | SUPERVISOR | Pack results into `RUTSTA.ZIP`. |
## Flow
```text
Login SUPERVISOR
RUTPRE
Logout / Login MARIO
RUTMARIO
Logout / Login SUPERVISOR
RUTPOST
RUTZIP
```
Result ZIP:
```text
F:\RUCMP\RUTSTA.ZIP
```
Linux package with server log:
```sh
sudo ./mars_packtest_v3.sh rutsta 5 mario
```
## Rename matrix
The previous run showed rename failing with `R W M F` while ALL rights worked.
This version creates four directories:
```text
MOD1 = R W M F
MOD2 = R W C M F
MOD3 = R W E M F
MOD4 = R W C E M F
```
`RUTMARIO.BAT` tries:
```text
REN F:\RUTEST\MODx\M.TXT M2.TXT
```
The result is written to:
```text
F:\RUCMP\MARIO\U06.OUT
```
## Other coverage
- R/F read + file scan
- R/F/C create
- R/W/F write/append
- R/F/E erase
- F only directory scan
- R/F/A access-control test
- R/W/C/E/M/F/A all-rights operation set
`RUTPRE.BAT` now also grants MARIO write/create rights to `F:\RUCMP\MARIO`,
so the `Uxx.OUT` files should be created.

View File

@@ -0,0 +1,82 @@
@ECHO OFF
REM RUTMARIO.BAT
REM Rights User Test actions.
REM
REM Run as MARIO.
REM Writes result files to F:\RUCMP\MARIO.
F:
CD \
ECHO === RUTMARIO actions as normal user === >> F:\RUCMP\RUN.LOG
ECHO === U01 RONLY read/list should work === > F:\RUCMP\MARIO\U01.OUT
TYPE F:\RUTEST\RONLY\READ.TXT >> F:\RUCMP\MARIO\U01.OUT
NPUBLIC\NDIR F:\RUTEST\RONLY >> F:\RUCMP\MARIO\U01.OUT
ECHO === U02 RONLY create should fail === > F:\RUCMP\MARIO\U02.OUT
ECHO SHOULD FAIL > F:\RUTEST\RONLY\NEW.TXT
IF EXIST F:\RUTEST\RONLY\NEW.TXT ECHO UNEXPECTED: NEW.TXT EXISTS >> F:\RUCMP\MARIO\U02.OUT
IF NOT EXIST F:\RUTEST\RONLY\NEW.TXT ECHO OK: NEW.TXT not created >> F:\RUCMP\MARIO\U02.OUT
ECHO === U03 CREATE create should work === > F:\RUCMP\MARIO\U03.OUT
ECHO CREATE BY MARIO > F:\RUTEST\CREATE\NEW.TXT
IF EXIST F:\RUTEST\CREATE\NEW.TXT ECHO OK: CREATE\NEW.TXT exists >> F:\RUCMP\MARIO\U03.OUT
IF NOT EXIST F:\RUTEST\CREATE\NEW.TXT ECHO FAIL: CREATE\NEW.TXT missing >> F:\RUCMP\MARIO\U03.OUT
NPUBLIC\NDIR F:\RUTEST\CREATE >> F:\RUCMP\MARIO\U03.OUT
ECHO === U04 WRITE append should work === > F:\RUCMP\MARIO\U04.OUT
ECHO APPEND BY MARIO >> F:\RUTEST\WRITE\W.TXT
TYPE F:\RUTEST\WRITE\W.TXT >> F:\RUCMP\MARIO\U04.OUT
ECHO === U05 ERASE delete should work === > F:\RUCMP\MARIO\U05.OUT
DEL F:\RUTEST\ERASE\E.TXT
IF EXIST F:\RUTEST\ERASE\E.TXT ECHO FAIL: ERASE\E.TXT still exists >> F:\RUCMP\MARIO\U05.OUT
IF NOT EXIST F:\RUTEST\ERASE\E.TXT ECHO OK: ERASE\E.TXT deleted >> F:\RUCMP\MARIO\U05.OUT
ECHO === U06 MODIFY RENAME MATRIX === > F:\RUCMP\MARIO\U06.OUT
ECHO --- MOD1 rights R W M F --- >> F:\RUCMP\MARIO\U06.OUT
REN F:\RUTEST\MOD1\M.TXT M2.TXT
IF EXIST F:\RUTEST\MOD1\M2.TXT ECHO MOD1 OK: M2.TXT exists >> F:\RUCMP\MARIO\U06.OUT
IF NOT EXIST F:\RUTEST\MOD1\M2.TXT ECHO MOD1 FAIL: M2.TXT missing >> F:\RUCMP\MARIO\U06.OUT
NPUBLIC\NDIR F:\RUTEST\MOD1 >> F:\RUCMP\MARIO\U06.OUT
ECHO --- MOD2 rights R W C M F --- >> F:\RUCMP\MARIO\U06.OUT
REN F:\RUTEST\MOD2\M.TXT M2.TXT
IF EXIST F:\RUTEST\MOD2\M2.TXT ECHO MOD2 OK: M2.TXT exists >> F:\RUCMP\MARIO\U06.OUT
IF NOT EXIST F:\RUTEST\MOD2\M2.TXT ECHO MOD2 FAIL: M2.TXT missing >> F:\RUCMP\MARIO\U06.OUT
NPUBLIC\NDIR F:\RUTEST\MOD2 >> F:\RUCMP\MARIO\U06.OUT
ECHO --- MOD3 rights R W E M F --- >> F:\RUCMP\MARIO\U06.OUT
REN F:\RUTEST\MOD3\M.TXT M2.TXT
IF EXIST F:\RUTEST\MOD3\M2.TXT ECHO MOD3 OK: M2.TXT exists >> F:\RUCMP\MARIO\U06.OUT
IF NOT EXIST F:\RUTEST\MOD3\M2.TXT ECHO MOD3 FAIL: M2.TXT missing >> F:\RUCMP\MARIO\U06.OUT
NPUBLIC\NDIR F:\RUTEST\MOD3 >> F:\RUCMP\MARIO\U06.OUT
ECHO --- MOD4 rights R W C E M F --- >> F:\RUCMP\MARIO\U06.OUT
REN F:\RUTEST\MOD4\M.TXT M2.TXT
IF EXIST F:\RUTEST\MOD4\M2.TXT ECHO MOD4 OK: M2.TXT exists >> F:\RUCMP\MARIO\U06.OUT
IF NOT EXIST F:\RUTEST\MOD4\M2.TXT ECHO MOD4 FAIL: M2.TXT missing >> F:\RUCMP\MARIO\U06.OUT
NPUBLIC\NDIR F:\RUTEST\MOD4 >> F:\RUCMP\MARIO\U06.OUT
ECHO === U07 SCAN list should work, read may fail === > F:\RUCMP\MARIO\U07.OUT
NPUBLIC\NDIR F:\RUTEST\SCAN >> F:\RUCMP\MARIO\U07.OUT
TYPE F:\RUTEST\SCAN\S.TXT >> F:\RUCMP\MARIO\U07.OUT
ECHO === U08 ACCESS rights display/change attempt === > F:\RUCMP\MARIO\U08.OUT
NPUBLIC\RIGHTS F:\RUTEST\ACCESS >> F:\RUCMP\MARIO\U08.OUT
NPUBLIC\GRANT R F FOR F:\RUTEST\ACCESS TO USER MARIO >> F:\RUCMP\MARIO\U08.OUT
NPUBLIC\RIGHTS F:\RUTEST\ACCESS >> F:\RUCMP\MARIO\U08.OUT
ECHO === U09 ALL all operations should work === > F:\RUCMP\MARIO\U09.OUT
TYPE F:\RUTEST\ALL\ALL.TXT >> F:\RUCMP\MARIO\U09.OUT
ECHO ALL NEW BY MARIO > F:\RUTEST\ALL\NEW.TXT
REN F:\RUTEST\ALL\ALL.TXT ALL2.TXT
DEL F:\RUTEST\ALL\NEW.TXT
NPUBLIC\NDIR F:\RUTEST\ALL >> F:\RUCMP\MARIO\U09.OUT
NPUBLIC\NDIR F:\RUTEST /RIGHTS > F:\RUCMP\MARIO\ROOTRGHT.OUT
ECHO === RUTMARIO fertig ===
ECHO Jetzt wieder als SUPERVISOR einloggen und RUTPOST ausfuehren.

View File

@@ -0,0 +1,55 @@
@ECHO OFF
REM RUTPOST.BAT
REM Rights User Test POST.
REM
REM Run as SUPERVISOR after RUTMARIO.BAT.
F:
CD \
ECHO === RUTPOST supervisor readback === >> F:\RUCMP\RUN.LOG
NPUBLIC\NDIR F:\RUTEST > F:\RUCMP\POST\ROOT.OUT
NPUBLIC\NDIR F:\RUTEST /RIGHTS > F:\RUCMP\POST\ROOTRGHT.OUT
NPUBLIC\NDIR F:\RUTEST\RONLY > F:\RUCMP\POST\RONLY.OUT
NPUBLIC\NDIR F:\RUTEST\CREATE > F:\RUCMP\POST\CREATE.OUT
NPUBLIC\NDIR F:\RUTEST\WRITE > F:\RUCMP\POST\WRITE.OUT
NPUBLIC\NDIR F:\RUTEST\ERASE > F:\RUCMP\POST\ERASE.OUT
NPUBLIC\NDIR F:\RUTEST\SCAN > F:\RUCMP\POST\SCAN.OUT
NPUBLIC\NDIR F:\RUTEST\ACCESS > F:\RUCMP\POST\ACCESS.OUT
NPUBLIC\NDIR F:\RUTEST\ALL > F:\RUCMP\POST\ALL.OUT
NPUBLIC\NDIR F:\RUTEST\MOD1 > F:\RUCMP\POST\MOD1.OUT
NPUBLIC\NDIR F:\RUTEST\MOD2 > F:\RUCMP\POST\MOD2.OUT
NPUBLIC\NDIR F:\RUTEST\MOD3 > F:\RUCMP\POST\MOD3.OUT
NPUBLIC\NDIR F:\RUTEST\MOD4 > F:\RUCMP\POST\MOD4.OUT
NPUBLIC\RIGHTS F:\RUTEST\MOD1 > F:\RUCMP\POST\RMOD1.OUT
NPUBLIC\RIGHTS F:\RUTEST\MOD2 > F:\RUCMP\POST\RMOD2.OUT
NPUBLIC\RIGHTS F:\RUTEST\MOD3 > F:\RUCMP\POST\RMOD3.OUT
NPUBLIC\RIGHTS F:\RUTEST\MOD4 > F:\RUCMP\POST\RMOD4.OUT
FC F:\RUCMP\PRE\ROOT.OUT F:\RUCMP\POST\ROOT.OUT > F:\RUCMP\CMP\ROOT.OUT
FC F:\RUCMP\PRE\ROOTRGHT.OUT F:\RUCMP\POST\ROOTRGHT.OUT > F:\RUCMP\CMP\ROOTRGHT.OUT
ECHO === SUMMARY === > F:\RUCMP\SUMMARY.TXT
ECHO RUTSTA rights-user matrix test finished. >> F:\RUCMP\SUMMARY.TXT
ECHO. >> F:\RUCMP\SUMMARY.TXT
ECHO Expected high-level results: >> F:\RUCMP\SUMMARY.TXT
ECHO - RONLY: read/list OK, create should fail. >> F:\RUCMP\SUMMARY.TXT
ECHO - CREATE: create NEW.TXT should work. >> F:\RUCMP\SUMMARY.TXT
ECHO - WRITE: append to W.TXT should work. >> F:\RUCMP\SUMMARY.TXT
ECHO - ERASE: E.TXT should be deleted. >> F:\RUCMP\SUMMARY.TXT
ECHO - MOD1 R W M F: previous baseline, likely rename fail. >> F:\RUCMP\SUMMARY.TXT
ECHO - MOD2 R W C M F: tests whether C is needed for rename. >> F:\RUCMP\SUMMARY.TXT
ECHO - MOD3 R W E M F: tests whether E is needed for rename. >> F:\RUCMP\SUMMARY.TXT
ECHO - MOD4 R W C E M F: tests C+E with M. >> F:\RUCMP\SUMMARY.TXT
ECHO - SCAN: NDIR should show file; TYPE may fail because R was not granted. >> F:\RUCMP\SUMMARY.TXT
ECHO - ACCESS: RIGHTS/GRANT behavior recorded in MARIO\U08.OUT. >> F:\RUCMP\SUMMARY.TXT
ECHO - ALL: read/create/rename/delete should work. >> F:\RUCMP\SUMMARY.TXT
ECHO. >> F:\RUCMP\SUMMARY.TXT
ECHO Review F:\RUCMP\MARIO\U06.OUT for rename matrix. >> F:\RUCMP\SUMMARY.TXT
ECHO Optional pack results with RUTZIP.BAT. >> F:\RUCMP\SUMMARY.TXT
ECHO === RUTPOST fertig ===
ECHO Ergebnisse liegen in F:\RUCMP
ECHO Optional: RUTZIP ausfuehren.

142
test/rightsuser/RUTPRE.BAT Normal file
View File

@@ -0,0 +1,142 @@
@ECHO OFF
REM RUTPRE.BAT
REM Rights User Test PREP.
REM
REM Run as SUPERVISOR.
REM Creates test tree and grants selected trustee rights to user MARIO.
REM
REM Test tree:
REM F:\RUTEST
REM
REM Results:
REM F:\RUCMP\PRE\*.OUT
REM F:\RUCMP\RUN.LOG
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST RUTEST\NUL DELTREE /Y RUTEST\*.*
IF EXIST RUCMP\NUL DELTREE /Y RUCMP\*.*
IF NOT EXIST RUTEST\NUL MD RUTEST
IF NOT EXIST RUTEST\RONLY\NUL MD RUTEST\RONLY
IF NOT EXIST RUTEST\CREATE\NUL MD RUTEST\CREATE
IF NOT EXIST RUTEST\WRITE\NUL MD RUTEST\WRITE
IF NOT EXIST RUTEST\ERASE\NUL MD RUTEST\ERASE
IF NOT EXIST RUTEST\SCAN\NUL MD RUTEST\SCAN
IF NOT EXIST RUTEST\ACCESS\NUL MD RUTEST\ACCESS
IF NOT EXIST RUTEST\ALL\NUL MD RUTEST\ALL
IF NOT EXIST RUTEST\MOD1\NUL MD RUTEST\MOD1
IF NOT EXIST RUTEST\MOD2\NUL MD RUTEST\MOD2
IF NOT EXIST RUTEST\MOD3\NUL MD RUTEST\MOD3
IF NOT EXIST RUTEST\MOD4\NUL MD RUTEST\MOD4
IF NOT EXIST RUCMP\NUL MD RUCMP
IF NOT EXIST RUCMP\PRE\NUL MD RUCMP\PRE
IF NOT EXIST RUCMP\MARIO\NUL MD RUCMP\MARIO
IF NOT EXIST RUCMP\POST\NUL MD RUCMP\POST
IF NOT EXIST RUCMP\CMP\NUL MD RUCMP\CMP
IF EXIST F:\RUCMP\RUN.LOG DEL F:\RUCMP\RUN.LOG
IF EXIST F:\RUCMP\SUMMARY.TXT DEL F:\RUCMP\SUMMARY.TXT
IF EXIST F:\RUCMP\RUTSTA.ZIP DEL F:\RUCMP\RUTSTA.ZIP
IF EXIST F:\RUCMP\ZIP.LOG DEL F:\RUCMP\ZIP.LOG
IF EXIST F:\RUCMP\PRE\*.OUT DEL F:\RUCMP\PRE\*.OUT
IF EXIST F:\RUCMP\MARIO\*.OUT DEL F:\RUCMP\MARIO\*.OUT
IF EXIST F:\RUCMP\POST\*.OUT DEL F:\RUCMP\POST\*.OUT
IF EXIST F:\RUCMP\CMP\*.OUT DEL F:\RUCMP\CMP\*.OUT
ECHO RUTPRE rights user test setup > F:\RUCMP\RUN.LOG
ECHO Run this as SUPERVISOR. >> F:\RUCMP\RUN.LOG
ECHO. >> F:\RUCMP\RUN.LOG
REM Reset old files.
IF EXIST F:\RUTEST\RONLY\READ.TXT DEL F:\RUTEST\RONLY\READ.TXT
IF EXIST F:\RUTEST\RONLY\NEW.TXT DEL F:\RUTEST\RONLY\NEW.TXT
IF EXIST F:\RUTEST\CREATE\BASE.TXT DEL F:\RUTEST\CREATE\BASE.TXT
IF EXIST F:\RUTEST\CREATE\NEW.TXT DEL F:\RUTEST\CREATE\NEW.TXT
IF EXIST F:\RUTEST\WRITE\W.TXT DEL F:\RUTEST\WRITE\W.TXT
IF EXIST F:\RUTEST\ERASE\E.TXT DEL F:\RUTEST\ERASE\E.TXT
IF EXIST F:\RUTEST\SCAN\S.TXT DEL F:\RUTEST\SCAN\S.TXT
IF EXIST F:\RUTEST\ACCESS\A.TXT DEL F:\RUTEST\ACCESS\A.TXT
IF EXIST F:\RUTEST\ALL\ALL.TXT DEL F:\RUTEST\ALL\ALL.TXT
IF EXIST F:\RUTEST\ALL\NEW.TXT DEL F:\RUTEST\ALL\NEW.TXT
IF EXIST F:\RUTEST\ALL\ALL2.TXT DEL F:\RUTEST\ALL\ALL2.TXT
IF EXIST F:\RUTEST\MOD1\M.TXT DEL F:\RUTEST\MOD1\M.TXT
IF EXIST F:\RUTEST\MOD1\M2.TXT DEL F:\RUTEST\MOD1\M2.TXT
IF EXIST F:\RUTEST\MOD2\M.TXT DEL F:\RUTEST\MOD2\M.TXT
IF EXIST F:\RUTEST\MOD2\M2.TXT DEL F:\RUTEST\MOD2\M2.TXT
IF EXIST F:\RUTEST\MOD3\M.TXT DEL F:\RUTEST\MOD3\M.TXT
IF EXIST F:\RUTEST\MOD3\M2.TXT DEL F:\RUTEST\MOD3\M2.TXT
IF EXIST F:\RUTEST\MOD4\M.TXT DEL F:\RUTEST\MOD4\M2.TXT
IF EXIST F:\RUTEST\MOD4\M.TXT DEL F:\RUTEST\MOD4\M.TXT
IF EXIST F:\RUTEST\MOD4\M2.TXT DEL F:\RUTEST\MOD4\M2.TXT
ECHO READ ONLY FILE > F:\RUTEST\RONLY\READ.TXT
ECHO CREATE TEST BASE > F:\RUTEST\CREATE\BASE.TXT
ECHO WRITE TEST > F:\RUTEST\WRITE\W.TXT
ECHO ERASE TEST > F:\RUTEST\ERASE\E.TXT
ECHO SCAN TEST > F:\RUTEST\SCAN\S.TXT
ECHO ACCESS TEST > F:\RUTEST\ACCESS\A.TXT
ECHO ALL TEST > F:\RUTEST\ALL\ALL.TXT
ECHO MOD1 TEST > F:\RUTEST\MOD1\M.TXT
ECHO MOD2 TEST > F:\RUTEST\MOD2\M.TXT
ECHO MOD3 TEST > F:\RUTEST\MOD3\M.TXT
ECHO MOD4 TEST > F:\RUTEST\MOD4\M.TXT
NPUBLIC\FLAG F:\RUTEST\RONLY\READ.TXT N >> F:\RUCMP\RUN.LOG
NPUBLIC\FLAG F:\RUTEST\CREATE\BASE.TXT N >> F:\RUCMP\RUN.LOG
NPUBLIC\FLAG F:\RUTEST\WRITE\W.TXT N >> F:\RUCMP\RUN.LOG
NPUBLIC\FLAG F:\RUTEST\ERASE\E.TXT N >> F:\RUCMP\RUN.LOG
NPUBLIC\FLAG F:\RUTEST\SCAN\S.TXT N >> F:\RUCMP\RUN.LOG
NPUBLIC\FLAG F:\RUTEST\ACCESS\A.TXT N >> F:\RUCMP\RUN.LOG
NPUBLIC\FLAG F:\RUTEST\ALL\ALL.TXT N >> F:\RUCMP\RUN.LOG
NPUBLIC\FLAG F:\RUTEST\MOD1\M.TXT N >> F:\RUCMP\RUN.LOG
NPUBLIC\FLAG F:\RUTEST\MOD2\M.TXT N >> F:\RUCMP\RUN.LOG
NPUBLIC\FLAG F:\RUTEST\MOD3\M.TXT N >> F:\RUCMP\RUN.LOG
NPUBLIC\FLAG F:\RUTEST\MOD4\M.TXT N >> F:\RUCMP\RUN.LOG
REM Grant result-output rights, otherwise MARIO cannot create Uxx.OUT.
ECHO === GRANT RESULT DIR RIGHTS === >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R W C E M F FOR F:\RUCMP TO USER MARIO >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R W C E M F FOR F:\RUCMP\MARIO TO USER MARIO >> F:\RUCMP\RUN.LOG
REM Grant trustee rights to MARIO.
ECHO === GRANT TEST RIGHTS === >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R F FOR F:\RUTEST\RONLY TO USER MARIO >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R F C FOR F:\RUTEST\CREATE TO USER MARIO >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R W F FOR F:\RUTEST\WRITE TO USER MARIO >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R F E FOR F:\RUTEST\ERASE TO USER MARIO >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT F FOR F:\RUTEST\SCAN TO USER MARIO >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R F A FOR F:\RUTEST\ACCESS TO USER MARIO >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R W C E M F A FOR F:\RUTEST\ALL TO USER MARIO >> F:\RUCMP\RUN.LOG
REM Rename/modify matrix:
REM MOD1 = known failing baseline from previous run: R W M F
REM MOD2 = add C
REM MOD3 = add E
REM MOD4 = add C and E
NPUBLIC\GRANT R W M F FOR F:\RUTEST\MOD1 TO USER MARIO >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R W C M F FOR F:\RUTEST\MOD2 TO USER MARIO >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R W E M F FOR F:\RUTEST\MOD3 TO USER MARIO >> F:\RUCMP\RUN.LOG
NPUBLIC\GRANT R W C E M F FOR F:\RUTEST\MOD4 TO USER MARIO >> F:\RUCMP\RUN.LOG
ECHO === PRE READBACK === >> F:\RUCMP\RUN.LOG
NPUBLIC\RIGHTS F:\RUCMP\MARIO > F:\RUCMP\PRE\OUTDIR.OUT
NPUBLIC\RIGHTS F:\RUTEST\RONLY > F:\RUCMP\PRE\RONLY.OUT
NPUBLIC\RIGHTS F:\RUTEST\CREATE > F:\RUCMP\PRE\CREATE.OUT
NPUBLIC\RIGHTS F:\RUTEST\WRITE > F:\RUCMP\PRE\WRITE.OUT
NPUBLIC\RIGHTS F:\RUTEST\ERASE > F:\RUCMP\PRE\ERASE.OUT
NPUBLIC\RIGHTS F:\RUTEST\SCAN > F:\RUCMP\PRE\SCAN.OUT
NPUBLIC\RIGHTS F:\RUTEST\ACCESS > F:\RUCMP\PRE\ACCESS.OUT
NPUBLIC\RIGHTS F:\RUTEST\ALL > F:\RUCMP\PRE\ALL.OUT
NPUBLIC\RIGHTS F:\RUTEST\MOD1 > F:\RUCMP\PRE\MOD1.OUT
NPUBLIC\RIGHTS F:\RUTEST\MOD2 > F:\RUCMP\PRE\MOD2.OUT
NPUBLIC\RIGHTS F:\RUTEST\MOD3 > F:\RUCMP\PRE\MOD3.OUT
NPUBLIC\RIGHTS F:\RUTEST\MOD4 > F:\RUCMP\PRE\MOD4.OUT
NPUBLIC\NDIR F:\RUTEST > F:\RUCMP\PRE\ROOT.OUT
NPUBLIC\NDIR F:\RUTEST /RIGHTS > F:\RUCMP\PRE\ROOTRGHT.OUT
ECHO === RUTPRE fertig ===
ECHO Jetzt als MARIO einloggen und RUTMARIO ausfuehren.

View File

@@ -0,0 +1,26 @@
@ECHO OFF
REM RUTZIP.BAT
REM Optional packer for RUTSTA rights-user result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \RUCMP
IF EXIST RUTSTA.ZIP DEL RUTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating RUTSTA.ZIP > ZIP.LOG
ZIP -r RUTSTA.ZIP RUN.LOG SUMMARY.TXT PRE MARIO POST CMP >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
ECHO Cleaning generated test directories... >> ZIP.LOG
IF EXIST \RUTEST\NUL DELTREE /Y \RUTEST >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\RUCMP\RUTSTA.ZIP
ECHO F:\RUCMP\ZIP.LOG
ECHO.

21
test/slist/README.md Normal file
View File

@@ -0,0 +1,21 @@
# SLSTSTA - SLIST baseline test
Novell-only baseline for `SLIST` behavior.
Runs `NPUBLIC\SLIST` with:
- no argument
- `MARS` as expected existing server
- `NWBYGONE01` as expected missing-server/negative test
- `/CONTINUE` variants
- `/?` usage output
Results are written to `F:\SLSTCMP`. Optional packaging is done with `SLSTZIP.BAT`.
`D99_HELP.OUT` is intentionally simulated with:
```text
Usage: SLIST [Server] [/Continue]
```
Reason: the Novell `SLIST /?` help text was observed on the console, but it does not reliably land in the redirected output file. Later, our implementation should run `SLIST /? > D99_HELP.OUT`, and this simulated Novell baseline gives us a stable file for comparison.

66
test/slist/SLSTSTA.BAT Normal file
View File

@@ -0,0 +1,66 @@
@ECHO OFF
REM SLSTSTA.BAT
REM Automated SLIST test for MARS NWE.
REM
REM Uses NPUBLIC\SLIST as Novell baseline for currently implemented tool behavior.
REM Servers:
REM MARS expected to exist
REM NWBYGONE01 expected negative/missing-server test
REM
REM Result tree:
REM F:\SLSTCMP
F:
CD \
REM --- Clean generated test/result directories (contents only). ---
IF EXIST SLSTCMP\NUL DELTREE /Y SLSTCMP\*.*
IF NOT EXIST SLSTCMP\NUL MD SLSTCMP
IF NOT EXIST SLSTCMP\OUT\NUL MD SLSTCMP\OUT
ECHO SLSTSTA SLIST test > F:\SLSTCMP\RUN.LOG
ECHO Server MARS should exist. >> F:\SLSTCMP\RUN.LOG
ECHO Server NWBYGONE01 is expected to be missing. >> F:\SLSTCMP\RUN.LOG
ECHO. >> F:\SLSTCMP\RUN.LOG
ECHO === D01 default SLIST === >> F:\SLSTCMP\RUN.LOG
NPUBLIC\SLIST > F:\SLSTCMP\OUT\D01_LIST.OUT
ECHO === D02 existing server MARS === >> F:\SLSTCMP\RUN.LOG
NPUBLIC\SLIST MARS > F:\SLSTCMP\OUT\D02_MARS_OK.OUT
ECHO === D03 missing server NWBYGONE01 === >> F:\SLSTCMP\RUN.LOG
NPUBLIC\SLIST NWBYGONE01 > F:\SLSTCMP\OUT\D03_NWBYGONE01_MISSING.OUT
ECHO === D04 default SLIST /CONTINUE === >> F:\SLSTCMP\RUN.LOG
NPUBLIC\SLIST /CONTINUE > F:\SLSTCMP\OUT\D04_CONT.OUT
ECHO === D05 MARS /CONTINUE === >> F:\SLSTCMP\RUN.LOG
NPUBLIC\SLIST MARS /CONTINUE > F:\SLSTCMP\OUT\D05_MARS_CONT_OK.OUT
ECHO === D06 NWBYGONE01 /CONTINUE === >> F:\SLSTCMP\RUN.LOG
NPUBLIC\SLIST NWBYGONE01 /CONTINUE > F:\SLSTCMP\OUT\D06_NWBYGONE01_CONT_MISSING.OUT
ECHO === D99 usage/help simulated from Novell console output === >> F:\SLSTCMP\RUN.LOG
REM Novell SLIST /? prints the usage on the console and does not reliably
REM write it through stdout redirection. Keep the Novell baseline file
REM filled with the observed console text, so our implementation can later
REM be compared against its redirected SLIST /? output.
ECHO Usage: SLIST [Server] [/Continue] > F:\SLSTCMP\OUT\D99_HELP.OUT
ECHO === SUMMARY === > F:\SLSTCMP\SUMMARY.TXT
ECHO SLSTSTA SLIST baseline finished. >> F:\SLSTCMP\SUMMARY.TXT
ECHO. >> F:\SLSTCMP\SUMMARY.TXT
ECHO Expected: >> F:\SLSTCMP\SUMMARY.TXT
ECHO - D01 lists visible servers/services. >> F:\SLSTCMP\SUMMARY.TXT
ECHO - D02 finds or accepts MARS. >> F:\SLSTCMP\SUMMARY.TXT
ECHO - D03 is the negative test for missing NWBYGONE01. >> F:\SLSTCMP\SUMMARY.TXT
ECHO - D04/D05/D06 record /CONTINUE behavior. >> F:\SLSTCMP\SUMMARY.TXT
ECHO - D99 records usage syntax. >> F:\SLSTCMP\SUMMARY.TXT
ECHO. >> F:\SLSTCMP\SUMMARY.TXT
ECHO Optional: SLSTZIP ausfuehren. >> F:\SLSTCMP\SUMMARY.TXT
ECHO SLSTSTA fertig.
ECHO Ergebnisse liegen in F:\SLSTCMP
ECHO Optional: SLSTZIP ausfuehren.

25
test/slist/SLSTZIP.BAT Normal file
View File

@@ -0,0 +1,25 @@
@ECHO OFF
REM SLSTZIP.BAT
REM Optional packer for SLSTSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \SLSTCMP
IF EXIST SLSTSTA.ZIP DEL SLSTSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating SLSTSTA.ZIP > ZIP.LOG
ZIP -r SLSTSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
REM Cleanup generated test directories after ZIP.
REM Keep the CMP/result directory because it contains the ZIP and ZIP.LOG.
REM No separate TEST directory for this test; SLSTCMP is the result directory.
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\SLSTCMP\SLSTSTA.ZIP
ECHO F:\SLSTCMP\ZIP.LOG
ECHO.

39
test/whoami/README.md Normal file
View File

@@ -0,0 +1,39 @@
# WHOAMI baseline test
This directory contains a Novell `WHOAMI` baseline test for MARS NWE.
## Files
- `WHOSTA.BAT` - runs the baseline test and writes results to `F:\WHOCMP`.
- `WHOZIP.BAT` - packs the result directory into `F:\WHOCMP\WHOSTA.ZIP`.
## Run
Run while logged in as the user whose identity/context should be captured, normally `SUPERVISOR`:
```bat
F:
CD WHOSTA
WHOZIP
```
## Coverage
The test uses Novell baseline tool `\NPUBLIC\WHOAMI` and captures:
- default `WHOAMI`
- explicit server `WHOAMI MARS`
- documented options: `/SECURITY`, `/GROUPS`, `/WORKGROUPS`, `/RIGHTS`, `/SYSTEM`, `/OBJECT`, `/ALL`
- missing-server case with `NWBYGONE01`
- bad-option case
- help text from `WHOAMI /?`
Known usage from Novell baseline:
```text
Usage:
WHOAMI [Server] [/Security] [/Groups] [/WorkGroups] [/Rights] [/SYstem]
[/Object] [/All] [/Continuous]
```
The output is login-context dependent, so later comparisons should normalize user/server/date/session-specific lines where needed.

74
test/whoami/WHOSTA.BAT Normal file
View File

@@ -0,0 +1,74 @@
@ECHO OFF
REM WHOSTA.BAT
REM Automated WHOAMI baseline test for MARS NWE.
REM
REM Run while logged in as SUPERVISOR or the user whose context should be captured.
REM Uses \NPUBLIC\WHOAMI as Novell baseline.
REM
REM Result tree:
REM F:\WHOCMP
F:
CD \
REM --- Clean generated result directory (contents only). ---
IF EXIST WHOCMP\NUL DELTREE /Y WHOCMP\*.*
IF NOT EXIST WHOCMP\NUL MD WHOCMP
IF NOT EXIST WHOCMP\OUT\NUL MD WHOCMP\OUT
ECHO WHOSTA WHOAMI baseline test > F:\WHOCMP\RUN.LOG
ECHO Run this while logged in as the target user, normally SUPERVISOR. >> F:\WHOCMP\RUN.LOG
ECHO Captures \NPUBLIC\WHOAMI output and option variants. >> F:\WHOCMP\RUN.LOG
ECHO. >> F:\WHOCMP\RUN.LOG
ECHO === D01 default WHOAMI === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI > F:\WHOCMP\OUT\D01_BASE.OUT
ECHO === D02 explicit server MARS === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI MARS > F:\WHOCMP\OUT\D02_MARS.OUT
ECHO === D10 /SECURITY === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI /SECURITY > F:\WHOCMP\OUT\D10_SECUR.OUT
ECHO === D11 /GROUPS === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI /GROUPS > F:\WHOCMP\OUT\D11_GROUP.OUT
ECHO === D12 /WORKGROUPS === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI /WORKGROUPS > F:\WHOCMP\OUT\D12_WORK.OUT
ECHO === D13 /RIGHTS === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI /RIGHTS > F:\WHOCMP\OUT\D13_RIGHT.OUT
ECHO === D14 /SYSTEM === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI /SYSTEM > F:\WHOCMP\OUT\D14_SYST.OUT
ECHO === D15 /OBJECT === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI /OBJECT > F:\WHOCMP\OUT\D15_OBJ.OUT
ECHO === D16 /ALL === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI /ALL > F:\WHOCMP\OUT\D16_ALL.OUT
ECHO === D90 missing server / negative server case === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI NWBYGONE01 > F:\WHOCMP\OUT\D90_MISS.OUT
ECHO === D91 unknown option === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI /BOGUS > F:\WHOCMP\OUT\D91_BOGUS.OUT
ECHO === D99 usage/help === >> F:\WHOCMP\RUN.LOG
\NPUBLIC\WHOAMI /? > F:\WHOCMP\OUT\D99_HELP.OUT
ECHO === SUMMARY === > F:\WHOCMP\SUMMARY.TXT
ECHO WHOSTA WHOAMI baseline finished. >> F:\WHOCMP\SUMMARY.TXT
ECHO. >> F:\WHOCMP\SUMMARY.TXT
ECHO Expected coverage: >> F:\WHOCMP\SUMMARY.TXT
ECHO - D01 captures default identity output for the current login context. >> F:\WHOCMP\SUMMARY.TXT
ECHO - D02 captures explicit server syntax with MARS. >> F:\WHOCMP\SUMMARY.TXT
ECHO - D10-D16 capture documented option variants. >> F:\WHOCMP\SUMMARY.TXT
ECHO - D90-D91 capture missing-server and bad-option behavior. >> F:\WHOCMP\SUMMARY.TXT
ECHO - D99 captures Usage text from WHOAMI /?. >> F:\WHOCMP\SUMMARY.TXT
ECHO. >> F:\WHOCMP\SUMMARY.TXT
ECHO Optional: WHOZIP ausfuehren. >> F:\WHOCMP\SUMMARY.TXT
ECHO WHOSTA fertig.
ECHO Ergebnisse liegen in F:\WHOCMP
ECHO Optional: WHOZIP ausfuehren.

21
test/whoami/WHOZIP.BAT Normal file
View File

@@ -0,0 +1,21 @@
@ECHO OFF
REM WHOZIP.BAT
REM Optional packer for WHOSTA result files.
REM Requires ZIP.EXE in PATH or current directory.
F:
CD \WHOCMP
IF EXIST WHOSTA.ZIP DEL WHOSTA.ZIP
IF EXIST ZIP.LOG DEL ZIP.LOG
ECHO Creating WHOSTA.ZIP > ZIP.LOG
ZIP -r WHOSTA.ZIP RUN.LOG SUMMARY.TXT OUT >> ZIP.LOG
CD \
ECHO.
ECHO ZIP step finished.
ECHO Check:
ECHO F:\WHOCMP\WHOSTA.ZIP
ECHO F:\WHOCMP\ZIP.LOG
ECHO.