#!/usr/bin/env nu
use common.nu *
def main [] {
let port = resolve-test-port 3011
let url = $"http://localhost:($port)"
let ws_url = $"ws://127.0.0.1:($port)/xrpc/com.atproto.sync.subscribeRepos"
let db_path = (mktemp -d -t hydrant_subscribe_repos_ping_test.XXXXXX)
print "testing ping/pong handling on /xrpc/com.atproto.sync.subscribeRepos..."
print $"database path: ($db_path)"
let binary = build-hydrant-relay
let instance = (with-env { HYDRANT_RELAY: "true", HYDRANT_SEED_HOSTS: "" } {
start-hydrant $binary $db_path $port
})
mut passed = false
if (wait-for-api $url) {
let log_file = $"($db_path)/ws.log"
let ws_pid = start-ws-listener --ping $ws_url $log_file
print $"websocat pid: ($ws_pid)"
sleep 6sec
let alive = (do { ^kill -0 $ws_pid } | complete | get exit_code) == 0
if $alive {
print "ping/pong test PASSED: connection alive after 6s of pings"
$passed = true
try { kill $ws_pid }
} else {
print "ping/pong test FAILED: websocat exited, pong likely not received in time"
try { open $log_file | print }
try { open $"($log_file).err" | print }
}
} else {
print "api failed to start."
}
let hydrant_pid = $instance.pid
print $"stopping hydrant - pid: ($hydrant_pid)..."
try { kill $hydrant_pid }
if $passed {
print "=== TEST PASSED ==="
} else {
print "=== TEST FAILED ==="
exit 1
}
}