Generally functional. Added upload script
This commit is contained in:
140
tests/test_delays.sh
Executable file
140
tests/test_delays.sh
Executable file
@@ -0,0 +1,140 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Test SUP-04: Delay and Jitter Verification
|
||||
# Tests: Timing requirements and jitter application
|
||||
|
||||
set -e
|
||||
|
||||
TEST_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
source "$TEST_DIR/helpers/timing_utils.sh"
|
||||
source "$TEST_DIR/helpers/event_utils.sh"
|
||||
|
||||
# Load test configuration
|
||||
KEYS_FILE="$TEST_DIR/fixtures/test_keys.json"
|
||||
RELAYS_FILE="$TEST_DIR/fixtures/test_relays.json"
|
||||
|
||||
# Extract keys
|
||||
BUILDER_PRIVKEY=$(jq -r '.builder.privkey' "$KEYS_FILE")
|
||||
THROWER_A_PUBKEY=$(jq -r '.thrower_a.pubkey' "$KEYS_FILE")
|
||||
|
||||
# Extract relays
|
||||
THROWER_RELAY=$(jq -r '.test_scenarios.single_hop.thrower_relay' "$RELAYS_FILE")
|
||||
FINAL_RELAY=$(jq -r '.test_scenarios.single_hop.final_relay' "$RELAYS_FILE")
|
||||
|
||||
echo "=== SUP-04: Delay and Jitter Test ==="
|
||||
echo "Testing multiple delay values with jitter verification"
|
||||
echo ""
|
||||
|
||||
# Test different delay values
|
||||
DELAY_VALUES=(0 2 2 2 2)
|
||||
AUDIT_TAG_BASE="test-delays-$(date +%s)"
|
||||
|
||||
PASSED=0
|
||||
FAILED=0
|
||||
|
||||
for DELAY in "${DELAY_VALUES[@]}"; do
|
||||
echo "----------------------------------------"
|
||||
echo "Test Case: ${DELAY}s delay"
|
||||
echo "----------------------------------------"
|
||||
|
||||
AUDIT_TAG="${AUDIT_TAG_BASE}-${DELAY}"
|
||||
TEST_CONTENT="Delay test ${DELAY}s at $(date +%s)"
|
||||
|
||||
# Create and publish event
|
||||
INNER_EVENT=$(create_test_event "$BUILDER_PRIVKEY" "$TEST_CONTENT")
|
||||
INNER_EVENT_ID=$(echo "$INNER_EVENT" | jq -r '.id')
|
||||
|
||||
ROUTING_PAYLOAD=$(create_routing_payload "$INNER_EVENT" "$FINAL_RELAY" "$DELAY" "null" "$AUDIT_TAG")
|
||||
ENCRYPTED_CONTENT=$(encrypt_payload "$BUILDER_PRIVKEY" "$THROWER_A_PUBKEY" "$ROUTING_PAYLOAD")
|
||||
ROUTING_EVENT=$(create_routing_event "$BUILDER_PRIVKEY" "$THROWER_A_PUBKEY" "$ENCRYPTED_CONTENT")
|
||||
|
||||
echo "Publishing event with ${DELAY}s delay..."
|
||||
PUBLISH_TIME=$(get_timestamp)
|
||||
publish_event "$ROUTING_EVENT" "$THROWER_RELAY" > /dev/null 2>&1
|
||||
|
||||
# Monitor for arrival
|
||||
TIMEOUT=$((DELAY + 30))
|
||||
FOUND=false
|
||||
START_MONITOR=$(get_timestamp)
|
||||
|
||||
while [ $(($(get_timestamp) - START_MONITOR)) -lt $TIMEOUT ]; do
|
||||
if query_event "$INNER_EVENT_ID" "$FINAL_RELAY" 2 2>/dev/null | grep -q "$INNER_EVENT_ID"; then
|
||||
ARRIVAL_TIME=$(get_timestamp)
|
||||
FOUND=true
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
if [ "$FOUND" = false ]; then
|
||||
echo "✗ FAILED: Event not found within ${TIMEOUT}s"
|
||||
((FAILED++))
|
||||
echo ""
|
||||
continue
|
||||
fi
|
||||
|
||||
# Calculate actual delay
|
||||
ACTUAL_DELAY=$((ARRIVAL_TIME - PUBLISH_TIME))
|
||||
|
||||
# Verify minimum delay
|
||||
if [ $ACTUAL_DELAY -lt $DELAY ]; then
|
||||
echo "✗ FAILED: Event arrived too early"
|
||||
echo " Expected: >= ${DELAY}s"
|
||||
echo " Actual: ${ACTUAL_DELAY}s"
|
||||
((FAILED++))
|
||||
echo ""
|
||||
continue
|
||||
fi
|
||||
|
||||
# Calculate jitter
|
||||
if [ $DELAY -gt 0 ]; then
|
||||
JITTER_PCT=$(calculate_jitter "$DELAY" "$ACTUAL_DELAY")
|
||||
echo "Actual delay: ${ACTUAL_DELAY}s (jitter: ${JITTER_PCT}%)"
|
||||
|
||||
# Verify jitter is reasonable (within 50% for testing)
|
||||
if [ $JITTER_PCT -gt 50 ]; then
|
||||
echo "⚠ WARNING: High jitter (${JITTER_PCT}% > 50%)"
|
||||
fi
|
||||
else
|
||||
echo "Actual delay: ${ACTUAL_DELAY}s (0s delay + processing time)"
|
||||
fi
|
||||
|
||||
# Verify content
|
||||
FINAL_EVENT=$(query_event "$INNER_EVENT_ID" "$FINAL_RELAY" 5 2>/dev/null)
|
||||
FINAL_CONTENT=$(echo "$FINAL_EVENT" | jq -r '.content')
|
||||
|
||||
if [ "$FINAL_CONTENT" != "$TEST_CONTENT" ]; then
|
||||
echo "✗ FAILED: Content mismatch"
|
||||
((FAILED++))
|
||||
echo ""
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "✓ PASSED: Delay constraint respected, content verified"
|
||||
((PASSED++))
|
||||
echo ""
|
||||
|
||||
# Small delay between tests
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "========================================"
|
||||
echo "Delay Test Summary"
|
||||
echo "========================================"
|
||||
echo "Passed: $PASSED / ${#DELAY_VALUES[@]}"
|
||||
echo "Failed: $FAILED / ${#DELAY_VALUES[@]}"
|
||||
echo ""
|
||||
|
||||
if [ $FAILED -gt 0 ]; then
|
||||
echo "=== TEST FAILED ==="
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "=== TEST PASSED ==="
|
||||
echo "✓ All delay values tested successfully"
|
||||
echo "✓ Minimum delay constraints respected"
|
||||
echo "✓ Jitter applied appropriately"
|
||||
echo "✓ Content preserved across all tests"
|
||||
echo ""
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user