383 lines
10 KiB
Bash
Executable File
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
|