@echo off


rem   Test fs util messages/behavior
rem
rem   test  - run test, produce log, and compare with saved log
rem

if not "%1" == "" goto %1

setlocal

call test Run >test.log
fcom test.good test.log

endlocal

goto :eof

:Test

shift
set _test=%1
shift
%1 %2 %3 %4 %5 %6 %7 %8 %9
set _result=%errorlevel%
if "%_test%" == "success" if not %_result% == 0 echo Expected success: %1 %2 %3 %4 %5 %6 %7 %8 %9
if "%_test%" == "fail"    if     %_result% == 0 echo Expected failure: %1 %2 %3 %4 %5 %6 %7 %8 %9

goto :eof

:Run

prompt []
call test test success  obj\i386\fsutil.exe
obj\i386\fsutil.exe x

call test test success  obj\i386\fsutil.exe behavior

obj\i386\fsutil.exe behavior x

call test test success  obj\i386\fsutil.exe behavior query
call test test fail     obj\i386\fsutil.exe behavior query x
call test test success  obj\i386\fsutil.exe behavior query disable8dot3
call test test success  obj\i386\fsutil.exe behavior query allowextchar
call test test success  obj\i386\fsutil.exe behavior query disablelastaccess
call test test success  obj\i386\fsutil.exe behavior query quotanotify
call test test success  obj\i386\fsutil.exe behavior query mftzone

call test test success  obj\i386\fsutil.exe behavior set
call test test fail     obj\i386\fsutil.exe behavior set x

call test test success  obj\i386\fsutil.exe dirty
call test test fail     obj\i386\fsutil.exe dirty x
call test test success  obj\i386\fsutil.exe dirty query
call test test success  obj\i386\fsutil.exe dirty set

call test test success  obj\i386\fsutil.exe file
call test test fail     obj\i386\fsutil.exe file x
call test test success  obj\i386\fsutil.exe file findbysid
call test test success  obj\i386\fsutil.exe file queryallocranges
call test test success  obj\i386\fsutil.exe file setshortname
call test test success  obj\i386\fsutil.exe file setvaliddata
call test test success  obj\i386\fsutil.exe file setzerodata

call test test success  obj\i386\fsutil.exe fsinfo
call test test fail     obj\i386\fsutil.exe fsinfo x
call test test success  obj\i386\fsutil.exe fsinfo drives
call test test success  obj\i386\fsutil.exe fsinfo drivetype
call test test success  obj\i386\fsutil.exe fsinfo volumeinfo
call test test success  obj\i386\fsutil.exe fsinfo ntfsinfo
call test test success  obj\i386\fsutil.exe fsinfo statistics

call test test success  obj\i386\fsutil.exe hardlink
call test test fail     obj\i386\fsutil.exe hardlink x
call test test success  obj\i386\fsutil.exe hardlink create

call test test success  obj\i386\fsutil.exe objectid
call test test fail     obj\i386\fsutil.exe objectid x
call test test success  obj\i386\fsutil.exe objectid query
call test test success  obj\i386\fsutil.exe objectid set
call test test success  obj\i386\fsutil.exe objectid delete
call test test success  obj\i386\fsutil.exe objectid create

call test test success  obj\i386\fsutil.exe quota
call test test fail     obj\i386\fsutil.exe quota x
call test test success  obj\i386\fsutil.exe quota disable
call test test success  obj\i386\fsutil.exe quota track
call test test success  obj\i386\fsutil.exe quota enforce
call test test success  obj\i386\fsutil.exe quota violations
call test test success  obj\i386\fsutil.exe quota modify
call test test success  obj\i386\fsutil.exe quota query

call test test success  obj\i386\fsutil.exe reparsepoint
call test test fail     obj\i386\fsutil.exe reparsepoint x
call test test success  obj\i386\fsutil.exe reparsepoint query
call test test success  obj\i386\fsutil.exe reparsepoint delete

call test test success  obj\i386\fsutil.exe sparse
call test test fail     obj\i386\fsutil.exe sparse x
call test test success  obj\i386\fsutil.exe sparse setflag
call test test success  obj\i386\fsutil.exe sparse queryflag
call test test success  obj\i386\fsutil.exe sparse queryrange
call test test success  obj\i386\fsutil.exe sparse setrange

call test test success  obj\i386\fsutil.exe usn
call test test fail     obj\i386\fsutil.exe usn x
call test test success  obj\i386\fsutil.exe usn createjournal
call test test success  obj\i386\fsutil.exe usn deletejournal
call test test success  obj\i386\fsutil.exe usn enumdata
call test test success  obj\i386\fsutil.exe usn queryjournal
call test test success  obj\i386\fsutil.exe usn readdata
call test test success  obj\i386\fsutil.exe usn readjournal

call test test success  obj\i386\fsutil.exe volume
call test test fail     obj\i386\fsutil.exe volume x
call test test success  obj\i386\fsutil.exe volume dismount
call test test success  obj\i386\fsutil.exe volume extend
call test test success  obj\i386\fsutil.exe volume diskfree

rem ---------------
rem specific tests
rem ---------------

del sparse
call test test success  obj\i386\fsutil file createnew sparse 16000000
call test test success  obj\i386\fsutil sparse setflag sparse
obj\i386\fsutil.exe file setzerodata offset=65536 length=131072 sparse
obj\i386\fsutil.exe file queryallocranges  offset=0 length=20000000 sparse

rem test it in hex

del sparse
call test test success  obj\i386\fsutil file createnew sparse 0x1000000
call test test success  obj\i386\fsutil sparse setflag sparse
obj\i386\fsutil.exe file setzerodata offset=0x10000 length=0x20000 sparse
obj\i386\fsutil.exe file queryallocranges offset=0x0 length=0x2000000 sparse

rem ---------------
rem 167977
rem ---------------
call test test success  obj\i386\fsutil behavior set quotanotify 4294967295
call test test success  obj\i386\fsutil behavior query quotanotify
obj\i386\fsutil behavior set quotanotify 4,294,967,295
call test test fail     obj\i386\fsutil behavior set quotanotify xxx
call test test fail     obj\i386\fsutil behavior set quotanotify 0
call test test fail     obj\i386\fsutil behavior set quotanotify 5555555555
call test test fail     obj\i386\fsutil behavior set quotanotify -879868574663545
call test test fail     obj\i386\fsutil behavior set quotanotify -65765

rem ---------------
rem 202191
rem ---------------

del xxx
call test test success  obj\i386\fsutil file createnew xxx 100
call test test fail     obj\i386\fsutil file createnew xxx 100
del xxx

rem ---------------
rem 203140
rem ---------------

call test test success  obj\i386\fsutil quota track c:
echo Sleeping for 60 seconds >&2
sleep 60
call test test success  obj\i386\fsutil quota query c:
call test test success  obj\i386\fsutil quota disable c: