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,113 @@
import Foundation
import Testing
@testable import bitchat
@Suite("BLE maintenance policy tests")
struct BLEMaintenancePolicyTests {
@Test("discovery mode keeps announces frequent and advertising on")
func discoveryModeAnnouncesAndEnsuresAdvertising() {
let plan = BLEMaintenancePolicy.plan(
cycle: 1,
connectedCount: 0,
peerRegistryIsEmpty: true,
elapsedSinceLastAnnounce: TransportConfig.bleAnnounceIntervalSeconds,
hasRecentTraffic: false
)
#expect(plan.shouldSendAnnounce)
#expect(plan.shouldEnsureAdvertising)
#expect(plan.shouldFlushDirectedSpool)
#expect(!plan.shouldRunCleanup)
#expect(!plan.shouldResetCounter)
}
@Test("connected sparse meshes use sparse announce cadence")
func connectedSparseMeshUsesSparseAnnounceCadence() {
let beforeTarget = BLEMaintenancePolicy.plan(
cycle: 2,
connectedCount: 2,
peerRegistryIsEmpty: false,
elapsedSinceLastAnnounce: TransportConfig.bleConnectedAnnounceBaseSecondsSparse - 0.1,
hasRecentTraffic: false,
connectedAnnounceJitterOffset: 0
)
let atTarget = BLEMaintenancePolicy.plan(
cycle: 2,
connectedCount: 2,
peerRegistryIsEmpty: false,
elapsedSinceLastAnnounce: TransportConfig.bleConnectedAnnounceBaseSecondsSparse,
hasRecentTraffic: false,
connectedAnnounceJitterOffset: 0
)
#expect(!beforeTarget.shouldSendAnnounce)
#expect(atTarget.shouldSendAnnounce)
#expect(!beforeTarget.shouldEnsureAdvertising)
}
@Test("dense meshes use dense announce cadence")
func denseMeshUsesDenseAnnounceCadence() {
let beforeTarget = BLEMaintenancePolicy.plan(
cycle: 3,
connectedCount: TransportConfig.bleHighDegreeThreshold,
peerRegistryIsEmpty: false,
elapsedSinceLastAnnounce: TransportConfig.bleConnectedAnnounceBaseSecondsDense - 0.1,
hasRecentTraffic: false,
connectedAnnounceJitterOffset: 0
)
let atTarget = BLEMaintenancePolicy.plan(
cycle: 3,
connectedCount: TransportConfig.bleHighDegreeThreshold,
peerRegistryIsEmpty: false,
elapsedSinceLastAnnounce: TransportConfig.bleConnectedAnnounceBaseSecondsDense,
hasRecentTraffic: false,
connectedAnnounceJitterOffset: 0
)
#expect(!beforeTarget.shouldSendAnnounce)
#expect(atTarget.shouldSendAnnounce)
#expect(atTarget.shouldRunCleanup)
}
@Test("recent traffic can request a quick announce")
func recentTrafficRequestsQuickAnnounce() {
let plan = BLEMaintenancePolicy.plan(
cycle: 4,
connectedCount: 2,
peerRegistryIsEmpty: false,
elapsedSinceLastAnnounce: 10.0,
hasRecentTraffic: true,
connectedAnnounceJitterOffset: TransportConfig.bleConnectedAnnounceJitterSparse
)
#expect(plan.shouldSendAnnounce)
#expect(!plan.shouldFlushDirectedSpool)
}
@Test("maintenance cadence controls cleanup spool flushing and counter reset")
func maintenanceCadenceControlsPeriodicWork() {
let cleanupAndFlush = BLEMaintenancePolicy.plan(
cycle: 3,
connectedCount: 1,
peerRegistryIsEmpty: false,
elapsedSinceLastAnnounce: 0,
hasRecentTraffic: false,
connectedAnnounceJitterOffset: 0
)
let reset = BLEMaintenancePolicy.plan(
cycle: 6,
connectedCount: 1,
peerRegistryIsEmpty: false,
elapsedSinceLastAnnounce: 0,
hasRecentTraffic: false,
connectedAnnounceJitterOffset: 0
)
#expect(cleanupAndFlush.shouldRunCleanup)
#expect(cleanupAndFlush.shouldFlushDirectedSpool)
#expect(!cleanupAndFlush.shouldResetCounter)
#expect(reset.shouldRunCleanup)
#expect(!reset.shouldFlushDirectedSpool)
#expect(reset.shouldResetCounter)
}
}