re-uploading work

This commit is contained in:
2026-02-04 17:46:30 -06:00
commit 3b14c65998
1388 changed files with 381262 additions and 0 deletions

321
tests/run_e2e_tests.sh Executable file
View File

@@ -0,0 +1,321 @@
#!/usr/bin/env bash
#
# End-to-End Integration Test Runner
#
# This script runs the E2E integration tests for Attune.
# It assumes all services are already running.
#
# Usage:
# ./tests/run_e2e_tests.sh [options]
#
# Options:
# -v, --verbose Verbose test output
# -s, --stop-on-fail Stop on first test failure
# -k EXPRESSION Only run tests matching expression
# -m MARKER Only run tests with given marker
# --tier TIER Run specific tier (1, 2, or 3)
# --setup Set up test environment (install deps, create venv)
# --teardown Clean up after tests
# --coverage Run with coverage reporting
# -h, --help Show this help message
#
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Script directory
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
VENV_DIR="$SCRIPT_DIR/venvs/e2e"
# Default values
VERBOSE=""
STOP_ON_FAIL=""
TEST_PATTERN=""
MARKER=""
TIER=""
COVERAGE=""
SETUP=false
TEARDOWN=false
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
-v|--verbose)
VERBOSE="-v -s"
shift
;;
-s|--stop-on-fail)
STOP_ON_FAIL="-x"
shift
;;
-k)
TEST_PATTERN="-k $2"
shift 2
;;
-m)
MARKER="-m $2"
shift 2
;;
--tier)
TIER="$2"
shift 2
;;
--coverage)
COVERAGE="--cov=../crates --cov-report=html --cov-report=term"
shift
;;
--setup)
SETUP=true
shift
;;
--teardown)
TEARDOWN=true
shift
;;
-h|--help)
head -n 22 "$0" | tail -n +3 | sed 's/^# //'
exit 0
;;
*)
echo -e "${RED}Error: Unknown option $1${NC}"
exit 1
;;
esac
done
# Functions
log_info() {
echo -e "${BLUE}${NC} $1"
}
log_success() {
echo -e "${GREEN}${NC} $1"
}
log_warning() {
echo -e "${YELLOW}${NC} $1"
}
log_error() {
echo -e "${RED}${NC} $1"
}
log_header() {
echo -e "${CYAN}═══${NC} $1"
}
setup_environment() {
log_info "Setting up E2E test environment..."
# Create virtual environment if it doesn't exist
if [[ ! -d "$VENV_DIR" ]]; then
log_info "Creating virtual environment at $VENV_DIR"
python3 -m venv "$VENV_DIR"
fi
# Activate virtual environment
source "$VENV_DIR/bin/activate"
# Install dependencies
log_info "Installing test dependencies..."
pip install -q --upgrade pip
pip install -q -r "$SCRIPT_DIR/requirements.txt"
log_success "Test environment ready"
}
check_services() {
log_info "Checking if Attune services are running..."
local api_url="${ATTUNE_API_URL:-http://localhost:8080}"
# Check API health
if curl -s -f "${api_url}/health" > /dev/null 2>&1; then
log_success "API service is running at ${api_url}"
else
log_error "API service is not reachable at ${api_url}"
log_warning "Make sure all services are running before running E2E tests"
log_info "Start services with:"
echo " Terminal 1: cd crates/api && cargo run"
echo " Terminal 2: cd crates/executor && cargo run"
echo " Terminal 3: cd crates/worker && cargo run"
echo " Terminal 4: cd crates/sensor && cargo run"
echo " Terminal 5: cd crates/notifier && cargo run"
exit 1
fi
}
run_tests() {
log_info "Running E2E integration tests..."
cd "$SCRIPT_DIR"
# Activate virtual environment
source "$VENV_DIR/bin/activate"
# Set environment variables
export ATTUNE_API_URL="${ATTUNE_API_URL:-http://localhost:8080}"
export TEST_TIMEOUT="${TEST_TIMEOUT:-60}"
export PYTHONPATH="$SCRIPT_DIR:$PROJECT_ROOT:$PYTHONPATH"
# Determine test path
local test_path="e2e/"
if [[ -n "$TIER" ]]; then
test_path="e2e/tier${TIER}/"
MARKER="-m tier${TIER}"
log_header "Running Tier ${TIER} Tests"
else
log_header "Running All E2E Tests"
fi
# Build pytest command
local pytest_args=()
pytest_args+=("$test_path")
if [[ -n "$VERBOSE" ]]; then
pytest_args+=($VERBOSE)
else
pytest_args+=("-v")
fi
if [[ -n "$STOP_ON_FAIL" ]]; then
pytest_args+=("$STOP_ON_FAIL")
fi
if [[ -n "$TEST_PATTERN" ]]; then
pytest_args+=($TEST_PATTERN)
fi
if [[ -n "$MARKER" ]]; then
pytest_args+=($MARKER)
fi
if [[ -n "$COVERAGE" ]]; then
pytest_args+=($COVERAGE)
fi
log_info "Command: pytest ${pytest_args[*]}"
echo ""
# Run tests
if pytest "${pytest_args[@]}"; then
echo ""
log_success "All tests passed!"
return 0
else
echo ""
log_error "Some tests failed"
return 1
fi
}
teardown_environment() {
log_info "Cleaning up test artifacts..."
# Remove test artifacts
rm -rf "$SCRIPT_DIR/artifacts/*"
rm -rf "$SCRIPT_DIR/logs/*"
rm -rf "$SCRIPT_DIR/.pytest_cache"
rm -rf "$SCRIPT_DIR/__pycache__"
rm -rf "$SCRIPT_DIR/e2e/__pycache__"
rm -rf "$SCRIPT_DIR/e2e/*/__pycache__"
rm -rf "$SCRIPT_DIR/helpers/__pycache__"
rm -rf "$SCRIPT_DIR/htmlcov"
rm -rf "$SCRIPT_DIR/.coverage"
log_success "Cleanup complete"
}
print_banner() {
echo ""
echo "╔════════════════════════════════════════════════════════╗"
echo "║ Attune E2E Integration Test Suite ║"
echo "╚════════════════════════════════════════════════════════╝"
echo ""
}
print_tier_info() {
if [[ -n "$TIER" ]]; then
case "$TIER" in
1)
echo " Tier 1: Core Automation Flows (MVP Essential)"
echo " Tests: Timers, Webhooks, Basic Workflows"
;;
2)
echo " Tier 2: Orchestration & Data Flow"
echo " Tests: Workflows, Inquiries, Error Handling"
;;
3)
echo " Tier 3: Advanced Features & Edge Cases"
echo " Tests: Performance, Security, Edge Cases"
;;
esac
else
echo " Running all test tiers (1, 2, 3)"
fi
echo ""
}
# Main execution
main() {
print_banner
print_tier_info
# Setup if requested
if [[ "$SETUP" == true ]]; then
setup_environment
echo ""
fi
# Ensure environment is set up
if [[ ! -d "$VENV_DIR" ]]; then
log_warning "Virtual environment not found. Setting up..."
setup_environment
echo ""
fi
# Check services
check_services
echo ""
# Run tests
if run_tests; then
TEST_EXIT_CODE=0
else
TEST_EXIT_CODE=1
fi
echo ""
# Teardown if requested
if [[ "$TEARDOWN" == true ]]; then
teardown_environment
echo ""
fi
# Final summary
echo "╔════════════════════════════════════════════════════════╗"
if [[ $TEST_EXIT_CODE -eq 0 ]]; then
echo "${GREEN}✓ All E2E tests passed successfully${NC}"
else
echo "${RED}✗ Some E2E tests failed${NC}"
echo "║ ║"
echo "║ Check test output above for details ║"
echo "║ Logs may be available in tests/logs/ ║"
fi
echo "╚════════════════════════════════════════════════════════╝"
echo ""
exit $TEST_EXIT_CODE
}
# Run main function
main