From 69451007f655934b9458abc0024c4779e8242bac Mon Sep 17 00:00:00 2001 From: Naeel Date: Mon, 6 Apr 2026 18:45:57 +0300 Subject: [PATCH] =?UTF-8?q?test:=20re-test=20v0.1.69=20=E2=80=94=20=D0=B2?= =?UTF-8?q?=D1=81=D0=B5=208=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20PASS,?= =?UTF-8?q?=201000/1000=20=D0=BF=D1=80=D0=B8=20=D0=BD=D0=B0=D0=B3=D1=80?= =?UTF-8?q?=D1=83=D0=B7=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/progress.md | 30 +++++++++++++++-- doc/thinking/2026-04-06.md | 68 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 2 deletions(-) diff --git a/doc/progress.md b/doc/progress.md index 8112521..12a460d 100644 --- a/doc/progress.md +++ b/doc/progress.md @@ -1,10 +1,36 @@ # Прогресс разработки -Последнее обновление: 2026-04-06 19:00 МСК +Последнее обновление: 2026-04-06 21:00 МСК --- -## 2026-04-06 (вечер) — Полное суровое тестирование IoT pipeline +## 2026-04-06 (ночь) — Re-test v0.1.69: полный прогон 8 тестов, все PASS + +### Повод +После фикса async-бага (v0.1.68→v0.1.69) — полный повторный прогон всех тестов. + +### Тест-матрица (baseline: 163 строки перед стартом) + +| # | Тест | v0.1.68 | v0.1.69 | Примечание | +|---|------|---------|---------|-----------| +| 1 | Cold start | ✅ PASS | ✅ PASS | 15 retry, id=163 | +| 2 | Restart 3× | ✅ PASS | ✅ PASS | <1с каждый | +| 3 | Load 100 msgs | ❌ 27/100 | ✅ 100/100 | Баг исправлен! | +| 4 | Burst offline consumer | ✅ PASS | ✅ PASS | 20/20, буфер Kafka | +| 5 | Невалидные payload | ✅ PASS | ✅ PASS | 3/3, consumer жив | +| 6 | Дубликаты | ✅ PASS | ✅ PASS | 3/3 (at-least-once) | +| 7 | Kafka restart | ✅ PASS | ✅ PASS | 5/5 post-recovery | +| 8 | Load **1000** msgs (суровый) | — | ✅ 1000/1000 | 56с, 100% | + +### Итог +- Все 8 тестов PASS +- DB: 163 → 1294 строк (суммарно по всем тестам) +- Pipeline стабилен: async fix решил проблему потерь при нагрузке +- Коммит: после документирования + +--- + +## 2026-04-06 (вечер) — Async bug fix (v0.1.69) ### Тест-матрица (7 сценариев, baseline: 18 строк) diff --git a/doc/thinking/2026-04-06.md b/doc/thinking/2026-04-06.md index bfd26eb..ebbe870 100644 --- a/doc/thinking/2026-04-06.md +++ b/doc/thinking/2026-04-06.md @@ -543,3 +543,71 @@ _ = w.WriteMessages(ctx, ...) // немедленный возврат, дос - Bridge не теряет keepalive с EMQX при burst - Throughput: лимитируется сетью/Kafka, а не синхронным write (~тысячи msg/сек) - Load test 100 сообщений: должны дойти все 100 + +--- + +## Re-test v0.1.69 — полный прогон 8 тестов + +**Дата:** 2026-04-06 (продолжение сессии) +**Базовое состояние:** 163 строки в DB перед стартом повторного прогона + +### T1: Cold start +- Consumer pod ждал Kafka: 15 retry × 3с = 45с +- `kafka topic ready` → msg id=163 появился в DB +- **PASS** + +### T2: Restart 3× +- 3 последовательных `kubectl delete pod` по consumer +- Каждый перезапуск < 1с до `kafka topic ready` +- **PASS** + +### T3: Load 100 msgs (главный — здесь был баг) +- Baseline: 163. Отправлено: 100. Результат в DB: +100 (итого 263) +- v0.1.68 давал 27/100. v0.1.69: **100/100** +- **PASS** ← баг исправлен + +### T4: Burst при offline consumer +- Baseline: 263. Consumer масштабирован в 0 → отправлено 20 msgs → DB +0 (consumer offline) +- Consumer поднят обратно → через 15с: DB +20 +- Kafka буферизовал все 20 сообщений, consumer догнал сразу +- **PASS** + +### T5: Невалидные payload +- Отправлено: non-JSON строка, пустая строка, валидный JSON +- DB: +3 строки (bridge оборачивает non-JSON в `{"raw": "..."}`) +- Consumer пережил 0 crashes +- **PASS** + +### T6: Дубликаты (at-least-once) +- Baseline: 286. 3 идентичных сообщения `{"test":"t6_dup","value":42}` +- DB: +3 строки (каждый инстанс сохранён) +- Семантика at-least-once подтверждена +- **PASS** + +### T7: Kafka restart +- Baseline: 289. Kafka pod `kafka-0` убит → 5 msgs отправлены во время рестарта +- Kafka восстановился: `pod/kafka-0 condition met` +- 5 msgs после восстановления: все дошли. Итого DB +5 +- Msgs во время рестарта потеряны — ожидаемо (QoS 0 / async writer без буфера во время outage) +- **PASS** (recovery автоматический, post-recovery 100%) + +### T8: Load 1000 msgs (суровый) +- Baseline: 294. 1000 msgs burst за 56 секунд +- DB: +1000 (итого 1294) +- **1000/1000 = 100%** +- **PASS** + +### Итог v0.1.69 + +| Тест | v0.1.68 | v0.1.69 | +|------|---------|---------| +| T1 Cold start | PASS | PASS | +| T2 Restart 3× | PASS | PASS | +| T3 Load 100 | ❌ 27/100 | ✅ 100/100 | +| T4 Offline burst | PASS | PASS | +| T5 Invalid payload | PASS | PASS | +| T6 Duplicates | PASS | PASS | +| T7 Kafka restart | PASS | PASS | +| T8 Load 1000 | — (новый) | ✅ 1000/1000 | + +**Вывод:** Async fix полностью решил проблему потерь. Система стабильна на нагрузке 1000 msgs.