diff --git a/Signal/test/Models/AccountManagerTest.swift b/Signal/test/Models/AccountManagerTest.swift index 35a5e4e92..2aedf780b 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" } @@ -47,10 +47,6 @@ class VerifyingTSAccountManager: FailingTSAccountManager { success: @escaping () -> Void, failure: @escaping (Error) -> Void) { success() } - - override func registerForManualMessageFetching(success successBlock: @escaping () -> Void, failure failureBlock: @escaping (Error) -> Void) { - successBlock() - } } class TokenObtainingTSAccountManager: VerifyingTSAccountManager { @@ -58,11 +54,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 +88,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 +108,11 @@ class AccountManagerTest: SignalBaseTest { } func testSuccessfulRegistration() { - let tsAccountManager = TokenObtainingTSAccountManager(networkManager: TSNetworkManager.shared(), primaryStorage: OWSPrimaryStorage.shared()) + let tsAccountManager = TokenObtainingTSAccountManager(primaryStorage: OWSPrimaryStorage.shared()) + let sskEnvironment = SSKEnvironment.shared as! MockSSKEnvironment + sskEnvironment.tsAccountManager = tsAccountManager - let accountManager = AccountManager(textSecureAccountManager: tsAccountManager, preferences: self.preferences) + let accountManager = AccountManager() let expectation = self.expectation(description: "should succeed") @@ -121,7 +128,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/SignalBaseTest.m b/Signal/test/SignalBaseTest.m index 5af79232f..d07e8ab9c 100644 --- a/Signal/test/SignalBaseTest.m +++ b/Signal/test/SignalBaseTest.m @@ -23,8 +23,8 @@ NS_ASSUME_NONNULL_BEGIN SetCurrentAppContext([TestAppContext new]); - [MockEnvironment activate]; [MockSSKEnvironment activate]; + [MockEnvironment activate]; } - (void)tearDown 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/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/TSGroupModel.h b/SignalServiceKit/src/Messages/TSGroupModel.h index 287209687..562d84bf8 100644 --- a/SignalServiceKit/src/Messages/TSGroupModel.h +++ b/SignalServiceKit/src/Messages/TSGroupModel.h @@ -7,7 +7,7 @@ NS_ASSUME_NONNULL_BEGIN -extern const NSUInteger kGroupIdLength; +extern const int32_t kGroupIdLength; @interface TSGroupModel : TSYapDatabaseObject diff --git a/SignalServiceKit/src/Messages/TSGroupModel.m b/SignalServiceKit/src/Messages/TSGroupModel.m index 377bd23f1..f8dd5438c 100644 --- a/SignalServiceKit/src/Messages/TSGroupModel.m +++ b/SignalServiceKit/src/Messages/TSGroupModel.m @@ -8,7 +8,7 @@ NS_ASSUME_NONNULL_BEGIN -const NSUInteger kGroupIdLength = 16; +const int32_t kGroupIdLength = 16; @interface TSGroupModel () 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/src/Util/AppReadiness.m b/SignalServiceKit/src/Util/AppReadiness.m index 33b799179..f8ec61506 100755 --- a/SignalServiceKit/src/Util/AppReadiness.m +++ b/SignalServiceKit/src/Util/AppReadiness.m @@ -61,6 +61,12 @@ NS_ASSUME_NONNULL_BEGIN OWSAssertIsOnMainThread(); OWSAssertDebug(block); + if (CurrentAppContext().isRunningTests) { + // We don't need to an any "on app ready" work + // in the tests. + return; + } + if (self.isAppReady) { block(); return; @@ -93,6 +99,7 @@ NS_ASSUME_NONNULL_BEGIN NSArray *appReadyBlocks = [self.appReadyBlocks copy]; [self.appReadyBlocks removeAllObjects]; + for (AppReadyBlock block in appReadyBlocks) { block(); } 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]; }