tester(ET): auto-commit from tester run_id=488
This commit is contained in:
94
docs/work-items/ORCH-063/13-test-report.md
Normal file
94
docs/work-items/ORCH-063/13-test-report.md
Normal file
@@ -0,0 +1,94 @@
|
||||
---
|
||||
result: PASS # PASS | FAIL — машинный вердикт, UPPERCASE
|
||||
work_item: ORCH-063
|
||||
stage: testing
|
||||
author_agent: tester
|
||||
status: pass
|
||||
created_at: 2026-06-09
|
||||
model_used: claude-opus-4-8
|
||||
type: test-report
|
||||
work_item_id: ORCH-063
|
||||
---
|
||||
|
||||
# Test Report — ORCH-063 — INFRA: disk-watchdog мониторинг диска mva154 + алерт при ≥85%
|
||||
|
||||
> Машинный вердикт читается ТОЛЬКО из `result:` во frontmatter. `PASS` → задача переходит на `deploy-staging`.
|
||||
|
||||
## Окружение
|
||||
- Python: 3.12.13
|
||||
- pytest: 8.3.3 (pytest-asyncio 0.23.8, anyio 4.13.0)
|
||||
- Worktree: `/repos/_wt/orchestrator/feature_ORCH-063-infra-mva154-85/` (ветка `feature/ORCH-063-infra-mva154-85`)
|
||||
- Дата: 2026-06-09
|
||||
|
||||
## Smoke API (read-only)
|
||||
| Endpoint | Результат |
|
||||
|----------|-----------|
|
||||
| `GET /health` | PASS — `{"status":"ok","service":"orchestrator"}` |
|
||||
| `GET /status` | PASS — отвечает; ORCH-063 (task 74) виден в `active_tasks` на `stage=testing` |
|
||||
| `GET /queue` | PASS — блок `serial_gate` присутствует (ORCH-088) рядом с `auto_labels` (ORCH-089); существующие ключи `counts/reconcile/reaper/post_deploy/merge_verify/task_deps` на месте |
|
||||
|
||||
`serial_gate.per_repo.orchestrator.active_task = ORCH-063 (testing)` — регресса смока нет.
|
||||
|
||||
## Результаты по тест-плану (`04-test-plan.yaml`)
|
||||
|
||||
Все TC прогнаны в `tests/test_disk_watchdog.py` (18 кейсов покрывают TC-01..TC-12). Сопоставление с
|
||||
критериями приёмки `03-acceptance-criteria.md`:
|
||||
|
||||
| TC ID | Тип | Описание | Тест(ы) | AC | Результат |
|
||||
|-------|-----|----------|---------|----|-----------|
|
||||
| TC-01 | unit | Алерт при пересечении порога (ниже→на/выше) → should_alert=True | `test_tc01_alert_on_crossing_up` | AC-2/AC-3 | PASS |
|
||||
| TC-02 | unit | Анти-спам: выше порога, прошло < realert_s → should_alert=False | `test_tc02_antispam_within_cooldown` | AC-3 | PASS |
|
||||
| TC-03 | unit | Повтор по cooldown: прошло ≥ realert_s → should_alert=True | `test_tc03_realert_after_cooldown` | AC-3 | PASS |
|
||||
| TC-04 | unit | Recovery: выше→ниже → сброс + ровно одно recovery; ниже устойчиво → не повторяется | `test_tc04_recovery_and_no_repeat`, `test_tick_antispam_then_realert_then_recovery` | AC-4 | PASS |
|
||||
| TC-05 | unit | Граница порога: `== threshold` алертит; `== threshold-1` молчит | `test_tc05_threshold_boundary_inclusive` | AC-2 | PASS |
|
||||
| TC-06 | unit | Замер по путям через (мок) `shutil.disk_usage`; дедуп по устройству | `test_tc06_measure_and_dedup_by_device` | AC-8 | PASS |
|
||||
| TC-07 | unit | never-raise: битый путь и исключение в `send_telegram` не пробрасываются | `test_tc07_broken_path_does_not_kill_tick`, `test_tc07_send_failure_does_not_raise` | AC-6 | PASS |
|
||||
| TC-08 | unit | Формат алерта: путь/used_pct/свободно/порог; notifying (не silent) | `test_tc08_alert_message_actionable_and_notifying`, `test_tc08_format_helpers` | AC-2 | PASS |
|
||||
| TC-09 | unit | Kill-switch: `enabled=False` → демон не стартует / `/queue` enabled=false | `test_tc09_killswitch_does_not_start`, `test_tc09_killswitch_status_block` | AC-5 | PASS |
|
||||
| TC-10 | unit | `status()`: dict с enabled/threshold_pct/interval_s/paths/alerting/last_alert_at; never-raise | `test_tc10_status_shape`, `test_tc10_status_reflects_last_measurement` | AC-7 | PASS |
|
||||
| TC-11 | integration | `GET /queue` содержит блок `disk_monitor`; существующие ключи не изменены | `test_tc11_queue_has_disk_monitor_block` | AC-7 | PASS |
|
||||
| TC-12 | integration | Тик при ≥85% → `send_telegram` один раз; при выключенном флаге `disk_monitor.enabled=false`, алертов нет | `test_tc12_queue_disabled_block`, `test_tick_antispam_then_realert_then_recovery` | AC-5/AC-2 | PASS |
|
||||
|
||||
Доп. кейсы (вне номерных TC, усиливают покрытие): `test_parse_paths_default_and_csv` (парс CSV/дефолт путей) — PASS.
|
||||
|
||||
Покрытие: все 12 TC из тест-плана выполнены, каждый сопоставлен с AC; AC-1 (heartbeat-демон,
|
||||
lifecycle) и AC-9 (документация) — структурно подтверждены review (`12-review.md`, вердикт `APPROVED`)
|
||||
и не требуют отдельного рантайм-теста.
|
||||
|
||||
## Вывод pytest
|
||||
|
||||
Целевой файл:
|
||||
```
|
||||
tests/test_disk_watchdog.py ... 18 items
|
||||
test_tc01_alert_on_crossing_up PASSED
|
||||
test_tc02_antispam_within_cooldown PASSED
|
||||
test_tc03_realert_after_cooldown PASSED
|
||||
test_tc04_recovery_and_no_repeat PASSED
|
||||
test_tc05_threshold_boundary_inclusive PASSED
|
||||
test_tc06_measure_and_dedup_by_device PASSED
|
||||
test_tc07_broken_path_does_not_kill_tick PASSED
|
||||
test_tc07_send_failure_does_not_raise PASSED
|
||||
test_tc08_alert_message_actionable_and_notifying PASSED
|
||||
test_tc08_format_helpers PASSED
|
||||
test_tc09_killswitch_does_not_start PASSED
|
||||
test_tc09_killswitch_status_block PASSED
|
||||
test_tc10_status_shape PASSED
|
||||
test_tc10_status_reflects_last_measurement PASSED
|
||||
test_tick_antispam_then_realert_then_recovery PASSED
|
||||
test_parse_paths_default_and_csv PASSED
|
||||
test_tc11_queue_has_disk_monitor_block PASSED
|
||||
test_tc12_queue_disabled_block PASSED
|
||||
======================== 18 passed, 1 warning in 0.40s =========================
|
||||
```
|
||||
|
||||
Полный регресс:
|
||||
```
|
||||
======================= 1296 passed, 1 warning in 31.97s =======================
|
||||
```
|
||||
(Единственный warning — `PydanticDeprecatedSince20` в `src/config.py:7`, предсуществующий, не связан
|
||||
с ORCH-063, не влияет на функциональность.)
|
||||
|
||||
## Итог
|
||||
**PASS** — все 12 TC выполнены и зелёные, полный регресс `1296 passed`, smoke API (read-only)
|
||||
исправен, блоки `serial_gate`/`auto_labels` в `/queue` на месте. Регрессов и обоснованных
|
||||
FAIL не выявлено. Задача готова к переходу на `deploy-staging`.
|
||||
Reference in New Issue
Block a user