This commit is contained in:
2026-08-01 21:27:14 +02:00
parent e91d0aa2cb
commit ae85852648
38 changed files with 413 additions and 291 deletions

View File

@@ -0,0 +1,116 @@
<!-- file: docs/validation/WEBSOCKET_LIFECYCLE_VALIDATION_SCENARIO.md -->
<!-- version: 2 -->
# Validation du cycle de vie WebSocket desktop
## Objectif
Prouver quune session WebSocket appartient à lapplication et non à la fenêtre `demo_ws`.
## Préparation
1. Configurer un endpoint WebSocket Devnet dans le profil utilisé.
2. Activer une route de logs contenant au minimum `kb-app-demo-desktop` et `kb-onchain-transport` au niveau `debug`.
3. Lancer :
```bash
cargo tauri dev -c kb-app-demo-desktop/tauri.conf.json 2>&1 | tee /tmp/kbot3-pre075-ws.log
```
4. Ouvrir la fenêtre **WebSocket standard**.
5. Rafraîchir les endpoints et vérifier quun rôle compatible est disponible.
## Souscription principale recommandée
Utiliser `logsSubscribe`, car elle permet de filtrer les transactions mentionnant un Program ID.
| Champ | Valeur |
|-------------|----------------------------------------------------------------|
| Rôle | rôle WebSocket standard Devnet disponible |
| Méthode | `logsSubscribe` |
| Target | vide |
| Filter JSON | `{"mentions":["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"]}` |
| Config JSON | `{"commitment":"confirmed"}` |
Le Program ID choisi est SPL Token classique. Il peut être remplacé par Token-2022 :
```text
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
```
## Scénario A — fermeture et réouverture de la fenêtre
1. Cliquer **Souscrire**.
2. Noter lidentifiant de subscription et vérifier :
- statut connecté ;
- `subscriptionCount = 1` ;
- méthode `logsSubscribe`.
3. Attendre au moins une notification ou, à défaut, conserver la réponse de subscription.
4. Fermer uniquement la fenêtre `demo_ws` avec le bouton de la fenêtre.
5. Ne pas cliquer sur **Unsubscribe** ni **Déconnecter socket**.
6. Attendre 15 à 30 secondes.
7. Rouvrir **WebSocket standard** depuis le menu principal.
8. Vérifier immédiatement :
- statut connecté ;
- même endpoint ;
- subscription toujours présente ;
- même identifiant distant ou identifiant remappé explicitement après reconnexion ;
- nouveaux messages reçus si le réseau en produit.
### Critère de réussite
La fenêtre restaurée affiche létat réel de la session persistante. Aucun événement `Disconnected` ne doit être provoqué par la fermeture de `demo_ws`.
## Scénario B — unsubscribe explicite
1. Sélectionner la subscription active.
2. Cliquer **Unsubscribe sélectionnée**.
3. Vérifier :
- `subscriptionCount = 0` ;
- socket encore connectée ;
- message de désinscription ;
- absence de nouvelles notifications pour cette subscription.
## Scénario C — nouvelle subscription puis déconnexion explicite
1. Souscrire de nouveau avec le même filtre.
2. Vérifier `subscriptionCount = 1`.
3. Cliquer **Déconnecter socket**.
4. Vérifier :
- statut déconnecté ;
- aucune subscription active ;
- événement ou diagnostic de déconnexion dans les logs.
## Scénario D — arrêt global de lapplication
1. Souscrire de nouveau.
2. Fermer la fenêtre `demo_ws`.
3. Fermer ensuite la fenêtre principale de lapplication.
4. Vérifier dans `/tmp/kbot3-pre075-ws.log` que la déconnexion globale est exécutée.
5. Vérifier que le processus Tauri se termine sans rester en arrière-plan.
## Scénario optionnel — `programSubscribe`
Pour observer les changements de comptes appartenant à Token-2022 :
| Champ | Valeur |
|-------------|--------------------------------------------------|
| Méthode | `programSubscribe` |
| Target | `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb` |
| Filter JSON | vide |
| Config JSON | `{"commitment":"confirmed","encoding":"base64"}` |
Cette souscription peut être très active. Les limites de débit et de taille de linterface doivent rester fonctionnelles.
## Preuves à archiver
Fournir une archive contenant :
- `/tmp/kbot3-pre075-ws.log` ;
- copie du statut avant fermeture ;
- copie du statut après réouverture ;
- identifiants de subscription ;
- résultat unsubscribe ;
- résultat disconnect ;
- heure approximative de chaque étape ;
- anomalie éventuelle et reproduction minimale.