sumo_rl_env / test_sumo_rl.sh
burtenshaw's picture
burtenshaw HF Staff
Upload folder using huggingface_hub
6fac95b verified
#!/bin/bash
# Complete SUMO-RL Integration Test Script
# Run this to verify everything works!
set -e # Exit on error
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "๐Ÿš€ SUMO-RL Environment Test Script"
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo ""
# Navigate to repo root
cd /Users/sanyambhutani/GH/OpenEnv
echo "๐Ÿ“ Working directory: $(pwd)"
echo ""
# Step 1: Check if base image exists
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "Step 1: Checking for base image..."
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
if docker images | grep -q "envtorch-base.*latest"; then
echo "โœ… envtorch-base:latest found"
else
echo "โš ๏ธ envtorch-base:latest not found - building it now..."
echo ""
docker build -t envtorch-base:latest -f src/core/containers/images/Dockerfile .
echo ""
echo "โœ… Base image built successfully"
fi
echo ""
# Step 2: Build SUMO-RL environment
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "Step 2: Building SUMO-RL environment image..."
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "โณ This will take 5-10 minutes (installing SUMO)..."
echo ""
docker build -f envs/sumo_rl_env/server/Dockerfile -t sumo-rl-env:latest .
echo ""
echo "โœ… SUMO-RL environment built successfully"
echo ""
# Check image size
IMAGE_SIZE=$(docker images sumo-rl-env:latest --format "{{.Size}}")
echo "๐Ÿ“ฆ Image size: $IMAGE_SIZE"
echo ""
# Step 3: Start container
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "Step 3: Starting SUMO-RL container..."
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
# Stop any existing container
docker stop sumo-rl-test 2>/dev/null || true
docker rm sumo-rl-test 2>/dev/null || true
# Start new container
docker run -d -p 8000:8000 --name sumo-rl-test sumo-rl-env:latest
echo "โณ Waiting for container to start..."
sleep 5
# Check if container is running
if docker ps | grep -q sumo-rl-test; then
echo "โœ… Container is running"
else
echo "โŒ Container failed to start!"
echo "Logs:"
docker logs sumo-rl-test
exit 1
fi
echo ""
# Step 4: Test health endpoint
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "Step 4: Testing health endpoint..."
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
HEALTH_RESPONSE=$(curl -s http://localhost:8000/health)
echo "Response: $HEALTH_RESPONSE"
if echo "$HEALTH_RESPONSE" | grep -q "healthy"; then
echo "โœ… Health check passed"
else
echo "โŒ Health check failed!"
exit 1
fi
echo ""
# Step 5: Test reset endpoint
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "Step 5: Testing reset endpoint..."
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "โณ This may take 3-5 seconds (SUMO simulation starting)..."
RESET_RESPONSE=$(curl -s -X POST http://localhost:8000/reset)
if echo "$RESET_RESPONSE" | jq -e '.observation.observation' > /dev/null 2>&1; then
echo "โœ… Reset successful"
# Extract observation details
OBS_SHAPE=$(echo "$RESET_RESPONSE" | jq '.observation.observation_shape')
ACTION_MASK=$(echo "$RESET_RESPONSE" | jq '.observation.action_mask')
echo " ๐Ÿ“Š Observation shape: $OBS_SHAPE"
echo " ๐ŸŽฎ Available actions: $ACTION_MASK"
else
echo "โŒ Reset failed!"
echo "Response: $RESET_RESPONSE"
exit 1
fi
echo ""
# Step 6: Test step endpoint
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "Step 6: Testing step endpoint (taking 5 actions)..."
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
for i in {1..5}; do
# Take action (cycle through phases 0-1)
PHASE_ID=$((i % 2))
STEP_RESPONSE=$(curl -s -X POST http://localhost:8000/step \
-H "Content-Type: application/json" \
-d "{\"action\": {\"phase_id\": $PHASE_ID, \"ts_id\": \"0\"}}")
if echo "$STEP_RESPONSE" | jq -e '.reward' > /dev/null 2>&1; then
REWARD=$(echo "$STEP_RESPONSE" | jq '.reward')
DONE=$(echo "$STEP_RESPONSE" | jq '.done')
echo " Step $i: phase=$PHASE_ID, reward=$REWARD, done=$DONE"
else
echo "โŒ Step $i failed!"
echo "Response: $STEP_RESPONSE"
exit 1
fi
done
echo "โœ… All steps successful"
echo ""
# Step 7: Test state endpoint
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "Step 7: Testing state endpoint..."
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
STATE_RESPONSE=$(curl -s http://localhost:8000/state)
if echo "$STATE_RESPONSE" | jq -e '.episode_id' > /dev/null 2>&1; then
echo "โœ… State endpoint working"
# Extract state details
EPISODE_ID=$(echo "$STATE_RESPONSE" | jq -r '.episode_id')
STEP_COUNT=$(echo "$STATE_RESPONSE" | jq '.step_count')
SIM_TIME=$(echo "$STATE_RESPONSE" | jq '.sim_time')
TOTAL_VEHICLES=$(echo "$STATE_RESPONSE" | jq '.total_vehicles')
echo " ๐Ÿ“ Episode ID: ${EPISODE_ID:0:8}..."
echo " ๐Ÿ”ข Step count: $STEP_COUNT"
echo " โฑ๏ธ Simulation time: $SIM_TIME seconds"
echo " ๐Ÿš— Total vehicles: $TOTAL_VEHICLES"
else
echo "โŒ State endpoint failed!"
echo "Response: $STATE_RESPONSE"
exit 1
fi
echo ""
# Step 8: Check logs for errors
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "Step 8: Checking container logs for errors..."
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
LOGS=$(docker logs sumo-rl-test 2>&1)
# Check for Python errors (but ignore LoggerMode.Error which is expected)
if echo "$LOGS" | grep -i "error\|exception\|traceback" | grep -v "LoggerMode.Error"; then
echo "โš ๏ธ Found errors in logs:"
echo "$LOGS" | grep -i "error\|exception\|traceback" | grep -v "LoggerMode.Error"
else
echo "โœ… No errors found in logs"
fi
echo ""
# Step 9: Cleanup
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "Step 9: Cleanup..."
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "๐Ÿงน Stopping and removing test container..."
docker stop sumo-rl-test
docker rm sumo-rl-test
echo "โœ… Cleanup complete"
echo ""
# Final summary
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo "๐ŸŽ‰ ALL TESTS PASSED!"
echo "โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”"
echo ""
echo "Summary:"
echo " โœ… Docker image built successfully ($IMAGE_SIZE)"
echo " โœ… Container started and ran"
echo " โœ… Health endpoint working"
echo " โœ… Reset endpoint working"
echo " โœ… Step endpoint working (5 actions executed)"
echo " โœ… State endpoint working"
echo " โœ… No errors in logs"
echo ""
echo "๐ŸŽฏ SUMO-RL integration is working perfectly!"
echo ""
echo "Next steps:"
echo " 1. Test Python client: python examples/sumo_rl_simple.py"
echo " 2. Push to GitHub to trigger CI/CD"
echo " 3. Use for RL training!"
echo ""