1@echo off
2
3if /i "%GITHUB_ACTIONS%" neq "True" (
4    echo for CI only
5    exit /b 3
6)
7
8set NO_INTERACTION=1
9set REPORT_EXIT_STATUS=1
10set SKIP_IO_CAPTURE_TESTS=1
11
12call %~dp0find-target-branch.bat
13if "%BRANCH%" neq "master" (
14	set STABILITY=stable
15) else (
16	set STABILITY=staging
17)
18set DEPS_DIR=%PHP_BUILD_CACHE_BASE_DIR%\deps-%BRANCH%-%PHP_SDK_VS%-%PHP_SDK_ARCH%
19if not exist "%DEPS_DIR%" (
20	echo "%DEPS_DIR%" doesn't exist
21	exit /b 3
22)
23
24rem setup MySQL related exts
25set MYSQL_PWD=Password12!
26set MYSQL_TEST_PASSWD=%MYSQL_PWD%
27set MYSQL_TEST_USER=root
28set MYSQL_TEST_HOST=127.0.0.1
29set MYSQL_TEST_PORT=3306
30set PDO_MYSQL_TEST_USER=%MYSQL_TEST_USER%
31set PDO_MYSQL_TEST_PASS=%MYSQL_PWD%
32set PDO_MYSQL_TEST_HOST=%MYSQL_TEST_HOST%
33set PDO_MYSQL_TEST_PORT=%MYSQL_TEST_PORT%
34set PDO_MYSQL_TEST_DSN=mysql:host=%PDO_MYSQL_TEST_HOST%;port=%PDO_MYSQL_TEST_PORT%;dbname=test
35mysql --host=%PDO_MYSQL_TEST_HOST% --port=%MYSQL_TEST_PORT% --user=%MYSQL_TEST_USER% --password=%MYSQL_TEST_PASSWD% -e "CREATE DATABASE IF NOT EXISTS test"
36if %errorlevel% neq 0 exit /b 3
37
38rem setup PostgreSQL related exts
39set PGUSER=postgres
40set PGPASSWORD=Password12!
41rem set PGSQL_TEST_CONNSTR=host=127.0.0.1 dbname=test port=5432 user=postgres password=Password12!
42echo ^<?php $conn_str = "host=127.0.0.1 dbname=test port=5432 user=%PGUSER% password=%PGPASSWORD%"; ?^> >> "./ext/pgsql/tests/config.inc"
43set PDO_PGSQL_TEST_DSN=pgsql:host=127.0.0.1 port=5432 dbname=test user=%PGUSER% password=%PGPASSWORD%
44set TMP_POSTGRESQL_BIN=%PGBIN%
45"%TMP_POSTGRESQL_BIN%\createdb.exe" test
46if %errorlevel% neq 0 exit /b 3
47
48rem setup ODBC related exts
49set ODBC_TEST_USER=sa
50set ODBC_TEST_PASS=Password12!
51set ODBC_TEST_DSN=Driver={ODBC Driver 17 for SQL Server};Server=^(local^)\SQLEXPRESS;Database=master;uid=%ODBC_TEST_USER%;pwd=%ODBC_TEST_PASS%
52set PDOTEST_DSN=odbc:%ODBC_TEST_DSN%
53
54rem prepare for ext/openssl
55rmdir /s /q C:\OpenSSL-Win32 >NUL 2>NUL
56rmdir /s /q C:\OpenSSL-Win64 >NUL 2>NUL
57if "%PLATFORM%" == "x64" (
58	set OPENSSLDIR="C:\Program Files\Common Files\SSL"
59) else (
60	set OPENSSLDIR="C:\Program Files (x86)\Common Files\SSL"
61)
62if /i "%GITHUB_ACTIONS%" equ "True" (
63    rmdir /s /q %OPENSSLDIR% >nul 2>&1
64)
65mkdir %OPENSSLDIR%
66if %errorlevel% neq 0 exit /b 3
67copy %DEPS_DIR%\template\ssl\openssl.cnf %OPENSSLDIR%
68if %errorlevel% neq 0 exit /b 3
69rem set OPENSSL_CONF=%OPENSSLDIR%\openssl.cnf
70set OPENSSL_CONF=
71rem set SSLEAY_CONF=
72
73rem prepare for OPcache
74if "%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=16M
75rem work-around for failing to dl(mysqli) with OPcache (https://github.com/php/php-src/issues/8508)
76if "%OPCACHE%" equ "1" set OPCACHE_OPTS=%OPCACHE_OPTS% -d extension=mysqli
77
78rem prepare for enchant
79mkdir %~d0\usr\local\lib\enchant-2
80if %errorlevel% neq 0 exit /b 3
81copy %DEPS_DIR%\bin\libenchant2_hunspell.dll %~d0\usr\local\lib\enchant-2
82if %errorlevel% neq 0 exit /b 3
83mkdir %~d0\usr\local\share\enchant\hunspell
84if %errorlevel% neq 0 exit /b 3
85echo Fetching enchant dicts
86pushd %~d0\usr\local\share\enchant\hunspell
87powershell -Command wget http://windows.php.net/downloads/qa/appveyor/ext/enchant/dict.zip -OutFile dict.zip
88unzip dict.zip
89del /q dict.zip
90popd
91
92set PHP_BUILD_DIR=%PHP_BUILD_OBJ_DIR%\Release
93if "%THREAD_SAFE%" equ "1" set PHP_BUILD_DIR=%PHP_BUILD_DIR%_TS
94
95mkdir %PHP_BUILD_DIR%\test_file_cache
96rem generate php.ini
97echo extension_dir=%PHP_BUILD_DIR% > %PHP_BUILD_DIR%\php.ini
98echo opcache.file_cache=%PHP_BUILD_DIR%\test_file_cache >> %PHP_BUILD_DIR%\php.ini
99if "%OPCACHE%" equ "1" echo zend_extension=php_opcache.dll >> %PHP_BUILD_DIR%\php.ini
100rem work-around for some spawned PHP processes requiring OpenSSL
101echo extension=php_openssl.dll >> %PHP_BUILD_DIR%\php.ini
102
103rem remove ext dlls for which tests are not supported
104for %%i in (imap ldap oci8_12c pdo_firebird pdo_oci snmp) do (
105	del %PHP_BUILD_DIR%\php_%%i.dll
106)
107
108set TEST_PHPDBG_EXECUTABLE=%PHP_BUILD_DIR%\phpdbg.exe
109
110mkdir c:\tests_tmp
111
112set TEST_PHP_JUNIT=c:\junit.out.xml
113
114nmake test TESTS="%OPCACHE_OPTS% -g FAIL,XFAIL,BORK,WARN,LEAK,XLEAK,SKIP -q --offline --show-diff --show-slow 1000 --set-timeout 120 --temp-source c:\tests_tmp --temp-target c:\tests_tmp --bless %PARALLEL%"
115
116set EXIT_CODE=%errorlevel%
117
118if %EXIT_CODE% GEQ 1 (
119	git checkout ext\pgsql\tests\config.inc
120	git diff > bless_tests.patch
121)
122
123exit /b %EXIT_CODE%
124