1if /i "%GITHUB_ACTIONS%" neq "True" (
2    echo for CI only
3    exit /b 3
4)
5
6set NO_INTERACTION=1
7set REPORT_EXIT_STATUS=1
8set SKIP_IO_CAPTURE_TESTS=1
9
10call %~dp0find-target-branch.bat
11if "%BRANCH%" neq "master" (
12	set STABILITY=stable
13) else (
14	set STABILITY=staging
15)
16set DEPS_DIR=%PHP_BUILD_CACHE_BASE_DIR%\deps-%BRANCH%-%PHP_SDK_VS%-%PHP_SDK_ARCH%
17if not exist "%DEPS_DIR%" (
18	echo "%DEPS_DIR%" doesn't exist
19	exit /b 3
20)
21
22rem setup MySQL related exts
23set MYSQL_PWD=Password12!
24set MYSQL_TEST_PASSWD=%MYSQL_PWD%
25set MYSQL_TEST_USER=root
26set MYSQL_TEST_HOST=127.0.0.1
27set MYSQL_TEST_PORT=3306
28set PDO_MYSQL_TEST_USER=%MYSQL_TEST_USER%
29set PDO_MYSQL_TEST_PASS=%MYSQL_PWD%
30set PDO_MYSQL_TEST_HOST=%MYSQL_TEST_HOST%
31set PDO_MYSQL_TEST_PORT=%MYSQL_TEST_PORT%
32set PDO_MYSQL_TEST_DSN=mysql:host=%PDO_MYSQL_TEST_HOST%;port=%PDO_MYSQL_TEST_PORT%;dbname=test
33mysql --host=%PDO_MYSQL_TEST_HOST% --port=%MYSQL_TEST_PORT% --user=%MYSQL_TEST_USER% --password=%MYSQL_TEST_PASSWD% -e "CREATE DATABASE IF NOT EXISTS test"
34if %errorlevel% neq 0 exit /b 3
35
36rem setup PostgreSQL related exts
37set PGUSER=postgres
38set PGPASSWORD=Password12!
39rem set PGSQL_TEST_CONNSTR=host=127.0.0.1 dbname=test port=5432 user=postgres password=Password12!
40echo ^<?php $conn_str = "host=127.0.0.1 dbname=test port=5432 user=%PGUSER% password=%PGPASSWORD%"; ?^> >> "./ext/pgsql/tests/config.inc"
41set PDO_PGSQL_TEST_DSN=pgsql:host=127.0.0.1 port=5432 dbname=test user=%PGUSER% password=%PGPASSWORD%
42set TMP_POSTGRESQL_BIN=%PGBIN%
43"%TMP_POSTGRESQL_BIN%\createdb.exe" test
44if %errorlevel% neq 0 exit /b 3
45
46rem setup ODBC related exts
47set ODBC_TEST_USER=sa
48set ODBC_TEST_PASS=Password12!
49set ODBC_TEST_DSN=Driver={ODBC Driver 17 for SQL Server};Server=^(local^)\SQLEXPRESS;Database=master;uid=%ODBC_TEST_USER%;pwd=%ODBC_TEST_PASS%
50set PDOTEST_DSN=odbc:%ODBC_TEST_DSN%
51
52rem setup Firebird related exts
53curl -sLo Firebird.zip https://github.com/FirebirdSQL/firebird/releases/download/v3.0.9/Firebird-3.0.9.33560-0_x64.zip
547z x -oC:\Firebird Firebird.zip
55set PDO_FIREBIRD_TEST_DATABASE=C:\test.fdb
56set PDO_FIREBIRD_TEST_DSN=firebird:dbname=%PDO_FIREBIRD_TEST_DATABASE%
57set PDO_FIREBIRD_TEST_USER=SYSDBA
58set PDO_FIREBIRD_TEST_PASS=phpfi
59echo create database '%PDO_FIREBIRD_TEST_DATABASE%' user '%PDO_FIREBIRD_TEST_USER%' password '%PDO_FIREBIRD_TEST_PASS%';> C:\Firebird\setup.sql
60C:\Firebird\instsvc.exe install -n TestInstance
61C:\Firebird\isql -q -i C:\Firebird\setup.sql
62C:\Firebird\instsvc.exe start -n TestInstance
63if %errorlevel% neq 0 exit /b 3
64path C:\Firebird;%PATH%
65
66rem prepare for ext/openssl
67rmdir /s /q C:\OpenSSL-Win32 >NUL 2>NUL
68rmdir /s /q C:\OpenSSL-Win64 >NUL 2>NUL
69if "%PLATFORM%" == "x64" (
70	set OPENSSLDIR="C:\Program Files\Common Files\SSL"
71) else (
72	set OPENSSLDIR="C:\Program Files (x86)\Common Files\SSL"
73)
74if /i "%GITHUB_ACTIONS%" equ "True" (
75    rmdir /s /q %OPENSSLDIR% >nul 2>&1
76)
77mkdir %OPENSSLDIR%
78if %errorlevel% neq 0 exit /b 3
79copy %DEPS_DIR%\template\ssl\openssl.cnf %OPENSSLDIR%
80if %errorlevel% neq 0 exit /b 3
81rem set OPENSSL_CONF=%OPENSSLDIR%\openssl.cnf
82set OPENSSL_CONF=
83rem set SSLEAY_CONF=
84
85rem prepare for OPcache
86if "%OPCACHE%" equ "1" set OPCACHE_OPTS=-d opcache.enable=1 -d opcache.enable_cli=1 -d opcache.protect_memory=1 -d opcache.jit_buffer_size=64M -d opcache.jit=tracing
87rem work-around for failing to dl(mysqli) with OPcache (https://github.com/php/php-src/issues/8508)
88if "%OPCACHE%" equ "1" set OPCACHE_OPTS=%OPCACHE_OPTS% -d extension=mysqli
89
90rem prepare for enchant
91mkdir %~d0\usr\local\lib\enchant-2
92if %errorlevel% neq 0 exit /b 3
93copy %DEPS_DIR%\bin\libenchant2_hunspell.dll %~d0\usr\local\lib\enchant-2
94if %errorlevel% neq 0 exit /b 3
95mkdir %~d0\usr\local\share\enchant\hunspell
96if %errorlevel% neq 0 exit /b 3
97echo Fetching enchant dicts
98pushd %~d0\usr\local\share\enchant\hunspell
99powershell -Command wget http://windows.php.net/downloads/qa/appveyor/ext/enchant/dict.zip -OutFile dict.zip
100unzip dict.zip
101del /q dict.zip
102popd
103
104rem prepare for snmp
105set MIBDIRS=%DEPS_DIR%\share\mibs
106start %DEPS_DIR%\bin\snmpd.exe -C -c %APPVEYOR_BUILD_FOLDER%\ext\snmp\tests\snmpd.conf -Ln
107
108set PHP_BUILD_DIR=%PHP_BUILD_OBJ_DIR%\Release
109if "%THREAD_SAFE%" equ "1" set PHP_BUILD_DIR=%PHP_BUILD_DIR%_TS
110
111rem prepare for mail
112curl -sLo hMailServer.exe https://www.hmailserver.com/download_file/?downloadid=271
113hMailServer.exe /verysilent
114cd %APPVEYOR_BUILD_FOLDER%
115%PHP_BUILD_DIR%\php.exe -dextension_dir=%PHP_BUILD_DIR% -dextension=com_dotnet .github\setup_hmailserver.php
116
117mkdir %PHP_BUILD_DIR%\test_file_cache
118rem generate php.ini
119echo extension_dir=%PHP_BUILD_DIR% > %PHP_BUILD_DIR%\php.ini
120echo opcache.file_cache=%PHP_BUILD_DIR%\test_file_cache >> %PHP_BUILD_DIR%\php.ini
121if "%OPCACHE%" equ "1" echo zend_extension=php_opcache.dll >> %PHP_BUILD_DIR%\php.ini
122rem work-around for some spawned PHP processes requiring OpenSSL
123echo extension=php_openssl.dll >> %PHP_BUILD_DIR%\php.ini
124
125rem remove ext dlls for which tests are not supported
126for %%i in (ldap) do (
127	del %PHP_BUILD_DIR%\php_%%i.dll
128)
129
130set TEST_PHPDBG_EXECUTABLE=%PHP_BUILD_DIR%\phpdbg.exe
131
132mkdir c:\tests_tmp
133
134set TEST_PHP_JUNIT=c:\junit.out.xml
135
136nmake test TESTS="%OPCACHE_OPTS% -g FAIL,BORK,LEAK,XLEAK --no-progress -q --offline --show-diff --show-slow 1000 --set-timeout 120 --temp-source c:\tests_tmp --temp-target c:\tests_tmp --bless %PARALLEL%"
137
138set EXIT_CODE=%errorlevel%
139
140taskkill /f /im snmpd.exe
141
142if %EXIT_CODE% GEQ 1 (
143	git checkout ext\pgsql\tests\config.inc
144	git diff > bless_tests.patch
145)
146
147exit /b %EXIT_CODE%
148