Spaces:
Sleeping
Sleeping
| import OpenClawDiscovery | |
| import Testing | |
| struct GatewayDiscoveryModelTests { | |
| func localGatewayMatchesLanHost() { | |
| let local = GatewayDiscoveryModel.LocalIdentity( | |
| hostTokens: ["studio"], | |
| displayTokens: []) | |
| #expect(GatewayDiscoveryModel.isLocalGateway( | |
| lanHost: "studio.local", | |
| tailnetDns: nil, | |
| displayName: nil, | |
| serviceName: nil, | |
| local: local)) | |
| } | |
| func localGatewayMatchesTailnetDns() { | |
| let local = GatewayDiscoveryModel.LocalIdentity( | |
| hostTokens: ["studio"], | |
| displayTokens: []) | |
| #expect(GatewayDiscoveryModel.isLocalGateway( | |
| lanHost: nil, | |
| tailnetDns: "studio.tailnet.example", | |
| displayName: nil, | |
| serviceName: nil, | |
| local: local)) | |
| } | |
| func localGatewayMatchesDisplayName() { | |
| let local = GatewayDiscoveryModel.LocalIdentity( | |
| hostTokens: [], | |
| displayTokens: ["peter's mac studio"]) | |
| #expect(GatewayDiscoveryModel.isLocalGateway( | |
| lanHost: nil, | |
| tailnetDns: nil, | |
| displayName: "Peter's Mac Studio (OpenClaw)", | |
| serviceName: nil, | |
| local: local)) | |
| } | |
| func remoteGatewayDoesNotMatch() { | |
| let local = GatewayDiscoveryModel.LocalIdentity( | |
| hostTokens: ["studio"], | |
| displayTokens: ["peter's mac studio"]) | |
| #expect(!GatewayDiscoveryModel.isLocalGateway( | |
| lanHost: "other.local", | |
| tailnetDns: "other.tailnet.example", | |
| displayName: "Other Mac", | |
| serviceName: "other-gateway", | |
| local: local)) | |
| } | |
| func localGatewayMatchesServiceName() { | |
| let local = GatewayDiscoveryModel.LocalIdentity( | |
| hostTokens: ["studio"], | |
| displayTokens: []) | |
| #expect(GatewayDiscoveryModel.isLocalGateway( | |
| lanHost: nil, | |
| tailnetDns: nil, | |
| displayName: nil, | |
| serviceName: "studio-gateway", | |
| local: local)) | |
| } | |
| func serviceNameDoesNotFalsePositiveOnSubstringHostToken() { | |
| let local = GatewayDiscoveryModel.LocalIdentity( | |
| hostTokens: ["steipete"], | |
| displayTokens: []) | |
| #expect(!GatewayDiscoveryModel.isLocalGateway( | |
| lanHost: nil, | |
| tailnetDns: nil, | |
| displayName: nil, | |
| serviceName: "steipetacstudio (OpenClaw)", | |
| local: local)) | |
| #expect(GatewayDiscoveryModel.isLocalGateway( | |
| lanHost: nil, | |
| tailnetDns: nil, | |
| displayName: nil, | |
| serviceName: "steipete (OpenClaw)", | |
| local: local)) | |
| } | |
| func parsesGatewayTXTFields() { | |
| let parsed = GatewayDiscoveryModel.parseGatewayTXT([ | |
| "lanHost": " studio.local ", | |
| "tailnetDns": " peters-mac-studio-1.ts.net ", | |
| "sshPort": " 2222 ", | |
| "gatewayPort": " 18799 ", | |
| "cliPath": " /opt/openclaw ", | |
| ]) | |
| #expect(parsed.lanHost == "studio.local") | |
| #expect(parsed.tailnetDns == "peters-mac-studio-1.ts.net") | |
| #expect(parsed.sshPort == 2222) | |
| #expect(parsed.gatewayPort == 18799) | |
| #expect(parsed.cliPath == "/opt/openclaw") | |
| } | |
| func parsesGatewayTXTDefaults() { | |
| let parsed = GatewayDiscoveryModel.parseGatewayTXT([ | |
| "lanHost": " ", | |
| "tailnetDns": "\n", | |
| "gatewayPort": "nope", | |
| "sshPort": "nope", | |
| ]) | |
| #expect(parsed.lanHost == nil) | |
| #expect(parsed.tailnetDns == nil) | |
| #expect(parsed.sshPort == 22) | |
| #expect(parsed.gatewayPort == nil) | |
| #expect(parsed.cliPath == nil) | |
| } | |
| func buildsSSHTarget() { | |
| #expect(GatewayDiscoveryModel.buildSSHTarget( | |
| user: "peter", | |
| host: "studio.local", | |
| port: 22) == "peter@studio.local") | |
| #expect(GatewayDiscoveryModel.buildSSHTarget( | |
| user: "peter", | |
| host: "studio.local", | |
| port: 2201) == "peter@studio.local:2201") | |
| } | |
| } | |