@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) if not X%2==X ( set tests=%2 ) else ( set tests=^ 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 ) set testpass=0 set testfail=0 for %%f in (%tests%) 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 :ifstest-memfs-x64-disk M: call "%ProjRoot%\tools\ifstest.bat" M:\ /b if !ERRORLEVEL! neq 0 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