Skip to main content
Glama
test_quick.py7.66 kB
#!/usr/bin/env python3 """ Test simple qui lance le serveur et effectue des tests basiques Fonctionne correctement avec la gestion des processus """ import requests import time import subprocess import sys import os import signal import psutil class ServerManager: def __init__(self): self.server_proc = None self.base_url = "http://localhost:8080" def start_server(self): """Lance le serveur en arrière-plan""" try: print('🚀 Démarrage du serveur McP Bridge...') # Tuer les processus existants sur le port self.kill_existing_servers() # Démarrer le serveur cmd = [sys.executable, 'bridge_server.py'] self.server_proc = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=os.path.dirname(os.path.dirname(os.path.abspath(__file__))), # Répertoire parent (racine) creationflags=subprocess.CREATE_NEW_PROCESS_GROUP if os.name == 'nt' else 0 ) # Attendre que le serveur démarre max_wait = 15 for i in range(max_wait): try: response = requests.get(f'{self.base_url}/health', timeout=2) if response.status_code == 200: print(f'✅ Serveur démarré avec succès (en {i+1}s)') return True except: time.sleep(1) print(f' Attente du serveur... ({i+1}/{max_wait})') print('❌ Timeout: Le serveur n\'a pas démarré dans les temps') return False except Exception as e: print(f'❌ Erreur lors du démarrage du serveur: {e}') return False def kill_existing_servers(self): """Tue les serveurs existants sur le port""" try: for proc in psutil.process_iter(['pid', 'name', 'cmdline']): try: if proc.info['cmdline'] and any('start_server.py' in str(arg) or 'bridge_server.py' in str(arg) for arg in proc.info['cmdline']): print(f' Arrêt du processus existant: {proc.info["pid"]}') proc.terminate() time.sleep(1) except (psutil.NoSuchProcess, psutil.AccessDenied): pass except Exception as e: print(f' Avertissement: {e}') def stop_server(self): """Arrête le serveur""" try: if self.server_proc: print('🛑 Arrêt du serveur...') if os.name == 'nt': # Windows self.server_proc.terminate() else: # Unix/Linux self.server_proc.send_signal(signal.SIGTERM) # Attendre l'arrêt try: self.server_proc.wait(timeout=5) except subprocess.TimeoutExpired: self.server_proc.kill() self.server_proc = None print('✅ Serveur arrêté') except Exception as e: print(f'⚠️ Erreur lors de l\'arrêt: {e}') def run_tests(): """Exécute les tests principaux""" server = ServerManager() print('🧪 TEST SIMPLE - McP Bridge Phase 3.4') print('=' * 50) # Démarrer le serveur if not server.start_server(): return False success_count = 0 total_tests = 0 try: # Test 1: Health Check print('\n🩺 Test 1: Health Check') total_tests += 1 try: response = requests.get(f'{server.base_url}/health', timeout=5) if response.status_code == 200: data = response.json() print(f' ✅ Serveur en ligne - Status: {data.get("status", "unknown")}') success_count += 1 else: print(f' ❌ Status code: {response.status_code}') except Exception as e: print(f' ❌ Erreur: {e}') # Test 2: Interface Web print('\n🌐 Test 2: Interface Web') total_tests += 1 try: response = requests.get(server.base_url, timeout=5) if response.status_code == 200 and ('HTTP-MCP Bridge' in response.text or 'Redirection' in response.text): print(' ✅ Page d\'accueil accessible') success_count += 1 else: print(f' ❌ Page non accessible ou contenu incorrect') except Exception as e: print(f' ❌ Erreur: {e}') # Test 3: API Status print('\n📊 Test 3: API Status') total_tests += 1 try: response = requests.get(f'{server.base_url}/mcp/status', timeout=5) if response.status_code in [200, 401]: # 401 = auth requise (normal) print(' ✅ API accessible (authentification requise)') success_count += 1 else: print(f' ❌ API non accessible: {response.status_code}') except Exception as e: print(f' ❌ Erreur: {e}') # Test 4: Login print('\n🔐 Test 4: Authentification') total_tests += 1 try: login_data = {'username': 'admin', 'password': 'Admin123!'} response = requests.post(f'{server.base_url}/auth/login', json=login_data, timeout=5) if response.status_code == 200: data = response.json() if 'access_token' in data: print(' ✅ Authentification réussie') success_count += 1 else: print(' ❌ Token non reçu') else: print(f' ❌ Login échoué: {response.status_code}') except Exception as e: print(f' ❌ Erreur: {e}') # Test 5: Base de données print('\n💾 Test 5: Base de données') total_tests += 1 db_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'bridge_data.db') if os.path.exists(db_path): print(' ✅ Base de données présente') success_count += 1 else: print(' ❌ Base de données manquante') finally: # Arrêter le serveur server.stop_server() # Résultats print('\n' + '=' * 50) print('📊 RÉSULTATS DES TESTS') print('=' * 50) print(f'Tests réussis: {success_count}/{total_tests}') if success_count == total_tests: print('🎉 TOUS LES TESTS RÉUSSIS !') print('✅ McP Bridge fonctionne correctement') return True else: print('❌ CERTAINS TESTS ONT ÉCHOUÉ') print('⚠️ Vérifiez les erreurs ci-dessus') return False if __name__ == "__main__": try: # Installer psutil si nécessaire try: import psutil except ImportError: print('📦 Installation de psutil...') subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'psutil']) import psutil success = run_tests() sys.exit(0 if success else 1) except KeyboardInterrupt: print('\n🛑 Test interrompu par l\'utilisateur') sys.exit(1) except Exception as e: print(f'\n❌ Erreur critique: {e}') sys.exit(1)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jonathan97480/McpHomeAssistant'

If you have feedback or need assistance with the MCP directory API, please join our Discord server