Files
bitchat/bitchatTests/PreviewKeychainManagerTests.swift

76 lines
3.1 KiB
Swift

import Foundation
import Testing
import BitFoundation
@testable import bitchat
@Suite("PreviewKeychainManager Tests")
struct PreviewKeychainManagerTests {
@Test("Install lifecycle distinguishes upgrade, reinstall, bootstrap, and unreadable keychain")
func installLifecycleDecision() {
#expect(KeychainManager.installLifecycleAction(
containerKnowsMarker: true,
markerRead: .success(Data([1]))
) == .markerPresent)
#expect(KeychainManager.installLifecycleAction(
containerKnowsMarker: false,
markerRead: .success(Data([1]))
) == .clearStaleKeys)
#expect(KeychainManager.installLifecycleAction(
containerKnowsMarker: false,
markerRead: .itemNotFound
) == .bootstrapMarker)
#expect(KeychainManager.installLifecycleAction(
containerKnowsMarker: false,
markerRead: .deviceLocked
) == .retryLater)
}
@Test("Preview keychain manager stores identity and service-scoped data in memory")
func previewKeychainManagerRoundTripsData() {
let manager = PreviewKeychainManager()
let identityKey = Data([1, 2, 3, 4])
let serviceKey = "preview-service"
let scopedData = Data([9, 8, 7, 6])
#expect(!manager.verifyIdentityKeyExists())
#expect(manager.saveIdentityKey(identityKey, forKey: "noiseStaticKey"))
#expect(manager.getIdentityKey(forKey: "noiseStaticKey") == identityKey)
#expect(manager.saveIdentityKey(identityKey, forKey: "identity_noiseStaticKey"))
#expect(manager.verifyIdentityKeyExists())
if case .success(let stored) = manager.getIdentityKeyWithResult(forKey: "noiseStaticKey") {
#expect(stored == identityKey)
} else {
Issue.record("Expected stored preview identity key")
}
if case .success = manager.saveIdentityKeyWithResult(Data([5, 6, 7]), forKey: "ed25519SigningKey") {
} else {
Issue.record("Expected preview keychain save to succeed")
}
manager.save(key: "blob", data: scopedData, service: serviceKey, accessible: nil)
#expect(manager.load(key: "blob", service: serviceKey) == scopedData)
manager.delete(key: "blob", service: serviceKey)
#expect(manager.load(key: "blob", service: serviceKey) == nil)
var secretData = Data([4, 3, 2, 1])
var secretString = "secret"
manager.secureClear(&secretData)
manager.secureClear(&secretString)
#expect(secretData == Data([4, 3, 2, 1]))
#expect(secretString == "secret")
#expect(manager.deleteIdentityKey(forKey: "noiseStaticKey"))
#expect(manager.deleteIdentityKey(forKey: "identity_noiseStaticKey"))
#expect(manager.getIdentityKey(forKey: "noiseStaticKey") == nil)
#expect(manager.deleteAllKeychainData())
if case .itemNotFound = manager.getIdentityKeyWithResult(forKey: "ed25519SigningKey") {
} else {
Issue.record("Expected preview keychain to be empty after deleteAllKeychainData")
}
}
}