- Introduced configuration files for Docker, Podman, and SystemD deployments. - Implemented a comprehensive test suite for HMAC validation, file uploads, and network resilience. - Added debugging scripts for live monitoring of upload issues and service status. - Created minimal configuration for testing purposes. - Developed multiple test scripts to validate HMAC calculations and response handling. - Enhanced upload tests to cover various scenarios including invalid HMAC and unsupported file extensions. - Improved logging and error analysis capabilities for better diagnostics.
101 lines
3.2 KiB
Bash
Executable File
101 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# Advanced test to diagnose XMPP upload issues
|
|
|
|
echo "=== HMAC File Server Upload Debugging ==="
|
|
echo ""
|
|
|
|
# First, let's simulate exactly what we see in the logs
|
|
# Using a real path from the failed uploads
|
|
BASE_PATH="c184288b79f8b7a6f7d87ac7f1fb1ce6dcf49a80"
|
|
SUB_PATH="testdebug"
|
|
FILENAME="test.mp4"
|
|
FULL_PATH="$BASE_PATH/$SUB_PATH/$FILENAME"
|
|
|
|
# Create test file
|
|
TEST_FILE="/tmp/test_debug.mp4"
|
|
echo "Creating test content..." > "$TEST_FILE"
|
|
FILE_SIZE=$(stat -c%s "$TEST_FILE")
|
|
|
|
echo "Test file: $TEST_FILE"
|
|
echo "File size: $FILE_SIZE bytes"
|
|
echo "Upload path: $FULL_PATH"
|
|
echo ""
|
|
|
|
# Let's calculate the HMAC like the server does
|
|
# For v protocol: fileStorePath + "\x20" + contentLength
|
|
SECRET="f6g4ldPvQM7O2UTFeBEUUj33VrXypDAcsDt0yqKrLiOr5oQW"
|
|
|
|
# Method 1: Calculate HMAC using the file size
|
|
HMAC_MESSAGE="$FULL_PATH $(printf '\x20')$FILE_SIZE"
|
|
HMAC_CALC=$(echo -n "$HMAC_MESSAGE" | openssl dgst -sha256 -hmac "$SECRET" | cut -d' ' -f2)
|
|
|
|
echo "HMAC calculation:"
|
|
echo "Message: '$FULL_PATH\\x20$FILE_SIZE'"
|
|
echo "HMAC: $HMAC_CALC"
|
|
echo ""
|
|
|
|
# Test 1: Upload with correct HMAC
|
|
echo "=== Test 1: Upload with calculated HMAC ==="
|
|
curl -X PUT \
|
|
-H "Content-Type: video/mp4" \
|
|
-H "User-Agent: TestDebugCorrect/1.0" \
|
|
--data-binary "@$TEST_FILE" \
|
|
"https://share.uuxo.net/$FULL_PATH?v=$HMAC_CALC" \
|
|
-v \
|
|
-w "\nResponse: %{http_code}, Time: %{time_total}s\n" \
|
|
2>&1 | grep -E "(Response|HTTP/|Content-Length|User-Agent)"
|
|
|
|
echo ""
|
|
|
|
# Test 2: Upload with Content-Length: 0 (simulating potential XMPP issue)
|
|
echo "=== Test 2: Upload with Content-Length: 0 ==="
|
|
curl -X PUT \
|
|
-H "Content-Type: video/mp4" \
|
|
-H "Content-Length: 0" \
|
|
-H "User-Agent: TestDebugZeroLength/1.0" \
|
|
--data-binary "@$TEST_FILE" \
|
|
"https://share.uuxo.net/$FULL_PATH?v=$HMAC_CALC" \
|
|
-v \
|
|
-w "\nResponse: %{http_code}, Time: %{time_total}s\n" \
|
|
2>&1 | grep -E "(Response|HTTP/|Content-Length|User-Agent)"
|
|
|
|
echo ""
|
|
|
|
# Test 3: Upload without Content-Length header
|
|
echo "=== Test 3: Upload using chunked transfer (no Content-Length) ==="
|
|
curl -X PUT \
|
|
-H "Content-Type: video/mp4" \
|
|
-H "Transfer-Encoding: chunked" \
|
|
-H "User-Agent: TestDebugChunked/1.0" \
|
|
--data-binary "@$TEST_FILE" \
|
|
"https://share.uuxo.net/$FULL_PATH?v=$HMAC_CALC" \
|
|
-v \
|
|
-w "\nResponse: %{http_code}, Time: %{time_total}s\n" \
|
|
2>&1 | grep -E "(Response|HTTP/|Transfer-Encoding|User-Agent)"
|
|
|
|
echo ""
|
|
|
|
# Test 4: Calculate HMAC with ContentLength 0 (what might be happening)
|
|
HMAC_MESSAGE_ZERO="$FULL_PATH $(printf '\x20')0"
|
|
HMAC_CALC_ZERO=$(echo -n "$HMAC_MESSAGE_ZERO" | openssl dgst -sha256 -hmac "$SECRET" | cut -d' ' -f2)
|
|
|
|
echo "=== Test 4: Upload with HMAC calculated for ContentLength=0 ==="
|
|
echo "HMAC for zero length: $HMAC_CALC_ZERO"
|
|
|
|
curl -X PUT \
|
|
-H "Content-Type: video/mp4" \
|
|
-H "User-Agent: TestDebugZeroHMAC/1.0" \
|
|
--data-binary "@$TEST_FILE" \
|
|
"https://share.uuxo.net/$FULL_PATH?v=$HMAC_CALC_ZERO" \
|
|
-v \
|
|
-w "\nResponse: %{http_code}, Time: %{time_total}s\n" \
|
|
2>&1 | grep -E "(Response|HTTP/|Content-Length|User-Agent)"
|
|
|
|
echo ""
|
|
echo "=== Recent server logs ==="
|
|
sleep 2
|
|
tail -15 /opt/hmac-file-server/data/logs/hmac-file-server.log | grep -v "Interface\|RTT\|Loss" | tail -10
|
|
|
|
# Cleanup
|
|
rm -f "$TEST_FILE"
|