🖥 Стенды
Вы находитесь на стенде {{ current_stand }}Что такое Polygon?
Polygon — это эмулятор REST API облачной платформы Nubes для интеграционных тестов. Он полностью повторяет контракты реального API: сервисы, инстансы, операции, параметры, валидацию — но работает без реальной инфраструктуры, в памяти, с мгновенным откликом.
Зачем нужен
- Тестировать создание/изменение/удаление инстансов без реальных ресурсов
- Отлаживать UI автодеплоя (
app-autotest) на мок-данных - Писать интеграционные тесты с детерминированным состоянием
- Проверять краевые случаи (ошибки валидации, сбои операций)
Как устроен
- Flask 3.0 + gunicorn, 1 воркер (состояние в памяти)
- Конфигурация сервисов — из YAML (генерируется из STANDS)
- Все операции — синхронные, с настраиваемой задержкой
- Управляемый сброс состояния через
/_mock/reset
Как использовать
{% if stands_list|length > 1 %}Стенд: {{ current_stand }}{% endif %}📡 Базовые команды
Получить список сервисов:
curl -s {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/services | python3 -m json.tool
Создать инстанс:
curl -s -X POST {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/instances \
-H "Content-Type: application/json" \
-d '{"serviceId": 1, "displayName": "my-instance"}' | python3 -m json.tool
Создать операцию, установить параметры, запустить:
# 1. Создать операцию (получить opUid из ответа)
curl -s -X POST {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/instanceOperations \
-H "Content-Type: application/json" \
-d '{"instanceUid": "<uid>", "operation": "create", "svcOperationId": 18}'
# 2. Установить каждый параметр (повторить для всех)
curl -s -X POST {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/instanceOperationCfsParams \
-H "Content-Type: application/json" \
-d '{"instanceOperationUid": "<opUid>", "svcOperationCfsParamId": 242, "paramValue": "my-value"}'
# 3. Запустить операцию (будет ждать {{ delay }}s)
curl -s -X POST {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/instanceOperations/<opUid>/run
🛠 Управление полигоном (служебные эндпоинты)
⏱ Задержка операций
Каждый POST /run ждёт {{ delay }} секунд перед ответом — эмуляция времени выполнения в облаке.
Текущая: {{ delay }}s
# Сделать операции мгновенными
curl -s -X POST {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/_mock/delay/0
# Поставить задержку 3 секунды
curl -s -X POST {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/_mock/delay/3
# Максимум — 5 секунд (защита healthcheck'а)
🧹 Сброс состояния
Удаляет все инстансы и операции на текущем стенде. Полезно перед каждым тестом.
curl -s -X POST {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/_mock/reset
💥 Симуляция ошибок
Следующий POST /run упадёт с ошибкой. One-shot: после использования флаг сбрасывается.
# Включить
curl -s -X POST {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/_mock/fail-next
# Следующий run → {"ok": false, "error": "mock failure..."}
# После этого — снова работает нормально
📊 Отладка
Посмотреть текущее состояние всех инстансов и операций:
curl -s {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/_mock/state | python3 -m json.tool
Список загруженных сервисов:
curl -s {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/_mock/services | python3 -m json.tool
🔁 Жизненный цикл операции
GET /instanceOperations/default/{svcOperationId}— узнать какие параметры нужныPOST /instanceOperations— создать операцию (получить opUid)POST /instanceOperationCfsParams× N — установить каждый параметрGET /{opUid}/validate-cfs— проверить корректностьPOST /{opUid}/run— выполнить (ждёт {{ delay }}s)GET /{opUid}?fields=dtFinish,isSuccessful— проверить результат
API эндпоинты
| Метод | Путь | Описание |
|---|---|---|
| GET | /health | Healthcheck |
| GET | /api/v1/svc/services | Список сервисов |
| GET | /api/v1/svc/services/<id> | Детали сервиса |
| GET | /api/v1/svc/instances | Список инстансов |
| GET | /api/v1/svc/instances/<uid> | Детали инстанса |
| POST | /api/v1/svc/instances | Создать инстанс |
| GET | /api/v1/svc/instanceOperations | Список операций |
| POST | /api/v1/svc/instanceOperations/<uid>/run | Запустить операцию |
| GET | /api/v1/svc/instanceOperations/<uid>/status | Статус операции |
| POST | /api/v1/svc/_mock/reset | Сброс состояния |
| GET | /api/v1/svc/_mock/state | Дамп состояния |
| POST | /api/v1/svc/_mock/delay/<s> | Задать задержку |
| POST | /api/v1/svc/_mock/fail-next | Следующая операция упадёт |
Загруженные сервисы ({{ svc_count }})
| ID | Название | Операций | CfsParams | StateParams | StateOut |
|---|---|---|---|---|---|
{{ svc.id }} |
{{ svc.display_name }} | {{ svc.op_count }} | {% if svc.has_cfs %}{% else %}{% endif %} | {% if svc.has_state %}{% else %}{% endif %} | {% if svc.has_out %}{% else %}{% endif %} |