Files
attune/scripts/test-completion-fix.sh

130 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
# Test script to verify duplicate completion notification fix
# This script runs an execution and checks logs for duplicate completion warnings
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
echo "=== Testing Duplicate Completion Notification Fix ==="
echo ""
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
cd "$PROJECT_DIR"
# Check if services are running
if ! docker compose ps | grep -q "attune-api.*running"; then
echo -e "${YELLOW}Services not running. Starting...${NC}"
docker compose up -d
echo "Waiting for services to be ready..."
sleep 15
fi
echo "Step 1: Triggering a test execution..."
echo ""
# Use the core.echo action which should be available
EXEC_RESPONSE=$(curl -s -X POST http://localhost:8080/api/v1/executions \
-H "Content-Type: application/json" \
-d '{
"action_ref": "core.echo",
"config": {
"message": "Testing completion notification fix"
}
}' 2>/dev/null || echo '{"error":"failed"}')
EXEC_ID=$(echo "$EXEC_RESPONSE" | grep -o '"id":[0-9]*' | cut -d':' -f2 | head -1)
if [ -z "$EXEC_ID" ]; then
echo -e "${RED}Failed to create execution. Response:${NC}"
echo "$EXEC_RESPONSE"
exit 1
fi
echo "Execution created with ID: $EXEC_ID"
echo ""
echo "Step 2: Waiting for execution to complete..."
sleep 5
echo ""
echo "Step 3: Checking executor logs for warnings..."
echo ""
# Check for the warning message in executor logs from last minute
WARNING_COUNT=$(docker compose logs --since 1m attune-executor 2>/dev/null | \
grep -c "Completion notification for action .* but active_count is 0" || echo "0")
echo "Found $WARNING_COUNT duplicate completion warnings"
echo ""
if [ "$WARNING_COUNT" -gt 0 ]; then
echo -e "${RED}❌ FAIL: Duplicate completion notifications detected!${NC}"
echo ""
echo "Recent executor logs:"
docker compose logs --tail 50 attune-executor | grep -A 2 -B 2 "active_count is 0"
exit 1
else
echo -e "${GREEN}✅ PASS: No duplicate completion warnings found!${NC}"
fi
echo ""
echo "Step 4: Verifying execution completed successfully..."
echo ""
EXEC_STATUS=$(curl -s http://localhost:8080/api/v1/executions/$EXEC_ID | \
grep -o '"status":"[^"]*"' | cut -d':' -f2 | tr -d '"')
if [ "$EXEC_STATUS" = "Completed" ]; then
echo -e "${GREEN}✅ Execution completed successfully${NC}"
elif [ "$EXEC_STATUS" = "Failed" ]; then
echo -e "${YELLOW}⚠️ Execution failed (but no duplicate warnings)${NC}"
else
echo -e "${YELLOW}⚠️ Execution status: $EXEC_STATUS${NC}"
fi
echo ""
echo "Step 5: Checking completion notification count in logs..."
echo ""
# Count how many times execution.completed was published for this execution
COMPLETION_COUNT=$(docker compose logs --since 1m attune-executor attune-worker 2>/dev/null | \
grep "execution.completed" | grep -c "execution.*$EXEC_ID" || echo "0")
echo "Execution completion notifications published: $COMPLETION_COUNT"
if [ "$COMPLETION_COUNT" -eq 1 ]; then
echo -e "${GREEN}✅ Exactly one completion notification (expected)${NC}"
elif [ "$COMPLETION_COUNT" -gt 1 ]; then
echo -e "${YELLOW}⚠️ Multiple completion notifications detected (investigating...)${NC}"
docker compose logs --since 1m attune-executor attune-worker 2>/dev/null | \
grep "execution.completed" | grep "execution.*$EXEC_ID"
else
echo -e "${YELLOW}⚠️ No completion notifications found in logs (may have scrolled)${NC}"
fi
echo ""
echo "=== Test Complete ==="
echo ""
echo "Summary:"
echo " - Execution ID: $EXEC_ID"
echo " - Status: $EXEC_STATUS"
echo " - Duplicate warnings: $WARNING_COUNT"
echo " - Completion notifications: $COMPLETION_COUNT"
if [ "$WARNING_COUNT" -eq 0 ]; then
echo ""
echo -e "${GREEN}✅ Fix verified: No duplicate completion notifications!${NC}"
exit 0
else
echo ""
echo -e "${RED}❌ Issue persists: Duplicate notifications detected${NC}"
exit 1
fi