Fundamental_Analysis/scripts/run_component_tests.sh
Lv, Qi 0cb31e363e Refactor E2E tests and improve error handling in Orchestrator
- Fix `simple_test_analysis` template in E2E test setup to align with Orchestrator's data fetch logic.
- Implement and verify additional E2E scenarios:
    - Scenario C: Partial Provider Failure (verified error propagation fix in Orchestrator).
    - Scenario D: Invalid Symbol input.
    - Scenario E: Analysis Module failure.
- Update `WorkflowStateMachine::handle_report_failed` to correctly scope error broadcasting to the specific task instead of failing effectively silently or broadly.
- Update testing strategy documentation to reflect completed Phase 4 testing.
- Skip Scenario B (Orchestrator Restart) as persistence is not yet implemented (decision made to defer persistence).
2025-11-21 20:44:32 +08:00

142 lines
4.4 KiB
Bash
Executable File

#!/bin/bash
set -e
# Configuration
COMPOSE_FILE="docker-compose.test.yml"
export NATS_ADDR="nats://localhost:4223"
export DATA_PERSISTENCE_SERVICE_URL="http://localhost:3001/api/v1"
# For services that might need direct DB access (e.g. persistence tests)
export DATABASE_URL="postgresql://postgres:postgres@localhost:5433/fundamental_test"
# Fake Service Host config for providers
export SERVICE_HOST="localhost"
export API_GATEWAY_URL="http://localhost:4000" # Mock
# Keys (Injected for testing)
export ALPHAVANTAGE_API_KEY="PUOO7UPTNXN325NN"
export TUSHARE_API_KEY="f62b415de0a5a947fcb693b66cd299dd6242868bf04ad687800c7f3f"
export FINNHUB_API_KEY="d3fjs5pr01qolkndil0gd3fjs5pr01qolkndil10"
export OPENROUTER_API_KEY="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"
export OPENROUTER_API_URL="https://openrouter.ai/api/v1"
# Common config for services
export SERVER_PORT=0 # Use random/no port for tests to avoid config errors
# Default URLs (From Frontend Defaults)
export ALPHAVANTAGE_MCP_URL="https://mcp.alphavantage.co/mcp"
export TUSHARE_API_URL="http://api.tushare.pro"
export FINNHUB_API_URL="https://finnhub.io/api/v1"
export YFINANCE_API_URL="https://query1.finance.yahoo.com" # Generic default
# Check for MCP URL (now set by default above, but good to keep check if user wants override)
if [ -z "$ALPHAVANTAGE_MCP_URL" ]; then
echo -e "\033[1;33m[WARNING]\033[0m ALPHAVANTAGE_MCP_URL is not set. Integration tests using it will fail."
echo "Please set it via: export ALPHAVANTAGE_MCP_URL='...'"
# Set a dummy for now to prevent crash, but test will fail connection
export ALPHAVANTAGE_MCP_URL="http://localhost:9999/sse"
fi
function log() {
echo -e "\033[1;34m[TEST-RUNNER]\033[0m $1"
}
function start_env() {
log "Starting test infrastructure..."
docker-compose -f $COMPOSE_FILE up -d --build
log "Waiting for services to be healthy..."
# Simple wait loop for persistence service
local max_retries=30
local count=0
while ! curl -s http://localhost:3001/health > /dev/null; do
sleep 2
count=$((count+1))
if [ $count -ge $max_retries ]; then
log "Error: Timeout waiting for persistence service."
exit 1
fi
echo -n "."
done
echo ""
log "Infrastructure is ready!"
}
function stop_env() {
log "Stopping test infrastructure..."
docker-compose -f $COMPOSE_FILE down -v
log "Environment destroyed."
}
function run_tests_in_dir() {
local dir=$1
log "Running tests in $dir..."
if ! (cd "$dir" && cargo test -- --nocapture); then
log "Tests failed in $dir"
return 1
fi
}
function run_tests() {
local package=$1
local services_dir="services"
if [ -n "$package" ]; then
if [ -d "$services_dir/$package" ]; then
if ! run_tests_in_dir "$services_dir/$package"; then
exit 1
fi
else
log "Error: Package directory '$services_dir/$package' not found."
exit 1
fi
else
log "Running ALL tests in services/ directory..."
for dir in "$services_dir"/*; do
if [ -d "$dir" ] && [ -f "$dir/Cargo.toml" ]; then
if ! run_tests_in_dir "$dir"; then
log "Aborting due to test failure in $dir."
exit 1
fi
fi
done
fi
}
function check_env_ready() {
if curl -s http://localhost:3001/health > /dev/null; then
return 0
else
return 1
fi
}
# CLI Argument Parsing
case "$1" in
"prepare"|"start")
if check_env_ready; then
log "Environment is already running."
else
start_env
fi
;;
"destroy"|"stop")
stop_env
;;
"test")
# Verify environment is ready
if ! check_env_ready; then
log "Error: Test environment is NOT ready."
log "Please run '$0 prepare' first to start the infrastructure."
exit 1
fi
run_tests $2
;;
*)
echo "Usage: $0 {prepare|destroy|test [package_name]}"
echo " prepare (start): Start test infrastructure (Docker)"
echo " destroy (stop): Stop and cleanup test infrastructure"
echo " test: Run cargo test (requires environment to be ready). Optional: provide package name."
exit 1
;;
esac