14 KiB
Guide de Test Manuel - WebRTC
Ce guide décrit comment tester manuellement toutes les fonctionnalités WebRTC de Mesh.
Prérequis
Environnement
- HTTPS obligatoire : getUserMedia nécessite HTTPS (ou localhost)
- 2+ navigateurs : Pour tester le P2P (Chrome, Firefox, Edge)
- Permissions : Autoriser caméra/micro dans les navigateurs
Setup Rapide
# Terminal 1: Server
cd server
docker build -t mesh-server .
docker run -d --name mesh-server -p 8000:8000 --env-file .env mesh-server
# Terminal 2: Client
cd client
npm install
npm run dev
# Ouvrir http://localhost:5173
Test 1: Appel Audio Simple (2 utilisateurs)
Objectif : Valider l'audio bidirectionnel basique
Étapes
-
Setup
- Navigateur A: Créer compte
alice@test.com/password123 - Navigateur B: Créer compte
bob@test.com/password123 - Alice crée une room "Test Audio"
- Bob rejoint la room
- Navigateur A: Créer compte
-
Alice active son micro
- Cliquer sur bouton 🎤 Audio
- ✅ Vérifier : Permission demandée
- ✅ Vérifier : Toast "Micro activé"
- ✅ Vérifier : Bouton 🎤 passe au vert
- ✅ Vérifier : Bascule automatique vers mode vidéo
- ✅ Vérifier : Alice voit sa vidéo locale (audio uniquement)
-
Bob active son micro
- Cliquer sur bouton 🎤 Audio
- ✅ Vérifier : Permission demandée
- ✅ Vérifier : Toast "Micro activé"
- ✅ Vérifier : Offer WebRTC créée automatiquement (console)
-
Validation connexion
- Console Alice:
"Creating WebRTC offer for bob" - Console Bob:
"Connection state: connected" - ✅ Vérifier : Alice voit Bob dans grille vidéo
- ✅ Vérifier : Bob voit Alice dans grille vidéo
- ✅ Vérifier : Indicateur connexion "Bonne" ou "Excellente"
- Console Alice:
-
Test audio
- Alice parle dans son micro
- ✅ Vérifier : Bob entend Alice
- ✅ Vérifier : Icône 🎙️ apparaît quand Alice parle
- ✅ Vérifier : Bordure verte pulse autour de Alice
-
Toggle micro
- Alice reclique sur 🎤
- ✅ Vérifier : Bouton passe au rouge
- ✅ Vérifier : Bob n'entend plus Alice
- ✅ Vérifier : Stream toujours visible
-
Cleanup
- Alice clique "Quitter la room"
- ✅ Vérifier : Connexion WebRTC fermée
- ✅ Vérifier : Bob voit Alice disparaître
Test 2: Appel Vidéo (2 utilisateurs)
Objectif : Valider vidéo bidirectionnelle
Étapes
-
Setup (même que Test 1)
-
Alice active caméra
- Cliquer sur bouton 📹 Vidéo
- ✅ Vérifier : Permission caméra demandée
- ✅ Vérifier : Toast "Caméra et micro activés"
- ✅ Vérifier : Boutons 🎤 et 📹 verts
- ✅ Vérifier : Vidéo locale d'Alice visible
-
Bob active caméra
- Cliquer sur bouton 📹 Vidéo
- ✅ Vérifier : Offer créée
- ✅ Vérifier : Connexion établie
- ✅ Vérifier : Alice voit vidéo de Bob
- ✅ Vérifier : Bob voit vidéo d'Alice
-
Toggle caméra
- Bob reclique sur 📹
- ✅ Vérifier : Bouton passe au rouge
- ✅ Vérifier : Vidéo noire côté Alice
- ✅ Vérifier : Audio continue
-
Toggle mode chat/vidéo
- Alice clique "💬 Chat"
- ✅ Vérifier : Grille vidéo cachée
- ✅ Vérifier : Messages de chat affichés
- ✅ Vérifier : Audio/vidéo continue en arrière-plan
- Alice clique "📹 Vidéo"
- ✅ Vérifier : Retour à la grille
- ✅ Vérifier : Streams toujours actifs
Test 3: Partage d'Écran
Objectif : Valider getDisplayMedia
Étapes
-
Setup (Alice et Bob en appel vidéo)
-
Alice démarre partage
- Cliquer sur bouton 🖥️
- ✅ Vérifier : Sélecteur écran/fenêtre OS
- Sélectionner un écran
- ✅ Vérifier : Toast "Partage d'écran démarré"
- ✅ Vérifier : Bouton 🖥️ passe au vert
- ✅ Vérifier : Deuxième stream dans grille
- ✅ Vérifier : Label "Alice - Partage d'écran"
-
Bob voit le partage
- ✅ Vérifier : 2 streams pour Alice (caméra + partage)
- ✅ Vérifier : Contenu de l'écran visible
-
Arrêt du partage
- Alice clique "Arrêter le partage" (bouton OS)
- ✅ Vérifier : Toast "Partage d'écran arrêté"
- ✅ Vérifier : Bouton 🖥️ redevient gris
- ✅ Vérifier : Stream de partage disparaît
- ✅ Vérifier : Caméra reste active
Test 4: Multi-Peers (3 utilisateurs)
Objectif : Valider mesh topology
Étapes
-
Setup
- Navigateur A: Alice
- Navigateur B: Bob
- Navigateur C: Charlie
- Tous dans la même room
-
Activation séquentielle
-
Alice active caméra
-
✅ Vérifier : Alice voit sa vidéo
-
Bob active caméra
-
✅ Vérifier : Alice ↔ Bob connectés
-
✅ Vérifier : Grille = 2 streams pour chacun
-
Charlie active caméra
-
✅ Vérifier : Alice ↔ Charlie connectés
-
✅ Vérifier : Bob ↔ Charlie connectés
-
✅ Vérifier : Grille = 3 streams pour chacun
-
-
Validation mesh
- Console Alice: 2 PeerConnections (Bob, Charlie)
- Console Bob: 2 PeerConnections (Alice, Charlie)
- Console Charlie: 2 PeerConnections (Alice, Bob)
- chrome://webrtc-internals : Vérifier 2 connexions actives
-
Test parole
- Alice parle
- ✅ Vérifier : Bob et Charlie entendent
- ✅ Vérifier : Icône 🎙️ chez Bob et Charlie
- ✅ Vérifier : Bordure verte chez Bob et Charlie
-
Déconnexion
- Bob quitte
- ✅ Vérifier : Bob disparaît chez Alice et Charlie
- ✅ Vérifier : Alice ↔ Charlie toujours connectés
- ✅ Vérifier : Audio/vidéo continue
Test 5: Gestion des Erreurs
Objectif : Valider toasts et messages d'erreur
Cas 1: Permission refusée
Étapes:
- Cliquer sur 🎤 Audio
- Refuser la permission dans le navigateur
- ✅ Vérifier : Toast rouge "Permission refusée. Veuillez autoriser l'accès à votre caméra/micro."
- ✅ Vérifier : Boutons restent inactifs
Cas 2: Aucun périphérique
Étapes:
- Désactiver caméra/micro dans paramètres OS
- Cliquer sur 📹 Vidéo
- ✅ Vérifier : Toast rouge "Aucune caméra ou micro détecté."
Cas 3: Périphérique occupé
Étapes:
- Ouvrir OBS/Zoom et utiliser la caméra
- Dans Mesh, cliquer sur 📹 Vidéo
- ✅ Vérifier : Toast rouge "Impossible d'accéder à la caméra/micro (déjà utilisé...)"
Cas 4: Partage annulé
Étapes:
- Cliquer sur 🖥️
- Annuler dans le sélecteur OS
- ✅ Vérifier : Toast jaune "Partage d'écran annulé"
- ✅ Vérifier : Pas de crash
Cas 5: Peer déconnecté
Étapes:
- Alice et Bob en appel
- Bob ferme son onglet brutalement
- ✅ Vérifier : Alice: connectionState → 'closed'
- ✅ Vérifier : Stream de Bob disparaît de la grille
- ✅ Vérifier : Pas de crash
Test 6: Indicateurs de Connexion
Objectif : Valider ConnectionIndicator
Étapes
-
Setup (Alice et Bob en appel)
-
Connexion excellente
- Même réseau local / bande passante élevée
- ✅ Vérifier : Badge 📶 "Excellente"
- ✅ Vérifier : Bordure verte sur badge
- Hover sur badge
- ✅ Vérifier : Tooltip "RTT: <100ms"
-
Connexion bonne
- Simuler latence (DevTools → Network → Throttling "Fast 3G")
- ✅ Vérifier : Badge 📡 "Bonne"
- ✅ Vérifier : Bordure cyan
- ✅ Vérifier : Tooltip "RTT: 100-200ms"
-
Connexion faible
- Throttling "Slow 3G"
- ✅ Vérifier : Badge ⚠️ "Faible"
- ✅ Vérifier : Bordure jaune
- ✅ Vérifier : Tooltip "RTT: >200ms"
-
Stats détaillées
- chrome://webrtc-internals
- ✅ Vérifier : currentRoundTripTime correspond au badge
- ✅ Vérifier : packetsLost affiché si >0
Test 7: Indicateurs de Parole
Objectif : Valider useAudioLevel
Étapes
-
Setup (Alice et Bob en appel audio)
-
Détection parole
- Alice parle dans son micro
- ✅ Vérifier : Icône 🎙️ apparaît instantanément
- ✅ Vérifier : Animation pulse sur l'icône
- ✅ Vérifier : Bordure verte autour du container
- ✅ Vérifier : Transform scale(1.02)
-
Silence
- Alice arrête de parler
- ✅ Vérifier : Icône 🎙️ disparaît après ~0.3s
- ✅ Vérifier : Bordure normale
- ✅ Vérifier : Scale normal
-
Bruit de fond
- Musique faible en arrière-plan
- ✅ Vérifier : Icône ne s'active PAS (seuil >0.02)
-
Multi-peers parlant
- Alice, Bob, Charlie en appel
- Alice et Charlie parlent simultanément
- ✅ Vérifier : 🎙️ sur Alice ET Charlie
- ✅ Vérifier : Bob voit les deux indicateurs
- ✅ Vérifier : Pas de conflit visuel
Test 8: Compatibilité Navigateurs
Objectif : Cross-browser testing
Chrome ↔ Firefox
- Alice sur Chrome, Bob sur Firefox
- Appel vidéo bidirectionnel
- ✅ Vérifier : Connexion établie
- ✅ Vérifier : Audio/vidéo fonctionne
- ✅ Vérifier : Partage d'écran fonctionne
Chrome ↔ Edge
- Alice sur Chrome, Bob sur Edge
- Mêmes vérifications que Chrome ↔ Firefox
Safari (si disponible)
- Alice sur Safari macOS/iOS
- ✅ Vérifier : getUserMedia fonctionne
- ⚠️ Note : getDisplayMedia pas supporté sur iOS Safari
- ✅ Vérifier : Audio/vidéo fonctionne quand même
Test 9: Performance et Stabilité
Objectif : Valider sous charge
Test longue durée
- Appel Alice ↔ Bob
- Laisser tourner 30 minutes
- ✅ Vérifier : Pas de freeze
- ✅ Vérifier : Pas de memory leak (DevTools Memory)
- ✅ Vérifier : Qualité audio/vidéo stable
Test toggle rapide
- Alice toggle micro 20x rapidement
- ✅ Vérifier : Pas de crash
- ✅ Vérifier : État final cohérent
- ✅ Vérifier : Pas de tracks orphelins (check stream.getTracks())
Test reconnexion
- Alice en appel avec Bob
- Alice: DevTools → Network → Offline
- Attendre 5s
- DevTools → Online
- ✅ Vérifier : ICE reconnexion automatique
- ✅ Vérifier : Audio/vidéo reprend
- ✅ Vérifier : Indicateur passe "Déconnecté" → "Bonne"
Test 10: Scénarios Réels
Objectif : Use cases production
Scénario: Réunion d'équipe
Setup: 4 personnes (Alice, Bob, Charlie, Diana)
- Tous rejoignent "Réunion Équipe"
- Alice partage son écran (présentation)
- Bob active seulement son micro (pas de caméra)
- Charlie et Diana en vidéo
Validations:
- ✅ Grille affiche: 5 streams (Alice cam + screen, Bob audio, Charlie cam, Diana cam)
- ✅ Partage d'écran visible pour tous
- ✅ Tous entendent tous
- ✅ Indicateurs connexion à jour
- ✅ Indicateurs parole fonctionnent
- ✅ Charlie envoie message chat pendant appel
- ✅ Messages visibles en mode 💬 Chat
Scénario: Appel rapide 1-1
Setup: Alice appelle Bob
- Alice active micro uniquement (pas de vidéo)
- Bob répond avec micro uniquement
- Conversation 5 minutes
- Alice active sa caméra mid-call
- Bob active sa caméra aussi
Validations:
- ✅ Activation caméra mid-call fonctionne
- ✅ Pas de re-négociation SDP visible
- ✅ Streams ajoutés dynamiquement
- ✅ Qualité reste stable
Debugging
Outils
-
Browser DevTools
- Console: Logs WebRTC
- Network: WebSocket events
- Application → Storage: Store state
-
chrome://webrtc-internals
- État des PeerConnections
- Stats en temps réel (RTT, packets lost, bitrate)
- SDP offer/answer
- ICE candidates
-
Firefox about:webrtc
- Équivalent de chrome://webrtc-internals
Commandes Console Utiles
// Voir l'état du store WebRTC
window.useWebRTCStore?.getState()
// Voir les peers connectés
window.useWebRTCStore?.getState().peers
// Voir l'état des notifications
window.useNotificationStore?.getState()
// Forcer un toast
window.notify?.success('Test message')
Checklist Rapide
Avant de marquer WebRTC comme "Done":
- Test 1: Appel audio ✅
- Test 2: Appel vidéo ✅
- Test 3: Partage d'écran ✅
- Test 4: Multi-peers (3+) ✅
- Test 5: Tous les cas d'erreur ✅
- Test 6: Indicateurs connexion ✅
- Test 7: Indicateurs parole ✅
- Test 8: Chrome + Firefox + Edge ✅
- Test 9: Stabilité 30min ✅
- Test 10: Scénarios réels ✅
Résultats Attendus
Performance
- Latence audio: <100ms (P2P local)
- Latency signaling: <200ms (via server)
- Connexion établie: <3s après activation
- CPU usage: <20% par peer (vidéo 720p)
- Memory: Stable sur 1h d'appel
UX
- Feedback immédiat: Toasts à chaque action
- Indicateurs clairs: Connexion + parole visibles
- Pas de freeze: UI responsive même sous charge
- Erreurs explicites: Messages français compréhensibles
Fiabilité
- Reconnexion ICE: Automatique après coupure réseau
- Cleanup: Pas de tracks orphelins après déconnexion
- Multi-browser: Chrome/Firefox/Edge compatibles
- Mesh scaling: 4 peers simultanés sans lag
Problèmes Connus
Limitations
- iOS Safari: Pas de getDisplayMedia (partage d'écran)
- HTTPS requis: Localhost OK, mais production = certificat SSL
- Mesh topology: 5+ peers = beaucoup de bande passante
- NAT strict: Peut nécessiter TURN (pas encore configuré)
Workarounds
- iOS: Désactiver bouton 🖥️ sur détection mobile
- HTTPS: Utiliser Caddy reverse proxy (voir docs/deployment.md)
- 5+ peers: TODO - implémenter SFU
- NAT: TODO - activer coturn dans docker-compose
Rapport de Bug Template
Si vous trouvez un bug, documenter:
## Bug: [Titre court]
**Navigateur**: Chrome 120 / Firefox 122 / etc.
**OS**: Windows 11 / macOS 14 / etc.
**Steps to reproduce**:
1. ...
2. ...
3. ...
**Expected**: ...
**Actual**: ...
**Console logs**:
[Coller les logs pertinents]
**Screenshots**: [Si applicable]
**WebRTC internals**: [État de la PeerConnection]
Bon test! 🎉