mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-26 23:05:19 +00:00
Discard private-media callbacks during panic
This commit is contained in:
@@ -546,6 +546,71 @@ struct PrivateMediaEndToEndTests {
|
||||
bob._test_onOutboundPacket = nil
|
||||
}
|
||||
|
||||
@Test
|
||||
func panicDropsPendingPrivateMediaPolicyCompletion() async throws {
|
||||
let root = FileManager.default.temporaryDirectory
|
||||
.appendingPathComponent(
|
||||
"private-media-policy-panic-\(UUID().uuidString)",
|
||||
isDirectory: true
|
||||
)
|
||||
defer { try? FileManager.default.removeItem(at: root) }
|
||||
let alice = makeService(
|
||||
baseDirectory: root.appendingPathComponent(
|
||||
"alice",
|
||||
isDirectory: true
|
||||
)
|
||||
)
|
||||
let bob = makeService(
|
||||
baseDirectory: root.appendingPathComponent(
|
||||
"bob",
|
||||
isDirectory: true
|
||||
)
|
||||
)
|
||||
alice._test_seedConnectedPeer(
|
||||
bob.myPeerID,
|
||||
nickname: "Prerelease Bob",
|
||||
capabilities: .privateMedia,
|
||||
noisePublicKey: bob.noiseStaticPublicKeyData()
|
||||
)
|
||||
|
||||
_ = try await establishSessionCapturingPeerState(
|
||||
alice: alice,
|
||||
bob: bob
|
||||
)
|
||||
#expect(
|
||||
alice.privateMediaSendPolicy(to: bob.myPeerID)
|
||||
== .awaitingCapabilityProof
|
||||
)
|
||||
let recorder = PrivateMediaPolicyRecorder()
|
||||
alice.resolvePrivateMediaSendPolicy(to: bob.myPeerID) {
|
||||
recorder.record($0)
|
||||
}
|
||||
let registered = await TestHelpers.waitUntil(
|
||||
{
|
||||
alice._test_hasPendingPrivateMediaPolicyResolution(
|
||||
for: bob.myPeerID
|
||||
)
|
||||
},
|
||||
timeout: TestConstants.longTimeout
|
||||
)
|
||||
#expect(registered)
|
||||
|
||||
alice.suspendForPanicReset()
|
||||
alice.resetIdentityForPanic(
|
||||
currentNickname: "anon",
|
||||
restartServices: false
|
||||
)
|
||||
alice._test_forcePrivateMediaProofTimeout(for: bob.myPeerID)
|
||||
await Task.yield()
|
||||
|
||||
#expect(recorder.snapshot() == nil)
|
||||
#expect(
|
||||
!alice._test_hasPendingPrivateMediaPolicyResolution(
|
||||
for: bob.myPeerID
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
func queuedPrivatePayloadWaitsForProofNotHandshakeCompletion() async throws {
|
||||
let root = FileManager.default.temporaryDirectory
|
||||
|
||||
Reference in New Issue
Block a user