LocalData/Tests/LocalDataTests/RouterSecurityTests.swift
Matt Bruce b1bf6020f3 fixed tests
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
2026-01-17 09:18:04 -06:00

95 lines
3.2 KiB
Swift

import Foundation
import Testing
import Security
@testable import LocalData
@Suite struct RouterSecurityTests {
private let router: StorageRouter
private let mockKeychain = MockKeychainHelper()
init() {
let testBaseURL = FileManager.default.temporaryDirectory.appending(path: "RouterSecurityTests-\(UUID().uuidString)")
router = StorageRouter(
keychain: mockKeychain,
encryption: EncryptionHelper(keychain: mockKeychain),
file: FileStorageHelper(configuration: FileStorageConfiguration(baseURL: testBaseURL)),
defaults: UserDefaultsHelper(defaults: UserDefaults(suiteName: "RouterSecurityTests-\(UUID().uuidString)")!)
)
}
private func makeSecurityKey(
name: String,
domain: StorageDomain,
security: SecurityPolicy
) -> StorageKey<String> {
StorageKey(
name: name,
domain: domain,
security: security,
owner: "SecurityTests",
description: "Security test key"
)
}
@Test func applySecurityNone() async throws {
let key = makeSecurityKey(name: "none.key", domain: .userDefaults(suite: nil), security: .none)
let value = "test-value"
try await router.set(value, for: key)
let retrieved: String = try await router.get(key)
#expect(retrieved == value)
}
@Test func applySecurityEncryptedAES() async throws {
let key = makeSecurityKey(
name: "aes.key",
domain: .userDefaults(suite: nil),
security: .encrypted(.aes256(keyDerivation: .hkdf()))
)
let value = "aes-secret"
try await router.set(value, for: key)
let retrieved: String = try await router.get(key)
#expect(retrieved == value)
}
@Test func applySecurityEncryptedChaCha() async throws {
let key = makeSecurityKey(
name: "chacha.key",
domain: .userDefaults(suite: nil),
security: .encrypted(.chacha20Poly1305(keyDerivation: .hkdf()))
)
let value = "chacha-secret"
try await router.set(value, for: key)
let retrieved: String = try await router.get(key)
#expect(retrieved == value)
}
@Test func applySecurityKeychain() async throws {
let key = makeSecurityKey(
name: "keychain.key",
domain: .keychain(service: "test-service"),
security: .keychain(accessibility: .afterFirstUnlock, accessControl: .none)
)
let value = "keychain-secret"
try await router.set(value, for: key)
let retrieved: String = try await router.get(key)
#expect(retrieved == value)
}
@Test func applySecurityPBKDF2() async throws {
let key = makeSecurityKey(
name: "pbkdf2.key",
domain: .userDefaults(suite: nil),
security: .encrypted(.aes256(keyDerivation: .pbkdf2()))
)
let value = "pbkdf2-secret"
try await router.set(value, for: key)
let retrieved: String = try await router.get(key)
#expect(retrieved == value)
}
}