diff --git a/Signal/test/Models/AccountManagerTest.swift b/Signal/test/Models/AccountManagerTest.swift index 35a5e4e92..550a1d60c 100644 --- a/Signal/test/Models/AccountManagerTest.swift +++ b/Signal/test/Models/AccountManagerTest.swift @@ -18,10 +18,10 @@ enum PushNotificationRequestResult: String { } class FailingTSAccountManager: TSAccountManager { - override public init(networkManager: TSNetworkManager, primaryStorage: OWSPrimaryStorage) { + override public init(primaryStorage: OWSPrimaryStorage) { AssertIsOnMainThread() - super.init(networkManager: networkManager, primaryStorage: primaryStorage) + super.init(primaryStorage: primaryStorage) self.phoneNumberAwaitingVerification = "+13235555555" } @@ -48,9 +48,6 @@ class VerifyingTSAccountManager: FailingTSAccountManager { success() } - override func registerForManualMessageFetching(success successBlock: @escaping () -> Void, failure failureBlock: @escaping (Error) -> Void) { - successBlock() - } } class TokenObtainingTSAccountManager: VerifyingTSAccountManager { @@ -58,11 +55,20 @@ class TokenObtainingTSAccountManager: VerifyingTSAccountManager { class AccountManagerTest: SignalBaseTest { - let tsAccountManager = FailingTSAccountManager(networkManager: TSNetworkManager.shared(), primaryStorage: OWSPrimaryStorage.shared()) - var preferences = OWSPreferences() + override func setUp() { + super.setUp() + + let tsAccountManager = FailingTSAccountManager(primaryStorage: OWSPrimaryStorage.shared()) + let sskEnvironment = SSKEnvironment.shared as! MockSSKEnvironment + sskEnvironment.tsAccountManager = tsAccountManager + } + + override func tearDown() { + super.tearDown() + } func testRegisterWhenEmptyCode() { - let accountManager = AccountManager(textSecureAccountManager: tsAccountManager, preferences: self.preferences) + let accountManager = AccountManager() let expectation = self.expectation(description: "should fail") @@ -83,7 +89,7 @@ class AccountManagerTest: SignalBaseTest { } func testRegisterWhenVerificationFails() { - let accountManager = AccountManager(textSecureAccountManager: tsAccountManager, preferences: self.preferences) + let accountManager = AccountManager() let expectation = self.expectation(description: "should fail") @@ -103,9 +109,9 @@ class AccountManagerTest: SignalBaseTest { } func testSuccessfulRegistration() { - let tsAccountManager = TokenObtainingTSAccountManager(networkManager: TSNetworkManager.shared(), primaryStorage: OWSPrimaryStorage.shared()) + let tsAccountManager = TokenObtainingTSAccountManager(primaryStorage: OWSPrimaryStorage.shared()) - let accountManager = AccountManager(textSecureAccountManager: tsAccountManager, preferences: self.preferences) + let accountManager = AccountManager() let expectation = self.expectation(description: "should succeed") @@ -121,7 +127,7 @@ class AccountManagerTest: SignalBaseTest { } func testUpdatePushTokens() { - let accountManager = AccountManager(textSecureAccountManager: tsAccountManager, preferences: self.preferences) + let accountManager = AccountManager() let expectation = self.expectation(description: "should fail") diff --git a/Signal/test/SSKTests/SSKProtoEnvelopeTest.swift b/Signal/test/SSKTests/SSKProtoEnvelopeTest.swift index 3a0f6a36b..e1b978e03 100644 --- a/Signal/test/SSKTests/SSKProtoEnvelopeTest.swift +++ b/Signal/test/SSKTests/SSKProtoEnvelopeTest.swift @@ -68,9 +68,9 @@ class SSKProtoEnvelopeTest: SignalBaseTest { func testParse_roundtrip() { let builder = SSKProtoEnvelope.builder(type: SSKProtoEnvelope.SSKProtoEnvelopeType.prekeyBundle, - source: "+13213214321", - sourceDevice: 1, timestamp: 123) + builder.setSource("+13213214321") + builder.setSourceDevice(1) let phonyContent = "phony data".data(using: .utf8)! diff --git a/Signal/test/mocks/MockEnvironment.h b/Signal/test/mocks/MockEnvironment.h index 45d53e475..035dcb8bd 100644 --- a/Signal/test/mocks/MockEnvironment.h +++ b/Signal/test/mocks/MockEnvironment.h @@ -12,6 +12,13 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)init; +@property (nonatomic) OWSContactsManager *contactsManager; +@property (nonatomic) OWSPreferences *preferences; +@property (nonatomic) OWSContactsSyncing *contactsSyncing; +@property (nonatomic) OWSSounds *sounds; +@property (nonatomic) LockInteractionController *lockInteractionController; +@property (nonatomic) OWSWindowManager *windowManager; + @end NS_ASSUME_NONNULL_END diff --git a/Signal/test/util/SearcherTest.swift b/Signal/test/util/SearcherTest.swift index c2bcf8914..b9cf09485 100644 --- a/Signal/test/util/SearcherTest.swift +++ b/Signal/test/util/SearcherTest.swift @@ -80,11 +80,11 @@ class ConversationSearcherTest: SignalBaseTest { SSKEnvironment.shared.contactsManager = ConversationSearcherContactsManager() self.dbConnection.readWrite { transaction in - let bookModel = TSGroupModel(title: "Book Club", memberIds: [aliceRecipientId, bobRecipientId], image: nil, groupId: Randomness.generateRandomBytes(kGroupIdLength)) + let bookModel = TSGroupModel(title: "Book Club", memberIds: [aliceRecipientId, bobRecipientId], image: nil, groupId: Randomness.generateRandomBytes(Int32(kGroupIdLength))) let bookClubGroupThread = TSGroupThread.getOrCreateThread(with: bookModel, transaction: transaction) self.bookClubThread = ThreadViewModel(thread: bookClubGroupThread, transaction: transaction) - let snackModel = TSGroupModel(title: "Snack Club", memberIds: [aliceRecipientId], image: nil, groupId: Randomness.generateRandomBytes(kGroupIdLength)) + let snackModel = TSGroupModel(title: "Snack Club", memberIds: [aliceRecipientId], image: nil, groupId: Randomness.generateRandomBytes(Int32(kGroupIdLength))) let snackClubGroupThread = TSGroupThread.getOrCreateThread(with: snackModel, transaction: transaction) self.snackClubThread = ThreadViewModel(thread: snackClubGroupThread, transaction: transaction) diff --git a/SignalMessaging/environment/Environment.m b/SignalMessaging/environment/Environment.m index 6cc134d22..c53a12edc 100644 --- a/SignalMessaging/environment/Environment.m +++ b/SignalMessaging/environment/Environment.m @@ -9,6 +9,19 @@ static Environment *sharedEnvironment = nil; +@interface Environment () + +@property (nonatomic) OWSContactsManager *contactsManager; +@property (nonatomic) OWSPreferences *preferences; +@property (nonatomic) OWSContactsSyncing *contactsSyncing; +@property (nonatomic) OWSSounds *sounds; +@property (nonatomic) LockInteractionController *lockInteractionController; +@property (nonatomic) OWSWindowManager *windowManager; + +@end + +#pragma mark - + @implementation Environment + (Environment *)shared diff --git a/SignalServiceKit/src/Messages/OWSIdentityManager.h b/SignalServiceKit/src/Messages/OWSIdentityManager.h index 77a5bc90b..838de61d9 100644 --- a/SignalServiceKit/src/Messages/OWSIdentityManager.h +++ b/SignalServiceKit/src/Messages/OWSIdentityManager.h @@ -16,6 +16,10 @@ extern NSString *const kNSNotificationName_IdentityStateDidChange; // number of bytes in a signal identity key, excluding the key-type byte. extern const NSUInteger kIdentityKeyLength; +#ifdef DEBUG +extern const NSUInteger kStoredIdentityKeyLength; +#endif + @class OWSRecipientIdentity; @class OWSStorage; @class SSKProtoVerified; diff --git a/SignalServiceKit/src/Messages/UD/OWSUDManager.swift b/SignalServiceKit/src/Messages/UD/OWSUDManager.swift index 83628c34d..06dbb54aa 100644 --- a/SignalServiceKit/src/Messages/UD/OWSUDManager.swift +++ b/SignalServiceKit/src/Messages/UD/OWSUDManager.swift @@ -70,9 +70,12 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager { // MARK: Recipient State private let kUnidentifiedAccessCollection = "kUnidentifiedAccessCollection" + var certificateValidator: SMKCertificateValidator + @objc public required init(primaryStorage: OWSPrimaryStorage) { self.dbConnection = primaryStorage.newDatabaseConnection() + self.certificateValidator = SMKCertificateDefaultValidator(trustRoot: OWSUDManagerImpl.trustRoot()) super.init() @@ -281,8 +284,6 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager { let anHourFromNowMs = nowMs + kHourInMs do { - let certificateValidator = SMKCertificateDefaultValidator(trustRoot: trustRoot()) - try certificateValidator.validate(senderCertificate: certificate, validationTime: anHourFromNowMs) return true } catch { @@ -298,6 +299,11 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager { @objc public func trustRoot() -> ECPublicKey { + return OWSUDManagerImpl.trustRoot() + } + + @objc + public class func trustRoot() -> ECPublicKey { guard let trustRootData = NSData(fromBase64String: kUDTrustRoot) else { // This exits. owsFail("Invalid trust root data.") diff --git a/SignalServiceKit/src/Tests/MockSSKEnvironment.h b/SignalServiceKit/src/Tests/MockSSKEnvironment.h index fe2443860..844568a01 100644 --- a/SignalServiceKit/src/Tests/MockSSKEnvironment.h +++ b/SignalServiceKit/src/Tests/MockSSKEnvironment.h @@ -21,6 +21,17 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic) OWSMessageManager *messageManager; @property (nonatomic) OWSBlockingManager *blockingManager; @property (nonatomic) OWSIdentityManager *identityManager; +@property (nonatomic) id udManager; +@property (nonatomic) OWSMessageDecrypter *messageDecrypter; +@property (nonatomic) OWSBatchMessageProcessor *batchMessageProcessor; +@property (nonatomic) OWSMessageReceiver *messageReceiver; +@property (nonatomic) TSSocketManager *socketManager; +@property (nonatomic) TSAccountManager *tsAccountManager; +@property (nonatomic) OWS2FAManager *ows2FAManager; +@property (nonatomic) OWSDisappearingMessagesJob *disappearingMessagesJob; +@property (nonatomic) ContactDiscoveryService *contactDiscoveryService; +@property (nonatomic) OWSReadReceiptManager *readReceiptManager; +@property (nonatomic) OWSOutgoingReceiptManager *outgoingReceiptManager; @end diff --git a/SignalServiceKit/tests/Contacts/TSContactThreadTest.m b/SignalServiceKit/tests/Contacts/TSContactThreadTest.m index 9366a1652..f56b0e3d9 100644 --- a/SignalServiceKit/tests/Contacts/TSContactThreadTest.m +++ b/SignalServiceKit/tests/Contacts/TSContactThreadTest.m @@ -2,10 +2,10 @@ // Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import "TSContactThread.h" #import "MockSSKEnvironment.h" #import "OWSIdentityManager.h" #import "SSKBaseTestObjC.h" +#import "TSContactThread.h" NS_ASSUME_NONNULL_BEGIN @@ -32,7 +32,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)testHasSafetyNumbersWithRemoteIdentity { - [[OWSIdentityManager sharedManager] saveRemoteIdentity:[NSData new] + [[OWSIdentityManager sharedManager] saveRemoteIdentity:[[NSMutableData alloc] initWithLength:kStoredIdentityKeyLength] recipientId:self.contactThread.contactIdentifier]; XCTAssert(self.contactThread.hasSafetyNumbers); } diff --git a/SignalServiceKit/tests/Contacts/TSThreadTest.m b/SignalServiceKit/tests/Contacts/TSThreadTest.m index 4deae92cd..5795f02b3 100644 --- a/SignalServiceKit/tests/Contacts/TSThreadTest.m +++ b/SignalServiceKit/tests/Contacts/TSThreadTest.m @@ -49,7 +49,8 @@ expiresInSeconds:0 quotedMessage:nil contactShare:nil - serverTimestamp:nil]; + serverTimestamp:nil + wasReceivedByUD:NO]; [incomingMessage save]; TSOutgoingMessage *outgoingMessage = @@ -102,7 +103,8 @@ expiresInSeconds:0 quotedMessage:nil contactShare:nil - serverTimestamp:nil]; + serverTimestamp:nil + wasReceivedByUD:NO]; [incomingMessage save]; TSAttachmentStream *outgoingAttachment = diff --git a/SignalServiceKit/tests/Messages/OWSIncomingMessageFinderTest.m b/SignalServiceKit/tests/Messages/OWSIncomingMessageFinderTest.m index e6df9c7df..03cf3dafc 100644 --- a/SignalServiceKit/tests/Messages/OWSIncomingMessageFinderTest.m +++ b/SignalServiceKit/tests/Messages/OWSIncomingMessageFinderTest.m @@ -55,7 +55,8 @@ NS_ASSUME_NONNULL_BEGIN expiresInSeconds:0 quotedMessage:nil contactShare:nil - serverTimestamp:nil]; + serverTimestamp:nil + wasReceivedByUD:NO]; [incomingMessage save]; }