**Language / Язык:** [English](README.md) | [Русский](README.ru.md) # Лаборатория Pulumi: покрытие контрактов oVirt Suite на Pulumi Automation API, который вызывает **каждую операцию** из `contracts/ovirt//api.json` для **всех series packs** Engine, плюс **синтетический HEAD** для каждого GET-пути (в contracts нет HEAD; Engine его принимает). | Series | Операций (примерно) | |--------|--------------------:| | 3.0–3.6, 4.3–4.5, master | ~9 150 выполнений (ops из контрактов + HEAD) | ```bash make test-pulumi-smoke # выборка 3.6 + 4.5 (быстро) make pulumi-tests # полная матрица (alias: make test-pulumi) ``` Отчёты (в `reports/`): - `pulumi-contract-coverage.html` — сводка для человека (включая гистограмму методов) - `pulumi-contract-coverage.json` — машиночитаемый результат Фильтры: ```bash OVIRT_SERIES_FILTER=4.5,3.6 make pulumi-tests OVIRT_METHODS_FILTER=GET make pulumi-tests SMOKE_ONLY=1 make test-pulumi-smoke ``` Все suites — **только в Docker**. Критерии pass: - Маршрут Engine достижим и возвращает обработанный статус (`200`/`201`/`202`/`204`, `400`/`403`/`404`/`405`/`409`/`415`/`422`/`501`) — **не** `401` (после unload каждой series suite заново логинится) и не транспортную / `5xx` ошибку. - Для `200`/`201`/`202` тело ответа должно быть непустым (HEAD исключён). - Полный прогон должен покрыть **GET, POST, PUT, DELETE и HEAD**; любые failures или отсутствующие методы валят suite.