Что делает инфраструктуру достойнее доверия

Контекст ошибок

Причины сохраняются вдоль цепочки вызовов

Структурные объекты ошибок несут домен, операцию и цепочку причин; поточный контекст ошибки соединяет слои, а статический объект ошибки нехватки памяти поддерживает пути при дефиците ресурсов.

API модели ошибок →Посмотреть реализацию →
Границы протоколов

Строгий разбор, ясная семантика

HTTP/1.1 обрабатывает длины сообщений и правила фрейминга явно; WebSocket проверяет канонические длины, UTF-8 и состояние фрагментации — верхние слои строятся на чёткой протокольной семантике.

API HTTP/1.1 →Посмотреть реализацию →
Безопасные умолчания

Проверка идентичности в потоке соединения

TLS-клиенты подтверждают собеседника через верификаторы; SSH-клиенты устанавливают доверие через политику проверки ключей хоста; пути почтовой аутентификации считают защищённый транспорт предпосылкой по умолчанию.

API проверки TLS →Посмотреть реализацию →
Границы ресурсов

Доступ к файлам ограничен дескрипторами каталогов

Возможности файлового корня организуют доступ через дескрипторы каталогов; пути POSIX используют openat с ограничением символических ссылок, пути Windows обрабатывают точки повторной обработки — обслуживая ограниченные файловые операции.

API файлов →Посмотреть реализацию →

Тестовая система, путешествующая с исходниками

Тестовое дерево покрывает ядро и пять библиотек расширения, следя не только за функциональными результатами, но и за памятью, состоянием объектов и разными формами сборки.

Ядро + пять расширений
2,512

Тестовых C-файлов в текущем дереве исходников.

Внедрение отказов памяти
327

Тестовых C-файлов с _oom в имени.

Пути без выделений
86

Тестовых C-файлов с _noalloc в имени.

Подсчёт охватывает физические файлы .c в tests/ и tests/ пяти расширений; последние две цифры — подмножества общего. Правила подсчёта и ревизия исходников.

Внедрение отказов и высвобождение ресурсов

Средства отладки памяти дают внедрение неудач выделения и статистику ресурсов; тесты проходят пути ошибок шаг за шагом, проверяя освобождение ресурсов и состояние объектов после неудачных возвратов.

API отладки памяти →

Протоколы и границы ввода

Тесты парсеров покрывают усечения, длины, кодировки и комбинации состояний; точки входа фаззинга продолжают исследовать разнообразные входы, помогая держать границы протоколов и памяти.

Пример фаззинг-теста →

Проверка одного заголовка и модулей

Пробы одного заголовка компилируют и вызывают склеенный артефакт; тесты обрезки проверяют ограничения зависимостей; верификация пакетов линкуется с настоящими программами-потребителями.

Команды сборки и упаковки →

Качество по всему конвейеру сборки

Много платформ, много компиляторов

Конфигурация непрерывной интеграции покрывает настольные и мобильные тестовые наборы, комбинируя GCC, Clang, MSVC и clang-cl для проверки путей платформенной адаптации.

Конфигурация CI →

Проверки памяти и поведения

ASan, UBSan и строгие предупреждения компилятора участвуют в верификации ядра, вводя проверки доступа к памяти и неопределённого поведения в инженерный поток.

Инструмент сборки →

Тесты соединений и жизненного цикла

Сетевые и конкурентные тесты организуют случаи вокруг установки соединения, передачи данных, отмены, остановки и возврата ресурсов — в фокусе полный жизненный цикл.

Сетевые тесты →

От одного прогона тестов — в реализацию

Выполните в корне репозитория XRT: сперва тесты ядра и конкурентности, затем выбранное расширение и релизные артефакты.

Корень репозитория
python tools/build.py --suite core,concurrency --jobs 4
python tools/build.py --manifest extlibs/xhttp/config/modules.json --suite xhttp_tests
python tools/package.py --kind static --verify