diff --git a/.github/scripts/windows/check-snmp-ready.bat b/.github/scripts/windows/check-snmp-ready.bat new file mode 100644 index 000000000000..ce2082d9edb0 --- /dev/null +++ b/.github/scripts/windows/check-snmp-ready.bat @@ -0,0 +1,46 @@ +@echo off +setlocal + +set "PHP_BUILD_DIR=%~1" +if "%PHP_BUILD_DIR%"=="" ( + echo Usage: %~nx0 PHP_BUILD_DIR + exit /b 1 +) + +set "PHP_EXE=%PHP_BUILD_DIR%\php.exe" +set "PHP_SNMP_DLL=%PHP_BUILD_DIR%\php_snmp.dll" +set "PHP_CODE=snmp_set_valueretrieval(SNMP_VALUE_PLAIN); $oid='.1.3.6.1.2.1.1.1.0'; if (@snmpget('127.0.0.1', 'public', $oid, 1000000, 0) === false) exit(1); if (@snmp3_get('127.0.0.1', 'adminMD5AES', 'authPriv', 'MD5', 'test1234', 'AES', 'test1234', $oid, 1000000, 0) === false) exit(1);" + +if not exist "%PHP_EXE%" ( + echo Could not find "%PHP_EXE%" + exit /b 1 +) + +if not exist "%PHP_SNMP_DLL%" ( + echo Could not find "%PHP_SNMP_DLL%" + exit /b 1 +) + +for /l %%i in (1,1,30) do ( + call :probe + if not errorlevel 1 goto ready + tasklist /fi "IMAGENAME eq snmpd.exe" | findstr /i "snmpd.exe" >nul + if errorlevel 1 ( + echo snmpd exited before the readiness check succeeded + goto fail + ) + timeout /t 1 /nobreak >nul +) + +echo snmpd did not become ready within 30 seconds +goto fail + +:ready +exit /b 0 + +:fail +exit /b 1 + +:probe +"%PHP_EXE%" -n -dextension_dir=%PHP_BUILD_DIR% -dextension=php_snmp.dll -r "%PHP_CODE%" >nul 2>&1 +exit /b %errorlevel% diff --git a/.github/scripts/windows/test_task.bat b/.github/scripts/windows/test_task.bat index 4ce2bd96ce66..d9a9d13a8b9f 100644 --- a/.github/scripts/windows/test_task.bat +++ b/.github/scripts/windows/test_task.bat @@ -109,7 +109,8 @@ popd rem prepare for snmp set MIBDIRS=%DEPS_DIR%\share\mibs sed -i "s/exec HexTest .*/exec HexTest cscript\.exe \/nologo %GITHUB_WORKSPACE:\=\/%\/ext\/snmp\/tests\/bigtest\.js/g" %GITHUB_WORKSPACE%\ext\snmp\tests\snmpd.conf -start %DEPS_DIR%\bin\snmpd.exe -C -c %GITHUB_WORKSPACE%\ext\snmp\tests\snmpd.conf -Ln +start "" /b "%DEPS_DIR%\bin\snmpd.exe" -C -c "%GITHUB_WORKSPACE%\ext\snmp\tests\snmpd.conf" -Ln +if %errorlevel% neq 0 exit /b 3 set PHP_BUILD_DIR=%PHP_BUILD_OBJ_DIR%\Release if "%THREAD_SAFE%" equ "1" set PHP_BUILD_DIR=%PHP_BUILD_DIR%_TS @@ -147,6 +148,10 @@ copy /-y %DEPS_DIR%\bin\*.dll %PHP_BUILD_DIR%\* if "%ASAN%" equ "1" set ASAN_OPTS=--asan +rem wait until snmpd is fully ready to serve v2c and v3/authPriv requests +.github\scripts\windows\check-snmp-ready.bat %PHP_BUILD_DIR% +if %errorlevel% neq 0 exit /b 3 + mkdir c:\tests_tmp nmake test TESTS="%OPCACHE_OPTS% -g FAIL,BORK,LEAK,XLEAK %ASAN_OPTS% --no-progress -q --offline --show-diff --show-slow 1000 --set-timeout 120 --temp-source c:\tests_tmp --temp-target c:\tests_tmp %PARALLEL%"