короткой версии
Почему это неизмененный код из официального релиза PHP 5.6.18:Строительство PHP5.6.18 на Arch Linux: окна тест не пропускается несмотря на PHP_OS проверить
--SKIPIF--
<?php
if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); }
if (!extension_loaded('openssl')) { die('ext/openssl required'); }
if(substr(PHP_OS, 0, 3) != 'WIN') {
die('skip windows only test');
}
?>
... не вызывают тест только для Windows, который нужно пропустить, когда я создаю пакет PHP на Arch Linux?
Длинная версия
Я пытаюсь построить PHP5.6.18 с помощью PKGBUILD из официальной Arch Build System. Вот что я сделал:
git clone git://projects.archlinux.org/svntogit/packages.git
- Я прошел через git history of the php package, и определил this commit лучшей отправной точки - в основном последней фиксации перед uprev в PHP7. Итак, я подключился к
packages
иgit checkout
, которые фиксируют ID. - Я обновил PKGBUILD так:
- набор
pkgver=5.6.18
- установить
pkgrel=1
- установить первый md5sum к
'177ba962557795866ae331ad4ad99bba'
- набор
- setup clean chroot for building (это уменьшало тестовые отказы от 2-3 до 1)
- Build php:
makechrootpkg -c -r $CHROOT
(в каталоге с файломPKGBUILD
.
Билд работает отлично, но я получаю следующее провале теста:
Number of tests : 6651 6180
Tests skipped : 471 ( 7.1%) --------
Tests warned : 1 ( 0.0%) ( 0.0%)
Tests failed : 1 ( 0.0%) ( 0.0%)
Expected fail : 9 ( 0.1%) ( 0.1%)
Tests passed : 6169 (92.8%) (99.8%)
---------------------------------------------------------------------
Time taken : 45 seconds
...
FAILED TEST SUMMARY
---------------------------------------------------------------------
mixed stream_socket_enable_crypto(resource $stream , bool $enable [, int $crypto_type [, resource $session_stream
]]) ; [ext/standard/tests/streams/stream_socket_enable_crypto-win32.phpt]
=====================================================================
=====================================================================
WARNED TEST SUMMARY
---------------------------------------------------------------------
Bug #70172 - Use After Free Vulnerability in unserialize() [ext/standard/tests/serialize/bug70172.phpt] (warn: XFA
IL section but test passes)
=====================================================================
ОК, так что win32
уже выглядит подозрительным в имени файла, и посмотреть на содержимое файла действительно предполагает, что тест должен быть пропущен на Linux:
--TEST--
mixed stream_socket_enable_crypto(resource $stream , bool $enable [, int $crypto_type [, resource $session_stream ]]) ;
...
--SKIPIF--
<?php
if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); }
if (!extension_loaded('openssl')) { die('ext/openssl required'); }
if(substr(PHP_OS, 0, 3) != 'WIN') {
die('skip windows only test');
}
?>
Примечание соответствующая проверка PHP_OS
. Итак, я думаю, возможно, PHP_OS каким-то образом получает неправильное значение. Так, I:
- вручную перейти в сборки Chroot:
arch-nspawn $CHROOT/$USER/
- Добавить
echo substr(PHP_OS, 0, 3)
в начале этого теста (только под<?php
в разделе--FILE--
, и в самомstream_socket_enable_crypto-win32.php
файле) - Повторно запустите его, используя сценарий
stream_socket_enable_crypto-win32.sh
в том же каталоге, я действительно вижу ожидаемый выводLin
.
Почему этот тест не пропущен? Я действительно смущен. Как я могу исправить эту проблему?
Поскольку это временное решение, а не полное решение, я не буду отмечать это как ответ еще, посмотрите, есть ли у кого-то лучшая идея/решение/первопричина. – m01