Оригинальная новость была опубликована 4 ноября 2025 года
На протяжении многих лет тестовые наборы ReactOS оставались без должного внимания. Они представляли собой случайный набор:
собственных тестов проекта;
старых тестов Wine, которые проверялись только на Windows Server 2003 и иногда — на случайных более новых версиях Windows (на усмотрение участника).
Импортированные тесты Wine были сильно модифицированы, а внесённые изменения не всегда хорошо документировались.
Я взялся навести порядок в этом хаосе.
О моей работе в проекте
Я активно участвую в проекте ReactOS с 2023 года. В мае 2024 года я стал официальным разработчиком проекта. В мае 2025 года мне поручили привести в порядок набор тестов; в августе контракт продлили до декабря.
Ниже — чем я занимался в рамках этого контракта.
Наши тесты
С начала работы по контракту я:
исправил 55 собственных тестовых модулей проекта;
написал 5 новых.
Исправления проверялись на последних версиях:
Windows Server 2003;
Windows Vista;
Windows 7;
Windows 8.1;
Windows 10 (сборка 1607).
Тестирование проводилось для:
архитектур x86 и x64;
сборок, скомпилированных с помощью GCC и MSVC.
Проверка исправлений заняла много времени.
Часть тестового набора включает тесты режима ядра («kmtests»). Некоторые из них были некорректны для версий Vista и новее: их запуск вызывал bugchecks (BSoD) в новых версиях Windows. После внесения исправлений полный тестовый набор теперь запускается на Windows Vista без сбоев.
Тесты Wine
После работы над собственными тестами я сосредоточился на главной причине сбоев — тестах, которые мы синхронизируем с проектом Wine.
Мы решили:
синхронизировать как можно больше проектов Wine с версией Wine 10.0 (не самой последней, но фиксированной — это упростит будущие синхронизации);
чётко документировать изменения в коде Wine с помощью защит препроцессора C.
Проблема с заголовками Wine
Заголовки Wine несовместимы с заголовками Microsoft из публичного Windows SDK. Долгое время наши заголовки пытались совместить оба варианта, из‑за чего стали несовместимы ни с теми, ни с другими. Это требовало некоторых хаков для кода Wine, нашего кода и кода других проектов, ожидающих официальные заголовки Microsoft.
В рамках синхронизации тестов Wine я:
создал отдельный каталог для заголовков Wine;
разделил наши заголовки и заголовки Wine;
переписал несколько наших заголовков, изначально взятых из Wine.
Теперь:
для кода Wine используются актуальные заголовки Wine;
для всего остального — заголовки, совместимые с Microsoft.
Это разделение:
сокращает число изменений, необходимых для кода Wine и других проектов;
открывает возможность выпустить SDK под лицензией MIT отдельно от ReactOS.
Дальнейшие шаги с тестами Wine
Многие тесты Wine всё ещё требуют патчей, чтобы:
выполняться без сбоев на Windows Server 2003, Vista, 7, 8.1 и ранних версиях Windows 10;
работать с компилятором MSVC (Wine не ориентируется на него).
После того как тесты будут выполняться на Windows без ошибок, я проверяю, не падают ли они на ReactOS. Сбои тестов на ReactOS — это хорошо: они показывают, где можно исправить баги. Но пока тест падает, это не помогает оценить, улучшается ли ReactOS.
После устранения сбоев я открываю pull request, который затем проверяют другие основные разработчики и в итоге его объединяют в проект.
Что дальше?
ReactOS Deutschland e.V. оплачивает мой контракт и хостинг нашей инфраструктуры (сайт, вики, трекер ошибок, тестовые боты).
Testman: проблемы и планы
Для просмотра результатов работы тестовых ботов мы разработали инструмент Testman, интегрированный в сайт. Он тоже долгое время оставался без внимания и теперь имеет ряд проблем:
поиск сломан из‑за перехода с SVN на Git;
результаты тестов иногда некорректны (особенно при запуске дочерних процессов).
Я планирую исправить эти проблемы в рамках контракта.
Интеграция тестовых ботов в CI/CD
Сейчас мы используем GitHub Actions, чтобы убедиться, что каждый pull request компилируется для всех поддерживаемых целевых платформ. Однако разработчики вручную запускают тестовые боты для pull requests и вставляют результаты в описание запроса.
Автоматизация этого процесса:
упростит отслеживание результатов тестов;
даст авторам чёткое понимание влияния их pull request;
ускорит ревью.
Пока планы по расширению роли тестовых ботов в CI/CD не формализованы.
С благодарностью,
Карл Бялоруцкий
