tests: cover SYS and QUOTA in DOS quota smoke

This commit is contained in:
OpenAI
2026-06-12 10:40:22 +00:00
committed by Mario Fetka
parent 3803329e93
commit 1a0d5cfaf7
3 changed files with 194 additions and 92 deletions

View File

@@ -2,7 +2,7 @@
REM DQTC.BAT
REM Started by DQTSTA via DLYSTRT. Runs from C:\DQTTMP.
REM It waits for the Linux quota setup, then logs in as NOPASSUSER and proves
REM that the 13th 4K write is denied.
REM that the 13th 4K write is denied on both QUOTA and SYS.
C:
CD \DQTTMP
@@ -11,12 +11,14 @@ IF EXIST PASS.TAG DEL PASS.TAG
IF EXIST FAIL.TAG DEL FAIL.TAG
IF EXIST WRITE.LOG DEL WRITE.LOG
IF EXIST HELPER.TXT DEL HELPER.TXT
IF EXIST QPASS.TAG DEL QPASS.TAG
IF EXIST SPASS.TAG DEL SPASS.TAG
ECHO DQTC helper started from C:\DQTTMP. > C:\DQTTMP\HELPER.TXT
ECHO Waiting for Linux quota setup before logout/login. >> C:\DQTTMP\HELPER.TXT
ECHO. >> C:\DQTTMP\HELPER.TXT
ECHO DQTC wartet jetzt auf den Linux-Teil.
ECHO Linux: quota fuer NOPASSUSER auf 12x4K setzen.
ECHO Linux: quota fuer NOPASSUSER auf QUOTA und SYS setzen.
ECHO Danach hier J, j, Y oder y druecken.
C:\DQTTMP\TESTS WAITJY
IF ERRORLEVEL 1 GOTO ABORT
@@ -27,66 +29,117 @@ C:\DQTTMP\LOGOUT > C:\DQTTMP\D01_LOGOUT.OUT
ECHO === LOGIN NOPASSUSER === >> C:\DQTTMP\HELPER.TXT
C:\DQTTMP\LOGIN NOPASSUSER > C:\DQTTMP\D02_LOGIN_USER.OUT
REM NOPASSUSER login normally restores SYS as F:. Map QUOTA explicitly.
F:
CD \
IF EXIST DQTTEST\NCPQFILL\NUL GOTO HAVEDIR
ECHO FAIL: F:\DQTTEST\NCPQFILL missing after NOPASSUSER login. >> C:\DQTTMP\WRITE.LOG
C:\DQTTMP\MAP Q:=QUOTA: > C:\DQTTMP\D02B_MAP_QUOTA.OUT
IF EXIST Q:\DQTQUOTA\NCPQFILL\NUL GOTO HAVEQDIR
ECHO FAIL: Q:\DQTQUOTA\NCPQFILL missing after NOPASSUSER login/map. >> C:\DQTTMP\WRITE.LOG
ECHO FAIL > C:\DQTTMP\FAIL.TAG
GOTO TESTSYS
:HAVEQDIR
IF EXIST F:\DQTSYS\NCPQFILL\NUL GOTO HAVESDIR
ECHO FAIL: F:\DQTSYS\NCPQFILL missing after NOPASSUSER login. >> C:\DQTTMP\WRITE.LOG
ECHO FAIL > C:\DQTTMP\FAIL.TAG
GOTO RELSUP
:HAVEDIR
:HAVESDIR
IF NOT EXIST DQTCMP\NUL MD DQTCMP
IF NOT EXIST DQTCMP\DOS\NUL MD DQTCMP\DOS
IF NOT EXIST F:\DQTCMP\NUL MD F:\DQTCMP
IF NOT EXIST F:\DQTCMP\DOS\NUL MD F:\DQTCMP\DOS
IF EXIST F:\DQTCMP\PASS.TAG DEL F:\DQTCMP\PASS.TAG
IF EXIST F:\DQTCMP\FAIL.TAG DEL F:\DQTCMP\FAIL.TAG
ECHO DQTC DOS quota write test as NOPASSUSER > C:\DQTTMP\WRITE.LOG
ECHO Writing 12 allowed 4K files. >> C:\DQTTMP\WRITE.LOG
ECHO Testing QUOTA on Q:\DQTQUOTA\NCPQFILL. >> C:\DQTTMP\WRITE.LOG
GOTO TESTQUOTA
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00001.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00002.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00003.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00004.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00005.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00006.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00007.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00008.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00009.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00010.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00011.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\Q00012.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOOD
ECHO Attempting expected failing 13th 4K file. >> C:\DQTTMP\WRITE.LOG
C:\DQTTMP\TESTS WRITE4K F:\DQTTEST\NCPQFILL\QFAIL.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO PASS
ECHO FAIL: expected QFAIL.BIN to be denied, but it succeeded. >> C:\DQTTMP\WRITE.LOG
:TESTQUOTA
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00001.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00002.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00003.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00004.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00005.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00006.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00007.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00008.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00009.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00010.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00011.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\Q00012.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODQ
ECHO Attempting expected failing 13th 4K file on QUOTA. >> C:\DQTTMP\WRITE.LOG
C:\DQTTMP\TESTS WRITE4K Q:\DQTQUOTA\NCPQFILL\QFAIL.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO PASSQ
ECHO FAIL: QUOTA expected QFAIL.BIN to be denied, but it succeeded. >> C:\DQTTMP\WRITE.LOG
ECHO FAIL > C:\DQTTMP\FAIL.TAG
IF EXIST F:\DQTCMP\NUL ECHO FAIL > F:\DQTCMP\FAIL.TAG
GOTO RELSUP
:FAILGOOD
ECHO FAIL: an allowed 4K write failed before the quota boundary. >> C:\DQTTMP\WRITE.LOG
GOTO TESTSYS
:FAILGOODQ
ECHO FAIL: QUOTA allowed 4K write failed before the quota boundary. >> C:\DQTTMP\WRITE.LOG
ECHO FAIL > C:\DQTTMP\FAIL.TAG
IF EXIST F:\DQTCMP\NUL ECHO FAIL > F:\DQTCMP\FAIL.TAG
GOTO RELSUP
GOTO TESTSYS
:PASSQ
ECHO PASS: QUOTA 13th 4K file was denied. >> C:\DQTTMP\WRITE.LOG
ECHO PASS > C:\DQTTMP\QPASS.TAG
GOTO TESTSYS
:PASS
ECHO PASS: 13th 4K file was denied. >> C:\DQTTMP\WRITE.LOG
ECHO PASS > C:\DQTTMP\PASS.TAG
IF EXIST F:\DQTCMP\NUL ECHO PASS > F:\DQTCMP\PASS.TAG
:TESTSYS
ECHO. >> C:\DQTTMP\WRITE.LOG
ECHO Testing SYS on F:\DQTSYS\NCPQFILL. >> C:\DQTTMP\WRITE.LOG
IF EXIST F:\DQTSYS\NCPQFILL\NUL GOTO TESTSYSFILES
ECHO FAIL: F:\DQTSYS\NCPQFILL missing after NOPASSUSER login. >> C:\DQTTMP\WRITE.LOG
ECHO FAIL > C:\DQTTMP\FAIL.TAG
GOTO RELSUP
:TESTSYSFILES
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00001.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00002.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00003.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00004.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00005.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00006.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00007.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00008.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00009.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00010.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00011.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\S00012.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO FAILGOODS
ECHO Attempting expected failing 13th 4K file on SYS. >> C:\DQTTMP\WRITE.LOG
C:\DQTTMP\TESTS WRITE4K F:\DQTSYS\NCPQFILL\SFAIL.BIN 1 >> C:\DQTTMP\WRITE.LOG
IF ERRORLEVEL 1 GOTO PASSS
ECHO FAIL: SYS expected SFAIL.BIN to be denied, but it succeeded. >> C:\DQTTMP\WRITE.LOG
ECHO FAIL > C:\DQTTMP\FAIL.TAG
GOTO RELSUP
:FAILGOODS
ECHO FAIL: SYS allowed 4K write failed before the quota boundary. >> C:\DQTTMP\WRITE.LOG
ECHO FAIL > C:\DQTTMP\FAIL.TAG
GOTO RELSUP
:PASSS
ECHO PASS: SYS 13th 4K file was denied. >> C:\DQTTMP\WRITE.LOG
ECHO PASS > C:\DQTTMP\SPASS.TAG
GOTO RELSUP
:ABORT
@@ -95,6 +148,17 @@ ECHO FAIL > C:\DQTTMP\FAIL.TAG
GOTO END
:RELSUP
IF EXIST C:\DQTTMP\QPASS.TAG IF EXIST C:\DQTTMP\SPASS.TAG IF NOT EXIST C:\DQTTMP\FAIL.TAG GOTO ALLPASS
GOTO MARKFAIL
:ALLPASS
ECHO PASS > C:\DQTTMP\PASS.TAG
IF EXIST F:\DQTCMP\NUL ECHO PASS > F:\DQTCMP\PASS.TAG
GOTO DOREL
:MARKFAIL
ECHO FAIL > C:\DQTTMP\FAIL.TAG
IF EXIST F:\DQTCMP\NUL ECHO FAIL > F:\DQTCMP\FAIL.TAG
GOTO DOREL
:DOREL
TYPE C:\DQTTMP\WRITE.LOG
ECHO === LOGOUT NOPASSUSER === >> C:\DQTTMP\HELPER.TXT
C:\DQTTMP\LOGOUT > C:\DQTTMP\D03_LOGOUT_USER.OUT

View File

@@ -2,15 +2,15 @@
REM DQTSTA.BAT
REM Automated DOS-side quota write-deny smoke for MARS-NWE.
REM
REM Run as SUPERVISOR from the target volume:
REM Run as SUPERVISOR from SYS (F:) with the QUOTA volume available:
REM SET LGNTPWD=your-supervisor-password
REM F:
REM DQTSTA
REM
REM DQTSTA prepares F:\\DQTTEST/F:\\DQTCMP, copies DQTC.BAT plus the
REM maintainer helpers to C:\\DQTTMP, and uses DLYSTRT so the helper keeps
REM DQTSTA prepares SYS and QUOTA test directories, copies DQTC.BAT plus the
REM maintainer helpers to C:\DQTTMP, and uses DLYSTRT so the helper keeps
REM running after LOGOUT/LOGIN. DQTC waits for J/j/Y/y while the Linux side
REM sets the quota.
REM sets both volume quotas.
IF "%1"=="" GOTO PART1
IF "%1"=="PREP" GOTO PART1
@@ -23,10 +23,10 @@ GOTO USAGE
F:
CD \
IF EXIST DQTTEST\NUL DELTREE /Y DQTTEST\*.*
IF EXIST DQTSYS\NUL DELTREE /Y DQTSYS\*.*
IF EXIST DQTCMP\NUL DELTREE /Y DQTCMP\*.*
IF NOT EXIST DQTTEST\NUL MD DQTTEST
IF NOT EXIST DQTTEST\NCPQFILL\NUL MD DQTTEST\NCPQFILL
IF NOT EXIST DQTSYS\NUL MD DQTSYS
IF NOT EXIST DQTSYS\NCPQFILL\NUL MD DQTSYS\NCPQFILL
IF NOT EXIST DQTCMP\NUL MD DQTCMP
IF NOT EXIST DQTCMP\DOS\NUL MD DQTCMP\DOS
IF NOT EXIST DQTCMP\SETUP\NUL MD DQTCMP\SETUP
@@ -44,35 +44,63 @@ IF EXIST F:\DQTCMP\DOS\*.TAG DEL F:\DQTCMP\DOS\*.TAG
ECHO DQTSTA DOS quota write-deny smoke > F:\DQTCMP\RUN.LOG
ECHO Part 1 started while logged in as SUPERVISOR. >> F:\DQTCMP\RUN.LOG
ECHO Linux must set NOPASSUSER quota while DQTC waits for J/j/Y/y. >> F:\DQTCMP\RUN.LOG
ECHO Expected: 12x4K writes succeed, 13th 4K write is denied. >> F:\DQTCMP\RUN.LOG
ECHO Linux must set NOPASSUSER quota on QUOTA and SYS while DQTC waits. >> F:\DQTCMP\RUN.LOG
ECHO Expected on both volumes: 12x4K writes succeed, 13th 4K write is denied. >> F:\DQTCMP\RUN.LOG
ECHO. >> F:\DQTCMP\RUN.LOG
REM Give the normal user enough rights to create files and write result logs.
IF EXIST F:\NPUBLIC\MAP.EXE GOTO HAVEMAP
ECHO ERROR: F:\NPUBLIC\MAP.EXE not found. >> F:\DQTCMP\RUN.LOG
ECHO ERROR: F:\NPUBLIC\MAP.EXE not found.
GOTO END
:HAVEMAP
F:\NPUBLIC\MAP Q:=QUOTA: > F:\DQTCMP\SETUP\MAP_QUOTA.OUT
IF EXIST Q:\NUL GOTO HAVEQ
ECHO ERROR: could not map Q:=QUOTA:. >> F:\DQTCMP\RUN.LOG
ECHO ERROR: could not map Q:=QUOTA:.
GOTO END
:HAVEQ
Q:
CD \
IF EXIST DQTQUOTA\NUL DELTREE /Y DQTQUOTA\*.*
IF NOT EXIST DQTQUOTA\NUL MD DQTQUOTA
IF NOT EXIST DQTQUOTA\NCPQFILL\NUL MD DQTQUOTA\NCPQFILL
F:
CD \
REM Give the normal user enough rights to create files on both volumes.
IF EXIST F:\NPUBLIC\GRANT.EXE GOTO HAVEGRANT
ECHO ERROR: F:\NPUBLIC\GRANT.EXE not found. >> F:\DQTCMP\RUN.LOG
ECHO ERROR: F:\NPUBLIC\GRANT.EXE not found.
GOTO END
:HAVEGRANT
NPUBLIC\GRANT R W C E M F A FOR F:\DQTTEST TO USER NOPASSUSER > F:\DQTCMP\SETUP\GRANT1.OUT
NPUBLIC\GRANT R W C E M F A FOR F:\DQTTEST\NCPQFILL TO USER NOPASSUSER > F:\DQTCMP\SETUP\GRANT2.OUT
NPUBLIC\GRANT R W C E M F A FOR F:\DQTCMP TO USER NOPASSUSER > F:\DQTCMP\SETUP\GRANT3.OUT
NPUBLIC\RIGHTS F:\DQTTEST\NCPQFILL > F:\DQTCMP\SETUP\RIGHTS.OUT
F:\NPUBLIC\GRANT R W C E M F A FOR F:\DQTSYS TO USER NOPASSUSER > F:\DQTCMP\SETUP\GRANT_SYS1.OUT
F:\NPUBLIC\GRANT R W C E M F A FOR F:\DQTSYS\NCPQFILL TO USER NOPASSUSER > F:\DQTCMP\SETUP\GRANT_SYS2.OUT
F:\NPUBLIC\GRANT R W C E M F A FOR Q:\DQTQUOTA TO USER NOPASSUSER > F:\DQTCMP\SETUP\GRANT_QUOTA1.OUT
F:\NPUBLIC\GRANT R W C E M F A FOR Q:\DQTQUOTA\NCPQFILL TO USER NOPASSUSER > F:\DQTCMP\SETUP\GRANT_QUOTA2.OUT
F:\NPUBLIC\GRANT R W C E M F A FOR F:\DQTCMP TO USER NOPASSUSER > F:\DQTCMP\SETUP\GRANT_LOG.OUT
F:\NPUBLIC\RIGHTS F:\DQTSYS\NCPQFILL > F:\DQTCMP\SETUP\RIGHTS_SYS.OUT
F:\NPUBLIC\RIGHTS Q:\DQTQUOTA\NCPQFILL > F:\DQTCMP\SETUP\RIGHTS_QUOTA.OUT
ECHO === NEXT LINUX STEP === > F:\DQTCMP\LINUX.TXT
ECHO When DQTC waits, set volume userquota for NOPASSUSER to 12x4K on this volume. >> F:\DQTCMP\LINUX.TXT
ECHO Set NOPASSUSER quota to 12x4K on QUOTA. >> F:\DQTCMP\LINUX.TXT
ECHO Set NOPASSUSER quota on SYS to current inuse4k + 12. >> F:\DQTCMP\LINUX.TXT
ECHO Example: first use --get on SYS, then set --limit-4k to inuse4k+12. >> F:\DQTCMP\LINUX.TXT
ECHO Then return to DOS and press J, j, Y, or y. >> F:\DQTCMP\LINUX.TXT
IF EXIST C:\DQTTMP\NUL DELTREE /Y C:\DQTTMP\*.*
IF NOT EXIST C:\DQTTMP\NUL MD C:\DQTTMP
ECHO Copying delayed helper and local tools to C:\DQTTMP. >> F:\DQTCMP\RUN.LOG
COPY F:\DQTSTA.BAT C:\DQTTMP > F:\DQTCMP\SETUP\CP_DQTSTA.OUT
COPY F:\DQTC.BAT C:\DQTTMP > F:\DQTCMP\SETUP\CP_DQTC.OUT
COPY F:\PUBLIC\TESTS.EXE C:\DQTTMP > F:\DQTCMP\SETUP\CP_TESTS.OUT
COPY F:\PUBLIC\DLYSTRT.EXE C:\DQTTMP > F:\DQTCMP\SETUP\CP_DLY.OUT
COPY F:\NLOGIN\LOGIN.* C:\DQTTMP > F:\DQTCMP\SETUP\CP_LOGIN.OUT
COPY F:\NPUBLIC\LOGOUT.* C:\DQTTMP > F:\DQTCMP\SETUP\CP_LOGOUT.OUT
COPY F:\NPUBLIC\MAP.* C:\DQTTMP > F:\DQTCMP\SETUP\CP_MAP.OUT
IF EXIST C:\DQTTMP\DQTC.BAT GOTO HVDQTC
ECHO ERROR: C:\DQTTMP\DQTC.BAT not copied. >> F:\DQTCMP\RUN.LOG
@@ -99,6 +127,11 @@ ECHO ERROR: C:\DQTTMP\LOGOUT.EXE not copied. >> F:\DQTCMP\RUN.LOG
ECHO ERROR: C:\DQTTMP\LOGOUT.EXE not copied.
GOTO END
:HVLOGOUT
IF EXIST C:\DQTTMP\MAP.EXE GOTO HVMAP
ECHO ERROR: C:\DQTTMP\MAP.EXE not copied. >> F:\DQTCMP\RUN.LOG
ECHO ERROR: C:\DQTTMP\MAP.EXE not copied.
GOTO END
:HVMAP
IF "%LGNTPWD%"=="" GOTO NOPWD
ECHO LGNTPWD is set; DQTC will relogin SUPERVISOR directly after the write test. >> F:\DQTCMP\RUN.LOG
@@ -115,7 +148,7 @@ ECHO DQTC queued via DLYSTRT from C:\DQTTMP. >> F:\DQTCMP\RUN.LOG
ECHO.
ECHO DQTSTA Part 1 fertig.
ECHO DQTC startet gleich von C:\DQTTMP und wartet dann auf den Linux-Quota-Teil.
ECHO Wenn DQTC wartet: Linux quota setzen und dann im DOS J druecken.
ECHO Wenn DQTC wartet: Linux quota fuer QUOTA und SYS setzen und dann im DOS J druecken.
GOTO END
:PART2
@@ -131,8 +164,8 @@ IF EXIST C:\DQTTMP\*.TXT COPY C:\DQTTMP\*.TXT F:\DQTCMP\DOS >> F:\DQTCMP\RUN.LOG
IF EXIST C:\DQTTMP\*.TAG COPY C:\DQTTMP\*.TAG F:\DQTCMP\DOS >> F:\DQTCMP\RUN.LOG
ECHO DQTSTA PART2 summary > F:\DQTCMP\SUMMARY.TXT
IF EXIST C:\DQTTMP\PASS.TAG ECHO PASS: DOS quota deny observed. >> F:\DQTCMP\SUMMARY.TXT
IF EXIST C:\DQTTMP\FAIL.TAG ECHO FAIL: DOS quota deny was not observed. >> F:\DQTCMP\SUMMARY.TXT
IF EXIST C:\DQTTMP\PASS.TAG ECHO PASS: DOS quota deny observed on QUOTA and SYS. >> F:\DQTCMP\SUMMARY.TXT
IF EXIST C:\DQTTMP\FAIL.TAG ECHO FAIL: DOS quota deny was not observed on both volumes. >> F:\DQTCMP\SUMMARY.TXT
IF NOT EXIST C:\DQTTMP\PASS.TAG IF NOT EXIST C:\DQTTMP\FAIL.TAG ECHO UNKNOWN: DQTC.BAT result tags missing. >> F:\DQTCMP\SUMMARY.TXT
ECHO. >> F:\DQTCMP\SUMMARY.TXT
ECHO DOS log files copied from C:\DQTTMP to F:\DQTCMP\DOS. >> F:\DQTCMP\SUMMARY.TXT
@@ -145,7 +178,7 @@ GOTO END
:USAGE
ECHO Usage: DQTSTA [PREP^|PART2]
ECHO Ohne Parameter startet DQTSTA Part 1 und queued C:\DQTTMP\DQTC.BAT via DLYSTRT.
ECHO Ohne Parameter startet DQTSTA Part 1 und installiert C:\DQTTMP\DQTC.BAT via DLYSTRT.
ECHO DQTC wartet auf J/j/Y/y, damit der Linux-Quota-Schritt dazwischen laufen kann.
GOTO END

View File

@@ -1,21 +1,20 @@
# DOS quota write-deny smoke
This test proves the client-visible quota boundary with DOS board tools while
keeping the authority split explicit:
keeping the authority split explicit. It now tests both quota backends in one
DOS handoff:
- Linux/MARS-NWE sets the quota on the host side.
- DOS writes as `NOPASSUSER` and proves that 12 4K blocks are allowed while the
13th 4K block is denied.
- `QUOTA` is mapped as `Q:` and uses the Linux quota backend.
- `SYS` stays mapped as `F:` and uses the NWQUOTA metadata backend.
The flow uses the same `DLYSTRT` pattern as the rights/login tests, because
`LOGOUT` removes network mappings. `DQTSTA` copies `DQTC.BAT`, `DLYSTRT.EXE`,
`TESTS.EXE`, `LOGIN`, and `LOGOUT` to `C:\DQTTMP`, then queues the helper from
there. The helper waits for `J/j/Y/y` before it logs out and logs in as
`NOPASSUSER`, so the Linux quota setup can happen in between.
`DQTSTA` prepares both `Q:\DQTQUOTA\NCPQFILL` and
`F:\DQTSYS\NCPQFILL`, then starts `DQTC.BAT` via `DLYSTRT`. The helper waits
for `J/j/Y/y` before it logs out and logs in as `NOPASSUSER`, so the Linux quota
setup can happen in between.
## DOS part 1
Login as `SUPERVISOR` on the target volume and run:
Login as `SUPERVISOR` on `SYS` and run:
```bat
SET LGNTPWD=zefuqUVe
@@ -23,28 +22,41 @@ F:
DQTSTA
```
`DQTSTA` creates:
`DQTSTA` maps `Q:=QUOTA:` and creates:
- `F:\DQTTEST\NCPQFILL` for the data files
- `Q:\DQTQUOTA\NCPQFILL` for the Linuxquota volume test files
- `F:\DQTSYS\NCPQFILL` for the NWQUOTA metadata volume test files
- `F:\DQTCMP` for network-side logs
- `C:\DQTTMP` for the delayed helper and local logs
## Linux handoff
When DOS prints that `DQTC` is waiting, set the quota on Linux, for example:
When DOS prints that `DQTC` is waiting, set quotas for `NOPASSUSER`. `QUOTA` can
usually be set to 12 directly after the prepared directory was purged:
```sh
./nwfs_ncpfs_userquota -S MARS -U SUPERVISOR -P 'zefuqUVe' \
--volume QUOTA --object NOPASSUSER --type 1 --limit-4k 12
```
For `SYS`, read the current usage and set the limit to `inuse4k + 12`, because
`NOPASSUSER` may already own files on SYS:
```sh
./nwfs_ncpfs_userquota -S MARS -U SUPERVISOR -P 'zefuqUVe' \
--volume SYS --object NOPASSUSER --type 1 --get
./nwfs_ncpfs_userquota -S MARS -U SUPERVISOR -P 'zefuqUVe' \
--volume SYS --object NOPASSUSER --type 1 --limit-4k <inuse4k+12>
```
Then return to DOS and press `J`, `j`, `Y`, or `y`.
## DOS part 2
The helper logs in as `NOPASSUSER`, writes `Q00001.BIN` through `Q00012.BIN`,
and expects `QFAIL.BIN` to fail. If `LGNTPWD` is set, it logs back in as
`SUPERVISOR` and queues:
The helper logs in as `NOPASSUSER`, maps `Q:=QUOTA:`, writes 12 4K files on
both volumes, and expects the 13th 4K file to fail on both volumes. If
`LGNTPWD` is set, it logs back in as `SUPERVISOR` and queues:
```bat
F:\DQTSTA.BAT PART2
@@ -60,12 +72,5 @@ DQTZIP
Expected summary:
```text
PASS: DOS quota deny observed.
PASS: DOS quota deny observed on QUOTA and SYS.
```
### Automatic relogin detail
The quota handoff follows the same pattern as the RIGHTS/GRANT/REVOKE DOS tests:
`DQTSTA` copies the helper to `C:\DQTTMP`, starts it with `DLYSTRT`, and
the helper uses a generated `DQTREL.BAT` to log back in as SUPERVISOR and
queue `F:\DQTSTA.BAT PART2`. The relogin uses `LOGIN /NS SUPERVISOR
/PWD:%LGNTPWD%` so the login script does not disturb the test mappings.