espilon-source/tools/c3po/test/test.py
2026-01-15 00:04:00 +01:00

102 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from utils.utils import _print_status, send_to_client
from utils.reboot import reboot
from utils.manager import add_to_group, remove_group, remove_esp_from_group
import time
def system_check(c2):
_print_status("=============== TEST GLOBAL DU SYSTÈME ===============", "CYAN")
# 1. Liste des clients connectés
_print_status("[1/10] Liste des clients connectés", "YELLOW")
if not c2.clients:
_print_status("Aucun client connecté", "RED", "")
return
for i, (addr, _) in enumerate(c2.clients.items(), 1):
print(f" {i}. {addr[0]}:{addr[1]}")
_print_status("Liste récupérée", "GREEN", "")
# 2. Envoi d'une commande simple ("ls") à chaque client
_print_status("[2/10] Test d'envoi de commande à chaque client", "YELLOW")
for addr in list(c2.clients.keys()):
try:
response = send_to_client(c2, addr, "ls", wait_response=True)
if response:
_print_status(f"Réponse reçue de {addr[0]}", "GREEN", "")
else:
_print_status(f"Aucune réponse de {addr[0]}", "RED", "")
except:
_print_status(f"Erreur d'envoi vers {addr[0]}", "RED", "")
# 3. Création et remplissage d'un groupe de test
_print_status("[3/10] Création dun groupe test et ajout de clients", "YELLOW")
test_group = "test_all"
for i, addr in enumerate(c2.clients.keys()):
if i < 2: # Limite à 2 clients pour le test
add_to_group(c2, test_group, addr)
if test_group in c2.groups:
_print_status(f"Groupe '{test_group}' créé avec {len(c2.groups[test_group])} clients", "GREEN", "")
else:
_print_status("Échec création groupe", "RED", "")
# 4. Liste des groupes
_print_status("[4/10] Listing des groupes", "YELLOW")
if c2.groups:
for group, members in c2.groups.items():
print(f" {group} : {members}")
_print_status("Groupes listés", "GREEN", "")
else:
_print_status("Aucun groupe trouvé", "RED", "")
# 5. Reboot dun seul client
_print_status("[5/10] Reboot dun seul client", "YELLOW")
first_client = list(c2.clients.keys())[0]
reboot(c2, first_client, mode="single")
time.sleep(5)
# 6. Reboot du groupe
_print_status("[6/10] Reboot du groupe", "YELLOW")
reboot(c2, test_group, mode="group")
time.sleep(5)
# 7. Reboot de tous les clients
_print_status("[7/10] Reboot de tous les clients", "YELLOW")
reboot(c2, mode="all")
time.sleep(5)
# 8. Attente et vérification de reconnexion
_print_status("[8/10] Attente de reconnexion des clients", "YELLOW", "!")
time.sleep(5)
if c2.clients:
for addr in c2.clients.keys():
print(f" - {addr[0]}:{addr[1]}")
_print_status("Clients reconnectés", "GREEN", "")
else:
_print_status("Aucun client reconnecté", "RED", "")
# 9. Retirer un client du groupe
# check si il y a plusieurs clients dans le groupe
# si oui, retirer le premier
# sinon passer le test
_print_status("[9/10] Retirer un client du groupe", "YELLOW")
if len(c2.groups[test_group]) > 1:
first_client = c2.groups[test_group][0]
remove_esp_from_group(c2, test_group, [first_client])
if first_client not in c2.groups[test_group]:
_print_status(f"Client {first_client} retiré du groupe {test_group}", "GREEN", "")
else:
_print_status(f"Échec de retrait du client {first_client} du groupe {test_group}", "RED", "")
else:
_print_status("Groupe ne contient qu'un seul client, pas de retrait effectué", "YELLOW", "!")
# 10. Suppression du groupe
_print_status("[10/10] Suppression du groupe de test", "YELLOW")
if test_group in c2.groups:
remove_group(c2, test_group)
if test_group not in c2.groups:
_print_status("Groupe supprimé", "GREEN", "")
else:
_print_status("Échec de suppression du groupe", "RED", "")
_print_status("=============== TEST TERMINÉ ===============", "CYAN")