mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-08-08 06:56:10 +00:00
Merge fb5b1349364b9b9f1a88a6117eafcd990ca05ddf into 1f59e814f90c3f489f48d68262cb1bf640bf6181
This commit is contained in:
commit
3b83e68a79
@ -57,10 +57,13 @@ final class MessageDeduplicator {
|
||||
lock.lock()
|
||||
defer { lock.unlock() }
|
||||
|
||||
let now = Date()
|
||||
cleanupOldEntries(before: now.addingTimeInterval(-maxAge))
|
||||
|
||||
if lookup[id] == nil {
|
||||
let now = Date()
|
||||
entries.append(Entry(id: id, timestamp: now))
|
||||
lookup[id] = now
|
||||
trimIfNeeded()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
44
bitchatTests/MessageDeduplicatorTests.swift
Normal file
44
bitchatTests/MessageDeduplicatorTests.swift
Normal file
@ -0,0 +1,44 @@
|
||||
//
|
||||
// MessageDeduplicatorTests.swift
|
||||
// bitchatTests
|
||||
//
|
||||
// Tests for MessageDeduplicator.
|
||||
// This is free and unencumbered software released into the public domain.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Testing
|
||||
@testable import bitchat
|
||||
|
||||
@Suite("Message Deduplicator")
|
||||
struct MessageDeduplicatorTests {
|
||||
@Test func markProcessed_enforcesMaximumCount() {
|
||||
let deduplicator = MessageDeduplicator(maxAge: 300, maxCount: 4)
|
||||
|
||||
for id in ["a", "b", "c", "d", "e"] {
|
||||
deduplicator.markProcessed(id)
|
||||
}
|
||||
|
||||
#expect(!deduplicator.contains("a"))
|
||||
#expect(!deduplicator.contains("b"))
|
||||
#expect(deduplicator.contains("c"))
|
||||
#expect(deduplicator.contains("d"))
|
||||
#expect(deduplicator.contains("e"))
|
||||
}
|
||||
|
||||
@Test func markProcessed_cleansExpiredEntriesBeforeCountTrim() async {
|
||||
let deduplicator = MessageDeduplicator(maxAge: 0.1, maxCount: 4)
|
||||
|
||||
deduplicator.markProcessed("expired")
|
||||
try? await Task.sleep(nanoseconds: 200_000_000)
|
||||
|
||||
for id in ["b", "c", "d", "e"] {
|
||||
deduplicator.markProcessed(id)
|
||||
}
|
||||
|
||||
#expect(deduplicator.contains("b"))
|
||||
#expect(deduplicator.contains("c"))
|
||||
#expect(deduplicator.contains("d"))
|
||||
#expect(deduplicator.contains("e"))
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user