polygon v{{ version }} 📋 Swagger
Работает · Сервисов: {{ svc_count }} · Инстансов: {{ inst_count }} · Задержка: {{ delay }}s
{% if stands_list|length > 1 %}
{% for s in stands_list %} {{ s.id }} {{ s.count }} {% endfor %}
{% endif %}

Что такое 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

🧹 Сброс состояния

Удаляет все инстансы и операции на текущем стенде. Полезно перед каждым тестом.

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

🔁 Жизненный цикл операции

  1. GET /instanceOperations/default/{svcOperationId} — узнать какие параметры нужны
  2. POST /instanceOperations — создать операцию (получить opUid)
  3. POST /instanceOperationCfsParams × N — установить каждый параметр
  4. GET /{opUid}/validate-cfs — проверить корректность
  5. POST /{opUid}/run — выполнить (ждёт {{ delay }}s)
  6. GET /{opUid}?fields=dtFinish,isSuccessful — проверить результат

API эндпоинты

Метод Путь Описание
GET/healthHealthcheck
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 }})

{% for svc in svc_list %} {% endfor %}
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 %}