manual tests
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
# Manual tests
|
||||
The assets in this directory are not part of the automated tests.
|
||||
They are manual tests for debugging and demo purposes so that
|
||||
the tests can be paused and interacted with.
|
||||
Binary file not shown.
Executable
+306
@@ -0,0 +1,306 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Test script for ZIP batch upload functionality
|
||||
# This script exercises all batch endpoints with a running deployment
|
||||
# use: task compose:up (or compose:refresh if you have made service changes)
|
||||
# connect to the db like this
|
||||
# jdbc:postgresql://localhost:5432/query_orchestration
|
||||
#
|
||||
# then to look at the assets
|
||||
# List all buckets:
|
||||
# aws --endpoint-url=http://localhost:4566 s3 ls
|
||||
#
|
||||
# List contents of a specific bucket:
|
||||
# aws --endpoint-url=http://localhost:4566 s3 ls s3://documentin/
|
||||
#
|
||||
# List recursively to see all files in subdirectories:
|
||||
# aws --endpoint-url=http://localhost:4566 s3 ls s3://documentin/ --recursive
|
||||
#
|
||||
# REST API operations tested:
|
||||
# - GET /metrics - Check service health
|
||||
# - POST /client - Create new test client
|
||||
# - POST /client/{CLIENT_ID}/document/batch - Upload ZIP file with multiple PDFs
|
||||
# - GET /client/{CLIENT_ID}/document/batch/{BATCH_ID} - Get batch status and details
|
||||
# - GET /client/{CLIENT_ID}/document/batch - List all batches for client with pagination
|
||||
# - POST /client/{CLIENT_ID}/document/batch (invalid) - Test error handling with non-ZIP file
|
||||
# - DELETE /client/{CLIENT_ID}/document/batch/{BATCH_ID} - Cancel/delete batch processing
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
# Configuration
|
||||
BASE_URL="http://localhost:8080"
|
||||
CLIENT_ID="test_client_$(date +%s)"
|
||||
ZIP_FILE="test_batch.zip"
|
||||
TEST_PDF_COUNT=3
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging functions
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Check if service is running
|
||||
check_service() {
|
||||
log_info "Checking if queryAPI service is running..."
|
||||
if ! curl -s "$BASE_URL/metrics" > /dev/null 2>&1; then
|
||||
log_error "queryAPI service is not running at $BASE_URL"
|
||||
log_info "Please start the stack with: task compose:up"
|
||||
exit 1
|
||||
fi
|
||||
log_info "Service is running"
|
||||
}
|
||||
|
||||
# Create test ZIP file with PDFs
|
||||
create_test_zip() {
|
||||
log_info "Creating test ZIP file with $TEST_PDF_COUNT PDFs..."
|
||||
|
||||
# Remove existing file if it exists
|
||||
rm -f "$ZIP_FILE"
|
||||
|
||||
# Create temporary directory for PDF files
|
||||
temp_dir=$(mktemp -d)
|
||||
|
||||
# Create test PDF files
|
||||
for i in $(seq 1 $TEST_PDF_COUNT); do
|
||||
pdf_file="$temp_dir/test${i}.pdf"
|
||||
cat > "$pdf_file" << EOF
|
||||
%PDF-1.4
|
||||
%Test content for test${i}.pdf
|
||||
1 0 obj
|
||||
<<
|
||||
/Type /Catalog
|
||||
/Pages 2 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/Type /Pages
|
||||
/Kids [3 0 R]
|
||||
/Count 1
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/Type /Page
|
||||
/Parent 2 0 R
|
||||
/MediaBox [0 0 612 792]
|
||||
>>
|
||||
endobj
|
||||
xref
|
||||
0 4
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000053 00000 n
|
||||
0000000125 00000 n
|
||||
trailer
|
||||
<<
|
||||
/Size 4
|
||||
/Root 1 0 R
|
||||
>>
|
||||
startxref
|
||||
284
|
||||
%%EOF
|
||||
EOF
|
||||
done
|
||||
|
||||
# Create ZIP file using absolute path
|
||||
current_dir=$(pwd)
|
||||
cd "$temp_dir"
|
||||
zip -q "$current_dir/$ZIP_FILE" *.pdf
|
||||
cd "$current_dir"
|
||||
|
||||
# Cleanup temp directory
|
||||
rm -rf "$temp_dir"
|
||||
|
||||
file_size=$(stat -f%z "$ZIP_FILE" 2>/dev/null || stat -c%s "$ZIP_FILE" 2>/dev/null || echo "unknown")
|
||||
log_info "Created $ZIP_FILE with $TEST_PDF_COUNT PDFs ($file_size bytes)"
|
||||
}
|
||||
|
||||
# Create client (idempotent)
|
||||
create_client() {
|
||||
log_info "Creating/checking client: $CLIENT_ID"
|
||||
|
||||
# Try to create client, ignore if already exists
|
||||
response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/client" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"id\":\"$CLIENT_ID\",\"name\":\"Test Client $CLIENT_ID\"}" 2>/dev/null || echo "000")
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
|
||||
if [ "$http_code" = "201" ] || [ "$http_code" = "200" ]; then
|
||||
log_info "Client created/exists: $CLIENT_ID"
|
||||
elif [ "$http_code" = "409" ] || [ "$http_code" = "400" ]; then
|
||||
log_info "Client already exists or duplicate name: $CLIENT_ID"
|
||||
else
|
||||
log_warn "Unexpected response when creating client (HTTP $http_code), continuing anyway..."
|
||||
fi
|
||||
}
|
||||
|
||||
# Upload ZIP batch
|
||||
upload_batch() {
|
||||
log_info "Uploading ZIP batch..."
|
||||
|
||||
response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/client/$CLIENT_ID/document/batch" \
|
||||
-F "archive=@$ZIP_FILE" 2>/dev/null)
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
response_body=$(echo "$response" | head -n -1)
|
||||
|
||||
if [ "$http_code" = "202" ]; then
|
||||
BATCH_ID=$(echo "$response_body" | grep -o '"batch_id":"[^"]*"' | cut -d'"' -f4)
|
||||
STATUS_URL=$(echo "$response_body" | grep -o '"status_url":"[^"]*"' | cut -d'"' -f4)
|
||||
log_info "Batch uploaded successfully"
|
||||
log_info "Batch ID: $BATCH_ID"
|
||||
log_info "Status URL: $STATUS_URL"
|
||||
return 0
|
||||
else
|
||||
log_error "Failed to upload batch (HTTP $http_code)"
|
||||
echo "$response_body"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Get batch status
|
||||
get_batch_status() {
|
||||
log_info "Getting batch status..."
|
||||
|
||||
response=$(curl -s -w "\n%{http_code}" "$BASE_URL/client/$CLIENT_ID/document/batch/$BATCH_ID" 2>/dev/null)
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
response_body=$(echo "$response" | head -n -1)
|
||||
|
||||
if [ "$http_code" = "200" ]; then
|
||||
status=$(echo "$response_body" | grep -o '"status":"[^"]*"' | cut -d'"' -f4)
|
||||
filename=$(echo "$response_body" | grep -o '"originalFilename":"[^"]*"' | cut -d'"' -f4)
|
||||
log_info "Batch status: $status"
|
||||
log_info "Original filename: $filename"
|
||||
echo "$response_body" | python3 -m json.tool 2>/dev/null || echo "$response_body"
|
||||
return 0
|
||||
else
|
||||
log_error "Failed to get batch status (HTTP $http_code)"
|
||||
echo "$response_body"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# List batches for client
|
||||
list_batches() {
|
||||
log_info "Listing batches for client..."
|
||||
|
||||
response=$(curl -s -w "\n%{http_code}" "$BASE_URL/client/$CLIENT_ID/document/batch?limit=10&offset=0" 2>/dev/null)
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
response_body=$(echo "$response" | head -n -1)
|
||||
|
||||
if [ "$http_code" = "200" ]; then
|
||||
batch_count=$(echo "$response_body" | grep -o '"totalCount":[0-9]*' | cut -d':' -f2)
|
||||
log_info "Found $batch_count batches"
|
||||
echo "$response_body" | python3 -m json.tool 2>/dev/null || echo "$response_body"
|
||||
return 0
|
||||
else
|
||||
log_error "Failed to list batches (HTTP $http_code)"
|
||||
echo "$response_body"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Test invalid file upload
|
||||
test_invalid_file() {
|
||||
log_info "Testing invalid file upload (should fail)..."
|
||||
|
||||
# Create invalid file
|
||||
echo "This is not a ZIP file" > invalid.txt
|
||||
|
||||
response=$(curl -s -w "\n%{http_code}" -X POST "$BASE_URL/client/$CLIENT_ID/document/batch" \
|
||||
-F "archive=@invalid.txt" 2>/dev/null)
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
response_body=$(echo "$response" | head -n -1)
|
||||
|
||||
# Cleanup
|
||||
rm -f invalid.txt
|
||||
|
||||
if [ "$http_code" = "400" ]; then
|
||||
log_info "Invalid file correctly rejected (HTTP $http_code)"
|
||||
return 0
|
||||
else
|
||||
log_warn "Expected HTTP 400 for invalid file, got HTTP $http_code"
|
||||
echo "$response_body"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Cancel batch
|
||||
cancel_batch() {
|
||||
log_info "Canceling batch..."
|
||||
|
||||
response=$(curl -s -w "\n%{http_code}" -X DELETE "$BASE_URL/client/$CLIENT_ID/document/batch/$BATCH_ID" 2>/dev/null)
|
||||
|
||||
http_code=$(echo "$response" | tail -n1)
|
||||
|
||||
if [ "$http_code" = "204" ]; then
|
||||
log_info "Batch canceled successfully"
|
||||
return 0
|
||||
elif [ "$http_code" = "404" ]; then
|
||||
log_warn "Batch not found or already completed (HTTP $http_code)"
|
||||
return 0
|
||||
else
|
||||
log_error "Failed to cancel batch (HTTP $http_code)"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Cleanup function
|
||||
cleanup() {
|
||||
log_info "Cleaning up..."
|
||||
rm -f "$ZIP_FILE" invalid.txt
|
||||
log_info "Cleanup complete"
|
||||
}
|
||||
|
||||
# Main test flow
|
||||
main() {
|
||||
log_info "Starting ZIP batch upload test..."
|
||||
log_info "Using client ID: $CLIENT_ID"
|
||||
|
||||
# Setup trap for cleanup
|
||||
trap cleanup EXIT
|
||||
|
||||
# Run tests
|
||||
check_service
|
||||
create_test_zip
|
||||
create_client
|
||||
|
||||
if upload_batch; then
|
||||
sleep 1 # Brief pause to let the system process
|
||||
get_batch_status
|
||||
list_batches
|
||||
test_invalid_file
|
||||
cancel_batch
|
||||
|
||||
# Verify cancellation
|
||||
sleep 1
|
||||
log_info "Verifying batch was canceled..."
|
||||
get_batch_status
|
||||
|
||||
log_info "✅ All tests completed successfully!"
|
||||
else
|
||||
log_error "❌ Batch upload failed, skipping remaining tests"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main "$@"
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Configuration
|
||||
API_URL="http://localhost:8080"
|
||||
CLIENT_ID="AAA" # The client ID is AAA
|
||||
PDF_FILE="./test.pdf"
|
||||
|
||||
# Colors for output
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo "Document Upload Script"
|
||||
echo "====================="
|
||||
|
||||
# Check if test.pdf exists
|
||||
if [ ! -f "$PDF_FILE" ]; then
|
||||
echo -e "${RED}Error: $PDF_FILE not found${NC}"
|
||||
echo "Please create a test.pdf file first"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if API is running
|
||||
echo "Checking if API is running..."
|
||||
if ! curl -s -f "$API_URL/health" > /dev/null 2>&1; then
|
||||
echo -e "${RED}Error: API is not running at $API_URL${NC}"
|
||||
echo "Please start the API with: DISABLE_AUTH=true go run ./cmd/queryAPI"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}API is running${NC}"
|
||||
|
||||
# Verify client exists by trying to get its details
|
||||
echo "Verifying client with ID '$CLIENT_ID' exists..."
|
||||
CLIENT_CHECK=$(curl -s -o /dev/null -w "%{http_code}" "$API_URL/client/$CLIENT_ID")
|
||||
|
||||
if [ "$CLIENT_CHECK" != "200" ]; then
|
||||
echo -e "${RED}Error: Client with ID '$CLIENT_ID' not found${NC}"
|
||||
echo "Please ensure the client exists in the database"
|
||||
exit 1
|
||||
else
|
||||
echo -e "${GREEN}Client '$CLIENT_ID' verified${NC}"
|
||||
fi
|
||||
|
||||
# Upload document
|
||||
echo "Uploading document..."
|
||||
# Try different approaches based on what the server expects
|
||||
# Using explicit content type for the file field
|
||||
UPLOAD_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/client/$CLIENT_ID/document" \
|
||||
-F "file=@$PDF_FILE;type=application/octet-stream" \
|
||||
-F "filename=test.pdf")
|
||||
|
||||
HTTP_CODE=$(echo "$UPLOAD_RESPONSE" | tail -n1)
|
||||
RESPONSE_BODY=$(echo "$UPLOAD_RESPONSE" | sed '$d')
|
||||
|
||||
if [ "$HTTP_CODE" = "200" ]; then
|
||||
echo -e "${GREEN}Document uploaded successfully!${NC}"
|
||||
echo "Response: $RESPONSE_BODY"
|
||||
else
|
||||
echo -e "${RED}Error: Upload failed with HTTP $HTTP_CODE${NC}"
|
||||
echo "Response: $RESPONSE_BODY"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "You can check the uploaded documents with:"
|
||||
echo "curl $API_URL/client/$CLIENT_ID/document"
|
||||
Reference in New Issue
Block a user