archy/scripts/test-network.sh

169 lines
5.0 KiB
Bash
Raw Normal View History

#!/bin/bash
set -euo pipefail
# TEST-204/205/206: Network tests — peer discovery, content sharing, Tor services.
# Tests network functionality on the dev server.
SSH_KEY="${ARCHIPELAGO_SSH_KEY:-$HOME/.ssh/archipelago-deploy}"
TARGET="archipelago@192.168.1.228"
SSH_CMD="ssh -i $SSH_KEY -o StrictHostKeyChecking=no $TARGET"
PASSWORD="password123"
PASS=0
FAIL=0
SKIP=0
RESULTS=()
log() { echo -e "\033[1;34m[TEST]\033[0m $*"; }
pass() { echo -e "\033[1;32m[PASS]\033[0m $*"; PASS=$((PASS + 1)); RESULTS+=("PASS: $*"); }
fail() { echo -e "\033[1;31m[FAIL]\033[0m $*"; FAIL=$((FAIL + 1)); RESULTS+=("FAIL: $*"); }
skip() { echo -e "\033[1;33m[SKIP]\033[0m $*"; SKIP=$((SKIP + 1)); RESULTS+=("SKIP: $*"); }
get_session() {
$SSH_CMD "curl -s -c - http://localhost:5678/rpc/v1 \
-X POST -H 'Content-Type: application/json' \
-d '{\"method\":\"auth.login\",\"params\":{\"password\":\"$PASSWORD\"}}' 2>/dev/null \
| grep session | awk '{print \$NF}'"
}
rpc_call() {
local session="$1" method="$2" params="${3:-{}}"
$SSH_CMD "curl -s http://localhost:5678/rpc/v1 \
-X POST -H 'Content-Type: application/json' \
-H 'Cookie: session=$session' \
-d '{\"method\":\"$method\",\"params\":$params}' 2>/dev/null"
}
main() {
log "=== Network Test Suite ==="
echo ""
log "Authenticating..."
local session
session=$(get_session)
if [ -z "$session" ]; then
echo "Failed to authenticate. Exiting."
exit 1
fi
echo ""
# --- TEST-204: Peer Discovery ---
log "=== TEST-204: Node Visibility & Discovery ==="
# Test get-visibility works
log "Testing network.get-visibility..."
local vis_result
vis_result=$(rpc_call "$session" "network.get-visibility")
if echo "$vis_result" | grep -q '"visibility"'; then
pass "network.get-visibility returns visibility status"
else
fail "network.get-visibility failed: $vis_result"
fi
# Test set-visibility
log "Testing network.set-visibility (discoverable)..."
local set_vis_result
set_vis_result=$(rpc_call "$session" "network.set-visibility" '{"visibility":"discoverable"}')
if echo "$set_vis_result" | grep -q '"error"'; then
fail "network.set-visibility failed"
else
pass "network.set-visibility works"
fi
# Test list-requests
log "Testing network.list-requests..."
local req_result
req_result=$(rpc_call "$session" "network.list-requests")
if echo "$req_result" | grep -q '"requests"'; then
pass "network.list-requests returns request list"
else
fail "network.list-requests failed"
fi
# Revert visibility
rpc_call "$session" "network.set-visibility" '{"visibility":"hidden"}' > /dev/null 2>&1
echo ""
# --- TEST-205: Content Sharing ---
log "=== TEST-205: Content Sharing ==="
# Test content.list-mine
log "Testing content.list-mine..."
local content_result
content_result=$(rpc_call "$session" "content.list-mine")
if echo "$content_result" | grep -q '"items"'; then
pass "content.list-mine returns item list"
else
fail "content.list-mine failed"
fi
# Test content.add
log "Testing content.add..."
local add_result
add_result=$(rpc_call "$session" "content.add" '{"filename":"test-file.txt","mime_type":"text/plain","description":"Test content","access":"free"}')
if echo "$add_result" | grep -q '"error"'; then
local msg
msg=$(echo "$add_result" | grep -o '"message":"[^"]*"' | head -1)
skip "content.add — $msg"
else
pass "content.add works"
# Clean up
local item_id
item_id=$(echo "$add_result" | grep -o '"id":"[^"]*"' | head -1 | sed 's/"id":"//;s/"//')
if [ -n "$item_id" ]; then
rpc_call "$session" "content.remove" "{\"id\":\"$item_id\"}" > /dev/null 2>&1
fi
fi
echo ""
# --- TEST-206: Tor Hidden Services ---
log "=== TEST-206: Tor Hidden Services ==="
# Test tor.list-services
log "Testing tor.list-services..."
local tor_result
tor_result=$(rpc_call "$session" "tor.list-services")
if echo "$tor_result" | grep -q '"services"'; then
pass "tor.list-services returns service list"
local svc_count
svc_count=$(echo "$tor_result" | grep -o '"name"' | wc -l)
log " Found $svc_count hidden services"
else
fail "tor.list-services failed"
fi
# Test tor.get-onion-address
log "Testing tor.get-onion-address for backend..."
local onion_result
onion_result=$(rpc_call "$session" "tor.get-onion-address" '{"service":"backend"}')
if echo "$onion_result" | grep -q "onion"; then
pass "tor.get-onion-address returns .onion address"
else
skip "tor.get-onion-address — no backend service configured"
fi
# Check Tor container is running
log "Checking Tor container status..."
local tor_running
tor_running=$($SSH_CMD "podman ps --format '{{.Names}}' | grep -c 'archy-tor' || echo 0")
if [ "$tor_running" -gt 0 ]; then
pass "Tor container is running"
else
fail "Tor container is not running"
fi
echo ""
log "=== RESULTS ==="
for r in "${RESULTS[@]}"; do
echo " $r"
done
echo ""
log "Pass: $PASS | Fail: $FAIL | Skip: $SKIP"
[ $FAIL -gt 0 ] && exit 1
exit 0
}
main "$@"