#!/usr/bin/env nu
use common.nu *
def main [] {
let port = resolve-test-port 3010
let url = $"http://localhost:($port)"
let ws_url = $"ws://127.0.0.1:($port)/stream"
let db_path = (mktemp -d -t hydrant_stream_ping_test.XXXXXX)
print "testing ping/pong handling on /stream..."
print $"database path: ($db_path)"
let binary = build-hydrant
let instance = 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
}
}