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

🖥 Стенды

Вы находитесь на стенде {{ current_stand }}
{% 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 %}

1. Получить список сервисов

curl -s {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/services | python3 -m json.tool

2. Создать инстанс

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

3. Создать и запустить операцию

# Создать операцию
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}'

# Установить параметры
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"}'

# Запустить
curl -s -X POST {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/instanceOperations/<opUid>/run

4. Сбросить состояние

curl -s -X POST {{ endpoint }}/{% if stands_list|length > 1 %}{{ current_stand }}/{% endif %}api/v1/svc/_mock/reset \
  -H "X-Mock-Auth: test-token-123"

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 %}