Skip to content

Нестабильный тест ТестДолженПроверитьПолучениеStreamEvent: готовность веб-сервера ждётся фиксированной паузой #1727

Description

@nixel2007

Опишите ошибку

tests/http.osТестДолженПроверитьПолучениеStreamEvent периодически падает на Windows-агенте:

Значение <1046> больше или равно, чем <600>, а ожидалось меньше
-> ТестДолженПроверитьПолучениеStreamEvent (482), tests\http.os

Тест поднимает веб-сервер в фоновом задании и проверяет, что заголовки ответа приходят раньше, чем обработчик досчитает до конца. Обе завязки — на стенные часы, без единой попытки повтора:

МенеджерФоновыхЗаданий.Выполнить(ЭтотОбъект, "Вебсервер");
...
// Подождем пока поднимится сервер
Приостановить(1000);

Старт = ТекущаяУниверсальнаяДатаВМиллисекундах();
Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос);
Прошло = ТекущаяУниверсальнаяДатаВМиллисекундах() - Старт;
ютест.ПроверитьМеньше(Прошло, 600);

Готовность сервера ждётся фиксированной секундой. Если на нагруженном агенте старт фонового задания плюс подъём Kestrel в неё не уложились, клиентский запрос блокируется до появления слушателя, и это время целиком попадает в Прошло. Полученные 1046 мс на такую картину ложатся.

Воспроизведение ошибки

Плавающее, зависит от загруженности агента. На Linux не воспроизводится.

Ожидаемое поведение

Тест меряет латентность заголовков, а не сумму латентности и остатка времени старта сервера, и не зависит от того, уложился ли старт в заранее заданную константу.

Окружение

  • ОС: Windows (Jenkins-агент). На Linux стабильно зелёный.
  • Версия: develop

Дополнительная информация

Замер на Linux показывает примерно десятикратный запас до порога — заголовки приходят за 46–75 мс при пороге 600. То есть сам порог не жадный, проблема именно в ожидании старта.

Возможное решение — заменить Приостановить(1000) на опрос готовности: цикл коротких попыток подключения с общим дедлайном, и только после успешного подключения начинать замер. Тогда медленный старт агента растянет фазу ожидания, а не попадёт в измеряемую величину.

Замечено в сборках PR #1725. Там же на Windows в разных сборках падали ещё два таймингованных теста из других подсистем — console.osТестДолжен_ПроверитьТаймаутЧтенияСтандартногоПотокаВвода и process.osТестДолжен_ПрочитатьВыводOscriptПострочно (последний разобран отдельно в #1726). Возможно, имеет смысл посмотреть на группу таймингованных тестов целиком.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions