first commit

This commit is contained in:
Xavier Rodriguez
2025-12-09 12:45:15 +01:00
commit 7fc616b5c3
44 changed files with 6981 additions and 0 deletions
+182
View File
@@ -0,0 +1,182 @@
#!/usr/bin/env python3
"""
Test script para verificar compatibilidad SSH con dispositivos Cisco antiguos
===========================================================================
Este script valida que:
1. Las importaciones funcionen correctamente
2. La clase CiscoSSHConnector se pueda instanciar
3. Los algoritmos de compatibilidad se configuren correctamente
4. No hay errores de sintaxis en el código
Uso:
python3 test_compatibility.py
"""
import sys
import os
def test_imports():
"""Test de importaciones básicas"""
print("🔍 Testing importaciones...")
try:
import json
import logging
import argparse
import re
import sys
from datetime import datetime
from typing import List, Dict, Any
print("✅ Importaciones estándar OK")
except ImportError as e:
print(f"❌ Error en importaciones estándar: {e}")
return False
try:
import paramiko
print("✅ Paramiko disponible")
except ImportError as e:
print(f"⚠️ Paramiko no instalado: {e}")
print(" Para testing completo, instalar con: pip install paramiko")
return "paramiko_missing"
return True
def test_cisco_monitor_syntax():
"""Test de sintaxis del módulo principal"""
print("\n🔍 Testing sintaxis de cisco_mac_monitor.py...")
try:
# Compilar archivo para verificar sintaxis
with open('cisco_mac_monitor.py', 'r') as f:
source_code = f.read()
compile(source_code, 'cisco_mac_monitor.py', 'exec')
print("✅ Sintaxis de cisco_mac_monitor.py OK")
return True
except SyntaxError as e:
print(f"❌ Error de sintaxis: {e}")
print(f" Línea {e.lineno}: {e.text}")
return False
except FileNotFoundError:
print("❌ Archivo cisco_mac_monitor.py no encontrado")
return False
except Exception as e:
print(f"❌ Error inesperado: {e}")
return False
def test_class_instantiation():
"""Test de instanciación de clases (si paramiko disponible)"""
print("\n🔍 Testing instanciación de clases...")
try:
import paramiko
except ImportError:
print("⚠️ Saltando test (paramiko no disponible)")
return True
try:
# Import del módulo principal
sys.path.insert(0, '.')
from cisco_mac_monitor import CiscoSSHConnector, CiscoMacTableParser, ZabbixLLDFormatter
# Test CiscoSSHConnector
connector = CiscoSSHConnector("test.example.com", "test", "test")
print("✅ CiscoSSHConnector se puede instanciar")
# Test CiscoMacTableParser
parser = CiscoMacTableParser()
print("✅ CiscoMacTableParser se puede instanciar")
# Test ZabbixLLDFormatter
formatter = ZabbixLLDFormatter("test-device")
print("✅ ZabbixLLDFormatter se puede instanciar")
return True
except Exception as e:
print(f"❌ Error instanciando clases: {e}")
return False
def test_ssh_compatibility_config():
"""Test de configuración de compatibilidad SSH"""
print("\n🔍 Testing configuración de compatibilidad SSH...")
try:
import paramiko
except ImportError:
print("⚠️ Saltando test (paramiko no disponible)")
return True
try:
# Test de configuración Transport
transport = paramiko.Transport(('dummy', 22))
security_opts = transport.get_security_options()
# Verificar algoritmos originales
original_kex = list(security_opts.kex)
original_host_keys = list(security_opts.key_types)
# Aplicar configuración de compatibilidad
if 'diffie-hellman-group1-sha1' not in security_opts.kex:
security_opts.kex = ['diffie-hellman-group1-sha1'] + list(security_opts.kex)
print("✅ diffie-hellman-group1-sha1 añadido a KEX")
if 'ssh-rsa' not in security_opts.key_types:
security_opts.key_types = ['ssh-rsa'] + list(security_opts.key_types)
print("✅ ssh-rsa añadido a host key types")
# Verificar que se añadieron
assert 'diffie-hellman-group1-sha1' in security_opts.kex
assert 'ssh-rsa' in security_opts.key_types
print("✅ Configuración de compatibilidad SSH aplicada correctamente")
transport.close()
return True
except Exception as e:
print(f"❌ Error configurando SSH compatibility: {e}")
return False
def main():
"""Función principal de testing"""
print("=" * 60)
print("🧪 CISCO MAC MONITOR - COMPATIBILITY TEST")
print("=" * 60)
# Test 1: Imports
import_result = test_imports()
if import_result is False:
print("\n❌ FAILED: Importaciones básicas fallaron")
return 1
# Test 2: Syntax
if not test_cisco_monitor_syntax():
print("\n❌ FAILED: Errores de sintaxis encontrados")
return 1
# Test 3: Class instantiation (si paramiko disponible)
if import_result is not "paramiko_missing":
if not test_class_instantiation():
print("\n❌ FAILED: Error instanciando clases")
return 1
# Test 4: SSH compatibility config
if not test_ssh_compatibility_config():
print("\n❌ FAILED: Error configurando compatibilidad SSH")
return 1
print("\n" + "=" * 60)
if import_result == "paramiko_missing":
print("✅ PASSED (con limitaciones): Tests básicos completados")
print("📝 Para testing completo, instalar: pip install paramiko")
else:
print("✅ PASSED: Todos los tests completados exitosamente")
print("=" * 60)
return 0
if __name__ == '__main__':
exit(main())