You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
proxysql/scripts/mcp/test_rag.sh

215 lines
4.8 KiB

#!/bin/bash
#
# test_rag.sh - Test RAG functionality via MCP endpoint
#
# Usage:
# ./test_rag.sh [options]
#
# Options:
# -v, --verbose Show verbose output
# -q, --quiet Suppress progress messages
# -h, --help Show help
#
set -e
# Configuration
MCP_HOST="${MCP_HOST:-127.0.0.1}"
MCP_PORT="${MCP_PORT:-6071}"
# Test options
VERBOSE=false
QUIET=false
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Statistics
TOTAL_TESTS=0
PASSED_TESTS=0
FAILED_TESTS=0
# Helper functions
log() {
if [ "$QUIET" = false ]; then
echo "$@"
fi
}
log_verbose() {
if [ "$VERBOSE" = true ]; then
echo "$@"
fi
}
log_success() {
if [ "$QUIET" = false ]; then
echo -e "${GREEN}${NC} $@"
fi
}
log_failure() {
if [ "$QUIET" = false ]; then
echo -e "${RED}${NC} $@"
fi
}
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-v|--verbose)
VERBOSE=true
shift
;;
-q|--quiet)
QUIET=true
shift
;;
-h|--help)
echo "Usage: $0 [options]"
echo ""
echo "Options:"
echo " -v, --verbose Show verbose output"
echo " -q, --quiet Suppress progress messages"
echo " -h, --help Show help"
exit 0
;;
*)
echo "Unknown option: $1"
exit 1
;;
esac
done
# Test MCP endpoint connectivity
test_mcp_connectivity() {
TOTAL_TESTS=$((TOTAL_TESTS + 1))
log "Testing MCP connectivity to ${MCP_HOST}:${MCP_PORT}..."
# Test basic connectivity
if curl -s -k -f "https://${MCP_HOST}:${MCP_PORT}/mcp/rag" >/dev/null 2>&1; then
log_success "MCP RAG endpoint is accessible"
PASSED_TESTS=$((PASSED_TESTS + 1))
return 0
else
log_failure "MCP RAG endpoint is not accessible"
FAILED_TESTS=$((FAILED_TESTS + 1))
return 1
fi
}
# Test tool discovery
test_tool_discovery() {
TOTAL_TESTS=$((TOTAL_TESTS + 1))
log "Testing RAG tool discovery..."
# Send tools/list request
local response
response=$(curl -s -k -X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":"1"}' \
"https://${MCP_HOST}:${MCP_PORT}/mcp/rag")
log_verbose "Response: $response"
# Check if response contains tools
if echo "$response" | grep -q '"tools"'; then
log_success "RAG tool discovery successful"
PASSED_TESTS=$((PASSED_TESTS + 1))
return 0
else
log_failure "RAG tool discovery failed"
FAILED_TESTS=$((FAILED_TESTS + 1))
return 1
fi
}
# Test specific RAG tools
test_rag_tools() {
TOTAL_TESTS=$((TOTAL_TESTS + 1))
log "Testing RAG tool descriptions..."
# Test rag.admin.stats tool description
local response
response=$(curl -s -k -X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/describe","params":{"name":"rag.admin.stats"},"id":"1"}' \
"https://${MCP_HOST}:${MCP_PORT}/mcp/rag")
log_verbose "Response: $response"
if echo "$response" | grep -q '"name":"rag.admin.stats"'; then
log_success "RAG tool descriptions working"
PASSED_TESTS=$((PASSED_TESTS + 1))
return 0
else
log_failure "RAG tool descriptions failed"
FAILED_TESTS=$((FAILED_TESTS + 1))
return 1
fi
}
# Test RAG admin stats
test_rag_admin_stats() {
TOTAL_TESTS=$((TOTAL_TESTS + 1))
log "Testing RAG admin stats..."
# Test rag.admin.stats tool call
local response
response=$(curl -s -k -X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"rag.admin.stats"},"id":"1"}' \
"https://${MCP_HOST}:${MCP_PORT}/mcp/rag")
log_verbose "Response: $response"
if echo "$response" | grep -q '"sources"'; then
log_success "RAG admin stats working"
PASSED_TESTS=$((PASSED_TESTS + 1))
return 0
else
log_failure "RAG admin stats failed"
FAILED_TESTS=$((FAILED_TESTS + 1))
return 1
fi
}
# Main test execution
main() {
log "Starting RAG functionality tests..."
log "MCP Host: ${MCP_HOST}:${MCP_PORT}"
log ""
# Run tests
test_mcp_connectivity
test_tool_discovery
test_rag_tools
test_rag_admin_stats
# Summary
log ""
log "Test Summary:"
log " Total tests: ${TOTAL_TESTS}"
log " Passed: ${PASSED_TESTS}"
log " Failed: ${FAILED_TESTS}"
if [ $FAILED_TESTS -eq 0 ]; then
log_success "All tests passed!"
exit 0
else
log_failure "Some tests failed!"
exit 1
fi
}
# Run main function
main "$@"