Files
Pulse/scripts/run-tests-mock.sh

148 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
# Safe test runner that uses mock mode to protect production nodes
# This ensures tests NEVER touch real Proxmox nodes
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
MODE="full"
API_TOKEN="${API_TOKEN:-}"
# Allow new multi-token env var to provide the test credential
if [ -z "$API_TOKEN" ] && [ -n "${API_TOKENS:-}" ]; then
# Use the first token in the comma-separated list
API_TOKEN="$(printf '%s\n' "$API_TOKENS" | tr ',' '\n' | head -n1)"
fi
PULSE_URL="${PULSE_URL:-http://localhost:7655}"
FAILED=0
PASSED=0
ORIGINAL_MOCK_STATE=""
echo "================================================"
echo -e "${BLUE}PULSE SAFE TEST SUITE (MOCK MODE)${NC}"
echo "================================================"
echo ""
# Save original mock state
echo -n "Checking current mock mode status: "
if grep -q "PULSE_MOCK_MODE=true" /opt/pulse/mock.env 2>/dev/null; then
ORIGINAL_MOCK_STATE="true"
echo -e "${GREEN}Already in mock mode${NC}"
else
ORIGINAL_MOCK_STATE="false"
echo -e "${YELLOW}Real mode - will switch to mock${NC}"
fi
# Enable mock mode for testing
echo -n "Enabling mock mode for safe testing: "
/opt/pulse/scripts/toggle-mock.sh on > /dev/null 2>&1
echo -e "${GREEN}${NC}"
# Wait for service to restart with mock mode
echo -n "Waiting for service to restart with mock data: "
sleep 8
echo -e "${GREEN}${NC}"
# Verify mock mode is active
echo -n "Verifying mock mode is active: "
if curl -s "$PULSE_URL/api/config/nodes" | grep -q "pve1\|mock"; then
echo -e "${GREEN}✓ Mock nodes detected${NC}"
else
echo -e "${YELLOW}⚠️ Mock nodes not detected, but continuing${NC}"
fi
echo ""
echo -e "${GREEN}Running tests in SAFE MODE - your production nodes are protected!${NC}"
echo ""
run_test() {
local name="$1"
local script="$2"
local args="$3"
echo -n "Running $name... "
if [ ! -f "$script" ]; then
echo "SKIPPED (not found)"
return
fi
# Set environment to ensure tests know they're in mock mode
export PULSE_MOCK_MODE=true
if $script $args > /tmp/test-$name.log 2>&1; then
echo -e "${GREEN}✅ PASSED${NC}"
((PASSED++))
else
echo -e "${RED}❌ FAILED${NC} (see /tmp/test-$name.log)"
((FAILED++))
fi
}
echo "RUNNING ALL TESTS (SAFE MODE):"
echo "=============================="
# Core functionality tests
run_test "api" "./scripts/test-api.sh" ""
run_test "frontend" "./scripts/test-frontend.sh" ""
run_test "security" "./scripts/test-security.sh" ""
run_test "edge-cases" "./scripts/test-edge-cases.sh" ""
run_test "proxy" "./scripts/test-proxy-scenarios.sh" ""
# Deployment and installation (skip these in mock mode as they test real deployments)
echo -e "${YELLOW}Skipping deployment tests in mock mode${NC}"
# run_test "release" "./scripts/test-release.sh" ""
# run_test "installation" "./scripts/test-installation-methods.sh" ""
# run_test "docker" "./scripts/test-docker-deployment.sh" ""
# run_test "lxc" "./scripts/test-lxc-deployment.sh" ""
# run_test "upgrades" "./scripts/test-upgrades.sh" ""
# Data and monitoring - safe to run with mock data
run_test "backup" "./scripts/test-backup.sh" ""
run_test "persistence" "./scripts/test-persistence.sh" "$PULSE_URL \"$API_TOKEN\""
run_test "recovery" "./scripts/test-recovery.sh" "$PULSE_URL \"$API_TOKEN\""
run_test "monitoring" "./scripts/test-monitoring.sh" "$PULSE_URL \"$API_TOKEN\""
run_test "notifications" "./scripts/test-notifications.sh" "$PULSE_URL \"$API_TOKEN\""
# Performance and validation
run_test "performance" "./scripts/test-performance.sh" ""
run_test "load" "./scripts/test-load.sh" ""
run_test "validation" "./scripts/test-config-validation.sh" "$PULSE_URL \"$API_TOKEN\""
echo ""
# Restore original mock state
echo -n "Restoring original mode: "
if [ "$ORIGINAL_MOCK_STATE" = "false" ]; then
/opt/pulse/scripts/toggle-mock.sh off > /dev/null 2>&1
echo -e "${GREEN}✓ Restored to real mode${NC}"
else
echo -e "${GREEN}✓ Keeping mock mode${NC}"
fi
echo ""
echo "================================================"
echo "SAFE TEST RESULTS:"
echo -e " ${GREEN}✅ Passed: $PASSED${NC}"
if [ $FAILED -gt 0 ]; then
echo -e " ${RED}❌ Failed: $FAILED${NC}"
else
echo -e " ${GREEN}❌ Failed: 0${NC}"
fi
echo "================================================"
if [ $FAILED -eq 0 ]; then
echo ""
echo -e "${GREEN}🎉 All tests passed!${NC}"
echo -e "${BLUE}Your production nodes were never touched!${NC}"
exit 0
else
echo ""
echo -e "${YELLOW}⚠️ Some tests failed. Check logs in /tmp/${NC}"
echo -e "${BLUE}Note: Your production nodes were protected during testing${NC}"
exit 1
fi