Expand coverage for relay, identity, and location flows (#1055)

* Expand coverage for relay, identity, and location flows

* Fix macOS SwiftPM CI failures

---------

Co-authored-by: jack <jackjackbits@users.noreply.github.com>
This commit is contained in:
jack
2026-03-12 12:50:46 -10:00
committed by GitHub
co-authored by jack
parent c043cf6354
commit a136b5b7e9
22 changed files with 2926 additions and 164 deletions
@@ -0,0 +1,69 @@
import XCTest
@testable import bitchat
final class NoiseRateLimiterTests: XCTestCase {
func test_allowHandshake_blocksAfterPerPeerLimit() {
let limiter = NoiseRateLimiter()
let peerID = makePeerID(1)
for _ in 0..<NoiseSecurityConstants.maxHandshakesPerMinute {
XCTAssertTrue(limiter.allowHandshake(from: peerID))
}
XCTAssertFalse(limiter.allowHandshake(from: peerID))
}
func test_allowHandshake_blocksAfterGlobalLimitAcrossPeers() {
let limiter = NoiseRateLimiter()
for index in 0..<NoiseSecurityConstants.maxGlobalHandshakesPerMinute {
XCTAssertTrue(limiter.allowHandshake(from: makePeerID(index)))
}
XCTAssertFalse(limiter.allowHandshake(from: makePeerID(10_000)))
}
func test_reset_clearsPerPeerHandshakeLimit() async {
let limiter = NoiseRateLimiter()
let peerID = makePeerID(7)
for _ in 0..<NoiseSecurityConstants.maxHandshakesPerMinute {
XCTAssertTrue(limiter.allowHandshake(from: peerID))
}
XCTAssertFalse(limiter.allowHandshake(from: peerID))
limiter.reset(for: peerID)
try? await Task.sleep(nanoseconds: 50_000_000)
XCTAssertTrue(limiter.allowHandshake(from: peerID))
}
func test_allowMessage_blocksAfterPerPeerLimit() {
let limiter = NoiseRateLimiter()
let peerID = makePeerID(9)
for _ in 0..<NoiseSecurityConstants.maxMessagesPerSecond {
XCTAssertTrue(limiter.allowMessage(from: peerID))
}
XCTAssertFalse(limiter.allowMessage(from: peerID))
}
func test_resetAll_clearsGlobalHandshakeLimit() async {
let limiter = NoiseRateLimiter()
for index in 0..<NoiseSecurityConstants.maxGlobalHandshakesPerMinute {
XCTAssertTrue(limiter.allowHandshake(from: makePeerID(index)))
}
XCTAssertFalse(limiter.allowHandshake(from: makePeerID(20_000)))
limiter.resetAll()
try? await Task.sleep(nanoseconds: 50_000_000)
XCTAssertTrue(limiter.allowHandshake(from: makePeerID(20_001)))
}
private func makePeerID(_ value: Int) -> PeerID {
PeerID(str: String(format: "%016x", value))
}
}