From 1a0d5cfaf7d3384048a889058d5ec173c3d36dc8 Mon Sep 17 00:00:00 2001 From: OpenAI Date: Fri, 12 Jun 2026 10:40:22 +0000 Subject: [PATCH] tests: cover SYS and QUOTA in DOS quota smoke --- test/quota/DQTC.BAT | 162 +++++++++++++++++++++++++++++------------- test/quota/DQTSTA.BAT | 71 +++++++++++++----- test/quota/README.md | 53 +++++++------- 3 files changed, 194 insertions(+), 92 deletions(-) diff --git a/test/quota/DQTC.BAT b/test/quota/DQTC.BAT index c87e491..c512e77 100644 --- a/test/quota/DQTC.BAT +++ b/test/quota/DQTC.BAT @@ -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 diff --git a/test/quota/DQTSTA.BAT b/test/quota/DQTSTA.BAT index ed72ea1..d35b7c4 100644 --- a/test/quota/DQTSTA.BAT +++ b/test/quota/DQTSTA.BAT @@ -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 diff --git a/test/quota/README.md b/test/quota/README.md index 9185732..601f62f 100644 --- a/test/quota/README.md +++ b/test/quota/README.md @@ -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 +``` + 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.