winfsp/tools/run-tests.bat
2016-12-13 16:15:50 -08:00

359 lines
9.7 KiB
Batchfile
Executable File

@echo off
setlocal
setlocal EnableDelayedExpansion
set Configuration=Release
if not X%1==X set Configuration=%1
cd %~dp0..
set ProjRoot=%cd%
cd build\VStudio
if not exist build\%Configuration% echo === No tests found >&2 & goto fail
cd build\%Configuration%
launchctl-x64 start memfs64 testdsk "" M: >nul
launchctl-x64 start memfs64 testnet \memfs64\test N: >nul
launchctl-x64 start memfs32 testdsk "" O: >nul
launchctl-x64 start memfs32 testnet \memfs32\test P: >nul
rem Cannot use timeout under cygwin/mintty: "Input redirection is not supported"
waitfor 7BF47D72F6664550B03248ECFE77C7DD /t 3 2>nul
cd M: >nul 2>nul || (echo === Unable to find drive M: >&2 & goto fail)
cd N: >nul 2>nul || (echo === Unable to find drive N: >&2 & goto fail)
cd O: >nul 2>nul || (echo === Unable to find drive O: >&2 & goto fail)
cd P: >nul 2>nul || (echo === Unable to find drive P: >&2 & goto fail)
set testpass=0
set testfail=0
for %%f in (^
:winfsp-tests-x64 ^
:winfsp-tests-x64-case-randomize ^
:winfsp-tests-x64-mountpoint-drive ^
:winfsp-tests-x64-mountpoint-dir ^
:winfsp-tests-x64-no-traverse ^
:winfsp-tests-x64-oplock ^
:winfsp-tests-x64-external-share ^
:fsx-memfs-x64-disk ^
:fsx-memfs-x64-net ^
:standby-memfs-x64-disk ^
:standby-memfs-x64-net ^
:net-use-memfs-x64 ^
:winfstest-memfs-x64-disk ^
:winfstest-memfs-x64-net ^
:fscrash-x64 ^
:winfsp-tests-x86 ^
:winfsp-tests-x86-case-randomize ^
:winfsp-tests-x86-mountpoint-drive ^
:winfsp-tests-x86-mountpoint-dir ^
:winfsp-tests-x86-no-traverse ^
:winfsp-tests-x86-oplock ^
:winfsp-tests-x86-external-share ^
:fsx-memfs-x86-disk ^
:fsx-memfs-x86-net ^
:standby-memfs-x86-disk ^
:standby-memfs-x86-net ^
:net-use-memfs-x86 ^
:winfstest-memfs-x86-disk ^
:winfstest-memfs-x86-net ^
:fscrash-x86 ^
) do (
echo === Running %%f
if defined APPVEYOR (
appveyor AddTest "%%f" -FileName None -Framework None -Outcome Running
)
pushd %cd%
call %%f
popd
if !ERRORLEVEL! neq 0 (
set /a testfail=testfail+1
echo === Failed %%f
if defined APPVEYOR (
appveyor UpdateTest "%%f" -FileName None -Framework None -Outcome Failed -Duration 0
)
) else (
set /a testpass=testpass+1
echo === Passed %%f
if defined APPVEYOR (
appveyor UpdateTest "%%f" -FileName None -Framework None -Outcome Passed -Duration 0
)
)
echo:
)
launchctl-x64 stop memfs64 testdsk >nul
launchctl-x64 stop memfs64 testnet >nul
launchctl-x64 stop memfs32 testdsk >nul
launchctl-x64 stop memfs32 testnet >nul
rem Cannot use timeout under cygwin/mintty: "Input redirection is not supported"
waitfor 7BF47D72F6664550B03248ECFE77C7DD /t 3 2>nul
set /a total=testpass+testfail
echo === Total: %testpass%/%total%
call :leak-test
if !ERRORLEVEL! neq 0 goto fail
if not %testfail%==0 goto fail
exit /b 0
:fail
exit /b 1
:winfsp-tests-x64
winfsp-tests-x64 +*
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x64-case-randomize
winfsp-tests-x64 --case-randomize
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x64-mountpoint-drive
winfsp-tests-x64 --mountpoint=X:
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x64-mountpoint-dir
winfsp-tests-x64 --mountpoint=mymnt --case-insensitive
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x64-no-traverse
winfsp-tests-x64 --no-traverse
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x64-oplock
winfsp-tests-x64 --oplock=filter --resilient
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x86
winfsp-tests-x86 +*
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x86-case-randomize
winfsp-tests-x86 --case-randomize
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x86-mountpoint-drive
winfsp-tests-x86 --mountpoint=X:
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x86-mountpoint-dir
winfsp-tests-x86 --mountpoint=mymnt --case-insensitive
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x86-no-traverse
winfsp-tests-x86 --no-traverse
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x86-oplock
winfsp-tests-x86 --oplock=filter --resilient
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x64-external-share
M:
"%ProjRoot%\build\VStudio\build\%Configuration%\winfsp-tests-x64.exe" --external --share=winfsp-tests-share=M:\ --resilient ^
-reparse_symlink*
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:fsx-memfs-x64-disk
M:
"%ProjRoot%\ext\test\fstools\src\fsx\fsx.exe" -N 5000 test xxxxxx
if !ERRORLEVEL! neq 0 goto fail
"%ProjRoot%\ext\test\fstools\src\fsx\fsx.exe" -f foo -N 5000 test xxxxxx
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:fsx-memfs-x64-net
N:
"%ProjRoot%\ext\test\fstools\src\fsx\fsx.exe" -N 5000 test xxxxxx
if !ERRORLEVEL! neq 0 goto fail
"%ProjRoot%\ext\test\fstools\src\fsx\fsx.exe" -f foo -N 5000 test xxxxxx
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:standby-memfs-x64-disk
M:
copy "%ProjRoot%\build\VStudio\build\%Configuration%\*"
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:standby-memfs-x64-net
N:
copy "%ProjRoot%\build\VStudio\build\%Configuration%\*"
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:net-use-memfs-x64
echo net use L: \\memfs64\share
net use L: \\memfs64\share
if !ERRORLEVEL! neq 0 goto fail
echo net use ^| findstr L: ^| findstr WinFsp.Np
net use | findstr L: | findstr WinFsp.Np
if !ERRORLEVEL! neq 0 goto fail
echo net use L: /delete
net use L: /delete
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfsp-tests-x86-external-share
O:
"%ProjRoot%\build\VStudio\build\%Configuration%\winfsp-tests-x86.exe" --external --share=winfsp-tests-share=O:\ --resilient ^
-reparse_symlink*
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:fsx-memfs-x86-disk
O:
"%ProjRoot%\ext\test\fstools\src\fsx\fsx.exe" -N 5000 test xxxxxx
if !ERRORLEVEL! neq 0 goto fail
"%ProjRoot%\ext\test\fstools\src\fsx\fsx.exe" -f foo -N 5000 test xxxxxx
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:fsx-memfs-x86-net
P:
"%ProjRoot%\ext\test\fstools\src\fsx\fsx.exe" -N 5000 test xxxxxx
if !ERRORLEVEL! neq 0 goto fail
"%ProjRoot%\ext\test\fstools\src\fsx\fsx.exe" -f foo -N 5000 test xxxxxx
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:standby-memfs-x86-disk
O:
copy "%ProjRoot%\build\VStudio\build\%Configuration%\*"
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:standby-memfs-x86-net
P:
copy "%ProjRoot%\build\VStudio\build\%Configuration%\*"
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:net-use-memfs-x86
echo net use L: \\memfs32\share
net use L: \\memfs32\share
if !ERRORLEVEL! neq 0 goto fail
echo net use ^| findstr L: ^| findstr WinFsp.Np
net use | findstr L: | findstr WinFsp.Np
if !ERRORLEVEL! neq 0 goto fail
echo net use L: /delete
net use L: /delete
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfstest-memfs-x64-disk
M:
call "%ProjRoot%\ext\test\winfstest\run-winfstest.bat"
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfstest-memfs-x64-net
N:
call "%ProjRoot%\ext\test\winfstest\run-winfstest.bat"
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfstest-memfs-x86-disk
O:
call "%ProjRoot%\ext\test\winfstest\run-winfstest.bat"
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:winfstest-memfs-x86-net
P:
call "%ProjRoot%\ext\test\winfstest\run-winfstest.bat"
if !ERRORLEVEL! neq 0 goto fail
exit /b 0
:fscrash-x64
for %%m in (^
000002 000004 000008 000010 ^
000020 000040 000080 000100 ^
000800 001000 002000 004000 ^
008000 080000 100000 200000 ^
) do (
echo fscrash-x64 --terminate --mask=0x%%m --enter
fscrash-x64 --terminate --mask=0x%%m --enter >nul 2>&1
if !ERRORLEVEL! neq -1073741823 goto fail
echo fscrash-x64 --terminate --mask=0x%%m --leave
fscrash-x64 --terminate --mask=0x%%m --leave >nul 2>&1
if !ERRORLEVEL! neq -1073741823 goto fail
)
echo fscrash-x64 --huge-alloc-size --cached
fscrash-x64 --huge-alloc-size --cached >nul 2>&1
if !ERRORLEVEL! neq 1 goto fail
exit /b 0
:fscrash-x86
for %%m in (^
000002 000004 000008 000010 ^
000020 000040 000080 000100 ^
000800 001000 002000 004000 ^
008000 080000 100000 200000 ^
) do (
echo fscrash-x86 --terminate --mask=0x%%m --enter
fscrash-x86 --terminate --mask=0x%%m --enter >nul 2>&1
if !ERRORLEVEL! neq -1073741823 goto fail
echo fscrash-x86 --terminate --mask=0x%%m --leave
fscrash-x86 --terminate --mask=0x%%m --leave >nul 2>&1
if !ERRORLEVEL! neq -1073741823 goto fail
)
echo fscrash-x86 --huge-alloc-size --cached
fscrash-x86 --huge-alloc-size --cached >nul 2>&1
if !ERRORLEVEL! neq 1 goto fail
exit /b 0
:leak-test
for /F "tokens=1,2 delims=:" %%i in ('verifier /query ^| findstr ^
/c:"Current Pool Allocations:" ^
/c:"CurrentPagedPoolAllocations:" ^
/c:"CurrentNonPagedPoolAllocations:"'
) do (
set FieldName=%%i
set FieldName=!FieldName: =!
set FieldValue=%%j
set FieldValue=!FieldValue: =!
set FieldValue=!FieldValue:^(=!
set FieldValue=!FieldValue:^)=!
if X!FieldName!==XCurrentPoolAllocations (
for /F "tokens=1,2 delims=/" %%k in ("!FieldValue!") do (
set NonPagedAlloc=%%k
set PagedAlloc=%%l
)
) else if X!FieldName!==XCurrentPagedPoolAllocations (
set PagedAlloc=!FieldValue!
) else if X!FieldName!==XCurrentNonPagedPoolAllocations (
set NonPagedAlloc=!FieldValue!
)
)
set /A TotalAlloc=PagedAlloc+NonPagedAlloc
if !TotalAlloc! equ 0 (
echo === Leaks: None
) else (
echo === Leaks: !NonPagedAlloc! NP / !PagedAlloc! P
goto fail
)
exit /b 0