132 lines
3.7 KiB
Bash
Executable File
132 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Test script for multi-tenant S3 storage
|
|
# This script tests the storage API with S3 backend and app key folder structure
|
|
|
|
# Get the directory where this script is located
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
|
|
|
|
# Load .env file if AWS variables not already set
|
|
if [ -z "$AWS_S3_BUCKET" ] && [ -f "$PROJECT_ROOT/.env" ]; then
|
|
echo "Loading environment from .env file..."
|
|
set -a # automatically export all variables
|
|
source "$PROJECT_ROOT/.env"
|
|
set +a # turn off automatic export
|
|
fi
|
|
|
|
# Source test configuration
|
|
source "$SCRIPT_DIR/../test-config.sh"
|
|
|
|
API_KEY="${ACCESS_API_KEY:-}"
|
|
# Use TEST_API_BASE if set, otherwise default to localhost
|
|
if [ -n "$TEST_API_BASE" ]; then
|
|
# TEST_API_BASE already includes /api
|
|
BASE_URL="$TEST_API_BASE"
|
|
else
|
|
BASE_URL="http://localhost:7130/api"
|
|
fi
|
|
|
|
echo "=== Testing Multi-tenant S3 Storage ==="
|
|
echo "Note: Ensure AWS_S3_BUCKET and APP_KEY are set in your .env file"
|
|
echo "Base URL: $BASE_URL"
|
|
echo "API Key: ${API_KEY:0:10}..." # Show first 10 chars only
|
|
echo "AWS Bucket: ${AWS_S3_BUCKET:-not set}"
|
|
echo "App Key: ${APP_KEY:-not set}"
|
|
echo ""
|
|
|
|
# Create a test bucket
|
|
echo "1. Creating test bucket..."
|
|
curl -X POST "$BASE_URL/storage/buckets" \
|
|
-H "Content-Type: application/json" \
|
|
-H "x-api-key: $API_KEY" \
|
|
-d '{"bucketName": "test-bucket", "isPublic": true}' | jq .
|
|
|
|
echo ""
|
|
|
|
# List buckets
|
|
echo "2. Listing buckets..."
|
|
curl "$BASE_URL/storage/buckets" \
|
|
-H "x-api-key: $API_KEY" | jq .
|
|
|
|
echo ""
|
|
|
|
# Upload a file with specific key
|
|
echo "3. Uploading file with specific key..."
|
|
echo "Test content for S3" > test-file.txt
|
|
curl -X PUT "$BASE_URL/storage/test-bucket/test-file.txt" \
|
|
-H "x-api-key: $API_KEY" \
|
|
-F "file=@test-file.txt" | jq .
|
|
|
|
echo ""
|
|
|
|
# Upload a file with auto-generated key
|
|
echo "4. Uploading file with auto-generated key..."
|
|
curl -X POST "$BASE_URL/storage/test-bucket" \
|
|
-H "x-api-key: $API_KEY" \
|
|
-F "file=@test-file.txt" | jq .
|
|
|
|
echo ""
|
|
|
|
# List objects in bucket
|
|
echo "5. Listing objects in bucket..."
|
|
curl "$BASE_URL/storage/test-bucket" \
|
|
-H "x-api-key: $API_KEY" | jq .
|
|
|
|
echo ""
|
|
|
|
# Download a file (public bucket, no auth needed)
|
|
echo "6. Downloading file from public bucket..."
|
|
curl "$BASE_URL/storage/test-bucket/test-file.txt" \
|
|
-o downloaded-file.txt
|
|
echo "Downloaded content:"
|
|
cat downloaded-file.txt
|
|
echo ""
|
|
|
|
# Update bucket visibility to private
|
|
echo "7. Making bucket private..."
|
|
curl -X PATCH "$BASE_URL/storage/buckets/test-bucket" \
|
|
-H "Content-Type: application/json" \
|
|
-H "x-api-key: $API_KEY" \
|
|
-d '{"isPublic": false}' | jq .
|
|
|
|
echo ""
|
|
|
|
# Try downloading from private bucket without auth (should fail)
|
|
echo "8. Trying to download from private bucket without auth (should fail)..."
|
|
curl -v "$BASE_URL/api/storage/test-bucket/test-file.txt" 2>&1 | grep "< HTTP"
|
|
|
|
echo ""
|
|
|
|
# Download from private bucket with auth
|
|
echo "9. Downloading from private bucket with auth..."
|
|
curl "$BASE_URL/storage/test-bucket/test-file.txt" \
|
|
-H "x-api-key: $API_KEY" \
|
|
-o downloaded-private.txt
|
|
echo "Downloaded content:"
|
|
cat downloaded-private.txt
|
|
echo ""
|
|
|
|
# Delete a file
|
|
echo "10. Deleting a file..."
|
|
curl -X DELETE "$BASE_URL/storage/test-bucket/test-file.txt" \
|
|
-H "x-api-key: $API_KEY" | jq .
|
|
|
|
echo ""
|
|
|
|
# Delete the bucket
|
|
echo "11. Deleting the bucket..."
|
|
curl -X DELETE "$BASE_URL/storage/test-bucket" \
|
|
-H "x-api-key: $API_KEY" | jq .
|
|
|
|
echo ""
|
|
|
|
# Clean up
|
|
rm -f test-file.txt downloaded-file.txt downloaded-private.txt
|
|
|
|
echo "=== S3 Multi-tenant Storage Test Complete ==="
|
|
echo ""
|
|
echo "When AWS_S3_BUCKET is set, files are stored in S3 with structure:"
|
|
echo " s3://\${AWS_S3_BUCKET}/\${APP_KEY}/\${bucket}/\${key}"
|
|
echo ""
|
|
echo "Example: s3://my-bucket/app12345/test-bucket/test-file.txt" |