mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-02-18 00:17:39 +01:00
148 lines
4.6 KiB
Bash
Executable File
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
|