115 lines
4.7 KiB
Python
115 lines
4.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test script para verificar la funcionalidad de mostrar todas las interfaces
|
|
usando datos simulados cuando no hay acceso al dispositivo real.
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
|
|
# Añadir el directorio actual al path para importar los módulos
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
from cisco_mac_monitor import CiscoMacTableParser, ZabbixLLDFormatter
|
|
|
|
def test_all_interfaces_functionality():
|
|
"""Prueba que todas las interfaces se muestren, incluso sin MACs"""
|
|
|
|
print("=== PRUEBA DE FUNCIONALIDAD: TODAS LAS INTERFACES ===\n")
|
|
|
|
# Simular salida de 'show interfaces status'
|
|
mock_interface_output = """
|
|
Port Name Status Vlan Duplex Speed Type
|
|
Fa0/1 connected 1 full 100 10/100BaseTX
|
|
Fa0/2 Servidor-Core connected 10 full 100 10/100BaseTX
|
|
Fa0/3 notconnect 1 auto auto 10/100BaseTX
|
|
Fa0/4 notconnect 1 auto auto 10/100BaseTX
|
|
Fa0/5 notconnect 1 auto auto 10/100BaseTX
|
|
Gi0/1 Uplink-Router connected trunk full 1000 1000BaseTX
|
|
Gi0/2 notconnect 1 auto auto 1000BaseTX
|
|
"""
|
|
|
|
# Simular salida de tabla MAC (solo algunas interfaces tienen MACs)
|
|
mock_mac_output = """
|
|
1 0021.9b5a.4f10 DYNAMIC Fa0/1
|
|
1 001b.2f89.3c21 DYNAMIC Fa0/1
|
|
10 00e0.4c36.7f89 DYNAMIC Fa0/2
|
|
10 0050.5682.1c45 DYNAMIC Fa0/2
|
|
1 0019.bbf7.4a21 DYNAMIC Gi0/1
|
|
1 0025.90e4.b832 DYNAMIC Gi0/1
|
|
1 0018.8b99.5f71 DYNAMIC Gi0/1
|
|
"""
|
|
|
|
# Crear instancias de las clases
|
|
parser = CiscoMacTableParser()
|
|
formatter = ZabbixLLDFormatter("cisco-test-device")
|
|
|
|
print("1. Parseando interfaces detectadas:")
|
|
print(" - Simulando 'show interfaces status'")
|
|
|
|
# Simular el parseo de interfaces
|
|
interfaces = parser._parse_interface_list(mock_interface_output)
|
|
print(f" - Interfaces detectadas: {len(interfaces)}")
|
|
for interface in interfaces:
|
|
print(f" * {interface}")
|
|
|
|
print(f"\n2. Parseando tabla MAC:")
|
|
print(" - Simulando 'show mac address-table'")
|
|
|
|
# Parsear tabla MAC usando el método privado
|
|
mac_entries = parser._parse_mac_table_output(mock_mac_output)
|
|
print(f" - Entradas MAC encontradas: {len(mac_entries)}")
|
|
for entry in mac_entries:
|
|
print(f" * VLAN {entry.vlan} - {entry.mac_address} en {entry.port}")
|
|
|
|
print(f"\n3. Formateando para Zabbix (con todas las interfaces):")
|
|
|
|
# Formatear para Zabbix con todas las interfaces
|
|
zabbix_data = formatter.format_for_zabbix(mac_entries, interfaces)
|
|
|
|
print(f" - Estructura de datos Zabbix: {type(zabbix_data)}")
|
|
print(f" - Claves disponibles: {list(zabbix_data.keys()) if isinstance(zabbix_data, dict) else 'No es dict'}")
|
|
|
|
if 'data' in zabbix_data and isinstance(zabbix_data['data'], list) and len(zabbix_data['data']) > 0:
|
|
print(f" - Primer elemento: {zabbix_data['data'][0]}")
|
|
print(f" - Claves del primer elemento: {list(zabbix_data['data'][0].keys())}")
|
|
|
|
# Analizar resultados
|
|
ports_with_macs = 0
|
|
ports_without_macs = 0
|
|
|
|
for item in zabbix_data['data']:
|
|
interface = item['{#PORT_NAME}']
|
|
mac_count = item['{#MAC_COUNT}']
|
|
|
|
if mac_count > 0:
|
|
ports_with_macs += 1
|
|
print(f" ✅ {interface}: {mac_count} MACs conectadas")
|
|
else:
|
|
ports_without_macs += 1
|
|
print(f" ⚪ {interface}: 0 MACs (puerto vacío)")
|
|
|
|
print(f"\n=== RESUMEN DE RESULTADOS ===")
|
|
print(f"Total de puertos: {len(zabbix_data['data'])}")
|
|
print(f"Puertos con MACs: {ports_with_macs}")
|
|
print(f"Puertos vacíos: {ports_without_macs}")
|
|
|
|
# Mostrar algunos ejemplos del JSON Zabbix
|
|
print(f"\n=== EJEMPLO DE SALIDA ZABBIX LLD ===")
|
|
import json
|
|
print(json.dumps(zabbix_data, indent=2)[:1000] + "..." if len(str(zabbix_data)) > 1000 else json.dumps(zabbix_data, indent=2))
|
|
|
|
# Verificar que la funcionalidad funciona
|
|
if ports_without_macs > 0:
|
|
print(f"\n🎉 ¡ÉXITO! La funcionalidad funciona correctamente:")
|
|
print(f" - Se detectaron {ports_without_macs} puertos vacíos con MAC_COUNT=0")
|
|
print(f" - Se detectaron {ports_with_macs} puertos con MACs conectadas")
|
|
print(f" - Total de puertos mostrados: {len(zabbix_data['data'])}")
|
|
return True
|
|
else:
|
|
print(f"\n❌ Error: No se detectaron puertos vacíos")
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
success = test_all_interfaces_functionality()
|
|
sys.exit(0 if success else 1) |