mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 15:45:20 +00:00
114 lines
4.1 KiB
Swift
114 lines
4.1 KiB
Swift
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)
|
|
}
|
|
}
|