first commit
This commit is contained in:
@@ -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())
|
||||
Reference in New Issue
Block a user