64 lines
1.8 KiB
Swift
64 lines
1.8 KiB
Swift
import OpenClawKit
|
|
import Foundation
|
|
|
|
extension WebSocketTasking {
|
|
// Keep unit-test doubles resilient to protocol additions.
|
|
func sendPing(pongReceiveHandler: @escaping @Sendable (Error?) -> Void) {
|
|
pongReceiveHandler(nil)
|
|
}
|
|
}
|
|
|
|
enum GatewayWebSocketTestSupport {
|
|
static func connectRequestID(from message: URLSessionWebSocketTask.Message) -> String? {
|
|
let data: Data? = switch message {
|
|
case let .data(d): d
|
|
case let .string(s): s.data(using: .utf8)
|
|
@unknown default: nil
|
|
}
|
|
guard let data else { return nil }
|
|
guard let obj = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else {
|
|
return nil
|
|
}
|
|
guard (obj["type"] as? String) == "req", (obj["method"] as? String) == "connect" else {
|
|
return nil
|
|
}
|
|
return obj["id"] as? String
|
|
}
|
|
|
|
static func connectOkData(id: String) -> Data {
|
|
let json = """
|
|
{
|
|
"type": "res",
|
|
"id": "\(id)",
|
|
"ok": true,
|
|
"payload": {
|
|
"type": "hello-ok",
|
|
"protocol": 2,
|
|
"server": { "version": "test", "connId": "test" },
|
|
"features": { "methods": [], "events": [] },
|
|
"snapshot": {
|
|
"presence": [ { "ts": 1 } ],
|
|
"health": {},
|
|
"stateVersion": { "presence": 0, "health": 0 },
|
|
"uptimeMs": 0
|
|
},
|
|
"policy": { "maxPayload": 1, "maxBufferedBytes": 1, "tickIntervalMs": 30000 }
|
|
}
|
|
}
|
|
"""
|
|
return Data(json.utf8)
|
|
}
|
|
|
|
static func okResponseData(id: String) -> Data {
|
|
let json = """
|
|
{
|
|
"type": "res",
|
|
"id": "\(id)",
|
|
"ok": true,
|
|
"payload": { "ok": true }
|
|
}
|
|
"""
|
|
return Data(json.utf8)
|
|
}
|
|
}
|