WIP
This commit is contained in:
73
tests/clipboredtests/ClipboardEncryptionServiceTests.swift
Normal file
73
tests/clipboredtests/ClipboardEncryptionServiceTests.swift
Normal file
@@ -0,0 +1,73 @@
|
||||
import CryptoKit
|
||||
import XCTest
|
||||
@testable import ClipBored
|
||||
|
||||
final class ClipboardEncryptionServiceTests: XCTestCase {
|
||||
func testProtectAndUnprotectRoundTrip() throws {
|
||||
let service = makeService(byte: 7)
|
||||
let value = "secret clipboard value \(UUID().uuidString)"
|
||||
|
||||
let protected = try XCTUnwrap(service.protect(value))
|
||||
|
||||
XCTAssertTrue(ClipboardEncryptionService.isProtected(protected))
|
||||
XCTAssertFalse(protected.contains(value))
|
||||
XCTAssertEqual(service.unprotect(protected), value)
|
||||
}
|
||||
|
||||
func testUnprotectLeavesPlaintextValuesUntouched() {
|
||||
let service = makeService(byte: 7)
|
||||
let value = "plain clipboard value"
|
||||
|
||||
XCTAssertEqual(service.unprotect(value), value)
|
||||
}
|
||||
|
||||
func testMarkerLookingPlaintextIsStillEncryptable() throws {
|
||||
let service = makeService(byte: 7)
|
||||
let value = ClipboardEncryptionService.marker + "not encrypted user text"
|
||||
|
||||
let protected = try XCTUnwrap(service.protect(value))
|
||||
|
||||
XCTAssertNotEqual(protected, value)
|
||||
XCTAssertEqual(service.unprotect(protected), value)
|
||||
XCTAssertEqual(service.unprotect(value), value)
|
||||
}
|
||||
|
||||
func testWrongKeyCannotDecryptProtectedValue() throws {
|
||||
let service = makeService(byte: 7)
|
||||
let wrongService = makeService(byte: 9)
|
||||
let protected = try XCTUnwrap(service.protect("keyed secret"))
|
||||
|
||||
XCTAssertNil(wrongService.unprotect(protected))
|
||||
}
|
||||
|
||||
func testProtectDataAndUnprotectDataRoundTrip() throws {
|
||||
let service = makeService(byte: 7)
|
||||
let data = Data((0..<128).map { UInt8($0) })
|
||||
|
||||
let protected = service.protectData(data)
|
||||
|
||||
XCTAssertTrue(ClipboardEncryptionService.isProtected(protected))
|
||||
XCTAssertNotEqual(protected, data)
|
||||
XCTAssertEqual(service.unprotectData(protected), data)
|
||||
}
|
||||
|
||||
func testWrongKeyCannotDecryptProtectedData() {
|
||||
let service = makeService(byte: 7)
|
||||
let wrongService = makeService(byte: 9)
|
||||
let protected = service.protectData(Data("binary secret".utf8))
|
||||
|
||||
XCTAssertNil(wrongService.unprotectData(protected))
|
||||
}
|
||||
|
||||
func testProtectFallsBackToPlaintextWhenKeyIsUnavailable() {
|
||||
let service = ClipboardEncryptionService(keyProvider: { nil })
|
||||
|
||||
XCTAssertEqual(service.protect("available only in memory"), "available only in memory")
|
||||
XCTAssertEqual(service.protectData(Data("available only in memory".utf8)), Data("available only in memory".utf8))
|
||||
}
|
||||
|
||||
private func makeService(byte: UInt8) -> ClipboardEncryptionService {
|
||||
let keyData = Data(repeating: byte, count: 32)
|
||||
return ClipboardEncryptionService(keyProvider: { SymmetricKey(data: keyData) })
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user