2026-02-08 17:28:22 -08:00
import Darwin
2026-01-10 23:39:14 +01:00
import Testing
2026-01-30 03:15:10 +01:00
@ testable import OpenClawDiscovery
2026-01-10 23:39:14 +01:00
@ Suite
struct WideAreaGatewayDiscoveryTests {
@ Test func discoversBeaconFromTailnetDnsSdFallback ( ) {
2026-01-30 03:15:10 +01:00
setenv ( " OPENCLAW_WIDE_AREA_DOMAIN " , " openclaw.internal " , 1 )
2026-01-10 23:39:14 +01:00
let statusJson = " " "
{
" Self " : { " TailscaleIPs " : [ " 100.69.232.64 " ] } ,
" Peer " : {
" peer-1 " : { " TailscaleIPs " : [ " 100.123.224.76 " ] }
}
}
" " "
let context = WideAreaGatewayDiscovery . DiscoveryContext (
tailscaleStatus : { statusJson } ,
dig : { args , _ in
let recordType = args . last ? ? " "
let nameserver = args . first ( where : { $0 . hasPrefix ( " @ " ) } ) ? ? " "
if recordType = = " PTR " {
if nameserver = = " @100.123.224.76 " {
2026-01-30 03:15:10 +01:00
return " steipetacstudio-gateway._openclaw-gw._tcp.openclaw.internal. \n "
2026-01-10 23:39:14 +01:00
}
return " "
}
if recordType = = " SRV " {
2026-01-30 03:15:10 +01:00
return " 0 0 18789 steipetacstudio.openclaw.internal. "
2026-01-10 23:39:14 +01:00
}
if recordType = = " TXT " {
2026-01-30 03:15:10 +01:00
return " \" displayName=Peter \\ 226 \\ 128 \\ 153s Mac Studio (OpenClaw) \" \" gatewayPort=18789 \" \" tailnetDns=peters-mac-studio-1.sheep-coho.ts.net \" \" cliPath=/Users/steipete/openclaw/src/entry.ts \" "
2026-01-10 23:39:14 +01:00
}
return " "
} )
let beacons = WideAreaGatewayDiscovery . discover (
timeoutSeconds : 2.0 ,
context : context )
# expect ( beacons . count = = 1 )
let beacon = beacons [ 0 ]
2026-01-30 03:15:10 +01:00
let expectedDisplay = " Peter \ u{2019}s Mac Studio (OpenClaw) "
2026-01-10 23:39:14 +01:00
# expect ( beacon . displayName = = expectedDisplay )
2026-01-19 04:50:07 +00:00
# expect ( beacon . port = = 18789 )
2026-01-10 23:39:14 +01:00
# expect ( beacon . gatewayPort = = 18789 )
# expect ( beacon . tailnetDns = = " peters-mac-studio-1.sheep-coho.ts.net " )
2026-01-30 03:15:10 +01:00
# expect ( beacon . cliPath = = " /Users/steipete/openclaw/src/entry.ts " )
2026-01-10 23:39:14 +01:00
}
}