agent-system/scripts/supervisor/test_scenarios.sh

80 lines
2.4 KiB
Bash
Raw Permalink Normal View History

2026-05-12 17:34:42 +02:00
#!/bin/bash
# Generate realistic reconciliation drift scenarios for the homelab supervisor.
set -e
# Configuration
BASE_DIR=$(pwd)
# Use local directory for testing if /opt is not writable
WORLD_DIR="${HOMELAB_WORLD_ROOT:-$BASE_DIR/tmp/homelab/world}"
INVENTORY_DIR="$BASE_DIR/hosts"
echo "Setting up homelab reconciliation scenarios..."
echo "World state: $WORLD_DIR"
echo "Inventory: $INVENTORY_DIR"
# Cleanup
rm -rf "$WORLD_DIR"
rm -rf "$INVENTORY_DIR"
# Create directories
mkdir -p "$INVENTORY_DIR/node1"
mkdir -p "$INVENTORY_DIR/node2"
mkdir -p "$WORLD_DIR/services" "$WORLD_DIR/nodes" "$WORLD_DIR/deployments" "$WORLD_DIR/incidents"
# --- Scenario 1: Nominal ---
cat <<EOF > "$INVENTORY_DIR/node1/services.yaml"
services:
- name: homeassistant
EOF
cat <<EOF > "$WORLD_DIR/services/homeassistant.json"
{"name": "homeassistant", "status": "healthy", "node": "node1"}
EOF
cat <<EOF > "$WORLD_DIR/nodes/node1.json"
{"name": "node1", "status": "online"}
EOF
# --- Scenario 2: Unhealthy Service ---
cat <<EOF > "$WORLD_DIR/services/homeassistant.json"
{"name": "homeassistant", "status": "unhealthy", "node": "node1"}
EOF
# --- Scenario 3: Missing Service ---
cat <<EOF > "$INVENTORY_DIR/node2/services.yaml"
services:
- name: webapp
EOF
# webapp is missing from world/services
# --- Scenario 4: Dependency Unavailable (for Missing Service) ---
cat <<EOF > "$WORLD_DIR/services/database.json"
{"name": "database", "status": "error", "node": "node2"}
EOF
# webapp depends on database in supervisor logic
# --- Scenario 5: Offline Node ---
cat <<EOF > "$WORLD_DIR/nodes/node2.json"
{"name": "node2", "status": "offline"}
EOF
# --- Scenario 6: Repeated Deployment Failures ---
cat <<EOF > "$WORLD_DIR/deployments/dep-001.json"
{"id": "dep-001", "service": "webapp", "status": "failed", "timestamp": $(date +%s)}
EOF
cat <<EOF > "$WORLD_DIR/deployments/dep-002.json"
{"id": "dep-002", "service": "webapp", "status": "failed", "timestamp": $(( $(date +%s) - 300 ))}
EOF
cat <<EOF > "$WORLD_DIR/deployments/dep-003.json"
{"id": "dep-003", "service": "webapp", "status": "failed", "timestamp": $(( $(date +%s) - 600 ))}
EOF
# --- Scenario 7: Unresolved Incident ---
cat <<EOF > "$WORLD_DIR/incidents/inc-99.json"
{"id": "inc-99", "description": "High memory usage on node1", "status": "investigating"}
EOF
echo "Scenarios generated successfully."
echo "You can now run: HOMELAB_WORLD_ROOT=$WORLD_DIR python3 scripts/supervisor/supervisor.py"