Files
bitchat/bitchatTests/Services/BridgeDropDedupStoreTests.swift
T
jackandGitHub 820c933958 Harden PTT audio and the 1.7.1 release (#1423)
Centralize PTT and voice audio-session ownership, harden courier/bridge/outbox delivery and recovery, correct location and delivery-state races, add privacy/release metadata, and ship reproducible universal Arti slices with Release CI coverage.

Validated by the full iOS suite, repeated audio/fragment/performance regressions, BitFoundation tests, strict lint and dead-code analysis, universal iOS Release builds, and iOS/macOS archives.
2026-07-10 14:04:09 +02:00

119 lines
4.0 KiB
Swift

//
// BridgeDropDedupStoreTests.swift
// bitchat
//
// This is free and unencumbered software released into the public domain.
// For more information, see <https://unlicense.org>
//
import Foundation
import Testing
@testable import bitchat
@Suite("Bridge drop dedup persistence")
struct BridgeDropDedupStoreTests {
// MARK: - ExpiringIDSet
@Test func entriesExpireAfterLifetime() {
let start = Date(timeIntervalSince1970: 1_700_000_000)
var set = ExpiringIDSet(capacity: 8, lifetime: 60)
let inserted = set.insert("a", now: start)
#expect(inserted)
#expect(set.contains("a", now: start))
let duplicate = set.insert("a", now: start.addingTimeInterval(30))
#expect(!duplicate)
// Past the lifetime the slot is free again.
let later = start.addingTimeInterval(61)
#expect(!set.contains("a", now: later))
let reinserted = set.insert("a", now: later)
#expect(reinserted)
}
@Test func capacityEvictsOldestFirst() {
let start = Date(timeIntervalSince1970: 1_700_000_000)
var set = ExpiringIDSet(capacity: 2, lifetime: 3600)
set.insert("oldest", now: start)
set.insert("middle", now: start.addingTimeInterval(1))
set.insert("newest", now: start.addingTimeInterval(2))
let check = start.addingTimeInterval(3)
#expect(!set.contains("oldest", now: check))
#expect(set.contains("middle", now: check))
#expect(set.contains("newest", now: check))
}
@Test func removeReleasesSlot() {
let now = Date()
var set = ExpiringIDSet(capacity: 8, lifetime: 3600)
set.insert("a", now: now)
set.remove("a")
#expect(!set.contains("a", now: now))
let reinserted = set.insert("a", now: now)
#expect(reinserted)
}
@Test func initPrunesExpiredPersistedEntries() {
let now = Date()
let set = ExpiringIDSet(
capacity: 8,
lifetime: 3600,
entries: [
"stale": now.addingTimeInterval(-7200),
"fresh": now.addingTimeInterval(-60)
],
now: now
)
#expect(!set.contains("stale", now: now))
#expect(set.contains("fresh", now: now))
}
// MARK: - Store round trip
@Test func snapshotRoundTripsThroughDisk() {
let fileURL = FileManager.default.temporaryDirectory
.appendingPathComponent("bridge-dedup-store-\(UUID().uuidString).json")
defer { try? FileManager.default.removeItem(at: fileURL) }
let recorded = Date(timeIntervalSince1970: 1_700_000_000)
let store = BridgeDropDedupStore(fileURL: fileURL)
store.save(BridgeDropDedupStore.Snapshot(
publishedDropKeys: ["msg-1": recorded],
seenDropEventIDs: ["event-1": recorded]
))
let reloaded = BridgeDropDedupStore(fileURL: fileURL).load()
#expect(reloaded.publishedDropKeys["msg-1"] == recorded)
#expect(reloaded.seenDropEventIDs["event-1"] == recorded)
}
@Test func wipeRemovesTheRecord() {
let fileURL = FileManager.default.temporaryDirectory
.appendingPathComponent("bridge-dedup-store-\(UUID().uuidString).json")
defer { try? FileManager.default.removeItem(at: fileURL) }
let store = BridgeDropDedupStore(fileURL: fileURL)
store.save(BridgeDropDedupStore.Snapshot(
publishedDropKeys: ["msg-1": Date()],
seenDropEventIDs: [:]
))
store.wipe()
let reloaded = BridgeDropDedupStore(fileURL: fileURL).load()
#expect(reloaded.publishedDropKeys.isEmpty)
#expect(reloaded.seenDropEventIDs.isEmpty)
}
@Test func nonPersistingStoreStaysEmpty() {
let store = BridgeDropDedupStore(persistsToDisk: false)
store.save(BridgeDropDedupStore.Snapshot(
publishedDropKeys: ["msg-1": Date()],
seenDropEventIDs: [:]
))
#expect(store.load().publishedDropKeys.isEmpty)
}
}