#!/usr/bin/env python3
"""
đ Test simple du systĂšme de permissions
Test basique des fonctionnalités de permissions sans serveur externe
"""
import asyncio
import sys
import os
# Ajouter le chemin pour importer nos modules
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
from permissions_manager import PermissionsManager, PermissionType
from database import setup_database, db_manager
from auth_manager import auth_manager, UserCreate
async def test_permissions_system():
"""Test des fonctionnalités de base du systÚme de permissions"""
print("đ§Ș Test du systĂšme de permissions MCP\n")
try:
# 1. Initialiser la base de données
print("đ Initialisation de la base de donnĂ©es...")
await setup_database()
print("â
Base de données initialisée")
# 2. Créer un utilisateur de test
print("\nđ€ CrĂ©ation d'un utilisateur de test...")
user_data = UserCreate(
username="testuser",
email="test@example.com",
full_name="Test User",
password="TestPass123!"
)
user = await auth_manager.create_user(user_data)
if user:
user_id = user.id
print(f"â
Utilisateur créé: {user.username} (ID: {user_id})")
else:
print("â Ăchec crĂ©ation utilisateur")
return False
# 3. Initialiser le gestionnaire de permissions
print("\nđ Initialisation du gestionnaire de permissions...")
permissions_manager = PermissionsManager()
print("â
Gestionnaire de permissions initialisé")
# 4. Test permissions par défaut (aucune permission)
print("\nđ Test: Permission par dĂ©faut (refusĂ©e)...")
has_read = await permissions_manager.check_permission(
user_id=user_id,
tool_name="homeassistant.get_state",
permission_type=PermissionType.READ
)
if not has_read:
print("â
Permission correctement refusée par défaut")
else:
print("â Permission accordĂ©e Ă tort")
return False
# 5. Définir une permission par défaut
print("\nđ§ Test: DĂ©finition d'une permission par dĂ©faut...")
success = await permissions_manager.set_default_permission(
tool_name="homeassistant.get_state",
can_read=True,
can_write=False,
can_execute=False
)
if success:
print("â
Permission par défaut définie")
else:
print("â Ăchec dĂ©finition permission par dĂ©faut")
return False
# 6. Vérifier héritage des permissions par défaut
print("\nđ Test: HĂ©ritage des permissions par dĂ©faut...")
has_read = await permissions_manager.has_permission(
user_id=user_id,
tool_name="homeassistant.get_state",
permission_type=PermissionType.READ
)
if has_read:
print("â
Héritage des permissions par défaut fonctionnel")
else:
print("â HĂ©ritage des permissions par dĂ©faut dĂ©faillant")
return False
# 7. Définir une permission spécifique utilisateur
print("\nđ€ Test: Permission spĂ©cifique utilisateur...")
success = await permissions_manager.set_user_permission(
user_id=user_id,
tool_name="homeassistant.call_service",
can_read=False,
can_write=True,
can_execute=True
)
if success:
print("â
Permission utilisateur définie")
else:
print("â Ăchec dĂ©finition permission utilisateur")
return False
# 8. Vérifier permission utilisateur WRITE
print("\nâïž Test: Validation permission WRITE...")
has_write = await permissions_manager.has_permission(
user_id=user_id,
tool_name="homeassistant.call_service",
permission_type=PermissionType.WRITE
)
if has_write:
print("â
Permission WRITE accordée")
else:
print("â Permission WRITE refusĂ©e")
return False
# 9. Vérifier permission utilisateur READ refusée
print("\nđïž Test: Validation permission READ refusĂ©e...")
has_read = await permissions_manager.has_permission(
user_id=user_id,
tool_name="homeassistant.call_service",
permission_type=PermissionType.READ
)
if not has_read:
print("â
Permission READ correctement refusée")
else:
print("â Permission READ accordĂ©e Ă tort")
return False
# 10. Test cache des permissions
print("\nđŸ Test: SystĂšme de cache...")
import time
start_time = time.time()
# PremiĂšre requĂȘte (pas en cache)
await permissions_manager.has_permission(
user_id=user_id,
tool_name="homeassistant.get_state",
permission_type=PermissionType.READ
)
first_time = time.time() - start_time
start_time = time.time()
# DeuxiĂšme requĂȘte (en cache)
await permissions_manager.has_permission(
user_id=user_id,
tool_name="homeassistant.get_state",
permission_type=PermissionType.READ
)
second_time = time.time() - start_time
if second_time < first_time:
print("â
SystĂšme de cache fonctionnel")
else:
print("â ïž Cache possiblement non actif (peut ĂȘtre normal)")
# 11. Test résumé des permissions
print("\nđ Test: RĂ©sumĂ© des permissions...")
user_permissions = await permissions_manager.get_user_permissions(user_id)
if len(user_permissions) > 0:
print(f"â
Résumé obtenu: {len(user_permissions)} permissions")
for perm in user_permissions:
print(f" đ§ {perm.tool_name}: R={perm.can_read}, W={perm.can_write}, E={perm.can_execute}")
else:
print("â Aucune permission trouvĂ©e")
return False
print("\nđ Tous les tests de permissions ont rĂ©ussi!")
return True
except Exception as e:
print(f"\nđ„ Erreur lors des tests: {e}")
import traceback
traceback.print_exc()
return False
async def main():
"""Fonction principale"""
success = await test_permissions_system()
if success:
print("\nâ
SystÚme de permissions validé!")
return 0
else:
print("\nâ Ăchec des tests de permissions")
return 1
if __name__ == "__main__":
result = asyncio.run(main())
sys.exit(result)