diff --git a/enzevalos_iphone.xcodeproj/project.pbxproj b/enzevalos_iphone.xcodeproj/project.pbxproj index 7e1ec075a87609bde986e589c485784f6b885e18..ca94b6267a9cd0958ca3425d91aa7ee6c55c55a5 100644 --- a/enzevalos_iphone.xcodeproj/project.pbxproj +++ b/enzevalos_iphone.xcodeproj/project.pbxproj @@ -47,7 +47,6 @@ 4707092D2189C74200DF71A3 /* bobSecret.asc in Resources */ = {isa = PBXBuildFile; fileRef = 4707092B2189C74200DF71A3 /* bobSecret.asc */; }; 4707092E2189C74200DF71A3 /* alicePublic.asc in Resources */ = {isa = PBXBuildFile; fileRef = 4707092C2189C74200DF71A3 /* alicePublic.asc */; }; 470709302189E1C100DF71A3 /* enc+signedThunderbird.eml in Resources */ = {isa = PBXBuildFile; fileRef = 4707092F2189E1C000DF71A3 /* enc+signedThunderbird.eml */; }; - 4715F637202A0248001BFFD0 /* CoreDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4715F636202A0248001BFFD0 /* CoreDataTests.swift */; }; 47184C3922F0D8F200712A7A /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47184C3822F0D8F200712A7A /* CFNetwork.framework */; }; 471876F7223FACA900912135 /* BobPWTEST1234.asc in Resources */ = {isa = PBXBuildFile; fileRef = 471876F5223FACA900912135 /* BobPWTEST1234.asc */; }; 471876F8223FACA900912135 /* BobWithoutPW.asc in Resources */ = {isa = PBXBuildFile; fileRef = 471876F6223FACA900912135 /* BobWithoutPW.asc */; }; @@ -287,7 +286,6 @@ 4707092B2189C74200DF71A3 /* bobSecret.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bobSecret.asc; sourceTree = "<group>"; }; 4707092C2189C74200DF71A3 /* alicePublic.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = alicePublic.asc; sourceTree = "<group>"; }; 4707092F2189E1C000DF71A3 /* enc+signedThunderbird.eml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "enc+signedThunderbird.eml"; sourceTree = "<group>"; }; - 4715F636202A0248001BFFD0 /* CoreDataTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CoreDataTests.swift; sourceTree = "<group>"; }; 47184C3822F0D8F200712A7A /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = System/Library/Frameworks/CFNetwork.framework; sourceTree = SDKROOT; }; 471876F5223FACA900912135 /* BobPWTEST1234.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BobPWTEST1234.asc; sourceTree = "<group>"; }; 471876F6223FACA900912135 /* BobWithoutPW.asc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BobWithoutPW.asc; sourceTree = "<group>"; }; @@ -1326,7 +1324,6 @@ 47F0376C22A7278A0005C9DE /* private */, 470709202189C24800DF71A3 /* testKeys */, 470709112189BB4A00DF71A3 /* testMails */, - 4715F636202A0248001BFFD0 /* CoreDataTests.swift */, A15D215E223BE6E4003E0CE0 /* MailTest.swift */, A13526921D955BE000D3BFE1 /* Info.plist */, F1E918D61FBDEECA00D60418 /* LoggerTests.swift */, @@ -1922,7 +1919,6 @@ 47FAE3222524C1C0005A1BCB /* CoreMailTest.swift in Sources */, 47EABF0F2420C63600774A93 /* AuthenticationTests.swift in Sources */, 988C9C5D240D507A006213F0 /* UrlStringExtensionTests.swift in Sources */, - 4715F637202A0248001BFFD0 /* CoreDataTests.swift in Sources */, 47C22281218AFD6300BD2C2B /* AutocryptTest.swift in Sources */, 478154AE2200641900A931EC /* StudyTest.swift in Sources */, 47EABF0E2420C63600774A93 /* GeneratedMocks.swift in Sources */, diff --git a/enzevalos_iphoneTests/CoreDataTests.swift b/enzevalos_iphoneTests/CoreDataTests.swift deleted file mode 100644 index 9d041ae6345f5180efbaa42cd7883e68aaf7cdf2..0000000000000000000000000000000000000000 --- a/enzevalos_iphoneTests/CoreDataTests.swift +++ /dev/null @@ -1,371 +0,0 @@ -// -// CoreDataTests.swift -// enzevalos_iphoneTests -// -// Created by Oliver Wiese on 30.01.18. -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <https://www.gnu.org/licenses/>. -// -import XCTest - -/* - Testcases: - One plain mail, one encrypted mail - multiple plain mails form one adr, multiple encryted mails from one adr, multiple enc + plain mails from one adr - plain mails from different adr, enc mails from different adr, enc+plain mails from different adr - One EnzContact with multi adr/keys - One adr with different keys - - Own ID - - Overview Enzcontacts, adr - Test Inbox - - #records - - #Sortierung, #Mails - Test EnzContact - - #records - - Test different types of Mail (sec, insecure etc.) - - - TODO: Delete mail, move mail, reply mail, forward mail - TEST MAXID in folders! - */ - -@testable import enzevalos_iphone -class CoraDataTests: XCTestCase { - let datahandler = DataHandler.handler - let pgp = SwiftPGP() - - let userAdr = "alice@example.com" - let userName = "alice" - var user: MCOAddress = MCOAddress.init(mailbox: "alice@example.com") - var userKeyID: String = "" - - override func setUp() { - super.setUp() - pgp.resetKeychains() - datahandler.reset() - // XCTAssertLessThanOrEqual(datahandler.allFolders.count, 1, "Folder: \(datahandler.allFolders.map{$0.frontendName})") - XCTAssertEqual(datahandler.findSecretKeys().count, 0) - XCTAssertEqual(datahandler.getContacts().count, 0) - XCTAssertEqual(datahandler.getAddresses().count, 0) - (user, userKeyID) = owner() - } - - override func tearDown() { - datahandler.reset() - pgp.resetKeychains() - super.tearDown() - } - - // Test for generating list of mails with missing secret key (unable to decrypt) - func testGetAllFilteredMails() { - guard let from = MCOAddress(mailbox: "sender@example.com") - else { - return - } - guard let m1 = testMail(from: from, to: [user], cc: [], bcc: []) else { - XCTFail("Could not create test mails") - return - } - m1.unableToDecrypt = true - m1.secretKey = datahandler.createNewSecretKey(adr: "sender@example.com").keyID - - guard let m2 = testMail(from: from, to: [user], cc: [], bcc: []) else { - XCTFail("Could not create test mails") - return - } - m2.unableToDecrypt = false - m2.secretKey = datahandler.createNewSecretKey(adr: "sender@example.com").keyID - - guard let m3 = testMail(from: from, to: [user], cc: [], bcc: []) else { - XCTFail("Could not create test mails") - return - } - m3.unableToDecrypt = true - m3.secretKey = datahandler.createNewSecretKey(adr: "sender@example.com").keyID - - datahandler.save(during: "manipulate test mails") - - let mailList = datahandler.getAllNotDecryptedPersistentMail() - XCTAssertEqual(mailList.count, 2, "Wrong length: \(mailList.count)") - for mail in mailList { - XCTAssertEqual(mail.unableToDecrypt, true, "Mail is unable to decrypt. The encryption state is: \(mail.encState)") - } - } - - func createUser(adr: String = String.random().lowercased(), name: String = String.random()) -> MCOAddress { - return MCOAddress.init(displayName: name, mailbox: adr.lowercased()) - } - - func createPGPUser(adr: String = String.random().lowercased(), name: String = String.random()) -> (MCOAddress, String) { - let user = createUser(adr: adr, name: name) - let id = pgp.generateKey(adr: user.mailbox) - return (user, id) - } - - func owner() -> (MCOAddress, String) { - Logger.logging = false - let (user, userid) = createPGPUser(adr: userAdr, name: userName) - UserManager.storeUserValue(userAdr as AnyObject, attribute: Attribute.userAddr) - UserManager.storeUserValue(userid as AnyObject, attribute: Attribute.prefSecretKeyID) - UserManager.storeUserValue(userName as AnyObject, attribute: Attribute.accountname) - return (user, userid) - } - - func testArrivingMail() { - let sender = createUser() - let folder = "INBOX" - XCTAssertNil(datahandler.findMailAddress(adr: sender.mailbox)) - - if let mail = testMail(from: sender, to: [user], cc: [user], bcc: [], folder: folder) { - XCTAssertFalse(mail.isSecure) - XCTAssertFalse(mail.isEncrypted) - XCTAssertFalse(mail.isSigned) - XCTAssertFalse(mail.trouble) - XCTAssertFalse(mail.isCorrectlySigned) - - XCTAssert(mail.getCCs().count == 1) - XCTAssert(mail.getCCs()[0].mailAddress == user.mailbox) - XCTAssert(mail.getReceivers().count == 1) - XCTAssert(mail.getReceivers()[0].mailAddress == user.mailbox) - - - XCTAssertNotNil(datahandler.findMailAddress(adr: sender.mailbox)) - let f = datahandler.findFolder(with: folder) - XCTAssertEqual(f.mailsOfFolder.count, 1) - XCTAssertEqual(f.records.count, 1) - var containsMail = false - for m in f.mailsOfFolder { - if m == mail { - containsMail = true - } - } - XCTAssertTrue(containsMail) - var containsAddr = false - for r in f.records { - for a in r.addresses { - if a.mailAddress == sender.mailbox { - containsAddr = true - } - } - } - XCTAssertTrue(containsAddr) - } - else { - XCTFail("No mail") - } - } - - func testMultiplePlainMailsFromOne() { - let sender = createUser() - let n = 100 - let folderName = "INBOX" - XCTAssertNil(datahandler.findMailAddress(adr: sender.mailbox)) - for _ in 1...n { - _ = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName) - } - let folder = datahandler.findFolder(with: folderName) - XCTAssertEqual(folder.records.count, 1) - XCTAssertEqual(folder.mailsOfFolder.count, n) - XCTAssertTrue(checkOrderingOfRecord(record: folder.records.first!)) - } - - - func testMultiplePlainMails() { - let n = 10 - let m = 10 - let folderName = "INBOX" - for _ in 1...n { - let sender = createUser() - for _ in 1...m { - _ = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName) - } - } - let folder = datahandler.findFolder(with: folderName) - XCTAssertEqual(folder.records.count, n) - var prev: KeyRecord? - for record in folder.records { - XCTAssertEqual(record.mails.count, m) - XCTAssertTrue(checkOrderingOfRecord(record: record)) - if let prev = prev { - XCTAssertTrue(prev < record) - } - prev = record - } - } - - func testMixedMails() { - let (sender, keyID) = createPGPUser() - let n = 10 - let senderPGP = SwiftPGP() - let body = "mixed mails" - let folderName = "INBOX" - for _ in 1...n { - let cryptoObject = senderPGP.encrypt(plaintext: body, ids: [userKeyID], myId: keyID) - if let encMail = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject), - let plainMail = testMail(from: sender, to: [user], cc: [], bcc: []) { - XCTAssertTrue(encMail.isSecure && encMail.isSigned && encMail.isCorrectlySigned && encMail.isEncrypted && encMail.signedKey?.keyID == keyID) - XCTAssertTrue(encMail.body == body) - XCTAssertTrue(encMail.from.mailAddress == plainMail.from.mailAddress && encMail.from.primaryKey?.keyID == plainMail.from.primaryKey?.keyID) - XCTAssertTrue(plainMail.from.hasKey) - } else { - XCTFail("No mails") - } - } - let folder = datahandler.findFolder(with: folderName) - XCTAssertEqual(folder.records.count, 2) - var secureRecord = false - var insecureRecord = false - for record in folder.records { - XCTAssertEqual(record.mails.count, n) - if record.isSecure { - secureRecord = true - XCTAssertTrue(record.keyID == keyID) - } - else { - insecureRecord = true - } - } - XCTAssertTrue(secureRecord) - XCTAssertTrue(insecureRecord) - } - - func testNewKey() { - let (sender, keyID1) = createPGPUser() - let senderPGP = SwiftPGP() - let body = "mixed mails" - let folderName = "INBOX" - - let cryptoObject1 = senderPGP.encrypt(plaintext: body, ids: [userKeyID], myId: keyID1) - _ = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject1) - - let keyID2 = pgp.generateKey(adr: sender.mailbox, new: true) - let cryptoObject2 = senderPGP.encrypt(plaintext: body, ids: [userKeyID], myId: keyID2) - _ = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject2) - - let folder = datahandler.findFolder(with: folderName) - - XCTAssertEqual(folder.records.count, 2) - for record in folder.records { - XCTAssertTrue(record.isSecure) - XCTAssertTrue(record.keyID == keyID1 || record.keyID == keyID2) - } - - let cryptoObject3 = senderPGP.encrypt(plaintext: body, ids: [userKeyID], myId: keyID1) - if let oldKeyMail = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject3) { - XCTAssertTrue(oldKeyMail.isSecure) - } - } - - func testOwnRecord() { - let (sender, keyID) = createPGPUser() - let body = "enc with old key" - let folderName = "INBOX" - let oldID = userKeyID - - var myrecord = datahandler.getKeyRecord(addr: userAdr, keyID: datahandler.prefSecretKey()?.keyID) - XCTAssertEqual(myrecord.keyID, userKeyID) - XCTAssertEqual(myrecord.ezContact.records.count, 1) - - - let cryptoObject1 = pgp.encrypt(plaintext: body, ids: [oldID], myId: keyID) - _ = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject1) - let myContact = datahandler.getContactByAddress(userAdr) - - if let newKeyIDs = try? pgp.importKeys(key: CryptoTests.importKey, pw: CryptoTests.importPW, isSecretKey: true, autocrypt: false), let newKeyId = newKeyIDs.first{ - _ = datahandler.newSecretKey(keyID: newKeyId, addPk: true, saveKey: true) - if let prefSK = datahandler.prefSecretKey() { - XCTAssertTrue(newKeyId == prefSK.keyID, "newKeyID: \(newKeyId) != \(String(describing: prefSK.keyID)): prefKeyID") - XCTAssertTrue(userKeyID != newKeyId) - - let key = datahandler.findSecretKey(keyID: prefSK.keyID) - XCTAssertNotNil(key) - XCTAssertTrue(key?.keyID == newKeyId, "newKeyID: \(newKeyId) != \(String(describing: key?.keyID)): prefKeyID") - - myrecord = datahandler.getKeyRecord(addr: userAdr, keyID: prefSK.keyID) - } - XCTAssertEqual(myrecord.keyID, newKeyId) - XCTAssertEqual(myrecord.ezContact.records.count, 2) - XCTAssertTrue(myrecord.isSecure) - XCTAssertEqual(myContact.publicKeys.count, 2) - let cryptoObject2 = pgp.encrypt(plaintext: body, ids: [newKeyId], myId: keyID) - let decryptObject2 = pgp.decrypt(data: cryptoObject2.chiphertext!, decKeyIDs: [newKeyId], signatureIDs: [keyID], fromAddr: userAdr) - _ = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: decryptObject2) - - let cryptoObject3 = pgp.encrypt(plaintext: body, ids: [oldID], myId: keyID) - let decryptObject3 = pgp.decrypt(data: cryptoObject3.chiphertext!, decKeyIDs: [oldID], signatureIDs: [keyID], fromAddr: userAdr) - let oldMail = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: decryptObject3) - - XCTAssertTrue((oldMail?.decryptedWithOldPrivateKey)!) - - - } else { - XCTFail("No new key") - return - } - } - - - func checkOrderingOfRecord(record: KeyRecord) -> Bool { - var prev: PersistentMail? - for m in record.mails { - if let prev = prev { - if prev.date < m.date { - return false - } - } - prev = m - } - return true - } - - func testMail(from: MCOAddress, to: [MCOAddress], cc: [MCOAddress], bcc: [MCOAddress], flags: MCOMessageFlag = MCOMessageFlag.init(rawValue: 0), folder: String = "INBOX", date: Date = Date(timeIntervalSince1970: TimeInterval(arc4random())), cryptoObject: CryptoObject? = nil, body: String = String.random(length: 20)) -> PersistentMail? { - - let subject = String.random(length: 20) - let id = UInt64(arc4random()) - var body = body - - if let decryptedBody = cryptoObject?.decryptedText { - body = decryptedBody - } - var mail: PersistentMail? - mail = datahandler.createMail(id, sender: from, receivers: to, cc: cc, time: date, received: true, subject: subject, body: body, flags: flags, record: nil, autocrypt: nil, decryptedData: cryptoObject, folderPath: folder, secretKey: nil, encryptedBody: cryptoObject?.chiperString) - XCTAssertNotNil(mail) - XCTAssertEqual(mail?.body, body) - XCTAssertEqual(mail?.subject, subject) - XCTAssertEqual(mail?.folder.name.lowercased(), folder.lowercased()) - - return mail - } - - func testKeysPerAddress() { - let adrKey = "key@example.com" - let adrNoKey = "noKey@example.com" - let adrNoKey2 = "noKey2@example.com" - var mailAdrKey = datahandler.getMailAddress(adrKey, temporary: false) - let mailAdrNoKey = datahandler.getMailAddress(adrNoKey, temporary: false) - _ = datahandler.getMailAddress(adrNoKey2, temporary: false) - XCTAssertFalse(mailAdrKey.hasKey) - XCTAssertFalse(mailAdrNoKey.hasKey) - XCTAssertEqual(datahandler.getAddresses().count, 3) - _ = datahandler.newPublicKey(keyID: "000", cryptoType: .PGP, adr: adrKey, autocrypt: false, transferType: nil) - _ = datahandler.newPublicKey(keyID: "001", cryptoType: .PGP, adr: adrKey, autocrypt: false, transferType: nil) - mailAdrKey = datahandler.getMailAddress(adrKey, temporary: false) - XCTAssertTrue(mailAdrKey.hasKey) - let withKeys = datahandler.findMailAddress(withKey: true).count - let noKeys = datahandler.findMailAddress(withKey: false).count - XCTAssertEqual(withKeys, 1, "Adresses with key: \(withKeys)") - XCTAssertEqual(noKeys, 2, "Adresses without key: \(noKeys)") - } -}