- Réorganisation des tests par catégorie (unit, integration, connectivity, external) - Création de scripts d'exécution automatisés pour les tests - Création de guides techniques complets (ARCHITECTURE.md, API.md) - Transfert des informations depuis specs/ vers docs/ - Nettoyage et archivage des fichiers obsolètes - Documentation complète des tests avec exemples - Scripts de maintenance et nettoyage automatique - Structure professionnelle prête pour l'évolution
254 lines
7.4 KiB
Bash
Executable File
254 lines
7.4 KiB
Bash
Executable File
#!/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 <<EOF
|
|
{
|
|
"flag": "Sync",
|
|
"content": {
|
|
"type": "$message_type",
|
|
"relay_id": "$relay_id",
|
|
"timestamp": $(date +%s),
|
|
"sequence": 1,
|
|
"payload": {
|
|
"test": true,
|
|
"message": "Test message from script",
|
|
"data": {
|
|
"relay_id": "$relay_id",
|
|
"port": $relay_port,
|
|
"timestamp": $(date +%s)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
EOF
|
|
)
|
|
|
|
# Envoyer le message via WebSocket (simulation avec curl)
|
|
echo " Message: $test_message"
|
|
|
|
# Vérifier si le port est accessible
|
|
if curl -s http://localhost:$relay_port >/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
|
|
|
|
|
|
|