Generally functional. Added upload script
This commit is contained in:
151
tests/helpers/event_utils.sh
Executable file
151
tests/helpers/event_utils.sh
Executable file
@@ -0,0 +1,151 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Event Utilities for Superball Protocol Tests
|
||||
|
||||
# Create a test event (kind 1 text note)
|
||||
create_test_event() {
|
||||
local privkey=$1
|
||||
local content=$2
|
||||
local timestamp=${3:-$(date +%s)}
|
||||
|
||||
echo "{\"content\":\"$content\",\"created_at\":$timestamp}" | \
|
||||
nak event --sec "$privkey" -k 1 --tag ""
|
||||
}
|
||||
|
||||
# Create routing payload (Type 1)
|
||||
create_routing_payload() {
|
||||
local event_json=$1
|
||||
local relays=$2 # Comma-separated relay URLs
|
||||
local delay=$3
|
||||
local next_hop_pubkey=${4:-null}
|
||||
local audit_tag=$5
|
||||
local add_padding_bytes=${6:-0}
|
||||
|
||||
# Convert relays to JSON array
|
||||
local relay_array="["
|
||||
IFS=',' read -ra RELAY_ARRAY <<< "$relays"
|
||||
for i in "${!RELAY_ARRAY[@]}"; do
|
||||
if [ $i -gt 0 ]; then
|
||||
relay_array+=","
|
||||
fi
|
||||
relay_array+="\"${RELAY_ARRAY[$i]}\""
|
||||
done
|
||||
relay_array+="]"
|
||||
|
||||
# Build routing payload
|
||||
local routing_payload=$(cat <<EOF
|
||||
{
|
||||
"event": $event_json,
|
||||
"relays": $relay_array,
|
||||
"delay": $delay,
|
||||
"next_hop_pubkey": $([ "$next_hop_pubkey" = "null" ] && echo "null" || echo "\"$next_hop_pubkey\""),
|
||||
"audit_tag": "$audit_tag"
|
||||
EOF
|
||||
)
|
||||
|
||||
if [ $add_padding_bytes -gt 0 ]; then
|
||||
routing_payload+=",\n \"add_padding_bytes\": $add_padding_bytes"
|
||||
fi
|
||||
|
||||
routing_payload+=$'\n}'
|
||||
|
||||
echo "$routing_payload"
|
||||
}
|
||||
|
||||
# Create padding payload (Type 2)
|
||||
create_padding_payload() {
|
||||
local event_json=$1
|
||||
local padding_bytes=$2
|
||||
|
||||
# Generate random padding
|
||||
local padding=$(head -c "$padding_bytes" /dev/urandom | base64 -w 0)
|
||||
|
||||
cat <<EOF
|
||||
{
|
||||
"event": $event_json,
|
||||
"padding": "$padding"
|
||||
}
|
||||
EOF
|
||||
}
|
||||
|
||||
# Encrypt payload with NIP-44
|
||||
encrypt_payload() {
|
||||
local sender_privkey=$1
|
||||
local recipient_pubkey=$2
|
||||
local payload=$3
|
||||
|
||||
echo "$payload" | nak encrypt --sec "$sender_privkey" --recipient-pubkey "$recipient_pubkey"
|
||||
}
|
||||
|
||||
# Create kind 22222 routing event
|
||||
create_routing_event() {
|
||||
local sender_privkey=$1
|
||||
local recipient_pubkey=$2
|
||||
local encrypted_content=$3
|
||||
local timestamp=${4:-$(date +%s)}
|
||||
|
||||
# Create event with p-tag for recipient
|
||||
nak event --sec "$sender_privkey" -k 22222 \
|
||||
--tag "p,$recipient_pubkey" \
|
||||
--content "$encrypted_content" \
|
||||
--created-at "$timestamp"
|
||||
}
|
||||
|
||||
# Extract event ID from event JSON
|
||||
get_event_id() {
|
||||
local event_json=$1
|
||||
echo "$event_json" | jq -r '.id'
|
||||
}
|
||||
|
||||
# Extract pubkey from event JSON
|
||||
get_event_pubkey() {
|
||||
local event_json=$1
|
||||
echo "$event_json" | jq -r '.pubkey'
|
||||
}
|
||||
|
||||
# Extract content from event JSON
|
||||
get_event_content() {
|
||||
local event_json=$1
|
||||
echo "$event_json" | jq -r '.content'
|
||||
}
|
||||
|
||||
# Verify event signature
|
||||
verify_event_signature() {
|
||||
local event_json=$1
|
||||
|
||||
# Use nak to verify (it will exit with error if invalid)
|
||||
echo "$event_json" | nak verify 2>/dev/null
|
||||
return $?
|
||||
}
|
||||
|
||||
# Publish event to relay
|
||||
publish_event() {
|
||||
local event_json=$1
|
||||
local relay=$2
|
||||
|
||||
echo "$event_json" | nak event "$relay" 2>&1
|
||||
}
|
||||
|
||||
# Query event from relay
|
||||
query_event() {
|
||||
local event_id=$1
|
||||
local relay=$2
|
||||
local timeout=${3:-5}
|
||||
|
||||
nak req --relay "$relay" -i "$event_id" --timeout "$timeout" 2>/dev/null
|
||||
}
|
||||
|
||||
# Monitor relay for specific event kind
|
||||
monitor_relay_for_kind() {
|
||||
local relay=$1
|
||||
local kind=$2
|
||||
local timeout=${3:-30}
|
||||
|
||||
timeout "$timeout" nak req --stream --relay "$relay" -k "$kind" 2>/dev/null
|
||||
}
|
||||
|
||||
# Get pubkey from private key
|
||||
get_pubkey_from_privkey() {
|
||||
local privkey=$1
|
||||
nak key public "$privkey"
|
||||
}
|
||||
70
tests/helpers/timing_utils.sh
Executable file
70
tests/helpers/timing_utils.sh
Executable file
@@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Timing Utilities for Superball Protocol Tests
|
||||
|
||||
# Get current timestamp in seconds
|
||||
get_timestamp() {
|
||||
date +%s
|
||||
}
|
||||
|
||||
# Measure delay between two timestamps
|
||||
measure_delay() {
|
||||
local start_time=$1
|
||||
local end_time=$2
|
||||
echo $((end_time - start_time))
|
||||
}
|
||||
|
||||
# Verify delay is within acceptable range (with jitter tolerance)
|
||||
verify_delay() {
|
||||
local expected=$1
|
||||
local actual=$2
|
||||
local tolerance=${3:-10} # Default 10% tolerance for jitter
|
||||
|
||||
local min=$((expected - expected * tolerance / 100))
|
||||
local max=$((expected + expected * tolerance / 100))
|
||||
|
||||
if [ $actual -ge $min ] && [ $actual -le $max ]; then
|
||||
return 0
|
||||
else
|
||||
echo "Delay verification failed: expected ${expected}s (±${tolerance}%), got ${actual}s"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Wait for event with timeout
|
||||
wait_for_event() {
|
||||
local event_id=$1
|
||||
local relay=$2
|
||||
local timeout=${3:-30}
|
||||
local start_time=$(get_timestamp)
|
||||
|
||||
while true; do
|
||||
local current_time=$(get_timestamp)
|
||||
local elapsed=$((current_time - start_time))
|
||||
|
||||
if [ $elapsed -ge $timeout ]; then
|
||||
echo "Timeout waiting for event $event_id"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check if event exists on relay
|
||||
if nak req --relay "$relay" -i "$event_id" --timeout 2 2>/dev/null | grep -q "$event_id"; then
|
||||
echo $current_time
|
||||
return 0
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
# Calculate jitter percentage
|
||||
calculate_jitter() {
|
||||
local expected=$1
|
||||
local actual=$2
|
||||
|
||||
local diff=$((actual - expected))
|
||||
local abs_diff=${diff#-} # Absolute value
|
||||
local jitter_pct=$((abs_diff * 100 / expected))
|
||||
|
||||
echo $jitter_pct
|
||||
}
|
||||
Reference in New Issue
Block a user