Extract BLE and chat architecture policies (#1324)

Co-authored-by: jack <jackjackbits@users.noreply.github.com>
This commit is contained in:
jack
2026-06-02 09:01:59 +02:00
committed by GitHub
co-authored by jack
parent 193cfdc06a
commit 3eb4f2bd72
46 changed files with 3286 additions and 786 deletions
@@ -0,0 +1,70 @@
import BitFoundation
import Foundation
import Testing
@testable import bitchat
struct BLESelfBroadcastTrackerTests {
@Test
func recordAndTakeMessageIDForMatchingPacket() {
let packet = makePacket(timestamp: 1234)
var tracker = BLESelfBroadcastTracker()
tracker.record(messageID: "local-message", packet: packet, sentAt: Date())
#expect(tracker.takeMessageID(for: packet) == "local-message")
#expect(tracker.takeMessageID(for: packet) == nil)
#expect(tracker.isEmpty)
}
@Test
func differentPacketDoesNotResolveMessageID() {
let packet = makePacket(timestamp: 1234)
let otherPacket = makePacket(timestamp: 1235)
var tracker = BLESelfBroadcastTracker()
tracker.record(messageID: "local-message", packet: packet, sentAt: Date())
#expect(tracker.takeMessageID(for: otherPacket) == nil)
#expect(tracker.count == 1)
}
@Test
func pruneRemovesEntriesBeforeCutoff() {
let now = Date(timeIntervalSince1970: 100)
let oldPacket = makePacket(timestamp: 1)
let freshPacket = makePacket(timestamp: 2)
var tracker = BLESelfBroadcastTracker()
tracker.record(messageID: "old", packet: oldPacket, sentAt: now.addingTimeInterval(-10))
tracker.record(messageID: "fresh", packet: freshPacket, sentAt: now)
tracker.prune(before: now.addingTimeInterval(-5))
#expect(tracker.takeMessageID(for: oldPacket) == nil)
#expect(tracker.takeMessageID(for: freshPacket) == "fresh")
}
@Test
func removeAllClearsTrackedMessages() {
let packet = makePacket(timestamp: 1234)
var tracker = BLESelfBroadcastTracker()
tracker.record(messageID: "local-message", packet: packet, sentAt: Date())
tracker.removeAll()
#expect(tracker.isEmpty)
#expect(tracker.takeMessageID(for: packet) == nil)
}
private func makePacket(timestamp: UInt64) -> BitchatPacket {
BitchatPacket(
type: MessageType.message.rawValue,
senderID: Data(hexString: "8877665544332211") ?? Data(),
recipientID: nil,
timestamp: timestamp,
payload: Data("hello".utf8),
signature: nil,
ttl: TransportConfig.messageTTLDefault
)
}
}