| import Foundation |
| import OpenClawKit |
| import Testing |
| @testable import OpenClaw |
| @testable import OpenClawIPC |
|
|
| private final class FakeWebSocketTask: WebSocketTasking, @unchecked Sendable { |
| var state: URLSessionTask.State = .running |
|
|
| func resume() {} |
|
|
| func cancel(with _: URLSessionWebSocketTask.CloseCode, reason _: Data?) { |
| self.state = .canceling |
| } |
|
|
| func send(_: URLSessionWebSocketTask.Message) async throws {} |
|
|
| func receive() async throws -> URLSessionWebSocketTask.Message { |
| throw URLError(.cannotConnectToHost) |
| } |
|
|
| func receive(completionHandler: @escaping @Sendable (Result<URLSessionWebSocketTask.Message, Error>) -> Void) { |
| completionHandler(.failure(URLError(.cannotConnectToHost))) |
| } |
| } |
|
|
| private final class FakeWebSocketSession: WebSocketSessioning, @unchecked Sendable { |
| func makeWebSocketTask(url _: URL) -> WebSocketTaskBox { |
| WebSocketTaskBox(task: FakeWebSocketTask()) |
| } |
| } |
|
|
| private func makeTestGatewayConnection() -> GatewayConnection { |
| GatewayConnection( |
| configProvider: { |
| (url: URL(string: "ws://127.0.0.1:1")!, token: nil, password: nil) |
| }, |
| sessionBox: WebSocketSessionBox(session: FakeWebSocketSession())) |
| } |
|
|
| @Suite(.serialized) struct GatewayConnectionControlTests { |
| @Test func `status fails when process missing`() async { |
| let connection = makeTestGatewayConnection() |
| let result = await connection.status() |
| #expect(result.ok == false) |
| #expect(result.error != nil) |
| } |
|
|
| @Test func `reject empty message`() async { |
| let connection = makeTestGatewayConnection() |
| let result = await connection.sendAgent( |
| message: "", |
| thinking: nil, |
| sessionKey: "main", |
| deliver: false, |
| to: nil) |
| #expect(result.ok == false) |
| } |
| } |
|
|