tasq/node_modules/agentic-flow/scripts/test-fastmcp-docker.sh

133 lines
5.0 KiB
Bash

#!/bin/bash
# Comprehensive FastMCP Docker Test Suite
set -e
# Load environment variables (handle quotes properly)
if [ -f .env ]; then
set -a
source .env
set +a
fi
# Set defaults from .env
FASTMCP_PORT=${FASTMCP_PORT:-3000}
NODE_ENV=${NODE_ENV:-production}
echo "🐳 FastMCP Docker Integration Tests"
echo "===================================="
echo "Port: ${FASTMCP_PORT}"
echo "Environment: ${NODE_ENV}"
echo "Supabase Project: ${SUPABASE_PROJECT_ID}"
echo ""
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Test counter
TESTS_PASSED=0
TESTS_FAILED=0
# Function to run test
run_test() {
local test_name=$1
local test_cmd=$2
echo -e "${BLUE}🧪 Test: ${test_name}${NC}"
if eval "$test_cmd"; then
echo -e "${GREEN}✅ PASSED${NC}\n"
((TESTS_PASSED++))
else
echo -e "${RED}❌ FAILED${NC}\n"
((TESTS_FAILED++))
fi
}
# Build Docker image
echo -e "${YELLOW}📦 Building Docker image...${NC}"
docker build -f docker/fastmcp-test.Dockerfile -t fastmcp-test:latest .
echo -e "${GREEN}✅ Docker image built${NC}\n"
# Test 1: MCP Status
run_test "MCP Status Command" \
"docker run --rm fastmcp-test:latest node dist/cli/mcp.js status | grep -q '6/6 implemented'"
# Test 2: List Tools
run_test "List MCP Tools" \
"docker run --rm fastmcp-test:latest node dist/cli/mcp.js tools | grep -q 'memory_store'"
# Test 3: Start HTTP Server (background)
echo -e "${BLUE}🧪 Test: HTTP Server Startup${NC}"
docker run --rm -d --name fastmcp-http-test \
--env-file .env \
-e PORT=${FASTMCP_PORT} \
-e NODE_ENV=${NODE_ENV} \
-p ${FASTMCP_PORT}:3000 \
fastmcp-test:latest node dist/mcp/fastmcp/servers/http-streaming.js
sleep 3
# Test 4: Health Check
run_test "HTTP Health Endpoint" \
"curl -s http://localhost:${FASTMCP_PORT}/health | grep -q 'healthy'"
# Test 5: SSE Stream
run_test "SSE Stream Connection" \
"timeout 2 curl -N http://localhost:${FASTMCP_PORT}/events | grep -q 'connected' || true"
# Test 6: Tools List Endpoint
run_test "MCP Tools List Endpoint" \
"curl -s -X POST http://localhost:${FASTMCP_PORT}/mcp -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}' | grep -q 'memory_store'"
# Test 7: Memory Store Tool
run_test "memory_store Tool" \
"curl -s -X POST http://localhost:${FASTMCP_PORT}/mcp -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"memory_store\",\"arguments\":{\"key\":\"docker-test\",\"value\":\"hello from docker\"}}}' | grep -q 'success'"
# Test 8: Memory Retrieve Tool
run_test "memory_retrieve Tool" \
"curl -s -X POST http://localhost:${FASTMCP_PORT}/mcp -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"memory_retrieve\",\"arguments\":{\"key\":\"docker-test\"}}}' | grep -q 'success'"
# Test 9: Memory Search Tool
run_test "memory_search Tool" \
"curl -s -X POST http://localhost:${FASTMCP_PORT}/mcp -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"memory_search\",\"arguments\":{\"pattern\":\"docker-*\",\"limit\":5}}}' | grep -q 'success'"
# Test 10: Swarm Init Tool
run_test "swarm_init Tool" \
"curl -s -X POST http://localhost:${FASTMCP_PORT}/mcp -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"swarm_init\",\"arguments\":{\"topology\":\"mesh\",\"maxAgents\":5,\"strategy\":\"balanced\"}}}' | grep -q 'success'"
# Test 11: Agent Spawn Tool
run_test "agent_spawn Tool" \
"curl -s -X POST http://localhost:${FASTMCP_PORT}/mcp -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"agent_spawn\",\"arguments\":{\"type\":\"researcher\",\"capabilities\":[\"analysis\",\"research\"]}}}' | grep -q 'success'"
# Test 12: Task Orchestrate Tool
run_test "task_orchestrate Tool" \
"curl -s -X POST http://localhost:${FASTMCP_PORT}/mcp -H 'Content-Type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"task_orchestrate\",\"arguments\":{\"task\":\"Test orchestration\",\"strategy\":\"parallel\",\"priority\":\"medium\"}}}' | grep -q 'success'"
# Cleanup
echo -e "\n${YELLOW}🧹 Cleaning up...${NC}"
docker stop fastmcp-http-test 2>/dev/null || true
docker rm fastmcp-http-test 2>/dev/null || true
# Summary
echo ""
echo "===================================="
echo -e "${BLUE}📊 Test Summary${NC}"
echo "===================================="
echo -e "${GREEN}✅ Passed: ${TESTS_PASSED}${NC}"
echo -e "${RED}❌ Failed: ${TESTS_FAILED}${NC}"
echo -e "Total Tests: $((TESTS_PASSED + TESTS_FAILED))"
echo ""
if [ $TESTS_FAILED -eq 0 ]; then
echo -e "${GREEN}🎉 All tests passed! FastMCP is working perfectly in Docker.${NC}"
exit 0
else
echo -e "${RED}⚠️ Some tests failed. Please check the output above.${NC}"
exit 1
fi