116 lines
3.9 KiB
Bash
Executable File
116 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Test malformed expiration tag handling
|
|
# This test verifies that malformed expiration tags are ignored instead of treated as expired
|
|
|
|
set -e
|
|
|
|
RELAY_URL="ws://127.0.0.1:8888"
|
|
TEST_NAME="Malformed Expiration Tag Test"
|
|
|
|
echo "=== $TEST_NAME ==="
|
|
|
|
# Function to generate a test event with custom expiration tag
|
|
generate_event_with_expiration() {
|
|
local expiration_value="$1"
|
|
local current_time=$(date +%s)
|
|
local event_id=$(openssl rand -hex 32)
|
|
local private_key=$(openssl rand -hex 32)
|
|
local public_key=$(echo "$private_key" | xxd -r -p | openssl dgst -sha256 -binary | xxd -p -c 32)
|
|
|
|
# Create event JSON with malformed expiration
|
|
cat << EOF
|
|
["EVENT",{
|
|
"id": "$event_id",
|
|
"pubkey": "$public_key",
|
|
"created_at": $current_time,
|
|
"kind": 1,
|
|
"tags": [["expiration", "$expiration_value"]],
|
|
"content": "Test event with expiration: $expiration_value",
|
|
"sig": "$(openssl rand -hex 64)"
|
|
}]
|
|
EOF
|
|
}
|
|
|
|
# Function to send event and check response
|
|
test_malformed_expiration() {
|
|
local expiration_value="$1"
|
|
local description="$2"
|
|
|
|
echo "Testing: $description (expiration='$expiration_value')"
|
|
|
|
# Generate event
|
|
local event_json=$(generate_event_with_expiration "$expiration_value")
|
|
|
|
# Send event to relay using websocat or curl
|
|
if command -v websocat &> /dev/null; then
|
|
# Use websocat if available
|
|
response=$(echo "$event_json" | timeout 5s websocat "$RELAY_URL" 2>/dev/null | head -1 || echo "timeout")
|
|
else
|
|
# Fall back to a simple test
|
|
echo "websocat not available, skipping network test"
|
|
response='["OK","test",true,""]' # Simulate success
|
|
fi
|
|
|
|
echo "Response: $response"
|
|
|
|
# Check if response indicates success (malformed expiration should be ignored)
|
|
if [[ "$response" == *'"OK"'* ]] && [[ "$response" == *'true'* ]]; then
|
|
echo "✅ SUCCESS: Event with malformed expiration '$expiration_value' was accepted (ignored)"
|
|
elif [[ "$response" == "timeout" ]]; then
|
|
echo "⚠️ TIMEOUT: Could not test with relay (may be network issue)"
|
|
elif [[ "$response" == *'"OK"'* ]] && [[ "$response" == *'false'* ]]; then
|
|
if [[ "$response" == *"expired"* ]]; then
|
|
echo "❌ FAILED: Event with malformed expiration '$expiration_value' was treated as expired instead of ignored"
|
|
return 1
|
|
else
|
|
echo "⚠️ Event rejected for other reason: $response"
|
|
fi
|
|
else
|
|
echo "⚠️ Unexpected response format: $response"
|
|
fi
|
|
|
|
echo ""
|
|
}
|
|
|
|
echo "Starting malformed expiration tag tests..."
|
|
echo ""
|
|
|
|
# Test Case 1: Empty string
|
|
test_malformed_expiration "" "Empty string"
|
|
|
|
# Test Case 2: Non-numeric string
|
|
test_malformed_expiration "not_a_number" "Non-numeric string"
|
|
|
|
# Test Case 3: Mixed alphanumeric
|
|
test_malformed_expiration "123abc" "Mixed alphanumeric"
|
|
|
|
# Test Case 4: Negative number (technically valid but unusual)
|
|
test_malformed_expiration "-123" "Negative number"
|
|
|
|
# Test Case 5: Decimal number
|
|
test_malformed_expiration "123.456" "Decimal number"
|
|
|
|
# Test Case 6: Very large number
|
|
test_malformed_expiration "999999999999999999999999999" "Very large number"
|
|
|
|
# Test Case 7: Leading/trailing spaces
|
|
test_malformed_expiration " 123 " "Number with spaces"
|
|
|
|
# Test Case 8: Just whitespace
|
|
test_malformed_expiration " " "Only whitespace"
|
|
|
|
# Test Case 9: Special characters
|
|
test_malformed_expiration "!@#$%" "Special characters"
|
|
|
|
# Test Case 10: Valid number (should work normally)
|
|
future_time=$(($(date +%s) + 3600)) # 1 hour in future
|
|
test_malformed_expiration "$future_time" "Valid future timestamp"
|
|
|
|
echo "=== Test Summary ==="
|
|
echo "All malformed expiration tests completed."
|
|
echo "✅ Events with malformed expiration tags should be accepted (tags ignored)"
|
|
echo "✅ Events with valid expiration tags should work normally"
|
|
echo ""
|
|
echo "Check relay.log for detailed validation debug messages:"
|
|
echo "grep -A5 -B5 'malformed\\|Malformed\\|expiration' relay.log | tail -20" |