mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 04:05:20 +00:00
[codex] Refactor BLE outbound scheduling and Noise queues (#1306)
* Refactor BLE transport event handling * Make image output paths unique * Keep queued Nostr read receipts alive * Refine BLE ingress fanout * Rediscover BLE service after invalidation * Extract BLE notification retry buffer * Extract BLE inbound write buffer * Extract BLE fragment assembly buffer * Tidy secure log handling from device run * Extract BLE outbound fragment scheduler * Harden app CI media tests * Redact BLE message content from logs * Extract BLE Noise session queues * Fix BLE read receipt UI updates * Allow self-authored RSR ingress replies * Harden read receipt queue test timing * Extract BLE outbound policy and incoming file storage * Avoid duplicate BLE link snapshots during send * Canonicalize Nostr relay URLs --------- Co-authored-by: jack <jackjackbits@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import BitFoundation
|
||||
import Foundation
|
||||
import Testing
|
||||
@testable import bitchat
|
||||
|
||||
struct BLENoiseSessionQueuesTests {
|
||||
@Test
|
||||
func privateMessagesDrainInPeerOrderAndClearOnlyThatPeer() {
|
||||
let firstPeer = PeerID(str: "aaaaaaaaaaaaaaaa")
|
||||
let secondPeer = PeerID(str: "bbbbbbbbbbbbbbbb")
|
||||
var queues = BLENoiseSessionQueues()
|
||||
|
||||
queues.appendPrivateMessage(content: "first", messageID: "m1", for: firstPeer)
|
||||
queues.appendPrivateMessage(content: "second", messageID: "m2", for: firstPeer)
|
||||
queues.appendPrivateMessage(content: "other", messageID: "m3", for: secondPeer)
|
||||
|
||||
let drained = queues.takePrivateMessages(for: firstPeer)
|
||||
|
||||
#expect(drained == [
|
||||
BLEPendingPrivateMessage(content: "first", messageID: "m1"),
|
||||
BLEPendingPrivateMessage(content: "second", messageID: "m2")
|
||||
])
|
||||
#expect(queues.takePrivateMessages(for: firstPeer).isEmpty)
|
||||
#expect(queues.takePrivateMessages(for: secondPeer) == [
|
||||
BLEPendingPrivateMessage(content: "other", messageID: "m3")
|
||||
])
|
||||
}
|
||||
|
||||
@Test
|
||||
func prependPrivateMessagesRestoresFailedMessagesAheadOfNewerOnes() {
|
||||
let peerID = PeerID(str: "aaaaaaaaaaaaaaaa")
|
||||
var queues = BLENoiseSessionQueues()
|
||||
|
||||
queues.appendPrivateMessage(content: "new", messageID: "m2", for: peerID)
|
||||
queues.prependPrivateMessages([
|
||||
BLEPendingPrivateMessage(content: "retry", messageID: "m1")
|
||||
], for: peerID)
|
||||
|
||||
#expect(queues.takePrivateMessages(for: peerID).map(\.messageID) == ["m1", "m2"])
|
||||
}
|
||||
|
||||
@Test
|
||||
func typedPayloadsDrainIndependentlyFromPrivateMessages() {
|
||||
let peerID = PeerID(str: "aaaaaaaaaaaaaaaa")
|
||||
var queues = BLENoiseSessionQueues()
|
||||
|
||||
queues.appendPrivateMessage(content: "queued", messageID: "m1", for: peerID)
|
||||
queues.appendTypedPayload(Data([0x01]), for: peerID)
|
||||
queues.appendTypedPayload(Data([0x02]), for: peerID)
|
||||
|
||||
#expect(queues.takeTypedPayloads(for: peerID) == [Data([0x01]), Data([0x02])])
|
||||
#expect(queues.takeTypedPayloads(for: peerID).isEmpty)
|
||||
#expect(queues.takePrivateMessages(for: peerID).map(\.messageID) == ["m1"])
|
||||
}
|
||||
|
||||
@Test
|
||||
func removeAllClearsBothQueueTypes() {
|
||||
let peerID = PeerID(str: "aaaaaaaaaaaaaaaa")
|
||||
var queues = BLENoiseSessionQueues()
|
||||
|
||||
queues.appendPrivateMessage(content: "queued", messageID: "m1", for: peerID)
|
||||
queues.appendTypedPayload(Data([0x01]), for: peerID)
|
||||
queues.removeAll()
|
||||
|
||||
#expect(queues.isEmpty)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user