From d2a6aefa2de8f12709ac3b4ee4ebef5a7774e8c1 Mon Sep 17 00:00:00 2001 From: Max Goedjen Date: Sun, 22 Mar 2020 16:23:09 -0700 Subject: [PATCH] More tests. --- SecretAgentKitTests/AgentTests.swift | 74 +++++++++++++++++++--------- SecretAgentKitTests/StubStore.swift | 15 ++++++ Secretive.xcodeproj/project.pbxproj | 4 ++ 3 files changed, 70 insertions(+), 23 deletions(-) create mode 100644 SecretAgentKitTests/StubStore.swift diff --git a/SecretAgentKitTests/AgentTests.swift b/SecretAgentKitTests/AgentTests.swift index 2291a09..8179143 100644 --- a/SecretAgentKitTests/AgentTests.swift +++ b/SecretAgentKitTests/AgentTests.swift @@ -1,6 +1,6 @@ import Foundation import XCTest -import SecretKit +@testable import SecretKit @testable import SecretAgentKit class AgentTests: XCTestCase { @@ -13,43 +13,55 @@ class AgentTests: XCTestCase { let stubReader = StubFileHandleReader(availableData: Constants.Requests.requestIdentities) let agent = Agent(storeList: SecretStoreList()) agent.handle(reader: stubReader, writer: stubWriter) - XCTAssertEqual(stubWriter.data, Constants.Responses.requestIdentities) + XCTAssertEqual(stubWriter.data, Constants.Responses.requestIdentitiesEmpty) } func testIdentitiesList() { - + let stubReader = StubFileHandleReader(availableData: Constants.Requests.requestIdentities) + let list = storeList(with: [Constants.Secrets.ecdsa256Secret, Constants.Secrets.ecdsa384Secret]) + let agent = Agent(storeList: list) + agent.handle(reader: stubReader, writer: stubWriter) + XCTAssertEqual(stubWriter.data, Constants.Responses.requestIdentitiesMultiple) } // MARK: Signatures - func testWitnessObjectionStopsRequest() { - } - - func testWitnessSignature() { - - } - - func testNoMatchingIdentities() { - - } - - func testMultipleIdentities() { - + let stubReader = StubFileHandleReader(availableData: Constants.Requests.requestSignatureWithNoneMatching) + let list = storeList(with: [Constants.Secrets.ecdsa256Secret, Constants.Secrets.ecdsa384Secret]) + let agent = Agent(storeList: list) + agent.handle(reader: stubReader, writer: stubWriter) + XCTAssertEqual(stubWriter.data, Constants.Responses.requestFailure) } func testSignature() { } + func testEndToEnd() { + + } + + // MARK: Witness protocol + + func testWitnessObjectionStopsRequest() { + + } + + func testWitnessSignature() { + let stubReader = StubFileHandleReader(availableData: Constants.Requests.requestIdentities) + let list = storeList(with: [Constants.Secrets.ecdsa256Secret, Constants.Secrets.ecdsa384Secret]) + let agent = Agent(storeList: list) + agent.handle(reader: stubReader, writer: stubWriter) + XCTAssertEqual(stubWriter.data, Constants.Responses.requestIdentitiesMultiple) + } func testRequestTracing() { - let stubReader = StubFileHandleReader(availableData: Constants.Requests.requestIdentities) - let agent = Agent(storeList: SecretStoreList()) - agent.handle(reader: stubReader, writer: stubWriter) - XCTAssert(stubWriter.data == Constants.Requests.requestIdentities) + } + // MARK: Exception Handling + func testSignatureException() { } @@ -67,17 +79,33 @@ class AgentTests: XCTestCase { extension AgentTests { + func storeList(with secrets: [SmartCard.Secret]) -> SecretStoreList { + let store = StubStore() + store.secrets.append(contentsOf: secrets) + let storeList = SecretStoreList() + storeList.add(store: store) + return storeList + } + enum Constants { enum Requests { static let requestIdentities = Data(base64Encoded: "AAAAAQs=")! - static let addIdentity = Data(base64Encoded: "AAAAAQs=")! + static let addIdentity = Data(base64Encoded: "AAAAARE=")! + static let requestSignatureWithNoneMatching = Data(base64Encoded: "AAABhA0AAACIAAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBEqCbkJbOHy5S1wVCaJoKPmpS0egM4frMqllgnlRRQ/Uvnn6EVS8oV03cPA2Bz0EdESyRKA/sbmn0aBtgjIwGELxu45UXEW1TEz6TxyS0u3vuIqR3Wo1CrQWRDnkrG/pBQAAAO8AAAAgbqmrqPUtJ8mmrtaSVexjMYyXWNqjHSnoto7zgv86xvcyAAAAA2dpdAAAAA5zc2gtY29ubmVjdGlvbgAAAAlwdWJsaWNrZXkBAAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAACIAAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBEqCbkJbOHy5S1wVCaJoKPmpS0egM4frMqllgnlRRQ/Uvnn6EVS8oV03cPA2Bz0EdESyRKA/sbmn0aBtgjIwGELxu45UXEW1TEz6TxyS0u3vuIqR3Wo1CrQWRDnkrG/pBQAAAAA=")! } enum Responses { - static let requestIdentities = Data(base64Encoded: "AAAABQwAAAAA")! - static let requestFailure = Data(base64Encoded: "AAAABQwAAAAA")! + static let requestIdentitiesEmpty = Data(base64Encoded: "AAAABQwAAAAA")! + static let requestIdentitiesMultiple = Data(base64Encoded: "AAABKwwAAAACAAAAaAAAABNlY2RzYS1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQTlRI4AAOTx6kYMMpIzeajNtblghxUmP0qqOYJBwJJ/ntTDEChzi4Gu7nAfW95on99zAYnefRkSvRhD1ZTIkkMKAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAACIAAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBG2MNc/C5OTHFE2tBvbZCVcpOGa8vBMquiTLkH4lwkeqOPxhi+PyYUfQZMTRJNPiTyWPoMBqNiCIFRVv60yPN/AHufHaOgbdTP42EgMlMMImkAjYUEv9DESHTVIs2PW1yQAAABNlY2RzYS1zaGEyLW5pc3RwMzg0")! + static let requestFailure = Data(base64Encoded: "AAAAAQU=")! } + + enum Secrets { + static let ecdsa256Secret = SmartCard.Secret(id: Data(), name: "Test Key (ECDSA 256)", algorithm: .ellipticCurve, keySize: 256, publicKey: Data(base64Encoded: "BOVEjgAA5PHqRgwykjN5qM21uWCHFSY/Sqo5gkHAkn+e1MMQKHOLga7ucB9b3mif33MBid59GRK9GEPVlMiSQwo=")!) + static let ecdsa384Secret = SmartCard.Secret(id: Data(), name: "Test Key (ECDSA 384)", algorithm: .ellipticCurve, keySize: 384, publicKey: Data(base64Encoded: "BG2MNc/C5OTHFE2tBvbZCVcpOGa8vBMquiTLkH4lwkeqOPxhi+PyYUfQZMTRJNPiTyWPoMBqNiCIFRVv60yPN/AHufHaOgbdTP42EgMlMMImkAjYUEv9DESHTVIs2PW1yQ==")!) + } + } } diff --git a/SecretAgentKitTests/StubStore.swift b/SecretAgentKitTests/StubStore.swift new file mode 100644 index 0000000..00c814c --- /dev/null +++ b/SecretAgentKitTests/StubStore.swift @@ -0,0 +1,15 @@ +import SecretKit + +class StubStore: SecretStore { + + var isAvailable: Bool = true + let id = UUID() + let name = "Stub Store" + var secrets: [SmartCard.Secret] = [] + fileprivate var smartCardStore = SmartCard.Store() + + func sign(data: Data, with secret: SmartCard.Secret) throws -> Data { + try smartCardStore.sign(data: data, with: secret) + } + +} diff --git a/Secretive.xcodeproj/project.pbxproj b/Secretive.xcodeproj/project.pbxproj index 2a011ce..3bb3897 100644 --- a/Secretive.xcodeproj/project.pbxproj +++ b/Secretive.xcodeproj/project.pbxproj @@ -48,6 +48,7 @@ 507EE34224281E12003C4FE3 /* FileHandleProtocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34124281E12003C4FE3 /* FileHandleProtocols.swift */; }; 507EE34624281F89003C4FE3 /* StubFileHandleReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34524281F89003C4FE3 /* StubFileHandleReader.swift */; }; 507EE34824281FB8003C4FE3 /* StubFileHandleWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE34724281FB8003C4FE3 /* StubFileHandleWriter.swift */; }; + 507EE34A2428263B003C4FE3 /* StubStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 507EE3492428263B003C4FE3 /* StubStore.swift */; }; 508A58AA241E06B40069DC07 /* PreviewUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58A9241E06B40069DC07 /* PreviewUpdater.swift */; }; 508A58B3241ED2180069DC07 /* AgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */; }; 508A58B5241ED48F0069DC07 /* PreviewAgentStatusChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 508A58B4241ED48F0069DC07 /* PreviewAgentStatusChecker.swift */; }; @@ -244,6 +245,7 @@ 507EE34124281E12003C4FE3 /* FileHandleProtocols.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileHandleProtocols.swift; sourceTree = ""; }; 507EE34524281F89003C4FE3 /* StubFileHandleReader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StubFileHandleReader.swift; sourceTree = ""; }; 507EE34724281FB8003C4FE3 /* StubFileHandleWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StubFileHandleWriter.swift; sourceTree = ""; }; + 507EE3492428263B003C4FE3 /* StubStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StubStore.swift; sourceTree = ""; }; 508A58A9241E06B40069DC07 /* PreviewUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewUpdater.swift; sourceTree = ""; }; 508A58AB241E121B0069DC07 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; 508A58B2241ED2180069DC07 /* AgentStatusChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgentStatusChecker.swift; sourceTree = ""; }; @@ -547,6 +549,7 @@ 5099A07B240242BA0062B6F2 /* AgentTests.swift */, 507EE34524281F89003C4FE3 /* StubFileHandleReader.swift */, 507EE34724281FB8003C4FE3 /* StubFileHandleWriter.swift */, + 507EE3492428263B003C4FE3 /* StubStore.swift */, 5099A07D240242BA0062B6F2 /* Info.plist */, ); path = SecretAgentKitTests; @@ -981,6 +984,7 @@ buildActionMask = 2147483647; files = ( 507EE34624281F89003C4FE3 /* StubFileHandleReader.swift in Sources */, + 507EE34A2428263B003C4FE3 /* StubStore.swift in Sources */, 5099A07C240242BA0062B6F2 /* AgentTests.swift in Sources */, 507EE34824281FB8003C4FE3 /* StubFileHandleWriter.swift in Sources */, );