re-uploading work
This commit is contained in:
321
tests/run_e2e_tests.sh
Executable file
321
tests/run_e2e_tests.sh
Executable 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
|
||||
Reference in New Issue
Block a user