1234567891011121314151617181920212223242526272829303132def port-open [port: int] { (^bash -c $"echo > /dev/tcp/127.0.0.1/($port)" | complete).exit_code == 0}
export def start-mock-pds [port: int] { if (port-open $port) { error make {msg: $"cannot start mock PDS: port ($port) is already in use"} } let log_file = (mktemp) let pid = (bash -c $"websocat --no-async-stdio -s ($port) >($log_file) 2>&1 & echo $!" | str trim | into int) # binding can lag seconds behind the spawn on a loaded machine, so poll instead # of trusting one 100ms sleep mut open = false for _ in 1..50 { if (port-open $port) { $open = true break } sleep 100ms } if not $open { try { kill $pid } let log = (try { open --raw $log_file | into string | str trim } catch { "" }) error make {msg: $"mock PDS failed to listen on port ($port): ($log)"} } { pid: $pid, log: $log_file }}
export def stop-mock-pds [handle: record] { try { kill $handle.pid }}