4NK_node/tests/integration/test_messages.sh
Nicolas Cantu b935cbab20 Réorganisation complète : tests, documentation et nettoyage
- 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
2025-08-25 14:13:26 +02:00

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