Здравствуйте!
Решил поучаствовать в тестировании Drupal (версия 7)
Подскажите какие у них используются настройки окружения?
Я правильно понимаю, что перед тем как выпустить релиз, сначала он должен пройти https://qa.drupal.org/pifr/status и не быть ни одной ошибки?
Считаются ли Notices ошибками?
у меня много тестов не проходит
например, filter_xss:
Drupal test run
---------------
Tests to be run:
- Filter module filters (FilterUnitTestCase)
Test run started:
Tuesday, December 2, 2014 - 15:49
Test summary
------------
string(20) "<img src="alert(0)">"
string(39) "<img src="  javascript:alert(0)">"
Filter module filters 214 passes, 1 fail, and 0 exceptions
Test run duration: 0 sec
//filter_xss('<img src="jav
ascript:alert(0)">', array('img'));
//filter_xss('<img src="  javascript:alert(0)">', array('img'));
всего
- Image dimensions (ImageDimensionsTestCase)
Image dimensions 30 passes, 24 fails, 5 exceptions, and 8 debug messages
- Image field display tests (ImageFieldDisplayTestCase)
Image field display tests 158 passes, 4 fails, 0 exceptions, and 52 debug messages
OpenID
- OpenID helper functions (OpenIDTestCase)
OpenID helper functions 41 passes, 2 fails, and 0 exceptions
Poll
- User poll vote capability. (PollVoteCheckHostname)
User poll vote capability. 133 passes, 14 fails, 0 exceptions, and 38 debug messages
Session
- Session HTTPS handling (SessionHttpsTestCase)
Session HTTPS handling 76 passes, 7 fails, 0 exceptions, and 25 debug messages
- Session tests (SessionTestCase)
Session tests 188 passes, 4 fails, 0 exceptions, and 52 debug messages
System (Web pass)
- Tablesort (TableSortTest)
Tablesort 0 passes, 0 fails, and 1 exception
Tracker (2 Notices)
- Tracker (TrackerTest)
Tracker 288 passes, 0 fails, 2 exceptions, and 87 debug messages
Upgrade path (SimpleTest - broken)
- Taxonomy upgrade path (UpgradePathTaxonomyTestCase)
Taxonomy upgrade path 1282 passes, 24 fails, 24 exceptions, and 46 debug messages
Ошибок довольно много. И это только ядро.
больше всего картинки беспокоят, судя по всему с gd в 5.5 что-то не так.
Выбрал 16 модулей из топ-100 по популярности, тесты почти все проходят. старался выбирать те, у которых есть понятный путь в drupal 8, или которые смержили в ядро.
В модуле Link (d8 core) - вот такое попалось
модуль l10n_update (d8 core)
- Update translations using cron (L10nUpdateCronTest)
Update translations using cron 61 passes, 5 fails, 0 exceptions, and 27 debug messages
- Update translations (L10nUpdateTest)
Update translations 535 passes, 36 fails, 1 exception, and 210 debug messages
все тестируемые версии - не dev, а последние рекомендуемые для семерки.
Хочу отметить, что при этом drupal работает стабильно, никаких ошибок не показывает, возможно код, который не проходит тестирование, даже и не выполнится никогда.
Видел, что некоторые здесь обнаруживают ошибки, некоторые уже после "накатывания" обновлений)
некоторые потом откатывают назад.
Вопрос, кто-нибудь вообще тестирует эти "накатывания" перед обновлением?
Я хочу понять, какое окружение рекомендуется использовать (что у меня не так - и почему все тесты не проходят),
в частности я тестирую PHP 5.5+ (сейчас 5.6)
здесь увидел https://www.drupal.org/project/testbot, что
The testbot is running PHP 5.3.27 (from dotdeb)
дело только в этом?
есть вот такой issue https://www.drupal.org/node/1867192
кстати с пометкой "D8 stable release blocker"
в принципе, все равно должно работать на 5.5, думаю и для семерки вопрос совместимости будут решать.
Комментарии
судя по всему, если у вас на сервере не версия 5.3.27 и тесты вы не делали, то ожидать можно чего угодно
https://www.drupal.org/node/2364647#comment-9291713
сделал downgrade php до 5.5.12 на локальной машине http://hackedbellini.org/linux/downgrade-and-force-some-packages-on-debi...
но тесты все равно не проходит, при этом некоторые высказывают личное мнение https://www.drupal.org/requirements#comment-9312383
что если модуль не проходит тест для 5.3.27+, то это баг поскольку вынуждает вас использовать неподдерживаемую версию php, которая не получает security fixes. а как же тогда само ядро?
Теперь угадайте почему на боте стоит именно эта версия?
http://php.net/releases/5_3_27.php
это был последний регулярный релиз! )
после него только security fixes один год
http://php.net/ChangeLog-5.php#5.3.27
выпущен был 11 Jul 2013
последний релиз 5.3.29 - http://php.net/releases/5_3_29.php
конец жизни ветки.
в свете последних DRUPAL-SA-CORE весело это)
было бы интересно узнать как остальные решают эту проблему на хостинге - какую версию php используете?
когда появится drupal 8 - будете выбирать разный хостинг для разных версий?
или смиритесь с тем, что 7 версия будет глючить?
но это не значит, что проблемы нет
вот xss на чистом друпал 7, php 5.5
да, он работает только на ie6, кажется)
но это только 1 ошибка - и она результат невыполнения теста.
получается, что php без проверки обновлять опасно, проверку за вас никто не делает, а это сильно сокращает время жизни сайта, точнее накладывает на него ограничения - или сидите на старом php, или делайте major upgrade.
Все-таки не удержался и задал неудобный вопрос)
https://www.drupal.org/requirements#comment-9402681
Я хотел бы эти ошибки исправить, даже патчи прислать где смогу, но на данный момент думаю на меня посмотрят как на дурака, т.к. такой цели чтобы все работало на 5.4+ у друпала нету, и проверить им негде - инфраструктура не готова. может поменяют официальные требования, а может и коммент сотрут.
UPD:
security team member klausi сказал, что все нормально посоны https://www.drupal.org/node/2387055
Потратил 2 дня чтобы понять что не так с этой ошибкой и почему ее так долго не исправляют.
Вот эти строки из родословной друпала, откуда он вышел, лежат в /includes/commin.inc https://github.com/drupal/drupal/blob/8.0.x/core/lib/Drupal/Component/Ut...
История у kses такая:
Если вы заглянете чуть дальше в код, то увидите, что он весь с семерки, и там есть комментарии что это чудовищно медленный код, но что поделать нужно sanitize.
preg_replace, еще и рекурсивно, это неправильный алгоритм.
он использует много проходов, тогда как эта задача решается в один проход.
он не может быть быстрым.
Чтобы понять, почему этот алгоритм неэффективен для php - в ядре php тоже производится синтаксический разбор всех сущностей, но также за один проход и если раньше они конвертировали все, то по новым стандартам это недопустимо - это parse error.
При этом эти символы нельзя (то есть очень не рекомендуется) удалять - http://unicode.org/reports/tr36/#Deletion_of_Noncharacters
чтобы решить проблему sanitize, google использует алгоритм написанный на С и портированный в python, чтобы было немного быстрее.
если посмотрите в код - https://github.com/google/gumbo-parser
то увидите, что там используется конечный автомат FSM
этот алгоритм портирован почти на все языки https://github.com/search?utf8=%E2%9C%93&q=gumbo-parser
в том числе и на PHP (не поддерживаемый). но для php его никто не использует, поскольку требуется компиляция расширения и его подключение.
на node.js порт тоже есть - https://github.com/karlwestin/node-gumbo-parser
при этом он не такой популярный как https://github.com/fb55/htmlparser2
но у того написано forgiving и он жействительно все прощает - поробуйте здесь написать атрибут с двойной и одинарной кавычкой http://demos.forbeslindesay.co.uk/htmlparser2/
есть бенчмарк для тестов с xss. очень легко убедиться
cd benchmark
npm install
!>npm test
> htmlparser-benchmark@1.1.1 test /home/andribas/opensource/htmlparser-benchmark
> node execute.js
gumbo-parser : 19.5836 ms/file ± 10.2761
high5 : 3.41322 ms/file ± 2.00341
html-parser : 8.18504 ms/file ± 5.26704
html5 : 118.467 ms/file ± 154.883
htmlparser : 19.6755 ms/file ± 124.388
htmlparser2-dom: 4.34360 ms/file ± 2.39088
htmlparser2 : 2.71104 ms/file ± 1.57778
hubbub : 9.36008 ms/file ± 5.04074
libxmljs : 4.14832 ms/file ± 4.81537
parse5 : 7.32204 ms/file ± 4.73539
есть вот такой комментарий https://github.com/google/gumbo-parser/issues/53#issuecomment-43395597
это относится к ошибке, которая воспроизводится на новом php, сначала хотел написать на drupal.org, но передумал
bug report - https://bugs.php.net/bug.php?id=52860
commit - https://github.com/php/php-src/commit/91727cb844ecfe55f6dcd2f13ffeec3962...
HTML 5 valid numeric entities for attributes, are http://www.w3.org/html/wg/drafts/html/master/syntax.html#text
если покопать, то там есть ссылки на много стандартов, плюс php team ссылается на стандарты html5.
я их собрал, и вроде бы все понятно, но когда посмотришь на FSM от google, то с трудом верится, что можно просто взять и портировать это на php - с расширением, которое нужно подгружать - использовать его никто не будет, а переписать весь код задача не из простых)
в node в этом плане модули проще собираются.
по этой причине все ноды сохраняются долго, формы обрабатываются, импортируются ленты и т.д. - все поля ссылок, описаний проходят sanitize, который очень медленный.
это такая штука, которую не закешируешь.
Но есть и другое мнение, я его не сразу понял, пока не прочитал последние строки самого популярного комментария http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-...
Отправил патч в drupal core https://www.drupal.org/node/1210798#comment-9412219
UPD:
ураа!! патч прошел тест. не очень правда понял что там про меня написали)
посмотрим что будет дальше
Судя по вот этому https://www.drupal.org/node/1333730
прилепят это - https://github.com/Masterminds/html5-php
по крайней мере патч почти готов.
альтернатива есть такая - https://github.com/symfony/DomCrawler
но гумбо https://github.com/google/gumbo-parser все равно лучше, потому что
жаль, что он не на PHP.
без этих изменений html5 в друпал 8 будет глючить.