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
+342
View File
@@ -0,0 +1,342 @@
#!/bin/bash
# Script de prueba para Cisco MAC Monitor
# ======================================
set -e
# Colores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Contadores
TESTS_PASSED=0
TESTS_FAILED=0
# Función para logging
log() {
echo -e "${BLUE}[TEST]${NC} $1"
}
success() {
echo -e "${GREEN}[PASS]${NC} $1"
((TESTS_PASSED++))
}
error() {
echo -e "${RED}[FAIL]${NC} $1"
((TESTS_FAILED++))
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
# Test 1: Verificar archivos necesarios
test_single_files() {
log "Verificando archivos necesarios..."
local files=(
"cisco_mac_monitor.py"
"Dockerfile"
"docker-compose.yml"
"zabbix_integration.sh"
"example_output.json"
"README.md"
)
for file in "${files[@]}"; do
if [[ -f "$file" ]]; then
success "Archivo encontrado: $file"
else
error "Archivo faltante: $file"
fi
done
}
# Test 2: Validar sintaxis del script principal
test_single_python_syntax() {
log "Validando sintaxis del script simplificado..."
if command -v python3 >/dev/null 2>&1; then
if python3 -m py_compile cisco_mac_monitor.py; then
success "Sintaxis de Python válida (script simplificado)"
else
error "Error de sintaxis en script simplificado"
fi
else
warn "Python3 no disponible para test de sintaxis"
fi
}
# Test 3: Probar ayuda del script
test_script_help() {
log "Probando función de ayuda del script..."
if command -v python3 >/dev/null 2>&1; then
if python3 cisco_mac_monitor.py --help >/dev/null 2>&1; then
success "Función de ayuda funciona correctamente"
else
error "Error en función de ayuda"
fi
else
warn "Python3 no disponible para test de ayuda"
fi
}
# Test 4: Validar Dockerfile simplificado
test_single_dockerfile() {
log "Validando Dockerfile simplificado..."
if command -v docker >/dev/null 2>&1; then
if docker build -f Dockerfile -t cisco-mac-monitor-test . >/dev/null 2>&1; then
success "Dockerfile válido - imagen construida"
# Limpiar imagen de test
docker rmi cisco-mac-monitor-test >/dev/null 2>&1 || true
else
error "Error en construcción de Dockerfile"
fi
else
warn "Docker no disponible para test de Dockerfile"
fi
}
# Test 5: Validar docker-compose simplificado
test_single_docker_compose() {
log "Validando docker-compose.single.yml..."
if command -v docker-compose >/dev/null 2>&1; then
if docker-compose config >/dev/null 2>&1; then
success "docker-compose.yml válido"
else
error "Error en docker-compose.yml"
fi
else
warn "docker-compose no disponible para test"
fi
}
# Test 6: Validar JSON de ejemplo simplificado
test_single_example_json() {
log "Validando JSON de ejemplo simplificado..."
if [[ -f "example_output.json" ]]; then
if command -v python3 >/dev/null 2>&1; then
if python3 -m json.tool example_output.json >/dev/null 2>&1; then
success "JSON de ejemplo válido"
# Verificar estructura específica de Zabbix LLD
if python3 -c "
import json
with open('example_output.json', 'r') as f:
data = json.load(f)
# Verificar estructura básica
if 'data' not in data:
print('Missing data array')
exit(1)
if not isinstance(data['data'], list):
print('data should be an array')
exit(1)
# Verificar macros de Zabbix LLD en primer elemento
if len(data['data']) > 0:
item = data['data'][0]
required_macros = ['{#DEVICE_HOSTNAME}', '{#PORT_NAME}', '{#MAC_COUNT}', '{#VLANS}', '{#MAC_ADDRESSES}', '{#LAST_UPDATE}']
for macro in required_macros:
if macro not in item:
print(f'Missing macro: {macro}')
exit(1)
print('Zabbix LLD structure valid')
"; then
success "Estructura Zabbix LLD válida en JSON de ejemplo"
else
error "Estructura Zabbix LLD inválida en JSON de ejemplo"
fi
else
error "JSON de ejemplo inválido"
fi
else
warn "Python3 no disponible para validación de JSON"
fi
else
error "Archivo example_output.json no encontrado"
fi
}
# Test 7: Validar script de integración con Zabbix
test_zabbix_integration_script() {
log "Validando script de integración con Zabbix..."
if [[ -f "zabbix_integration.sh" ]]; then
if [[ -x "zabbix_integration.sh" ]]; then
success "Script de integración tiene permisos de ejecución"
# Probar función de ayuda
if ./zabbix_integration.sh help >/dev/null 2>&1; then
success "Función de ayuda del script de integración funciona"
else
warn "Problema con función de ayuda del script de integración"
fi
else
warn "Script de integración no tiene permisos de ejecución"
chmod +x zabbix_integration.sh
success "Permisos de ejecución agregados al script de integración"
fi
else
error "Script de integración no encontrado"
fi
}
# Test 8: Validar que la imagen simplificada es más pequeña
test_image_size_comparison() {
log "Comparando tamaño de imágenes..."
if command -v docker >/dev/null 2>&1; then
# Construir ambas imágenes
log "Construyendo imagen simplificada..."
if docker build -f Dockerfile.single -t cisco-single-test:single . >/dev/null 2>&1; then
local single_size=$(docker images cisco-single-test:single --format "{{.Size}}")
success "Imagen simplificada construida: $single_size"
# Limpiar imagen de test
docker rmi cisco-single-test:single >/dev/null 2>&1 || true
else
warn "No se pudo construir imagen simplificada para comparación"
fi
else
warn "Docker no disponible para comparación de tamaños"
fi
}
# Test 9: Probar script sin parámetros (debe mostrar error útil)
test_parameter_validation() {
log "Probando validación de parámetros..."
if command -v python3 >/dev/null 2>&1; then
# Script debe fallar sin parámetros pero mostrar mensaje útil
if ! python3 cisco_mac_monitor.py >/dev/null 2>&1; then
success "Script valida parámetros requeridos correctamente"
else
warn "Script no valida parámetros requeridos"
fi
# Probar con parámetros incompletos
if ! python3 cisco_mac_monitor.py --host 192.168.1.10 >/dev/null 2>&1; then
success "Script valida parámetros incompletos correctamente"
else
warn "Script no valida parámetros incompletos"
fi
else
warn "Python3 no disponible para test de validación"
fi
}
# Test 10: Verificar documentación simplificada
test_single_documentation() {
log "Verificando documentación simplificada..."
if [[ -f "README.md" ]]; then
local readme_size=$(wc -c < README.md)
if [[ $readme_size -gt 500 ]]; then
success "README.md presente y completo ($readme_size bytes)"
else
warn "README.md muy pequeño ($readme_size bytes)"
fi
else
error "README.md faltante"
fi
}
# Test de integración con contenedor simplificado
test_single_container_integration() {
log "Ejecutando test de integración con contenedor simplificado..."
if command -v docker >/dev/null 2>&1; then
# Construir imagen
if docker build -f Dockerfile -t cisco-mac-test . >/dev/null 2>&1; then
success "Imagen Docker construida correctamente"
# Test de help en contenedor
if docker run --rm cisco-mac-test --help >/dev/null 2>&1; then
success "Test de help en contenedor exitoso"
else
error "Test de help en contenedor falló"
fi
# Limpiar
docker rmi cisco-mac-test >/dev/null 2>&1 || true
else
error "Error construyendo imagen para test de integración"
fi
else
warn "Docker no disponible para test de integración"
fi
}
# Función principal
main() {
echo "=============================================="
echo " Cisco MAC Monitor - Test Suite"
echo "=============================================="
echo
# Verificar que estamos en el directorio correcto
if [[ ! -f "cisco_mac_monitor.py" ]]; then
error "No se encontró cisco_mac_monitor.py. ¿Estás en el directorio correcto?"
exit 1
fi
# Ejecutar tests específicos para versión simplificada
test_single_files
test_single_python_syntax
test_script_help
test_parameter_validation
test_single_example_json
test_zabbix_integration_script
test_single_documentation
# Tests que requieren herramientas externas
if command -v docker >/dev/null 2>&1; then
test_single_dockerfile
test_single_container_integration
test_image_size_comparison
else
warn "Docker no disponible - saltando tests de Docker"
fi
if command -v docker-compose >/dev/null 2>&1; then
test_single_docker_compose
else
warn "docker-compose no disponible - saltando test"
fi
# Resumen
echo
echo "=============================================="
echo " Resumen de Tests"
echo "=============================================="
echo -e "${GREEN}Tests exitosos: $TESTS_PASSED${NC}"
echo -e "${RED}Tests fallidos: $TESTS_FAILED${NC}"
echo
if [[ $TESTS_FAILED -eq 0 ]]; then
echo -e "${GREEN}🎉 Todos los tests pasaron exitosamente!${NC}"
echo
echo "La versión está lista para usar:"
echo "1. Construir imagen: docker build -t cisco-mac-monitor ."
echo "2. Ejecutar: docker run --rm --network host cisco-mac-monitor --host <IP> --username <USER> --password <PASS>"
echo "3. Integrar con Zabbix usando zabbix_integration.sh"
exit 0
else
echo -e "${RED}❌ Algunos tests fallaron. Revisa los errores arriba.${NC}"
exit 1
fi
}
# Ejecutar tests
main "$@"