From e3a080dd5bc802b2a67ff9d1fc7ec052b0349a40 Mon Sep 17 00:00:00 2001 From: Morgan Pretty <morgan.t.pretty@gmail.com> Date: Wed, 21 Dec 2022 18:29:57 +1100 Subject: [PATCH] Updated to the latest version of the libSession-utl (contacts size) Fixed some broken unit tests (still some broken ones) --- .../SessionUtil+Contacts.swift | 2 +- .../ios-arm64/libsession-util.a | Bin 934024 -> 935072 bytes .../libsession-util.a | Bin 2091280 -> 2093456 bytes .../session/config/contacts.h | 7 +- .../session/config/contacts.hpp | 17 +- .../LibSessionUtil/ConfigContactsSpec.swift | 13 +- .../Open Groups/OpenGroupAPISpec.swift | 48 ++-- .../MessageSenderEncryptionSpec.swift | 217 +++++++++++------- .../Networking/BatchResponseSpec.swift | 6 +- 9 files changed, 184 insertions(+), 126 deletions(-) diff --git a/SessionMessagingKit/LibSessionUtil/Config Handling/SessionUtil+Contacts.swift b/SessionMessagingKit/LibSessionUtil/Config Handling/SessionUtil+Contacts.swift index 26ce1fce0..703d6fe63 100644 --- a/SessionMessagingKit/LibSessionUtil/Config Handling/SessionUtil+Contacts.swift +++ b/SessionMessagingKit/LibSessionUtil/Config Handling/SessionUtil+Contacts.swift @@ -155,7 +155,7 @@ internal extension SessionUtil { .bytes .map { CChar(bitPattern: $0) } var contact: contacts_contact = contacts_contact() - guard contacts_get_or_create(conf, &contact, &sessionId) else { + guard contacts_get_or_construct(conf, &contact, &sessionId) else { SNLog("Unable to upsert contact from Config Message") return } diff --git a/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/ios-arm64/libsession-util.a b/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/ios-arm64/libsession-util.a index 3f991bb6aadfa330a62538ad0adf8abfb0b9eb53..16f752d7cad87a57c2693076c1a1ffb407bae5a1 100644 GIT binary patch delta 27623 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 Fe*n2<^&bEL delta 26456 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 Bs@nhn diff --git a/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/ios-arm64_x86_64-simulator/libsession-util.a b/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/ios-arm64_x86_64-simulator/libsession-util.a index 4ee48d353b230abc3f18e192c8943c10b7e75bec..3c72d9390486b861e85fc20ba479bf041df060cb 100644 GIT binary patch delta 55370 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 E-wfC3?EnA( delta 54799 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 diff --git a/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/session/config/contacts.h b/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/session/config/contacts.h index a889c7cb9..ba27f79b9 100644 --- a/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/session/config/contacts.h +++ b/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/session/config/contacts.h @@ -67,7 +67,7 @@ bool contacts_get(const config_object* conf, contacts_contact* contact, const ch /// /// This is the method that should usually be used to create or update a contact, followed by /// setting fields in the contact, and then giving it to contacts_set(). -bool contacts_get_or_create( +bool contacts_get_or_construct( const config_object* conf, contacts_contact* contact, const char* session_id) __attribute__((warn_unused_result)); @@ -79,7 +79,7 @@ void contacts_set(config_object* conf, const contacts_contact* contact); // is simple enough; for example to update `approved` and leave everything else unchanged: // // contacts_contact c; -// if (contacts_get_or_create(conf, &c, some_session_id)) { +// if (contacts_get_or_construct(conf, &c, some_session_id)) { // const char* new_nickname = "Joe"; // c.approved = new_nickname; // contacts_set_or_create(conf, &c); @@ -92,6 +92,9 @@ void contacts_set(config_object* conf, const contacts_contact* contact); /// iteration; see details below. bool contacts_erase(config_object* conf, const char* session_id); +/// Returns the number of contacts. +size_t contacts_size(const config_object* conf); + /// Functions for iterating through the entire contact list, in sorted order. Intended use is: /// /// contacts_contact c; diff --git a/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/session/config/contacts.hpp b/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/session/config/contacts.hpp index 1601c6146..f97199c53 100644 --- a/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/session/config/contacts.hpp +++ b/SessionMessagingKit/LibSessionUtil/libsession-util.xcframework/session/config/contacts.hpp @@ -84,16 +84,17 @@ class Contacts : public ConfigBase { /// Similar to get(), but if the session ID does not exist this returns a filled-out /// contact_info containing the session_id (all other fields will be empty/defaulted). This is - /// intended to be combined with `set` to set-or-create a record. Note that this does not add - /// the session id to the contact list when called: that requires also calling `set` with this - /// value. - contact_info get_or_create(std::string_view pubkey_hex) const; + /// intended to be combined with `set` to set-or-create a record. + /// + /// NB: calling this does *not* add the session id to the contact list when called: that + /// requires also calling `set` with this value. + contact_info get_or_construct(std::string_view pubkey_hex) const; /// Sets or updates multiple contact info values at once with the given info. The usual use is /// to access the current info, change anything desired, then pass it back into set_contact, /// e.g.: /// - /// auto c = contacts.get_or_create(pubkey); + /// auto c = contacts.get_or_construct(pubkey); /// c.name = "Session User 42"; /// c.nickname = "BFF"; /// contacts.set(c); @@ -119,6 +120,12 @@ class Contacts : public ConfigBase { /// example. iterator erase(iterator it); + /// Returns the number of contacts. + size_t size() const; + + /// Returns true if the contact list is empty. + bool empty() const { return size() == 0; } + /// Iterators for iterating through all contacts. Typically you access this implicit via a for /// loop over the `Contacts` object: /// diff --git a/SessionMessagingKitTests/LibSessionUtil/ConfigContactsSpec.swift b/SessionMessagingKitTests/LibSessionUtil/ConfigContactsSpec.swift index b2f9c7744..f1426c85b 100644 --- a/SessionMessagingKitTests/LibSessionUtil/ConfigContactsSpec.swift +++ b/SessionMessagingKitTests/LibSessionUtil/ConfigContactsSpec.swift @@ -38,8 +38,10 @@ class ConfigContactsSpec: QuickSpec { let contactPtr: UnsafeMutablePointer<contacts_contact>? = nil expect(contacts_get(conf, contactPtr, &definitelyRealId)).to(beFalse()) + expect(contacts_size(conf)).to(equal(0)) + var contact2: contacts_contact = contacts_contact() - expect(contacts_get_or_create(conf, &contact2, &definitelyRealId)).to(beTrue()) + expect(contacts_get_or_construct(conf, &contact2, &definitelyRealId)).to(beTrue()) expect(contact2.name).to(beNil()) expect(contact2.nickname).to(beNil()) expect(contact2.approved).to(beFalse()) @@ -155,7 +157,7 @@ class ConfigContactsSpec: QuickSpec { .bytes .map { CChar(bitPattern: $0) } var contact5: contacts_contact = contacts_contact() - expect(contacts_get_or_create(conf2, &contact5, &anotherId)).to(beTrue()) + expect(contacts_get_or_construct(conf2, &contact5, &anotherId)).to(beTrue()) expect(contact5.name).to(beNil()) expect(contact5.nickname).to(beNil()) expect(contact5.approved).to(beFalse()) @@ -193,6 +195,8 @@ class ConfigContactsSpec: QuickSpec { // Iterate through and make sure we got everything we expected var sessionIds: [String] = [] var nicknames: [String] = [] + expect(contacts_size(conf)).to(equal(2)) + var contact6: contacts_contact = contacts_contact() let contactIterator: UnsafeMutablePointer<contacts_iterator> = contacts_iterator_new(conf) while !contacts_iterator_done(contactIterator, &contact6) { @@ -211,6 +215,7 @@ class ConfigContactsSpec: QuickSpec { contacts_iterator_free(contactIterator) // Need to free the iterator expect(sessionIds.count).to(equal(2)) + expect(sessionIds.count).to(equal(contacts_size(conf))) expect(sessionIds.first).to(equal(String(cString: definitelyRealId.nullTerminated()))) expect(sessionIds.last).to(equal(String(cString: anotherId.nullTerminated()))) expect(nicknames.first).to(equal("Joey")) @@ -233,7 +238,7 @@ class ConfigContactsSpec: QuickSpec { .map { CChar(bitPattern: $0) } let profileKey7: [UInt8] = "qwerty".bytes var contact7: contacts_contact = contacts_contact() - expect(contacts_get_or_create(conf2, &contact7, &thirdId)).to(beTrue()) + expect(contacts_get_or_construct(conf2, &contact7, &thirdId)).to(beTrue()) nickname7.withUnsafeBufferPointer { contact7.nickname = $0.baseAddress } contact7.approved = true contact7.approved_me = true @@ -297,6 +302,8 @@ class ConfigContactsSpec: QuickSpec { // Validate the changes var sessionIds2: [String] = [] var nicknames2: [String] = [] + expect(contacts_size(conf)).to(equal(2)) + var contact8: contacts_contact = contacts_contact() let contactIterator2: UnsafeMutablePointer<contacts_iterator> = contacts_iterator_new(conf) while !contacts_iterator_done(contactIterator2, &contact8) { diff --git a/SessionMessagingKitTests/Open Groups/OpenGroupAPISpec.swift b/SessionMessagingKitTests/Open Groups/OpenGroupAPISpec.swift index d0bee4fff..d97f36586 100644 --- a/SessionMessagingKitTests/Open Groups/OpenGroupAPISpec.swift +++ b/SessionMessagingKitTests/Open Groups/OpenGroupAPISpec.swift @@ -27,9 +27,9 @@ class OpenGroupAPISpec: QuickSpec { var dependencies: SMKDependencies! var response: (ResponseInfoType, Codable)? = nil - var pollResponse: [OpenGroupAPI.Endpoint: (ResponseInfoType, Codable?)]? + var pollResponse: (info: ResponseInfoType, data: [OpenGroupAPI.Endpoint: Codable])? var error: Error? - + describe("an OpenGroupAPI") { // MARK: - Configuration @@ -205,14 +205,16 @@ class OpenGroupAPISpec: QuickSpec { expect(error?.localizedDescription).to(beNil()) // Validate the response data - expect(pollResponse?.values).to(haveCount(3)) - expect(pollResponse?.keys).to(contain(.capabilities)) - expect(pollResponse?.keys).to(contain(.roomPollInfo("testRoom", 0))) - expect(pollResponse?.keys).to(contain(.roomMessagesRecent("testRoom"))) - expect(pollResponse?[.capabilities]?.0).to(beAKindOf(TestOnionRequestAPI.ResponseInfo.self)) + + expect(pollResponse?.data.count).to(equal(3)) + expect(pollResponse?.data.keys).to(contain(.capabilities)) + expect(pollResponse?.data.keys).to(contain(.roomPollInfo("testRoom", 0))) + expect(pollResponse?.data.keys).to(contain(.roomMessagesRecent("testRoom"))) + expect(pollResponse?.data[.capabilities]) + .to(beAKindOf(TestOnionRequestAPI.ResponseInfo.self)) // Validate request data - let requestData: TestOnionRequestAPI.RequestData? = (pollResponse?[.capabilities]?.0 as? TestOnionRequestAPI.ResponseInfo)?.requestData + let requestData: TestOnionRequestAPI.RequestData? = (pollResponse?.data[.capabilities] as? TestOnionRequestAPI.ResponseInfo)?.requestData expect(requestData?.urlString).to(equal("testserver/batch")) expect(requestData?.httpMethod).to(equal("POST")) expect(requestData?.publicKey).to(equal("88672ccb97f40bb57238989226cf429b575ba355443f47bc76c5ab144a96c65b")) @@ -241,7 +243,7 @@ class OpenGroupAPISpec: QuickSpec { timeout: .milliseconds(100) ) expect(error?.localizedDescription).to(beNil()) - expect(pollResponse?.keys).to(contain(.roomMessagesRecent("testRoom"))) + expect(pollResponse?.data.keys).to(contain(.roomMessagesRecent("testRoom"))) } it("retrieves recent messages if there was a last message and it has not performed the initial poll and the last message was too long ago") { @@ -272,7 +274,7 @@ class OpenGroupAPISpec: QuickSpec { timeout: .milliseconds(100) ) expect(error?.localizedDescription).to(beNil()) - expect(pollResponse?.keys).to(contain(.roomMessagesRecent("testRoom"))) + expect(pollResponse?.data.keys).to(contain(.roomMessagesRecent("testRoom"))) } it("retrieves recent messages if there was a last message and it has performed an initial poll but it was not too long ago") { @@ -303,7 +305,7 @@ class OpenGroupAPISpec: QuickSpec { timeout: .milliseconds(100) ) expect(error?.localizedDescription).to(beNil()) - expect(pollResponse?.keys).to(contain(.roomMessagesSince("testRoom", seqNo: 123))) + expect(pollResponse?.data.keys).to(contain(.roomMessagesSince("testRoom", seqNo: 123))) } it("retrieves recent messages if there was a last message and there has already been a poll this session") { @@ -334,7 +336,7 @@ class OpenGroupAPISpec: QuickSpec { timeout: .milliseconds(100) ) expect(error?.localizedDescription).to(beNil()) - expect(pollResponse?.keys).to(contain(.roomMessagesSince("testRoom", seqNo: 123))) + expect(pollResponse?.data.keys).to(contain(.roomMessagesSince("testRoom", seqNo: 123))) } context("when unblinded") { @@ -370,8 +372,8 @@ class OpenGroupAPISpec: QuickSpec { expect(error?.localizedDescription).to(beNil()) // Validate the response data - expect(pollResponse?.keys).toNot(contain(.inbox)) - expect(pollResponse?.keys).toNot(contain(.outbox)) + expect(pollResponse?.data.keys).toNot(contain(.inbox)) + expect(pollResponse?.data.keys).toNot(contain(.outbox)) } } @@ -471,8 +473,8 @@ class OpenGroupAPISpec: QuickSpec { expect(error?.localizedDescription).to(beNil()) // Validate the response data - expect(pollResponse?.keys).to(contain(.inbox)) - expect(pollResponse?.keys).to(contain(.outbox)) + expect(pollResponse?.data.keys).to(contain(.inbox)) + expect(pollResponse?.data.keys).to(contain(.outbox)) } it("retrieves recent inbox messages if there was no last message") { @@ -498,7 +500,7 @@ class OpenGroupAPISpec: QuickSpec { timeout: .milliseconds(100) ) expect(error?.localizedDescription).to(beNil()) - expect(pollResponse?.keys).to(contain(.inbox)) + expect(pollResponse?.data.keys).to(contain(.inbox)) } it("retrieves inbox messages since the last message if there was one") { @@ -529,7 +531,7 @@ class OpenGroupAPISpec: QuickSpec { timeout: .milliseconds(100) ) expect(error?.localizedDescription).to(beNil()) - expect(pollResponse?.keys).to(contain(.inboxSince(id: 124))) + expect(pollResponse?.data.keys).to(contain(.inboxSince(id: 124))) } it("retrieves recent outbox messages if there was no last message") { @@ -555,7 +557,7 @@ class OpenGroupAPISpec: QuickSpec { timeout: .milliseconds(100) ) expect(error?.localizedDescription).to(beNil()) - expect(pollResponse?.keys).to(contain(.outbox)) + expect(pollResponse?.data.keys).to(contain(.outbox)) } it("retrieves outbox messages since the last message if there was one") { @@ -586,7 +588,7 @@ class OpenGroupAPISpec: QuickSpec { timeout: .milliseconds(100) ) expect(error?.localizedDescription).to(beNil()) - expect(pollResponse?.keys).to(contain(.outboxSince(id: 125))) + expect(pollResponse?.data.keys).to(contain(.outboxSince(id: 125))) } } } @@ -650,9 +652,9 @@ class OpenGroupAPISpec: QuickSpec { ) expect(error?.localizedDescription).to(beNil()) - let capabilitiesResponse: HTTP.BatchSubResponse<OpenGroupAPI.Capabilities>? = (pollResponse?[.capabilities]?.1 as? HTTP.BatchSubResponse<OpenGroupAPI.Capabilities>) - let pollInfoResponse: HTTP.BatchSubResponse<OpenGroupAPI.RoomPollInfo>? = (pollResponse?[.roomPollInfo("testRoom", 0)]?.1 as? HTTP.BatchSubResponse<OpenGroupAPI.RoomPollInfo>) - let messagesResponse: HTTP.BatchSubResponse<[Failable<OpenGroupAPI.Message>]>? = (pollResponse?[.roomMessagesRecent("testRoom")]?.1 as? HTTP.BatchSubResponse<[Failable<OpenGroupAPI.Message>]>) + let capabilitiesResponse: HTTP.BatchSubResponse<OpenGroupAPI.Capabilities>? = (pollResponse?.data[.capabilities] as? HTTP.BatchSubResponse<OpenGroupAPI.Capabilities>) + let pollInfoResponse: HTTP.BatchSubResponse<OpenGroupAPI.RoomPollInfo>? = (pollResponse?.data[.roomPollInfo("testRoom", 0)] as? HTTP.BatchSubResponse<OpenGroupAPI.RoomPollInfo>) + let messagesResponse: HTTP.BatchSubResponse<[Failable<OpenGroupAPI.Message>]>? = (pollResponse?.data[.roomMessagesRecent("testRoom")] as? HTTP.BatchSubResponse<[Failable<OpenGroupAPI.Message>]>) expect(capabilitiesResponse?.failedToParseBody).to(beFalse()) expect(pollInfoResponse?.failedToParseBody).to(beTrue()) expect(messagesResponse?.failedToParseBody).to(beTrue()) diff --git a/SessionMessagingKitTests/Sending & Receiving/MessageSenderEncryptionSpec.swift b/SessionMessagingKitTests/Sending & Receiving/MessageSenderEncryptionSpec.swift index aa3de4a23..514bb6af9 100644 --- a/SessionMessagingKitTests/Sending & Receiving/MessageSenderEncryptionSpec.swift +++ b/SessionMessagingKitTests/Sending & Receiving/MessageSenderEncryptionSpec.swift @@ -56,11 +56,14 @@ class MessageSenderEncryptionSpec: QuickSpec { } it("can encrypt correctly") { - let result = try? MessageSender.encryptWithSessionProtocol( - "TestMessage".data(using: .utf8)!, - for: "05\(TestConstants.publicKey)", - using: SMKDependencies(storage: mockStorage) - ) + let result = mockStorage.write { db in + try? MessageSender.encryptWithSessionProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "05\(TestConstants.publicKey)", + using: SMKDependencies(storage: mockStorage) + ) + } // Note: A Nonce is used for this so we can't compare the exact value when not mocked expect(result).toNot(beNil()) @@ -68,11 +71,14 @@ class MessageSenderEncryptionSpec: QuickSpec { } it("returns the correct value when mocked") { - let result = try? MessageSender.encryptWithSessionProtocol( - "TestMessage".data(using: .utf8)!, - for: "05\(TestConstants.publicKey)", - using: dependencies - ) + let result = mockStorage.write { db in + try? MessageSender.encryptWithSessionProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "05\(TestConstants.publicKey)", + using: dependencies + ) + } expect(result?.bytes).to(equal([1, 2, 3])) } @@ -83,51 +89,63 @@ class MessageSenderEncryptionSpec: QuickSpec { _ = try Identity.filter(id: .ed25519SecretKey).deleteAll(db) } - expect { - try MessageSender.encryptWithSessionProtocol( - "TestMessage".data(using: .utf8)!, - for: "05\(TestConstants.publicKey)", - using: dependencies - ) + mockStorage.write { db in + expect { + try MessageSender.encryptWithSessionProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "05\(TestConstants.publicKey)", + using: dependencies + ) + } + .to(throwError(MessageSenderError.noUserED25519KeyPair)) } - .to(throwError(MessageSenderError.noUserED25519KeyPair)) } it("throws an error if the signature generation fails") { mockSign.when { $0.signature(message: anyArray(), secretKey: anyArray()) }.thenReturn(nil) - expect { - try MessageSender.encryptWithSessionProtocol( - "TestMessage".data(using: .utf8)!, - for: "05\(TestConstants.publicKey)", - using: dependencies - ) + mockStorage.write { db in + expect { + try MessageSender.encryptWithSessionProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "05\(TestConstants.publicKey)", + using: dependencies + ) + } + .to(throwError(MessageSenderError.signingFailed)) } - .to(throwError(MessageSenderError.signingFailed)) } it("throws an error if the encryption fails") { mockBox.when { $0.seal(message: anyArray(), recipientPublicKey: anyArray()) }.thenReturn(nil) - expect { - try MessageSender.encryptWithSessionProtocol( - "TestMessage".data(using: .utf8)!, - for: "05\(TestConstants.publicKey)", - using: dependencies - ) + mockStorage.write { db in + expect { + try MessageSender.encryptWithSessionProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "05\(TestConstants.publicKey)", + using: dependencies + ) + } + .to(throwError(MessageSenderError.encryptionFailed)) } - .to(throwError(MessageSenderError.encryptionFailed)) } } context("when encrypting with the blinded session protocol") { it("successfully encrypts") { - let result = try? MessageSender.encryptWithSessionBlindingProtocol( - "TestMessage".data(using: .utf8)!, - for: "15\(TestConstants.blindedPublicKey)", - openGroupPublicKey: TestConstants.serverPublicKey, - using: dependencies - ) + let result = mockStorage.write { db in + try? MessageSender.encryptWithSessionBlindingProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "15\(TestConstants.blindedPublicKey)", + openGroupPublicKey: TestConstants.serverPublicKey, + using: dependencies + ) + } expect(result?.toHexString()) .to(equal( @@ -138,23 +156,29 @@ class MessageSenderEncryptionSpec: QuickSpec { } it("includes a version at the start of the encrypted value") { - let result = try? MessageSender.encryptWithSessionBlindingProtocol( - "TestMessage".data(using: .utf8)!, - for: "15\(TestConstants.blindedPublicKey)", - openGroupPublicKey: TestConstants.serverPublicKey, - using: dependencies - ) + let result = mockStorage.write { db in + try? MessageSender.encryptWithSessionBlindingProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "15\(TestConstants.blindedPublicKey)", + openGroupPublicKey: TestConstants.serverPublicKey, + using: dependencies + ) + } expect(result?.toHexString().prefix(2)).to(equal("00")) } it("includes the nonce at the end of the encrypted value") { - let maybeResult = try? MessageSender.encryptWithSessionBlindingProtocol( - "TestMessage".data(using: .utf8)!, - for: "15\(TestConstants.blindedPublicKey)", - openGroupPublicKey: TestConstants.serverPublicKey, - using: dependencies - ) + let maybeResult = mockStorage.write { db in + try? MessageSender.encryptWithSessionBlindingProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "15\(TestConstants.blindedPublicKey)", + openGroupPublicKey: TestConstants.serverPublicKey, + using: dependencies + ) + } let result: [UInt8] = (maybeResult?.bytes ?? []) let nonceBytes: [UInt8] = Array(result[max(0, (result.count - 24))..<result.count]) @@ -163,15 +187,18 @@ class MessageSenderEncryptionSpec: QuickSpec { } it("throws an error if the recipient isn't a blinded id") { - expect { - try MessageSender.encryptWithSessionBlindingProtocol( - "TestMessage".data(using: .utf8)!, - for: "05\(TestConstants.publicKey)", - openGroupPublicKey: TestConstants.serverPublicKey, - using: dependencies - ) + mockStorage.write { db in + expect { + try MessageSender.encryptWithSessionBlindingProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "05\(TestConstants.publicKey)", + openGroupPublicKey: TestConstants.serverPublicKey, + using: dependencies + ) + } + .to(throwError(MessageSenderError.signingFailed)) } - .to(throwError(MessageSenderError.signingFailed)) } it("throws an error if there is no ed25519 keyPair") { @@ -180,15 +207,18 @@ class MessageSenderEncryptionSpec: QuickSpec { _ = try Identity.filter(id: .ed25519SecretKey).deleteAll(db) } - expect { - try MessageSender.encryptWithSessionBlindingProtocol( - "TestMessage".data(using: .utf8)!, - for: "15\(TestConstants.blindedPublicKey)", - openGroupPublicKey: TestConstants.serverPublicKey, - using: dependencies - ) + mockStorage.write { db in + expect { + try MessageSender.encryptWithSessionBlindingProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "15\(TestConstants.blindedPublicKey)", + openGroupPublicKey: TestConstants.serverPublicKey, + using: dependencies + ) + } + .to(throwError(MessageSenderError.noUserED25519KeyPair)) } - .to(throwError(MessageSenderError.noUserED25519KeyPair)) } it("throws an error if it fails to generate a blinded keyPair") { @@ -206,15 +236,18 @@ class MessageSenderEncryptionSpec: QuickSpec { } .thenReturn(nil) - expect { - try MessageSender.encryptWithSessionBlindingProtocol( - "TestMessage".data(using: .utf8)!, - for: "15\(TestConstants.blindedPublicKey)", - openGroupPublicKey: TestConstants.serverPublicKey, - using: dependencies - ) + mockStorage.write { db in + expect { + try MessageSender.encryptWithSessionBlindingProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "15\(TestConstants.blindedPublicKey)", + openGroupPublicKey: TestConstants.serverPublicKey, + using: dependencies + ) + } + .to(throwError(MessageSenderError.signingFailed)) } - .to(throwError(MessageSenderError.signingFailed)) } it("throws an error if it fails to generate an encryption key") { @@ -248,15 +281,18 @@ class MessageSenderEncryptionSpec: QuickSpec { } .thenReturn(nil) - expect { - try MessageSender.encryptWithSessionBlindingProtocol( - "TestMessage".data(using: .utf8)!, - for: "15\(TestConstants.blindedPublicKey)", - openGroupPublicKey: TestConstants.serverPublicKey, - using: dependencies - ) + mockStorage.write { db in + expect { + try MessageSender.encryptWithSessionBlindingProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "15\(TestConstants.blindedPublicKey)", + openGroupPublicKey: TestConstants.serverPublicKey, + using: dependencies + ) + } + .to(throwError(MessageSenderError.signingFailed)) } - .to(throwError(MessageSenderError.signingFailed)) } it("throws an error if it fails to encrypt") { @@ -267,15 +303,18 @@ class MessageSenderEncryptionSpec: QuickSpec { .when { $0.encrypt(message: anyArray(), secretKey: anyArray(), nonce: anyArray()) } .thenReturn(nil) - expect { - try MessageSender.encryptWithSessionBlindingProtocol( - "TestMessage".data(using: .utf8)!, - for: "15\(TestConstants.blindedPublicKey)", - openGroupPublicKey: TestConstants.serverPublicKey, - using: dependencies - ) + mockStorage.write { db in + expect { + try MessageSender.encryptWithSessionBlindingProtocol( + db, + plaintext: "TestMessage".data(using: .utf8)!, + for: "15\(TestConstants.blindedPublicKey)", + openGroupPublicKey: TestConstants.serverPublicKey, + using: dependencies + ) + } + .to(throwError(MessageSenderError.encryptionFailed)) } - .to(throwError(MessageSenderError.encryptionFailed)) } } } diff --git a/SessionUtilitiesKitTests/Networking/BatchResponseSpec.swift b/SessionUtilitiesKitTests/Networking/BatchResponseSpec.swift index a794b5d3d..1030e6900 100644 --- a/SessionUtilitiesKitTests/Networking/BatchResponseSpec.swift +++ b/SessionUtilitiesKitTests/Networking/BatchResponseSpec.swift @@ -183,11 +183,11 @@ class BatchResponseSpec: QuickSpec { .sinkUntilComplete( receiveValue: { result = $0 } ) - + expect(result).toNot(beNil()) - expect((result?[0].1 as? HTTP.BatchSubResponse<TestType>)?.body) + expect((result?.responses[0] as? HTTP.BatchSubResponse<TestType>)?.body) .to(equal(testType)) - expect((result?[1].1 as? HTTP.BatchSubResponse<TestType2>)?.body) + expect((result?.responses[1] as? HTTP.BatchSubResponse<TestType2>)?.body) .to(equal(testType2)) }