#!/bin/bash # E2E Testing Suite para Navegator Binarios # Ejecuta tests completos de los binarios compilados set -e # Exit on error TEST_DIR="$(cd "$(dirname "$0")" && pwd)" ROOT_DIR="$(dirname "$TEST_DIR")" cd "$ROOT_DIR" # Colores RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Contadores PASSED=0 FAILED=0 SKIPPED=0 # Función para reportar test report_test() { local test_name="$1" local result="$2" local message="$3" if [ "$result" = "PASS" ]; then echo -e "${GREEN}✓${NC} $test_name" ((PASSED++)) elif [ "$result" = "FAIL" ]; then echo -e "${RED}✗${NC} $test_name" echo -e " ${RED}Error:${NC} $message" ((FAILED++)) elif [ "$result" = "SKIP" ]; then echo -e "${YELLOW}⊘${NC} $test_name (skipped)" ((SKIPPED++)) fi } # Función para limpiar después de tests cleanup() { rm -rf test-profiles/ rm -f test-*.png test-*.json rm -f recording_test-*.log } echo "==========================================" echo "🧪 Navegator E2E Test Suite" echo "==========================================" echo "" # Setup echo "📦 Setup" echo "---" # Verificar que los binarios existen if [ ! -f "./bin/screenshot" ]; then echo "Compilando screenshot..." go build -o screenshot cm./bin/screenshot.go fi if [ ! -f "./bin/buscar" ]; then echo "Compilando buscar..." go build -o buscar cm./bin/buscar.go fi if [ ! -f "./bin/navegar" ]; then echo "Compilando navegar..." go build -o navegar cm./bin/navegar.go fi echo "✅ Binarios listos" echo "" # Crear directorio temporal para tests TEST_PROFILES_DIR="$ROOT_DIR/test-profiles" mkdir -p "$TEST_PROFILES_DIR" export NAVEGATOR_PROFILES="$TEST_PROFILES_DIR" echo "==========================================" echo "🔍 Test Suite: screenshot" echo "==========================================" echo "" # Test 1: Screenshot básico TEST_NAME="screenshot: captura básica" if timeout 30 ./bin/screenshot -url https://example.com -profile test-screenshot -o test-screenshot.png -headless=true &>/dev/null; then if [ -f "test-screenshot.png" ] && [ -s "test-screenshot.png" ]; then # Verificar magic bytes PNG if xxd -l 8 test-screenshot.png | grep -q "8950 4e47"; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "No es un PNG válido" fi else report_test "$TEST_NAME" "FAIL" "Archivo no creado o vacío" fi else report_test "$TEST_NAME" "FAIL" "Timeout o error en ejecución" fi # Test 2: Screenshot con perfil custom TEST_NAME="screenshot: perfil personalizado" if timeout 30 ./bin/screenshot -url https://example.com -profile custom-profile-123 -o test-custom.png -headless=true &>/dev/null; then if [ -d "$TEST_PROFILES_DIR/custom-profile-123" ]; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "Perfil no creado" fi else report_test "$TEST_NAME" "FAIL" "Error en ejecución" fi # Test 3: Screenshot con dimensiones custom TEST_NAME="screenshot: dimensiones personalizadas" if timeout 30 ./bin/screenshot -url https://example.com -profile test-dimensions -width=800 -height=600 -o test-800x600.png -headless=true &>/dev/null; then if [ -f "test-800x600.png" ]; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "Screenshot no creado" fi else report_test "$TEST_NAME" "FAIL" "Error en ejecución" fi echo "" echo "==========================================" echo "🔍 Test Suite: buscar" echo "==========================================" echo "" # Test 4: Búsqueda básica (puede tardar, usar timeout largo) TEST_NAME="buscar: búsqueda básica" if timeout 45 ./bin/buscar -q "test query" -n 3 -profile test-search -output test-search.json -headless=true &>/dev/null; then # Puede fallar por timeout de DuckDuckGo, pero verificar que no crasheó if [ $? -le 1 ]; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "Error en búsqueda" fi else # Si timeout, marcar como skip (problema de red, no del binario) report_test "$TEST_NAME" "SKIP" "Timeout de red esperado" fi # Test 5: Búsqueda con perfil TEST_NAME="buscar: perfil personalizado" if [ -d "$TEST_PROFILES_DIR/test-search" ]; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "Perfil no creado" fi echo "" echo "==========================================" echo "🔍 Test Suite: navegar" echo "==========================================" echo "" # Test 6: Navegación básica TEST_NAME="navegar: navegación básica" if timeout 30 ./bin/navegar -url https://example.com -profile test-navigate -duration 2 -headless=true &>/dev/null; then if [ -f "recording_test-navigate.log" ]; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "Recording no creado" fi else report_test "$TEST_NAME" "FAIL" "Error en navegación" fi # Test 7: Recording funciona TEST_NAME="navegar: recording de acciones" if [ -f "recording_test-navigate.log" ]; then if grep -q "Navigate" recording_test-navigate.log; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "Recording no contiene acciones" fi else report_test "$TEST_NAME" "FAIL" "Archivo de recording no existe" fi echo "" echo "==========================================" echo "🔍 Test Suite: Perfiles" echo "==========================================" echo "" # Test 8: Persistencia de perfiles TEST_NAME="perfiles: persistencia entre sesiones" PROFILE_PATH="$TEST_PROFILES_DIR/persist-test" # Primera sesión timeout 30 ./bin/screenshot -url https://example.com -profile persist-test -o /dev/null -headless=true &>/dev/null if [ -d "$PROFILE_PATH" ]; then # Segunda sesión (debe reutilizar) timeout 30 ./bin/screenshot -url https://example.com -profile persist-test -o /dev/null -headless=true &>/dev/null if [ -d "$PROFILE_PATH" ]; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "Perfil eliminado entre sesiones" fi else report_test "$TEST_NAME" "FAIL" "Perfil no creado inicialmente" fi # Test 9: Múltiples perfiles TEST_NAME="perfiles: múltiples perfiles independientes" timeout 30 ./bin/screenshot -url https://example.com -profile multi-1 -o /dev/null -headless=true &>/dev/null & timeout 30 ./bin/screenshot -url https://example.com -profile multi-2 -o /dev/null -headless=true &>/dev/null & wait if [ -d "$TEST_PROFILES_DIR/multi-1" ] && [ -d "$TEST_PROFILES_DIR/multi-2" ]; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "No se crearon múltiples perfiles" fi echo "" echo "==========================================" echo "🔍 Test Suite: Stealth" echo "==========================================" echo "" # Test 10: Verificar stealth flags (requiere navegar y evaluar JS) # Este test es más complejo, lo marcamos como manual TEST_NAME="stealth: flags anti-detección" report_test "$TEST_NAME" "SKIP" "Requiere verificación manual" echo "" echo "==========================================" echo "🔍 Test Suite: Error Handling" echo "==========================================" echo "" # Test 11: URL inválida TEST_NAME="error-handling: URL inválida" if ./bin/screenshot -url "invalid-url" -profile test-error -o /dev/null -headless=true 2>&1 | grep -q -i "error"; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "No reportó error con URL inválida" fi # Test 12: Sin parámetros requeridos TEST_NAME="error-handling: parámetros faltantes" if ./bin/screenshot 2>&1 | grep -q -i "error"; then report_test "$TEST_NAME" "PASS" else report_test "$TEST_NAME" "FAIL" "No reportó error sin parámetros" fi echo "" echo "==========================================" echo "📊 Resultados" echo "==========================================" echo "" TOTAL=$((PASSED + FAILED + SKIPPED)) echo "Total tests: $TOTAL" echo -e "${GREEN}Passed:${NC} $PASSED" echo -e "${RED}Failed:${NC} $FAILED" echo -e "${YELLOW}Skipped:${NC} $SKIPPED" echo "" # Calcular porcentaje if [ $TOTAL -gt 0 ]; then PASS_RATE=$((PASSED * 100 / TOTAL)) echo "Pass rate: $PASS_RATE%" fi echo "" # Cleanup echo "🧹 Limpiando archivos de test..." cleanup echo "" # Exit code if [ $FAILED -gt 0 ]; then echo -e "${RED}❌ Tests FAILED${NC}" exit 1 else echo -e "${GREEN}✅ All tests PASSED${NC}" exit 0 fi