182 lines
5.8 KiB
Python
182 lines
5.8 KiB
Python
#!/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()) |