Files
bitchat/bitchatTests/Services/BLENoiseSessionQueuesTests.swift
9e84f5e822 [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>
2026-05-31 14:16:11 +02:00

68 lines
2.5 KiB
Swift

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)
}
}