Стратегия проверок
Что уже проверяется
Все проверки запускаются через единый реестр config/gates.json. npm run gate -- quick проверяет архитектурную политику, формат, TypeScript, lint, зависимости, сборку и unit-тесты. verify добавляет аудит зависимостей, реальную PostgreSQL/HTTP и браузер. release добавляет оба сценария 5 GiB с перезапусками. Старые npm aliases делегируют гейтам. Команды и расширение, результаты, инструкции.
Проверки по уровням
| Уровень | Проверяемое поведение |
|---|---|
| Domain | Идентичность, переходы, версии, политики меток/удаления; без сети и БД |
| Application | Оркестрация сценариев, ACL, идемпотентность, реакции на отказ порта |
| Adapter contract | Одинаковые гарантии Local/Object backend, ошибки и отмена |
| Integration | Реальная PostgreSQL, выбранный blob backend, leases/outbox/reconciliation |
| HTTP/SDK | Схемы, авторизация, коды, пагинация, abort, безопасные retry |
| Контракт API | OpenAPI snapshot, собственные SDK/CLI и фикстуры с известным происхождением |
| Transfer | 5 ГБ, bounded memory, Range, backpressure, повтор частей, совместная нагрузка |
| Failure/restore | Отключение узла, потеря ответа, разделение сети, чистое восстановление |
Текущие unit/fault/governance тесты находятся в tests/*.test.mjs, интеграционные — в tests/integration/**/*.test.mjs и импортируют собранный JS через Node.js test runner. Браузерные и большие сценарии перечислены в реестре явно. TS fixtures в tests/fixtures используются consumer-тестами и не являются самостоятельными входами. Новый набор подключается к реестру, verify/release и CI; неизвестные входы, only/skip/todo, пустые наборы и отсутствие инфраструктуры проваливают гейт.
Данные больших тестов генерируются потоково; не коммитим архивы 5 ГБ. Fixtures маленькие, обезличенные, с описанием происхождения и версии протокола. Контрактные записи не выполняются на рабочих репозиториях.
Часы и случайность контролируемы. Не полагаемся на sleep для гонок: используем управляемые точки синхронизации. Для асинхронных jobs проверяем повторную доставку, истечение lease и устаревшего владельца.
Приёмка первого сценария
- Приём файла до 5 ГБ не накапливает всё тело в памяти.
- До завершения и проверки файл не доступен как опубликованный.
- GET/HEAD/Range возвращают правильные байты, размер и ETag.
- После перезапуска промежуточная операция корректно продолжается или очищается.
- Потеря ответа завершения не создаёт две публикации.
- Ограничения и фактическая конфигурация стенда записаны в результатах.
Тесты должны защищать поведение и инварианты, а не повторять реализацию или проверять существование пустых экспортов. Процент покрытия сам по себе не является критерием надёжности.