mirror of
https://github.com/hanzoai/bot.git
synced 2026-10-30 17:24:26 +00:00
Squash merge of 1,462 upstream commits with openclaw→hanzo-bot naming transforms applied. Conflicts resolved favoring our main branch to preserve existing customizations. Key upstream additions: - iOS Security Stack (concurrency locks, runtime guards, TTS fallback) - Discord CDN hostname allowlisting for SSRF protection - Discord mention handling improvements - Various bug fixes and stability improvements
61 lines
1.8 KiB
Swift
61 lines
1.8 KiB
Swift
import BotKit
|
|
import Foundation
|
|
import BotKit
|
|
import Testing
|
|
@testable import HanzoBot
|
|
@testable import BotIPC
|
|
|
|
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 statusFailsWhenProcessMissing() async {
|
|
let connection = makeTestGatewayConnection()
|
|
let result = await connection.status()
|
|
#expect(result.ok == false)
|
|
#expect(result.error != nil)
|
|
}
|
|
|
|
@Test func rejectEmptyMessage() async {
|
|
let connection = makeTestGatewayConnection()
|
|
let result = await connection.sendAgent(
|
|
message: "",
|
|
thinking: nil,
|
|
sessionKey: "main",
|
|
deliver: false,
|
|
to: nil)
|
|
#expect(result.ok == false)
|
|
}
|
|
}
|