Debug log: 4 bugs found and fixed, full trace documented
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
# 2026-07-24 — Отладка API-тестов dummy
|
||||
|
||||
## Общая логика (как проверено)
|
||||
|
||||
Поток: пользователь выбирает сервис → видит операции → выбирает операцию → задаёт параметры → жмёт «Тест» → сервер выполняет → результат.
|
||||
|
||||
### Цепочка вызовов (полная трассировка)
|
||||
|
||||
1. **GET /api/services** → список сервисов (только dummy пока)
|
||||
2. **GET /api/operations/1** → операции dummy + инстансы пользователя
|
||||
- Нет инстансов → только `create` активна
|
||||
3. **GET /api/params/18** → параметры create (12 шт, 4 обязательных)
|
||||
4. **POST /api/test** `{serviceId:1, operation:"create", ...}`
|
||||
5. **POST /instances** `{serviceId:1, displayName:"autotest-1"}` → 201 + Location header
|
||||
6. **GET /instances** (поллинг) → ждём `operationIsInProgress=false`, статус не "creating"
|
||||
7. Возврат результата → фронт обновляет UI
|
||||
|
||||
## Баги (найдены и исправлены)
|
||||
|
||||
### Баг 1: `HttpClient.post` не существовал (v1.0.7)
|
||||
- **Симптом:** `'HttpClient' object has no attribute 'post'`
|
||||
- **Причина:** в `http_client.py` был только метод `get()`. Новый `api_test.py` использовал `client.post()`.
|
||||
- **Исправление:** добавлен метод `post()` в `HttpClient`.
|
||||
|
||||
### Баг 2: `r.json()` падал на пустом ответе (v1.0.8)
|
||||
- **Симптом:** `'str' object has no attribute 'get'`
|
||||
- **Причина:** POST /instances возвращает 201 с пустым телом. `r.json()` на пустой строке падает, а не возвращает dict.
|
||||
- **Исправление:** `try: r.json() except: return {}`. Плюс Location header сохраняется в `result["_location"]`.
|
||||
|
||||
### Баг 3: instanceUid не извлекался (v1.0.9)
|
||||
- **Симптом:** `_find_uid(resp)` не находил UUID
|
||||
- **Причина:** POST /instances возвращает instanceUid в заголовке `Location`, не в теле. `_find_uid` искал UUID в значениях dict, но там была только строка пути.
|
||||
- **Исправление:** парсинг Location: `loc.rstrip("/").split("/")[-1]` → UUID.
|
||||
|
||||
### Баг 4: cfsParams отправлялись в POST /instances (v1.0.10)
|
||||
- **Симптом:** параметры не применялись, возможна ошибка API
|
||||
- **Причина:** cfsParams — отдельный шаг после создания инстанса (POST /instanceOperations). Нельзя передавать их в POST /instances.
|
||||
- **Исправление:** create шлёт только `{serviceId, displayName}`. Параметры пока не устанавливаются (будут позже через modify).
|
||||
|
||||
## Что ещё поверено
|
||||
|
||||
- `get_instances()` → `client.get("/instances", params={"pageSize":200})` → `requests.Session.get()` принимает `params` + `timeout` одновременно — корректно.
|
||||
- Поллинг: цикл `while time.time() < deadline` с `time.sleep(5)` — корректно.
|
||||
- После успешного create: `selectService(svcId)` перезагружает инстансы → create становится серым, другие операции активируются.
|
||||
- `reconcile` исключён из списка операций (не тестируемая операция).
|
||||
- Все сервисы кроме dummy скрыты.
|
||||
Reference in New Issue
Block a user