From 0890f65e61f4cdc9b435dc4e3bbc41ecb5ada028 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Tue, 5 May 2020 09:30:46 +1000 Subject: [PATCH] Added isSlaveThread tests. --- ...UpdateFriendRequestStatusStorageTest.swift | 14 +---- .../Multi Device/MultiDeviceProtocol.swift | 2 +- .../MultiDeviceProtocolTests.swift | 53 +++++++++++++++++++ 3 files changed, 56 insertions(+), 13 deletions(-) diff --git a/SignalMessaging/Loki/Migrations/LK001UpdateFriendRequestStatusStorageTest.swift b/SignalMessaging/Loki/Migrations/LK001UpdateFriendRequestStatusStorageTest.swift index efd9da286..60fb0b078 100644 --- a/SignalMessaging/Loki/Migrations/LK001UpdateFriendRequestStatusStorageTest.swift +++ b/SignalMessaging/Loki/Migrations/LK001UpdateFriendRequestStatusStorageTest.swift @@ -9,17 +9,7 @@ class LK001UpdateFriendRequestStatusStorageTest : XCTestCase { override func setUp() { super.setUp() - ClearCurrentAppContextForTests() - SetCurrentAppContext(TestAppContext()) - MockSSKEnvironment.activate() - - let identityManager = OWSIdentityManager.shared() - let seed = Randomness.generateRandomBytes(16)! - let keyPair = Curve25519.generateKeyPair(fromSeed: seed + seed) - let databaseConnection = identityManager.value(forKey: "dbConnection") as! YapDatabaseConnection - databaseConnection.setObject(keyPair, forKey: OWSPrimaryStorageIdentityKeyStoreIdentityKey, inCollection: OWSPrimaryStorageIdentityKeyStoreCollection) - TSAccountManager.sharedInstance().phoneNumberAwaitingVerification = keyPair.hexEncodedPublicKey - TSAccountManager.sharedInstance().didRegister() + LokiTestUtilities.setUpMockEnvironment() } func test_shouldMigrateFriendRequestStatusCorrectly() { @@ -54,7 +44,7 @@ class LK001UpdateFriendRequestStatusStorageTest : XCTestCase { } wait(for: [ migration ], timeout: 5) - storage.dbReadWriteConnection.readWrite { transaction in + storage.dbReadConnection.read { transaction in for (hexEncodedPublicKey, threadFriendRequestStatus) in hexEncodedPublicKeyMapping { let expectedFriendRequestStatus = friendRequestMappings[threadFriendRequestStatus]! let friendRequestStatus = self.storage.getFriendRequestStatus(for: hexEncodedPublicKey, transaction: transaction) diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift b/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift index afc73a8bf..5a2db292f 100644 --- a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift +++ b/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocol.swift @@ -265,7 +265,7 @@ public final class MultiDeviceProtocol : NSObject { @objc public static func isSlaveThread(_ thread: TSThread) -> Bool { guard let thread = thread as? TSContactThread else { return false } var isSlaveThread = false - Storage.read { transaction in + storage.dbReadConnection.read { transaction in isSlaveThread = storage.getMasterHexEncodedPublicKey(for: thread.contactIdentifier(), in: transaction) != nil } return isSlaveThread diff --git a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocolTests.swift b/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocolTests.swift index 1f4cb274b..ac0dece40 100644 --- a/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocolTests.swift +++ b/SignalServiceKit/src/Loki/Protocol/Multi Device/MultiDeviceProtocolTests.swift @@ -4,5 +4,58 @@ import XCTest class MultiDeviceProtocolTests : XCTestCase { + private var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() } + + override func setUp() { + super.setUp() + + LokiTestUtilities.setUpMockEnvironment() + } + + // MARK: - isSlaveThread + + func test_isSlaveThreadShouldReturnFalseOnGroupThreads() { + let allGroupTypes: [GroupType] = [ .closedGroup, .openGroup, .rssFeed ] + for groupType in allGroupTypes { + guard let groupThread = LokiTestUtilities.createGroupThread(groupType: groupType) else { return XCTFail() } + XCTAssertFalse(MultiDeviceProtocol.isSlaveThread(groupThread)) + } + } + + func test_isSlaveThreadShouldReturnTheCorrectValues() { + let master = LokiTestUtilities.generateHexEncodedPublicKey() + let slave = LokiTestUtilities.generateHexEncodedPublicKey() + let other = LokiTestUtilities.generateHexEncodedPublicKey() + + guard let masterDevice = LokiTestUtilities.getDevice(for: master) else { return XCTFail() } + guard let slaveDevice = LokiTestUtilities.getDevice(for: slave) else { return XCTFail() } + let deviceLink = DeviceLink(between: masterDevice, and: slaveDevice) + storage.dbReadWriteConnection.readWrite { transaction in + self.storage.addDeviceLink(deviceLink, in: transaction) + } + + let masterThread = LokiTestUtilities.createContactThread(for: master) + let slaveThread = LokiTestUtilities.createContactThread(for: slave) + let otherThread = LokiTestUtilities.createContactThread(for: other) + + storage.dbReadWriteConnection.read { transaction in + XCTAssertNotNil(self.storage.getMasterHexEncodedPublicKey(for: slaveThread.contactIdentifier(), in: transaction)) + } + + XCTAssertFalse(MultiDeviceProtocol.isSlaveThread(masterThread)) + XCTAssertTrue(MultiDeviceProtocol.isSlaveThread(slaveThread)) + XCTAssertFalse(MultiDeviceProtocol.isSlaveThread(otherThread)) + } + + func test_isSlaveThreadShouldWorkInsideATransaction() { + let bob = LokiTestUtilities.generateHexEncodedPublicKey() + let thread = LokiTestUtilities.createContactThread(for: bob) + storage.dbReadWriteConnection.read { transaction in + XCTAssertNoThrow(MultiDeviceProtocol.isSlaveThread(thread)) + } + storage.dbReadWriteConnection.readWrite { transaction in + XCTAssertNoThrow(MultiDeviceProtocol.isSlaveThread(thread)) + } + } }