# Test End-to-End Agent Rust Documentation pour tester l'agent Mesh Rust avec transferts fichiers et terminal. ## Prérequis - **Serveur Mesh** running sur `localhost:8000` (ou autre) - **2 agents** compilés et configurés - **Réseau LAN** ou localhost pour les tests ## Compilation ```bash cd agent cargo build --release ``` Le binaire sera disponible dans `target/release/mesh-agent`. ## Configuration Créer un fichier `~/.config/mesh/agent.toml` : ```toml device_id = "device-123" server_url = "http://localhost:8000" ws_url = "ws://localhost:8000/ws" auth_token = "your-jwt-token" quic_port = 5000 ``` ## Scenario 1: Mode Daemon (Production) ### Terminal 1 - Agent A ```bash # Lancer l'agent en mode daemon RUST_LOG=info ./mesh-agent run # Ou avec la commande par défaut RUST_LOG=info ./mesh-agent ``` ### Terminal 2 - Agent B ```bash # Utiliser un port QUIC différent # Modifier agent.toml: quic_port = 5001 RUST_LOG=info ./mesh-agent run ``` **Résultat attendu** : - ✓ Connexion WebSocket au serveur - ✓ P2P_HELLO/P2P_OK handshake - ✓ QUIC endpoint listening - ✓ Logs: "Mesh Agent started successfully" ## Scenario 2: Transfert Fichier Direct ### Étape 1: Créer un fichier test ```bash # Créer un fichier de 1MB dd if=/dev/urandom of=test_file.bin bs=1M count=1 # Ou un fichier texte echo "Hello from Mesh Agent!" > test.txt ``` ### Étape 2: Agent B en mode réception (daemon) ```bash # Terminal 1 RUST_LOG=info ./mesh-agent run ``` ### Étape 3: Agent A envoie le fichier ```bash # Terminal 2 RUST_LOG=info ./mesh-agent send-file \ --session-id "session_abc123" \ --peer-addr "192.168.1.100:5001" \ --token "token_xyz" \ --file test_file.bin ``` **Résultat attendu** : - Agent A logs : ``` Connecting to peer... P2P connection established Sending file... ✓ File sent successfully! Size: 1.00 MB Duration: 0.25s Speed: 4.00 MB/s ``` - Agent B logs : ``` Incoming QUIC connection from 192.168.1.50 P2P_HELLO received: session_id=session_abc123 P2P handshake successful Receiving file: test_file.bin (1048576 bytes) File received successfully: test_file.bin (1048576 bytes) ``` - **Hash vérification** : Blake3 hash identique ### Étape 4: Vérifier l'intégrité ```bash # Sur Agent B (récepteur) blake3sum received_file.bin # Comparer avec Agent A (envoyeur) blake3sum test_file.bin ``` Les hash doivent être **identiques**. ## Scenario 3: Terminal Sharing ### Étape 1: Agent B en mode réception ```bash # Terminal 1 RUST_LOG=info ./mesh-agent run ``` ### Étape 2: Agent A partage son terminal ```bash # Terminal 2 RUST_LOG=info ./mesh-agent share-terminal \ --session-id "terminal_session_456" \ --peer-addr "192.168.1.100:5001" \ --token "token_terminal" \ --cols 120 \ --rows 30 ``` **Résultat attendu** : - Agent A logs : ``` Connecting to peer... P2P connection established Starting terminal session... PTY created: 120x30, shell: /bin/bash Press Ctrl+C to stop sharing ``` - Agent B logs : ``` Incoming QUIC connection from 192.168.1.50 Accepting bidirectional stream for terminal output Terminal output: $ ls -la Terminal output: drwxr-xr-x ... ``` - **Ctrl+C** sur Agent A arrête le partage ## Scenario 4: Test LAN avec 2 machines physiques ### Machine A (192.168.1.50) ```bash # Configurer agent.toml device_id = "laptop-alice" quic_port = 5000 # Lancer daemon ./mesh-agent run ``` ### Machine B (192.168.1.100) ```bash # Configurer agent.toml device_id = "desktop-bob" quic_port = 5000 # Envoyer fichier vers Alice ./mesh-agent send-file \ --session-id "session_lan_test" \ --peer-addr "192.168.1.50:5000" \ --token "token_from_server" \ --file /path/to/large_file.zip ``` **Firewall** : Ouvrir port UDP 5000 sur les deux machines. ## Debugging ### Activer les logs détaillés ```bash # Niveau DEBUG RUST_LOG=debug ./mesh-agent run # Niveau TRACE (très verbeux) RUST_LOG=trace ./mesh-agent run # Filtrer par module RUST_LOG=mesh_agent::p2p=debug ./mesh-agent run ``` ### Vérifier les stats QUIC Les logs montreront automatiquement : - RTT (Round Trip Time) - Congestion window - Bytes sent/received - Lost packets ### Tester la connectivité QUIC ```bash # Sur Agent B sudo tcpdump -i any udp port 5000 # Sur Agent A, envoyer fichier # Observer les paquets QUIC dans tcpdump ``` ## Checklist de Validation MVP - [ ] **Compilation** : `cargo build --release` sans erreurs - [ ] **Tests** : `cargo test` passe tous les tests - [ ] **Daemon** : Agent se connecte au serveur WebSocket - [ ] **QUIC Endpoint** : Accepte connexions entrantes - [ ] **P2P Handshake** : P2P_HELLO/P2P_OK fonctionne - [ ] **File Transfer** : Fichier 1MB transféré avec succès - [ ] **Hash Verification** : Blake3 hash identique - [ ] **Terminal Sharing** : Output streaming fonctionne - [ ] **CLI** : `--help` affiche toutes les commandes - [ ] **Logs** : Pas de secrets (tokens, passwords) dans les logs - [ ] **Performance** : Transfert >1MB/s sur LAN ## Troubleshooting ### Erreur: "Connection refused" - Vérifier que le serveur Mesh est running - Vérifier `server_url` et `ws_url` dans `agent.toml` - Vérifier firewall/iptables ### Erreur: "Token validation failed" - Le session_token est expiré (TTL: 60-180s) - Demander un nouveau token au serveur - Vérifier l'horloge système (NTP) ### Erreur: "No route to host" (QUIC) - Vérifier firewall UDP sur le port QUIC - Tester avec `nc -u ` - Vérifier que les deux agents sont sur le même réseau ### Performances lentes - Vérifier MTU réseau (`ip link show`) - Augmenter la congestion window si nécessaire - Tester avec fichiers plus petits d'abord ## Métriques de Performance Attendues | Taille Fichier | Réseau | Vitesse Attendue | |----------------|--------------|------------------| | 1 MB | Localhost | > 100 MB/s | | 1 MB | LAN Gigabit | > 50 MB/s | | 100 MB | LAN Gigabit | > 100 MB/s | | 1 GB | LAN Gigabit | > 200 MB/s | ## Notes de Sécurité - **Trust via session_token** : Le certificat TLS est auto-signé, le trust est établi via le session_token du serveur - **Tokens éphémères** : TTL court (60-180s) pour limiter la fenêtre d'attaque - **Terminal read-only par défaut** : Input nécessite capability `has_control` - **Pas de secrets en logs** : Les tokens ne sont jamais loggés en clair ## Support Pour reporter des bugs ou demander de l'aide : - GitHub Issues : https://github.com/mesh-team/mesh/issues - Documentation : docs/AGENT.md