""" Test d'intégration du WhitelistManager avec l'Orchestrateur """ import sys from pathlib import Path # Ajouter le répertoire geniusia2 au path sys.path.insert(0, str(Path(__file__).parent / "geniusia2")) from core.whitelist_manager import WhitelistManager from core.logger import Logger from core.config import ensure_directories def test_whitelist_manager_integration(): """Test d'intégration du WhitelistManager""" print("Test d'intégration WhitelistManager") print("=" * 50) # S'assurer que les répertoires existent ensure_directories() # Test 1: Créer un WhitelistManager print("\n1. Création du WhitelistManager:") logger = Logger() whitelist_manager = WhitelistManager(logger=logger, require_admin_confirmation=False) print(f" ✓ WhitelistManager créé") print(f" - Chemin: {whitelist_manager.whitelist_path}") print(f" - Taille initiale: {len(whitelist_manager.get_whitelist())}") # Test 2: Ajouter des fenêtres à la liste blanche print("\n2. Ajout de fenêtres à la liste blanche:") test_windows = [ "Dolibarr*", "Firefox*", "Visual Studio Code", "*Terminal" ] for window in test_windows: success = whitelist_manager.add_to_whitelist(window, admin_confirmed=True) status = "✓" if success else "✗" print(f" {status} Ajouté: {window}") # Test 3: Vérifier is_window_allowed print("\n3. Test de vérification des fenêtres:") test_cases = [ ("Dolibarr - Facturation", True), ("Firefox - Mozilla Firefox", True), ("Visual Studio Code", True), ("GNOME Terminal", True), ("Unknown Application", False), ("Notepad", False) ] for window, expected in test_cases: allowed = whitelist_manager.is_window_allowed(window) status = "✓" if allowed == expected else "✗" result = "Autorisé" if allowed else "Bloqué" print(f" {status} {result}: {window}") # Test 4: Statistiques print("\n4. Statistiques de la liste blanche:") stats = whitelist_manager.get_statistics() print(f" ✓ Total entrées: {stats['total_entries']}") print(f" ✓ Avec wildcards: {stats['entries_with_wildcards']}") print(f" ✓ Exactes: {stats['entries_exact']}") # Test 5: Métadonnées d'une entrée print("\n5. Métadonnées d'une entrée:") info = whitelist_manager.get_entry_info("Dolibarr*") if info: print(f" ✓ Informations pour 'Dolibarr*':") print(f" - Ajouté le: {info.get('added_at')}") print(f" - Ajouté par: {info.get('added_by')}") print(f" - Confirmation admin: {info.get('admin_confirmed')}") # Test 6: Suppression d'une entrée print("\n6. Suppression d'une entrée:") removed = whitelist_manager.remove_from_whitelist("Firefox*") print(f" ✓ Supprimé 'Firefox*': {removed}") print(f" - Nouvelle taille: {len(whitelist_manager.get_whitelist())}") # Test 7: Vérifier que Firefox n'est plus autorisé print("\n7. Vérification après suppression:") allowed = whitelist_manager.is_window_allowed("Firefox - Mozilla") status = "✓" if not allowed else "✗" print(f" {status} Firefox maintenant bloqué: {not allowed}") # Test 8: Export de la liste blanche print("\n8. Export de la liste blanche:") export_path = "whitelist_export_test.json" success = whitelist_manager.export_whitelist(export_path) print(f" ✓ Exporté: {success}") # Nettoyer le fichier d'export import os if os.path.exists(export_path): os.remove(export_path) print(f" ✓ Fichier d'export nettoyé") print("\n✓ Tous les tests d'intégration réussis!") return True def test_orchestrator_whitelist_integration(): """Test de l'intégration avec l'Orchestrateur""" print("\n\nTest d'intégration avec l'Orchestrateur") print("=" * 50) try: from core.orchestrator import Orchestrator from core.learning_manager import LearningManager from core.embeddings_manager import EmbeddingsManager from core.utils.vision_utils import VisionUtils from core.llm_manager import LLMManager from core.logger import Logger from core.config import get_config # Initialiser les composants print("\n1. Initialisation des composants:") logger = Logger() embeddings_manager = EmbeddingsManager() learning_manager = LearningManager(embeddings_manager, logger, get_config()) vision_utils = VisionUtils() llm_manager = LLMManager(logger=logger, fallback_to_vision=True) whitelist_manager = WhitelistManager(logger=logger, require_admin_confirmation=False) print(" ✓ Composants initialisés") # Ajouter des fenêtres à la liste blanche print("\n2. Configuration de la liste blanche:") whitelist_manager.add_to_whitelist("Dolibarr*", admin_confirmed=True) whitelist_manager.add_to_whitelist("Firefox*", admin_confirmed=True) print(f" ✓ Liste blanche configurée ({len(whitelist_manager.get_whitelist())} entrées)") # Créer l'orchestrateur avec le WhitelistManager print("\n3. Création de l'orchestrateur:") orchestrator = Orchestrator( learning_manager=learning_manager, vision_utils=vision_utils, llm_manager=llm_manager, logger=logger, gui=None, whitelist_manager=whitelist_manager ) print(" ✓ Orchestrateur créé avec WhitelistManager") # Test de vérification via l'orchestrateur print("\n4. Test de vérification via l'orchestrateur:") test_cases = [ ("Dolibarr - Facturation", True), ("Firefox - Mozilla", True), ("Unknown Application", False) ] for window, expected in test_cases: allowed = orchestrator._check_whitelist(window) status = "✓" if allowed == expected else "✗" result = "Autorisé" if allowed else "Bloqué" print(f" {status} {result}: {window}") # Test des méthodes de l'orchestrateur print("\n5. Test des méthodes de l'orchestrateur:") # Ajouter via l'orchestrateur success = orchestrator.add_to_whitelist("Visual Studio Code", admin_confirmed=True) print(f" ✓ Ajout via orchestrateur: {success}") # Obtenir la liste blanche whitelist = orchestrator.get_whitelist() print(f" ✓ Liste blanche obtenue: {len(whitelist)} entrées") # Supprimer via l'orchestrateur success = orchestrator.remove_from_whitelist("Visual Studio Code") print(f" ✓ Suppression via orchestrateur: {success}") # Vérifier le statut print("\n6. Statut de l'orchestrateur:") status = orchestrator.get_status() print(f" ✓ Whitelist size: {status['whitelist_size']}") print(f" ✓ Enforce whitelist: {status['enforce_whitelist']}") print("\n✓ Tous les tests d'intégration avec l'orchestrateur réussis!") return True except Exception as e: print(f"\n✗ Erreur lors du test d'intégration: {e}") import traceback traceback.print_exc() return False if __name__ == "__main__": try: # Test 1: WhitelistManager standalone success1 = test_whitelist_manager_integration() # Test 2: Intégration avec l'orchestrateur success2 = test_orchestrator_whitelist_integration() if success1 and success2: print("\n" + "=" * 50) print("✓ TOUS LES TESTS D'INTÉGRATION RÉUSSIS!") print("=" * 50) sys.exit(0) else: print("\n" + "=" * 50) print("✗ CERTAINS TESTS ONT ÉCHOUÉ") print("=" * 50) sys.exit(1) except Exception as e: print(f"\n✗ Erreur fatale: {e}") import traceback traceback.print_exc() sys.exit(1)