ira/sim-search-api/test_api_curl.sh

383 lines
10 KiB
Bash
Executable File

#!/bin/bash
# Test script for the sim-search API using curl commands
# Configuration
API_URL="http://localhost:8000"
API_V1="${API_URL}/api/v1"
TOKEN=""
EMAIL="test@example.com"
PASSWORD="password123"
FULL_NAME="Test User"
# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
# Function to print section header
print_header() {
echo -e "\n${YELLOW}=== $1 ===${NC}"
}
# Function to print success message
print_success() {
echo -e "${GREEN}$1${NC}"
}
# Function to print error message
print_error() {
echo -e "${RED}$1${NC}"
}
# Function to check if the API is running
check_api() {
print_header "Checking if API is running"
response=$(curl -s -o /dev/null -w "%{http_code}" ${API_URL})
if [ "$response" == "200" ]; then
print_success "API is running"
else
print_error "API is not running. Please start the API server first."
exit 1
fi
}
# Function to register a user
register_user() {
print_header "Registering a user"
response=$(curl -s -X POST \
-H "Content-Type: application/json" \
-d "{\"email\":\"${EMAIL}\",\"password\":\"${PASSWORD}\",\"full_name\":\"${FULL_NAME}\",\"is_active\":true,\"is_superuser\":false}" \
${API_V1}/auth/register)
if echo "$response" | grep -q "email"; then
print_success "User registered successfully"
else
# If user already exists, that's fine
if echo "$response" | grep -q "already exists"; then
print_success "User already exists, continuing with login"
else
print_error "Failed to register user: $response"
fi
fi
}
# Function to get an authentication token
get_token() {
print_header "Getting authentication token"
response=$(curl -s -X POST \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=${EMAIL}&password=${PASSWORD}" \
${API_V1}/auth/token)
if echo "$response" | grep -q "access_token"; then
TOKEN=$(echo "$response" | grep -o '"access_token":"[^"]*' | sed 's/"access_token":"//')
print_success "Got authentication token"
else
print_error "Failed to get authentication token: $response"
exit 1
fi
}
# Function to process a query
process_query() {
print_header "Processing a query"
response=$(curl -s -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d "{\"query\":\"What are the environmental impacts of electric vehicles?\"}" \
${API_V1}/query/process)
if echo "$response" | grep -q "structured_query"; then
print_success "Query processed successfully"
else
print_error "Failed to process query: $response"
fi
}
# Function to classify a query
classify_query() {
print_header "Classifying a query"
response=$(curl -s -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d "{\"query\":\"What are the environmental impacts of electric vehicles?\"}" \
${API_V1}/query/classify)
if echo "$response" | grep -q "structured_query"; then
print_success "Query classified successfully"
else
print_error "Failed to classify query: $response"
fi
}
# Function to get available search engines
get_search_engines() {
print_header "Getting available search engines"
response=$(curl -s -X GET \
-H "Authorization: Bearer ${TOKEN}" \
${API_V1}/search/engines)
if echo "$response" | grep -q "\["; then
print_success "Got search engines successfully"
else
print_error "Failed to get search engines: $response"
fi
}
# Function to execute a search
execute_search() {
print_header "Executing a search"
response=$(curl -s -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d "{\"structured_query\":{\"original_query\":\"What are the environmental impacts of electric vehicles?\",\"enhanced_query\":\"What are the environmental impacts of electric vehicles?\",\"type\":\"factual\",\"domain\":\"environmental\"},\"search_engines\":[\"google\",\"arxiv\"],\"num_results\":5,\"timeout\":30}" \
${API_V1}/search/execute)
if echo "$response" | grep -q "search_id"; then
SEARCH_ID=$(echo "$response" | grep -o '"search_id":"[^"]*' | sed 's/"search_id":"//')
print_success "Search executed successfully with ID: $SEARCH_ID"
else
print_error "Failed to execute search: $response"
fi
}
# Function to get search history
get_search_history() {
print_header "Getting search history"
response=$(curl -s -X GET \
-H "Authorization: Bearer ${TOKEN}" \
${API_V1}/search/history)
if echo "$response" | grep -q "searches"; then
print_success "Got search history successfully"
else
print_error "Failed to get search history: $response"
fi
}
# Function to get search results
get_search_results() {
print_header "Getting search results"
if [ -z "$SEARCH_ID" ]; then
print_error "No search ID available. Please execute a search first."
return
fi
response=$(curl -s -X GET \
-H "Authorization: Bearer ${TOKEN}" \
${API_V1}/search/${SEARCH_ID})
if echo "$response" | grep -q "search_id"; then
print_success "Got search results successfully"
else
print_error "Failed to get search results: $response"
fi
}
# Function to generate a report
generate_report() {
print_header "Generating a report"
if [ -z "$SEARCH_ID" ]; then
print_error "No search ID available. Please execute a search first."
return
fi
response=$(curl -s -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d "{\"search_id\":\"${SEARCH_ID}\",\"query\":\"What are the environmental impacts of electric vehicles?\",\"detail_level\":\"standard\",\"query_type\":\"factual\",\"model\":\"llama-3.1-8b-instant\"}" \
${API_V1}/report/generate)
if echo "$response" | grep -q "id"; then
REPORT_ID=$(echo "$response" | grep -o '"id":"[^"]*' | sed 's/"id":"//')
print_success "Report generated successfully with ID: $REPORT_ID"
else
print_error "Failed to generate report: $response"
fi
}
# Function to get report progress
get_report_progress() {
print_header "Getting report progress"
if [ -z "$REPORT_ID" ]; then
print_error "No report ID available. Please generate a report first."
return
fi
response=$(curl -s -X GET \
-H "Authorization: Bearer ${TOKEN}" \
${API_V1}/report/${REPORT_ID}/progress)
if echo "$response" | grep -q "progress"; then
print_success "Got report progress successfully"
else
print_error "Failed to get report progress: $response"
fi
}
# Function to get report list
get_report_list() {
print_header "Getting report list"
response=$(curl -s -X GET \
-H "Authorization: Bearer ${TOKEN}" \
${API_V1}/report/list)
if echo "$response" | grep -q "reports"; then
print_success "Got report list successfully"
else
print_error "Failed to get report list: $response"
fi
}
# Function to get a specific report
get_report() {
print_header "Getting a specific report"
if [ -z "$REPORT_ID" ]; then
print_error "No report ID available. Please generate a report first."
return
fi
response=$(curl -s -X GET \
-H "Authorization: Bearer ${TOKEN}" \
${API_V1}/report/${REPORT_ID})
if echo "$response" | grep -q "id"; then
print_success "Got report successfully"
else
print_error "Failed to get report: $response"
fi
}
# Function to download a report
download_report() {
print_header "Downloading a report"
if [ -z "$REPORT_ID" ]; then
print_error "No report ID available. Please generate a report first."
return
fi
response=$(curl -s -X GET \
-H "Authorization: Bearer ${TOKEN}" \
${API_V1}/report/${REPORT_ID}/download?format=markdown)
if [ -n "$response" ]; then
print_success "Downloaded report successfully"
else
print_error "Failed to download report"
fi
}
# Function to delete a report
delete_report() {
print_header "Deleting a report"
if [ -z "$REPORT_ID" ]; then
print_error "No report ID available. Please generate a report first."
return
fi
response=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE \
-H "Authorization: Bearer ${TOKEN}" \
${API_V1}/report/${REPORT_ID})
if [ "$response" == "204" ]; then
print_success "Report deleted successfully"
else
print_error "Failed to delete report: $response"
fi
}
# Function to delete a search
delete_search() {
print_header "Deleting a search"
if [ -z "$SEARCH_ID" ]; then
print_error "No search ID available. Please execute a search first."
return
fi
response=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE \
-H "Authorization: Bearer ${TOKEN}" \
${API_V1}/search/${SEARCH_ID})
if [ "$response" == "204" ]; then
print_success "Search deleted successfully"
else
print_error "Failed to delete search: $response"
fi
}
# Main function
main() {
echo "Starting API tests..."
# Check if the API is running
check_api
# Register a user
register_user
# Get an authentication token
get_token
# Process a query
process_query
# Classify a query
classify_query
# Get available search engines
get_search_engines
# Execute a search
execute_search
# Get search history
get_search_history
# Get search results
get_search_results
# Generate a report
generate_report
# Get report progress
get_report_progress
# Get report list
get_report_list
# Get a specific report
get_report
# Download a report
download_report
# Delete a report
delete_report
# Delete a search
delete_search
echo -e "\n${GREEN}All tests completed!${NC}"
}
# Run the main function
main