#!/bin/bash set -e echo "🧪 Test des Messages de Synchronisation" echo "=======================================" echo "" # Configuration des ports des relais RELAY1_PORT=8090 RELAY2_PORT=8092 RELAY3_PORT=8094 # Fonction pour envoyer un message de test à un relais send_test_message() { local relay_port=$1 local message_type=$2 local relay_id=$3 echo "📤 Envoi d'un message de test $message_type au relais sur le port $relay_port..." # Créer un message de synchronisation de test local test_message=$(cat </dev/null 2>&1; then echo " ✅ Port $relay_port accessible" else echo " ❌ Port $relay_port non accessible" fi } # Fonction pour vérifier les logs de synchronisation check_sync_logs() { local relay_num=$1 echo "📋 Vérification des logs de synchronisation du relais $relay_num :" # Chercher les messages de synchronisation dans les logs local sync_logs=$(docker logs sdk_relay_$relay_num 2>&1 | grep -E "(🧪|📊|🏥|📈|🔄|🎉|❌|Relay|Sync|Mesh|Topology|🔍|✅|discover|relay|message)" | tail -5) if [[ -n "$sync_logs" ]]; then echo "$sync_logs" else echo " Aucun message de synchronisation trouvé" fi echo "" } # Fonction pour tester la connectivité WebSocket test_websocket_connectivity() { echo "🌐 Test de connectivité WebSocket :" echo "-----------------------------------" for i in {1..3}; do local port=$((8090 + (i-1)*2)) echo "🔸 Relais $i (port $port) :" # Test de connectivité basique if curl -s --connect-timeout 5 http://localhost:$port >/dev/null 2>&1; then echo " ✅ Port accessible" else echo " ❌ Port non accessible" fi # Test de réponse HTTP local response=$(curl -s --connect-timeout 5 http://localhost:$port 2>/dev/null || echo "No response") if [[ "$response" != "No response" ]]; then echo " ✅ Réponse reçue" else echo " ⚠️ Pas de réponse HTTP (normal pour WebSocket)" fi done echo "" } # Fonction pour simuler des messages de synchronisation simulate_sync_messages() { echo "🔄 Simulation de messages de synchronisation :" echo "---------------------------------------------" # Test 1: Message de découverte de relais echo "📡 Test 1: Message de découverte de relais" send_test_message $RELAY1_PORT "RelaySync" "relay-1" send_test_message $RELAY2_PORT "RelaySync" "relay-2" send_test_message $RELAY3_PORT "RelaySync" "relay-3" echo "" # Test 2: Message de santé echo "🏥 Test 2: Message de santé" send_test_message $RELAY1_PORT "HealthSync" "relay-1" send_test_message $RELAY2_PORT "HealthSync" "relay-2" send_test_message $RELAY3_PORT "HealthSync" "relay-3" echo "" # Test 3: Message de métriques echo "📊 Test 3: Message de métriques" send_test_message $RELAY1_PORT "MetricsSync" "relay-1" send_test_message $RELAY2_PORT "MetricsSync" "relay-2" send_test_message $RELAY3_PORT "MetricsSync" "relay-3" echo "" } # Fonction pour vérifier l'état de Bitcoin Core check_bitcoin_status() { echo "₿ Vérification de l'état de Bitcoin Core :" echo "------------------------------------------" if docker exec bitcoin-signet bitcoin-cli -signet getblockchaininfo 2>/dev/null | grep -q '"initialblockdownload":false'; then echo "✅ Bitcoin Core a terminé le téléchargement initial" echo "🚀 Les relais peuvent maintenant synchroniser activement" return 0 else echo "⏳ Bitcoin Core télécharge encore les blocs (IBD en cours)" echo "📊 Progression :" docker exec bitcoin-signet bitcoin-cli -signet getblockchaininfo 2>/dev/null | grep -E "(blocks|headers|verificationprogress)" || echo " Impossible de récupérer les informations" return 1 fi echo "" } # Fonction pour forcer la synchronisation force_sync() { echo "⚡ Forçage de la synchronisation :" echo "----------------------------------" # Redémarrer les relais pour forcer la synchronisation for i in {1..3}; do echo "🔄 Redémarrage du relais $i..." docker restart sdk_relay_$i sleep 5 done echo "⏳ Attente de stabilisation..." sleep 10 echo "" } # Fonction principale de test main_test() { echo "🧪 Démarrage des tests de messages..." echo "" # 1. Vérifier l'état de Bitcoin Core check_bitcoin_status echo "" # 2. Tester la connectivité WebSocket test_websocket_connectivity # 3. Vérifier les logs actuels echo "📋 Logs actuels des relais :" echo "----------------------------" for i in {1..3}; do check_sync_logs $i done # 4. Simuler des messages de test simulate_sync_messages # 5. Attendre et vérifier les réponses echo "⏳ Attente des réponses (10 secondes)..." sleep 10 # 6. Vérifier les nouveaux logs echo "📋 Nouveaux logs après tests :" echo "------------------------------" for i in {1..3}; do check_sync_logs $i done echo "✅ Tests terminés" } # Fonction pour test en continu continuous_test() { echo "🔄 Test en continu des messages..." echo "Appuyez sur Ctrl+C pour arrêter" echo "" while true; do clear echo "🧪 Test Continu des Messages - $(date)" echo "=====================================" echo "" # Vérifier l'état de Bitcoin Core check_bitcoin_status # Vérifier les logs récents echo "📋 Logs récents de synchronisation :" echo "------------------------------------" for i in {1..3}; do echo "🔸 Relais $i :" docker logs sdk_relay_$i 2>&1 | grep -E "(🧪|📊|🏥|📈|🔄|🎉|❌|Relay|Sync|Mesh|Topology|🔍|✅|discover|relay|message)" | tail -2 || echo " Aucun message récent" echo "" done echo "🔄 Actualisation dans 30 secondes..." sleep 30 done } # Menu principal case "${1:-test}" in "test") main_test ;; "continuous") continuous_test ;; "force") force_sync main_test ;; "status") check_bitcoin_status test_websocket_connectivity ;; *) echo "Usage: $0 [test|continuous|force|status]" echo " test : Test unique des messages" echo " continuous : Test en continu" echo " force : Forcer la synchronisation puis tester" echo " status : Vérifier l'état des services" exit 1 ;; esac