268 lines
8.5 KiB
Bash
Executable File
268 lines
8.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Comprehensive XMPP Upload Test Script
|
|
# Tests multiple upload scenarios with real-time debugging
|
|
|
|
echo "=== COMPREHENSIVE UPLOAD TEST SCRIPT ==="
|
|
echo "This script will test multiple upload scenarios while monitoring logs"
|
|
echo "Date: $(date)"
|
|
echo ""
|
|
|
|
# Configuration
|
|
SERVER_URL="https://share.uuxo.net"
|
|
LOCAL_URL="http://localhost:8080"
|
|
SECRET="f6g4ldPvQM7O2UTFeBEUUj33VrXypDAcsDt0yqKrLiOr5oQW"
|
|
TEST_DIR="/tmp/upload_tests"
|
|
|
|
# Create test directory
|
|
mkdir -p "$TEST_DIR"
|
|
cd "$TEST_DIR"
|
|
|
|
# Function to generate HMAC signature for v3 protocol
|
|
generate_v3_signature() {
|
|
local method="$1"
|
|
local expires="$2"
|
|
local path="$3"
|
|
local message="${method}\n${expires}\n${path}"
|
|
echo -n "$message" | openssl dgst -sha256 -hmac "$SECRET" -hex | cut -d' ' -f2
|
|
}
|
|
|
|
# Function to start log monitoring
|
|
start_monitoring() {
|
|
echo "Starting log monitoring in background..."
|
|
|
|
# Kill any existing monitoring
|
|
pkill -f "tail.*hmac-file-server" 2>/dev/null
|
|
pkill -f "tail.*nginx.*share" 2>/dev/null
|
|
|
|
# Start nginx monitoring
|
|
echo "=== NGINX ACCESS LOG ===" > /tmp/nginx_monitor.log
|
|
sudo tail -f /var/log/nginx/share_access.log >> /tmp/nginx_monitor.log 2>&1 &
|
|
NGINX_PID=$!
|
|
|
|
# Start server monitoring
|
|
echo "=== HMAC SERVER LOG ===" > /tmp/server_monitor.log
|
|
sudo tail -f /var/log/hmac-file-server/hmac-file-server.log >> /tmp/server_monitor.log 2>&1 &
|
|
SERVER_PID=$!
|
|
|
|
sleep 1
|
|
echo "Monitoring started (nginx PID: $NGINX_PID, server PID: $SERVER_PID)"
|
|
}
|
|
|
|
# Function to stop monitoring and show results
|
|
stop_monitoring() {
|
|
echo "Stopping monitors..."
|
|
kill $NGINX_PID $SERVER_PID 2>/dev/null
|
|
sleep 1
|
|
|
|
echo ""
|
|
echo "=== NGINX LOG RESULTS ==="
|
|
tail -10 /tmp/nginx_monitor.log 2>/dev/null || echo "No nginx activity detected"
|
|
|
|
echo ""
|
|
echo "=== SERVER LOG RESULTS ==="
|
|
tail -10 /tmp/server_monitor.log 2>/dev/null || echo "No server activity detected"
|
|
echo ""
|
|
}
|
|
|
|
# Function to create test files
|
|
create_test_files() {
|
|
echo "Creating test files..."
|
|
|
|
# Small file (1KB)
|
|
echo "This is a small test file for upload testing" > small_test.txt
|
|
echo "Content: Basic text file" >> small_test.txt
|
|
|
|
# Medium file (1MB)
|
|
dd if=/dev/zero of=medium_test.bin bs=1024 count=1024 2>/dev/null
|
|
|
|
# Large file (5MB)
|
|
dd if=/dev/zero of=large_test.bin bs=1024 count=5120 2>/dev/null
|
|
|
|
# Video file simulation (1MB with .mp4 extension)
|
|
cp medium_test.bin test_video.mp4
|
|
|
|
echo "Test files created:"
|
|
ls -lh *.txt *.bin *.mp4 2>/dev/null
|
|
echo ""
|
|
}
|
|
|
|
# Function to test different upload protocols
|
|
test_upload_protocol() {
|
|
local protocol="$1"
|
|
local filename="$2"
|
|
local description="$3"
|
|
|
|
echo "--- Testing $protocol Protocol: $description ---"
|
|
|
|
# Generate test parameters
|
|
local expires=$(date -d "+1 hour" +%s)
|
|
local path="/test_${protocol}/${filename}"
|
|
local url=""
|
|
local signature=""
|
|
|
|
case "$protocol" in
|
|
"v3")
|
|
signature=$(generate_v3_signature "PUT" "$expires" "$path")
|
|
url="${SERVER_URL}${path}?v3=${signature}&expires=${expires}"
|
|
;;
|
|
"v2")
|
|
signature=$(echo -n "PUT${path}" | openssl dgst -sha256 -hmac "$SECRET" -hex | cut -d' ' -f2)
|
|
url="${SERVER_URL}${path}?v2=${signature}"
|
|
;;
|
|
"v1")
|
|
signature=$(echo -n "PUT${path}" | openssl dgst -sha256 -hmac "$SECRET" -hex | cut -d' ' -f2)
|
|
url="${SERVER_URL}${path}?v=${signature}"
|
|
;;
|
|
"token")
|
|
signature=$(echo -n "PUT${path}" | openssl dgst -sha256 -hmac "$SECRET" -hex | cut -d' ' -f2)
|
|
url="${SERVER_URL}${path}?token=${signature}"
|
|
;;
|
|
esac
|
|
|
|
echo "URL: $url"
|
|
echo "File: $filename ($(stat -f%z "$filename" 2>/dev/null || stat -c%s "$filename")bytes)"
|
|
|
|
# Start monitoring for this test
|
|
echo "Starting upload test..."
|
|
|
|
# Perform upload
|
|
local start_time=$(date +%s.%N)
|
|
local response=$(curl -s -w "HTTPSTATUS:%{http_code};TIME:%{time_total}" \
|
|
-X PUT \
|
|
--data-binary "@$filename" \
|
|
-H "User-Agent: XMPP-Upload-Test/1.0" \
|
|
-H "Content-Type: application/octet-stream" \
|
|
"$url" 2>&1)
|
|
local end_time=$(date +%s.%N)
|
|
|
|
# Parse response
|
|
local http_code=$(echo "$response" | grep -o "HTTPSTATUS:[0-9]*" | cut -d: -f2)
|
|
local time_total=$(echo "$response" | grep -o "TIME:[0-9.]*" | cut -d: -f2)
|
|
local body=$(echo "$response" | sed 's/HTTPSTATUS:[0-9]*;TIME:[0-9.]*$//')
|
|
|
|
# Calculate duration
|
|
local duration=$(echo "$end_time - $start_time" | bc 2>/dev/null || echo "N/A")
|
|
|
|
echo "Result: HTTP $http_code (${time_total}s)"
|
|
if [[ "$http_code" =~ ^[45] ]]; then
|
|
echo "Error body: $body"
|
|
elif [[ "$http_code" == "200" ]]; then
|
|
echo "✅ SUCCESS: Upload completed"
|
|
echo "Response: $body"
|
|
else
|
|
echo "Response: $body"
|
|
fi
|
|
|
|
echo "Duration: ${duration}s"
|
|
echo ""
|
|
|
|
# Brief pause to separate log entries
|
|
sleep 2
|
|
}
|
|
|
|
# Function to test deduplication
|
|
test_deduplication() {
|
|
echo "--- Testing Deduplication ---"
|
|
echo "Uploading the same file twice to test deduplication logic"
|
|
|
|
# First upload
|
|
echo "1. First upload (should create new file):"
|
|
test_upload_protocol "v3" "small_test.txt" "Dedup Test #1"
|
|
|
|
# Second upload (should deduplicate)
|
|
echo "2. Second upload (should deduplicate):"
|
|
test_upload_protocol "v3" "small_test.txt" "Dedup Test #2"
|
|
}
|
|
|
|
# Function to test storage scenarios
|
|
test_storage_scenarios() {
|
|
echo "--- Testing Different Storage Scenarios ---"
|
|
|
|
# Test small file
|
|
test_upload_protocol "v3" "small_test.txt" "Small File (1KB)"
|
|
|
|
# Test medium file
|
|
test_upload_protocol "v3" "medium_test.bin" "Medium File (1MB)"
|
|
|
|
# Test video file
|
|
test_upload_protocol "v3" "test_video.mp4" "Video File (.mp4)"
|
|
|
|
# Test large file
|
|
test_upload_protocol "v3" "large_test.bin" "Large File (5MB)"
|
|
}
|
|
|
|
# Function to test all protocols
|
|
test_all_protocols() {
|
|
echo "--- Testing All XEP-0363 Protocol Variants ---"
|
|
|
|
test_upload_protocol "v3" "small_test.txt" "XEP-0363 v3 (mod_http_upload_external)"
|
|
test_upload_protocol "v2" "small_test.txt" "XEP-0363 v2 (extended)"
|
|
test_upload_protocol "v1" "small_test.txt" "XEP-0363 v1 (basic)"
|
|
test_upload_protocol "token" "small_test.txt" "XEP-0363 token (alternative)"
|
|
}
|
|
|
|
# Function to show current configuration
|
|
show_configuration() {
|
|
echo "=== Current Server Configuration ==="
|
|
echo "Deduplication: $(sudo grep deduplication_enabled /etc/hmac-file-server/config.toml | cut -d'=' -f2 | tr -d ' ')"
|
|
echo "Max Upload: $(sudo grep max_upload_size /etc/hmac-file-server/config.toml | cut -d'"' -f2)"
|
|
echo "ClamAV: $(sudo grep clamavenabled /etc/hmac-file-server/config.toml | cut -d'=' -f2 | tr -d ' ')"
|
|
echo "Global Extensions: $(sudo grep global_extensions /etc/hmac-file-server/config.toml | cut -d'[' -f2 | cut -d']' -f1)"
|
|
echo "Log Level: $(sudo grep 'level =' /etc/hmac-file-server/config.toml | cut -d'"' -f2)"
|
|
echo "Server Status: $(systemctl is-active hmac-file-server)"
|
|
echo ""
|
|
}
|
|
|
|
# Function to cleanup
|
|
cleanup() {
|
|
echo "Cleaning up..."
|
|
stop_monitoring
|
|
rm -rf "$TEST_DIR" 2>/dev/null
|
|
echo "Cleanup complete"
|
|
}
|
|
|
|
# Trap for cleanup on exit
|
|
trap cleanup EXIT
|
|
|
|
# Main execution
|
|
main() {
|
|
show_configuration
|
|
create_test_files
|
|
start_monitoring
|
|
|
|
echo "=== STARTING COMPREHENSIVE UPLOAD TESTS ==="
|
|
echo "Monitor logs in real-time:"
|
|
echo " nginx: tail -f /tmp/nginx_monitor.log"
|
|
echo " server: tail -f /tmp/server_monitor.log"
|
|
echo ""
|
|
|
|
# Test 1: Protocol variants
|
|
echo "🔄 TEST 1: All Protocol Variants"
|
|
test_all_protocols
|
|
|
|
# Test 2: Storage scenarios
|
|
echo "🔄 TEST 2: Storage Scenarios"
|
|
test_storage_scenarios
|
|
|
|
# Test 3: Deduplication
|
|
echo "🔄 TEST 3: Deduplication"
|
|
test_deduplication
|
|
|
|
echo "=== TEST SUMMARY ==="
|
|
echo "All tests completed. Check the results above."
|
|
echo "If you see HTTP 401 errors, that's expected (HMAC signature validation)."
|
|
echo "If you see HTTP 200 responses, uploads are working!"
|
|
echo "If you see no nginx log entries, requests aren't reaching the server."
|
|
echo ""
|
|
|
|
stop_monitoring
|
|
|
|
echo "Log files saved to:"
|
|
echo " nginx: /tmp/nginx_monitor.log"
|
|
echo " server: /tmp/server_monitor.log"
|
|
}
|
|
|
|
# Run main function
|
|
main "$@"
|