[Majeur] Boucle de reconnexion WebSocket : 0 % de couverture de tests #92

Open
opened 2026-08-26 05:32:43 +00:00 by mat · 0 comments
Owner

Problème

Le cœur temps réel de l'intégration (stream.py:148-177) n'est jamais exécuté dans les tests. Lignes non couvertes :

  • except ComwattAuthError (warning + break, lignes 158-163)
  • except Exception → retry (164-165)
  • le break sur _stop (167)
  • le backoff exponentiel plafonné 60 s (169)
  • le early-return queue None (175)
  • le corps de la boucle de relais for msg in ... loop.call_soon_threadsafe(queue.put_nowait, msg) (177 — le générateur mocké rend toujours iter([]))

Une régression dans le backoff ou l'arrêt sur auth error passerait la CI silencieusement.

Recommandation — tests prioritaires

  1. Reconnexion avec backoff : stream_measurements.side_effect lève 2× puis réussit → vérifier retry, croissance du backoff (1 s → 2 s, plafond 60 s) via patch("asyncio.sleep"), reset après succès.
  2. Arrêt sur auth error : lève ComwattAuthError → warning, break sans retry, tâche terminée proprement, pas d'exception propagée.
  3. Relais réel : générateur qui yield 2 Measurement → les messages transitent par call_soon_threadsafe jusqu'à la queue puis le consumer → coordinator.data mis à jour.
  4. Cycle de vie du manager : async_stop() avant async_start() et double async_stop() (idempotence revendiquée) ; site sans siteUid → aucune tâche créée ; cancellation du consumer pendant queue.get().

Constaté lors de la review de code pré-v1.0 (v0.8.1).

## Problème Le cœur temps réel de l'intégration (`stream.py:148-177`) n'est **jamais exécuté** dans les tests. Lignes non couvertes : - `except ComwattAuthError` (warning + `break`, lignes 158-163) - `except Exception` → retry (164-165) - le break sur `_stop` (167) - le backoff exponentiel plafonné 60 s (169) - le early-return queue None (175) - **le corps de la boucle de relais** `for msg in ... loop.call_soon_threadsafe(queue.put_nowait, msg)` (177 — le générateur mocké rend toujours `iter([])`) Une régression dans le backoff ou l'arrêt sur auth error passerait la CI silencieusement. ## Recommandation — tests prioritaires 1. **Reconnexion avec backoff** : `stream_measurements.side_effect` lève 2× puis réussit → vérifier retry, croissance du backoff (1 s → 2 s, plafond 60 s) via `patch("asyncio.sleep")`, reset après succès. 2. **Arrêt sur auth error** : lève `ComwattAuthError` → warning, break sans retry, tâche terminée proprement, pas d'exception propagée. 3. **Relais réel** : générateur qui yield 2 `Measurement` → les messages transitent par `call_soon_threadsafe` jusqu'à la queue puis le consumer → `coordinator.data` mis à jour. 4. **Cycle de vie du manager** : `async_stop()` avant `async_start()` et double `async_stop()` (idempotence revendiquée) ; site sans `siteUid` → aucune tâche créée ; cancellation du consumer pendant `queue.get()`. --- Constaté lors de la review de code pré-v1.0 (v0.8.1).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mat/homeassistant-comwatt#92
No description provided.