Оригинальная новость была опубликована 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.

Мы решили:

  1. синхронизировать как можно больше проектов Wine с версией Wine 10.0 (не самой последней, но фиксированной — это упростит будущие синхронизации);

  2. чётко документировать изменения в коде 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 не формализованы.

С благодарностью,
Карл Бялоруцкий