mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 04:45:20 +00:00
Extract BLE and chat architecture policies (#1324)
Co-authored-by: jack <jackjackbits@users.noreply.github.com>
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user