Files
autotest/polygon-docs/sonnet-compare-testing-prompt.md
T

93 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Соннет: анализ сравнительного тестирования Polygon ↔ реальный Nubes API
> Адресат: Claude Sonnet 4.6 (новый чат)
> ⛔ Режим: **диалог**. Задавай встречные вопросы если нужно уточнение.
> ⛔ НЕ редактировать файлы. Только анализ и советы в чат.
---
## Контекст
**Polygon** (v0.5.4) — эмулятор REST API облачной платформы Nubes.
3 стенда: dev (37 сервисов), test (37), prod (35). YAML-конфиги генерируются
из терраформ-репы (`~/tf_provider/generated/{dev,test,prod}/resources_yaml/`).
**Реальное API**:
- `https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc`
- `https://lk-api-gateway-test.ngcloud.ru/api/v1/svc`
- `https://lk-api-gateway.ngcloud.ru/api/v1/svc`
Токены в `secrets/{dev,test,prod}.token`.
## Что сделано
Написан скрипт `compare_test.py` который сравнивает read-only эндпоинты
полигона и реального API:
- `GET /services` — список сервисов
- `GET /services/{id}` — операции (svcOperationId, operation, kind, action)
- `GET /instanceOperations/default/{id}` — cfsParams (id, код, dataType, isRequired)
Первый прогон показал:
- **dev**: операции совпадают, но у 2 параметров `dataType: None` вместо `"string"`
- **test**: аналогично
- **prod**: чисто, расхождений нет
Также обнаружено что реальный API возвращает HTML-entities в dataType
(`integer >= 0`), а полигон — чистый текст (`integer >= 0`).
Полигон здесь правильнее реального API.
## Ключевой нюанс: идеология стендов
Стенды НЕ идентичны. **Dev опережает test, test опережает prod**.
Новые сервисы и параметры появляются сначала в dev, потом через какое-то
время попадают в test, и только затем в prod. Поэтому:
- Если в dev-полигоне и dev-реальном API есть расхождения — это может быть
нормально (реальный API уже обновился, а YAML в полигоне — ещё нет)
- Если в prod есть расхождения — скорее всего баг в генерации YAML
- Нужно различать «допустимое отставание» и «реальный баг»
## Что нужно от тебя
### 1. Стратегия сравнительного тестирования
Как правильно сравнивать полигон с реальным API учитывая что:
- Стенды могут и должны отличаться
- YAML генерируется не в реальном времени, а батчами из терраформа
- Некоторые сервисы есть в реальном API но НЕ в терраформе (их не тестируем)
Что должно считаться PASS, а что FAIL? Какие допуски?
### 2. Какие ещё эндпоинты сравнивать?
Сейчас сравниваются 3 read-only эндпоинта. Какие ещё можно безопасно
сравнять? Что ещё есть в реальном API такого что полигон должен
повторять один-в-один?
### 3. Периодичность и автоматизация
Как часто запускать сравнение? При каких событиях (изменение терраформа,
деплой полигона)? Должно ли это быть частью CI?
### 4. dataType: None
В `from_stands.py` для некоторых параметров dataType падает в None
(хотя дефолт "string"). Где конкретно искать причину?
### 5. Общие советы
Что ещё мы упускаем в тестировании полигона? Какие сценарии, краевые
случаи, проверки контрактов?
---
## Формат диалога
Ты можешь:
- Сразу дать развёрнутый ответ по всем пунктам
- Или задать уточняющие вопросы — и тогда я отвечу, а ты продолжишь
Я хочу чтобы в итоге получился **конкретный план действий**:
что тестировать, как часто, что считать ошибкой, что — допустимым
расхождением.