diff --git a/SignalServiceKit/tests/Account/SignedPreKeyDeletionTests.m b/SignalServiceKit/tests/Account/SignedPreKeyDeletionTests.m index c1e9c0e1c..ff3611aba 100644 --- a/SignalServiceKit/tests/Account/SignedPreKeyDeletionTests.m +++ b/SignalServiceKit/tests/Account/SignedPreKeyDeletionTests.m @@ -1,13 +1,11 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import - -#import - +#import "OWSPrimaryStorage+SignedPreKeyStore.h" #import "TSPreKeyManager.h" -#import "TSStorageManager+SignedPreKeyStore.h" +#import +#import @interface TSPreKeyManager (Testing) @@ -30,9 +28,9 @@ } - (void)testSignedPreKeyDeletion { - [[TSStorageManager sharedManager].dbReadWriteConnection + [[OWSPrimaryStorage sharedManager].dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - [transaction removeAllObjectsInCollection:TSStorageManagerSignedPreKeyStoreCollection]; + [transaction removeAllObjectsInCollection:OWSPrimaryStorageSignedPreKeyStoreCollection]; }]; int days = 20; @@ -43,10 +41,10 @@ NSAssert(secondsAgo <= 0, @"Time in past must be negative"); NSDate *generatedAt = [NSDate dateWithTimeIntervalSinceNow:secondsAgo]; SignedPreKeyRecord *record = [[SignedPreKeyRecord alloc] initWithId:i keyPair:[Curve25519 generateKeyPair] signature:nil generatedAt:generatedAt]; - [[TSStorageManager sharedManager] storeSignedPreKey:i signedPreKeyRecord:record]; + [[OWSPrimaryStorage sharedManager] storeSignedPreKey:i signedPreKeyRecord:record]; } - NSArray *signedPreKeys = [[TSStorageManager sharedManager] loadSignedPreKeys]; + NSArray *signedPreKeys = [[OWSPrimaryStorage sharedManager] loadSignedPreKeys]; // Sanity check XCTAssert(signedPreKeys.count == 21); @@ -54,13 +52,12 @@ [TSPreKeyManager clearSignedPreKeyRecordsWithKeyId:[NSNumber numberWithInt:lastPreKeyId] success:^{ - XCTAssert( - [[TSStorageManager sharedManager] loadSignedPrekey:lastPreKeyId] != nil); + [[OWSPrimaryStorage sharedManager] loadSignedPrekey:lastPreKeyId] != nil); // We'll delete every key created 7 or more days ago. NSArray *signedPreKeys = - [[TSStorageManager sharedManager] loadSignedPreKeys]; + [[OWSPrimaryStorage sharedManager] loadSignedPreKeys]; XCTAssert(signedPreKeys.count == 7); [expection fulfill]; }]; @@ -70,9 +67,9 @@ - (void)testSignedPreKeyDeletionKeepsSomeOldKeys { - [[TSStorageManager sharedManager].dbReadWriteConnection + [[OWSPrimaryStorage sharedManager].dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - [transaction removeAllObjectsInCollection:TSStorageManagerSignedPreKeyStoreCollection]; + [transaction removeAllObjectsInCollection:OWSPrimaryStorageSignedPreKeyStoreCollection]; }]; int lastPreKeyId = 10; @@ -87,11 +84,11 @@ generatedAt:generatedAt]; // we only retain accepted keys [record markAsAcceptedByService]; - [[TSStorageManager sharedManager] storeSignedPreKey:i signedPreKeyRecord:record]; + [[OWSPrimaryStorage sharedManager] storeSignedPreKey:i signedPreKeyRecord:record]; } - NSArray *signedPreKeys = [[TSStorageManager sharedManager] loadSignedPreKeys]; + NSArray *signedPreKeys = [[OWSPrimaryStorage sharedManager] loadSignedPreKeys]; // Sanity check XCTAssert(signedPreKeys.count == 11); @@ -99,12 +96,11 @@ [TSPreKeyManager clearSignedPreKeyRecordsWithKeyId:[NSNumber numberWithInt:lastPreKeyId] success:^{ - XCTAssert( - [[TSStorageManager sharedManager] loadSignedPrekey:lastPreKeyId] != nil); + [[OWSPrimaryStorage sharedManager] loadSignedPrekey:lastPreKeyId] != nil); NSArray *signedPreKeys = - [[TSStorageManager sharedManager] loadSignedPreKeys]; + [[OWSPrimaryStorage sharedManager] loadSignedPreKeys]; // We need to keep 3 "old" keys, plus the "current" key XCTAssert(signedPreKeys.count == 4); @@ -115,9 +111,9 @@ } - (void)testOlderRecordsNotDeletedIfNoReplacement { - [[TSStorageManager sharedManager].dbReadWriteConnection + [[OWSPrimaryStorage sharedManager].dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - [transaction removeAllObjectsInCollection:TSStorageManagerSignedPreKeyStoreCollection]; + [transaction removeAllObjectsInCollection:OWSPrimaryStorageSignedPreKeyStoreCollection]; }]; int days = 3; @@ -128,10 +124,10 @@ NSAssert(secondsAgo <= 0, @"Time in past must be negative"); NSDate *generatedAt = [NSDate dateWithTimeIntervalSinceNow:secondsAgo]; SignedPreKeyRecord *record = [[SignedPreKeyRecord alloc] initWithId:i keyPair:[Curve25519 generateKeyPair] signature:nil generatedAt:generatedAt]; - [[TSStorageManager sharedManager] storeSignedPreKey:i signedPreKeyRecord:record]; + [[OWSPrimaryStorage sharedManager] storeSignedPreKey:i signedPreKeyRecord:record]; } - NSArray *signedPreKeys = [[TSStorageManager sharedManager] loadSignedPreKeys]; + NSArray *signedPreKeys = [[OWSPrimaryStorage sharedManager] loadSignedPreKeys]; // Sanity check XCTAssert(signedPreKeys.count == 4); @@ -140,10 +136,10 @@ clearSignedPreKeyRecordsWithKeyId:[NSNumber numberWithInt:lastPreKeyId] success:^{ XCTAssert( - [[TSStorageManager sharedManager] loadSignedPrekey:lastPreKeyId] != nil); + [[OWSPrimaryStorage sharedManager] loadSignedPrekey:lastPreKeyId] != nil); // All three records should still be stored. NSArray *signedPreKeys = - [[TSStorageManager sharedManager] loadSignedPreKeys]; + [[OWSPrimaryStorage sharedManager] loadSignedPreKeys]; XCTAssert(signedPreKeys.count == 4); [expection fulfill]; }]; diff --git a/SignalServiceKit/tests/Account/TSAttributesTest.m b/SignalServiceKit/tests/Account/TSAttributesTest.m index d9d2309f0..92389b8ec 100644 --- a/SignalServiceKit/tests/Account/TSAttributesTest.m +++ b/SignalServiceKit/tests/Account/TSAttributesTest.m @@ -1,11 +1,10 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import - #import "TSAttributes.h" #import "TSAccountManager.h" +#import @interface TSAttributesTest : XCTestCase @@ -24,19 +23,21 @@ } - (void)testAttributesWithSignalingKey { - + NSString *registrationId = [NSString stringWithFormat:@"%i", [TSAccountManager getOrGenerateRegistrationId]]; NSDictionary *expected = @{ - @"AuthKey" : @"fake-server-auth-token", - @"registrationId" : registrationId, - @"signalingKey" : @"fake-signaling-key", - @"video" : @1, - @"voice" : @1 - }; - + @"AuthKey" : @"fake-server-auth-token", + @"registrationId" : registrationId, + @"signalingKey" : @"fake-signaling-key", + @"video" : @1, + @"voice" : @1 + }; + NSDictionary *actual = [TSAttributes attributesWithSignalingKey:@"fake-signaling-key" - serverAuthToken:@"fake-server-auth-token"]; - + serverAuthToken:@"fake-server-auth-token" + manualMessageFetching:NO + pin:nil]; + XCTAssertEqualObjects(expected, actual); } diff --git a/SignalServiceKit/tests/Contacts/ContactSortingTest.m b/SignalServiceKit/tests/Contacts/ContactSortingTest.m index 911ed43be..855a02662 100644 --- a/SignalServiceKit/tests/Contacts/ContactSortingTest.m +++ b/SignalServiceKit/tests/Contacts/ContactSortingTest.m @@ -1,9 +1,12 @@ -// Created by Russ Shanahan on 11/25/16. -// Copyright © 2016 Open Whisper Systems. All rights reserved. +// +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// #import "Contact.h" #import +@import Contacts; + NS_ASSUME_NONNULL_BEGIN @interface ContactSortingTest : XCTestCase @@ -85,17 +88,15 @@ NS_ASSUME_NONNULL_BEGIN + (NSArray *)contactArrayForNames:(NSArray*>*)namePairs { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - ABRecordID fakeRecordId = 0; -#pragma clang diagnostic pop NSMutableArray*contacts = [[NSMutableArray alloc] initWithCapacity:namePairs.count]; for (NSArray*namePair in namePairs) { - Contact *c = [[Contact alloc] initWithContactWithFirstName:namePair[0] - andLastName:namePair[1] - andUserTextPhoneNumbers:@[] - andImage:nil - andContactID:fakeRecordId++]; + + CNMutableContact *cnContact = [CNMutableContact new]; + cnContact.givenName = namePair[0]; + cnContact.familyName = namePair[1]; + + Contact *c = [[Contact alloc] initWithSystemContact:cnContact]; + [contacts addObject:c]; } diff --git a/SignalServiceKit/tests/Contacts/PhoneNumberTest.m b/SignalServiceKit/tests/Contacts/PhoneNumberTest.m index 68ff88803..08f20cc26 100644 --- a/SignalServiceKit/tests/Contacts/PhoneNumberTest.m +++ b/SignalServiceKit/tests/Contacts/PhoneNumberTest.m @@ -1,9 +1,9 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import #import "PhoneNumber.h" +#import @interface PhoneNumberTest : XCTestCase @@ -14,19 +14,19 @@ @implementation PhoneNumberTest -(void)testE164 { - XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"+1 (902) 555-5555" fromRegion:@"US"] toE164]); - XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"1 (902) 555-5555" fromRegion:@"US"] toE164]); - XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"1-902-555-5555" fromRegion:@"US"] toE164]); - XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"1-902-555-5555" fromRegion:@"US"] toE164]); + XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"+1 (902) 555-5555"] toE164]); + XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"1 (902) 555-5555"] toE164]); + XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"1-902-555-5555"] toE164]); + XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"1-902-555-5555"] toE164]); // Phone numbers missing a calling code. - XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"9025555555" fromRegion:@"US"] toE164]); + XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"9025555555"] toE164]); // Phone numbers with a calling code but without a plus - XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromText:@"19025555555" fromRegion:@"US"] toE164]); + XCTAssertEqualObjects(@"+19025555555", [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@"19025555555"] toE164]); // Empty input. - XCTAssertEqualObjects(nil, [[PhoneNumber tryParsePhoneNumberFromText:@"" fromRegion:@"US"] toE164]); + XCTAssertEqualObjects(nil, [[PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:@""] toE164]); } - (void)testTryParsePhoneNumberFromUserSpecifiedTextAssumesLocalRegion { diff --git a/SignalServiceKit/tests/Contacts/SignalRecipientTest.m b/SignalServiceKit/tests/Contacts/SignalRecipientTest.m index 10d46127f..0e2fbc655 100644 --- a/SignalServiceKit/tests/Contacts/SignalRecipientTest.m +++ b/SignalServiceKit/tests/Contacts/SignalRecipientTest.m @@ -1,10 +1,11 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "SignalRecipient.h" #import "TSAccountManager.h" -#import "TSStorageManager+keyingMaterial.h" + +//#import "TSStorageManager+keyingMaterial.h" #import @interface TSAccountManager (Testing) diff --git a/SignalServiceKit/tests/Contacts/TSThreadTest.m b/SignalServiceKit/tests/Contacts/TSThreadTest.m index b355733ae..be71219ba 100644 --- a/SignalServiceKit/tests/Contacts/TSThreadTest.m +++ b/SignalServiceKit/tests/Contacts/TSThreadTest.m @@ -1,13 +1,13 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "OWSDevice.h" +#import "OWSPrimaryStorage.h" #import "TSAttachmentStream.h" #import "TSContactThread.h" #import "TSIncomingMessage.h" #import "TSOutgoingMessage.h" -#import "TSStorageManager.h" #import @interface TSThreadTest : XCTestCase @@ -21,7 +21,8 @@ [super setUp]; // Register views, etc. - [[TSStorageManager sharedManager] setupDatabaseWithSafeBlockingMigrations:^{}]; + [[OWSPrimaryStorage sharedManager] setupDatabaseWithSafeBlockingMigrations:^{ + }]; } - (void)tearDown diff --git a/SignalServiceKit/tests/Devices/OWSDeviceProvisionerTest.m b/SignalServiceKit/tests/Devices/OWSDeviceProvisionerTest.m index d74fb005b..a1b874ca9 100644 --- a/SignalServiceKit/tests/Devices/OWSDeviceProvisionerTest.m +++ b/SignalServiceKit/tests/Devices/OWSDeviceProvisionerTest.m @@ -1,5 +1,5 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "OWSDeviceProvisioner.h" @@ -7,7 +7,6 @@ #import "OWSDeviceProvisioningService.h" #import "OWSFakeNetworkManager.h" #import "TSNetworkManager.h" - #import @interface OWSFakeDeviceProvisioningService : OWSDeviceProvisioningService @@ -69,6 +68,7 @@ NSString *theirEphemeralDeviceId; OWSFakeNetworkManager *networkManager = [OWSFakeNetworkManager new]; + OWSDeviceProvisioner *provisioner = [[OWSDeviceProvisioner alloc] initWithMyPublicKey:myPublicKey myPrivateKey:myPrivateKey @@ -76,6 +76,7 @@ theirEphemeralDeviceId:theirEphemeralDeviceId accountIdentifier:accountIdentifier profileKey:profileKey + readReceiptsEnabled:YES provisioningCodeService:[[OWSFakeDeviceProvisioningCodeService alloc] initWithNetworkManager:networkManager] provisioningService:[[OWSFakeDeviceProvisioningService alloc] initWithNetworkManager:networkManager]]; diff --git a/SignalServiceKit/tests/Devices/OWSProvisioningCipherTest.m b/SignalServiceKit/tests/Devices/OWSProvisioningCipherTest.m index df7936386..9ae9e4432 100644 --- a/SignalServiceKit/tests/Devices/OWSProvisioningCipherTest.m +++ b/SignalServiceKit/tests/Devices/OWSProvisioningCipherTest.m @@ -1,11 +1,11 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import -#import -#import <25519/Curve25519.h> +#import #import +#import +#import @interface OWSProvisioningCipher(Testing) diff --git a/SignalServiceKit/tests/Messages/Interactions/TSMessageTest.m b/SignalServiceKit/tests/Messages/Interactions/TSMessageTest.m index b5b70bdc9..6371f6a57 100644 --- a/SignalServiceKit/tests/Messages/Interactions/TSMessageTest.m +++ b/SignalServiceKit/tests/Messages/Interactions/TSMessageTest.m @@ -1,12 +1,11 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import "NSDate+millisecondTimeStamp.h" +#import "TSMessage.h" +#import "NSDate+OWS.h" #import "TSAttachmentStream.h" #import "TSContactThread.h" -#import "TSMessage.h" - #import NS_ASSUME_NONNULL_BEGIN diff --git a/SignalServiceKit/tests/Messages/OWSDisappearingMessageFinderTest.m b/SignalServiceKit/tests/Messages/OWSDisappearingMessageFinderTest.m index fc10ce797..cb05888ef 100644 --- a/SignalServiceKit/tests/Messages/OWSDisappearingMessageFinderTest.m +++ b/SignalServiceKit/tests/Messages/OWSDisappearingMessageFinderTest.m @@ -1,12 +1,12 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import "NSDate+millisecondTimeStamp.h" +#import "NSDate+OWS.h" #import "OWSDisappearingMessagesFinder.h" +#import "OWSPrimaryStorage.h" #import "TSContactThread.h" #import "TSMessage.h" -#import "TSStorageManager.h" #import NS_ASSUME_NONNULL_BEGIN @@ -24,7 +24,7 @@ NS_ASSUME_NONNULL_BEGIN @property YapDatabaseConnection *dbConnection; @property OWSDisappearingMessagesFinder *finder; -@property TSStorageManager *storageManager; +@property OWSPrimaryStorage *storageManager; @property TSThread *thread; @property uint64_t now; @@ -37,7 +37,7 @@ NS_ASSUME_NONNULL_BEGIN [super setUp]; [TSMessage removeAllObjectsInCollection]; - self.storageManager = [TSStorageManager sharedManager]; + self.storageManager = [OWSPrimaryStorage sharedManager]; self.dbConnection = self.storageManager.newDatabaseConnection; self.thread = [TSContactThread getOrCreateThreadWithContactId:@"fake-thread-id"]; @@ -48,50 +48,44 @@ NS_ASSUME_NONNULL_BEGIN [OWSDisappearingMessagesFinder blockingRegisterDatabaseExtensions:self.storageManager]; } +- (TSMessage *)messageWithBody:(NSString *)body + expiresInSeconds:(uint32_t)expiresInSeconds + expireStartedAt:(uint64_t)expireStartedAt +{ + return [[TSMessage alloc] initMessageWithTimestamp:1 + inThread:self.thread + messageBody:body + attachmentIds:@[] + expiresInSeconds:expiresInSeconds + expireStartedAt:expireStartedAt + quotedMessage:nil + contactShare:nil]; +} + - (void)testExpiredMessages { - TSMessage *expiredMessage1 = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"expiredMessage1" - attachmentIds:@[] - expiresInSeconds:1 - expireStartedAt:self.now - 20000]; + + + TSMessage *expiredMessage1 = + [self messageWithBody:@"expiredMessage1" expiresInSeconds:1 expireStartedAt:self.now - 20000]; [expiredMessage1 save]; - TSMessage *expiredMessage2 = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"expiredMessage2" - attachmentIds:@[] - expiresInSeconds:2 - expireStartedAt:self.now - 2001]; + TSMessage *expiredMessage2 = + [self messageWithBody:@"expiredMessage2" expiresInSeconds:2 expireStartedAt:self.now - 2001]; [expiredMessage2 save]; - TSMessage *notYetExpiredMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"notYetExpiredMessage" - attachmentIds:@[] - expiresInSeconds:20 - expireStartedAt:self.now - 10000]; + TSMessage *notYetExpiredMessage = + [self messageWithBody:@"notYetExpiredMessage" expiresInSeconds:20 expireStartedAt:self.now - 10000]; [notYetExpiredMessage save]; - TSMessage *unreadExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"unereadExpiringMessage" - attachmentIds:@[] - expiresInSeconds:10 - expireStartedAt:0]; + TSMessage *unreadExpiringMessage = + [self messageWithBody:@"unereadExpiringMessage" expiresInSeconds:10 expireStartedAt:0]; [unreadExpiringMessage save]; - TSMessage *unExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"unexpiringMessage" - attachmentIds:@[] - expiresInSeconds:0 - expireStartedAt:0]; + TSMessage *unExpiringMessage = [self messageWithBody:@"unexpiringMessage" expiresInSeconds:0 expireStartedAt:0]; [unExpiringMessage save]; - TSMessage *unExpiringMessage2 = - [[TSMessage alloc] initWithTimestamp:1 inThread:self.thread messageBody:@"unexpiringMessage2"]; + TSMessage *unExpiringMessage2 = [self messageWithBody:@"unexpiringMessage2" expiresInSeconds:0 expireStartedAt:0]; [unExpiringMessage2 save]; __block NSArray *actualMessages; @@ -105,40 +99,22 @@ NS_ASSUME_NONNULL_BEGIN - (void)testUnstartedExpiredMessagesForThread { - TSMessage *expiredMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"expiredMessage2" - attachmentIds:@[] - expiresInSeconds:2 - expireStartedAt:self.now - 2001]; + TSMessage *expiredMessage = + [self messageWithBody:@"expiredMessage2" expiresInSeconds:2 expireStartedAt:self.now - 2001]; [expiredMessage save]; - TSMessage *notYetExpiredMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"notYetExpiredMessage" - attachmentIds:@[] - expiresInSeconds:20 - expireStartedAt:self.now - 10000]; + TSMessage *notYetExpiredMessage = + [self messageWithBody:@"notYetExpiredMessage" expiresInSeconds:20 expireStartedAt:self.now - 10000]; [notYetExpiredMessage save]; - TSMessage *unreadExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"unereadExpiringMessage" - attachmentIds:@[] - expiresInSeconds:10 - expireStartedAt:0]; + TSMessage *unreadExpiringMessage = + [self messageWithBody:@"unereadExpiringMessage" expiresInSeconds:10 expireStartedAt:0]; [unreadExpiringMessage save]; - TSMessage *unExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"unexpiringMessage" - attachmentIds:@[] - expiresInSeconds:0 - expireStartedAt:0]; + TSMessage *unExpiringMessage = [self messageWithBody:@"unexpiringMessage" expiresInSeconds:0 expireStartedAt:0]; [unExpiringMessage save]; - TSMessage *unExpiringMessage2 = - [[TSMessage alloc] initWithTimestamp:1 inThread:self.thread messageBody:@"unexpiringMessage2"]; + TSMessage *unExpiringMessage2 = [self messageWithBody:@"unexpiringMessage2" expiresInSeconds:0 expireStartedAt:0]; [unExpiringMessage2 save]; __block NSArray *actualMessages; @@ -169,40 +145,25 @@ NS_ASSUME_NONNULL_BEGIN XCTAssertNil(self.nextExpirationTimestamp); - TSMessage *unExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"unexpiringMessage" - attachmentIds:@[] - expiresInSeconds:0 - expireStartedAt:0]; + TSMessage *unExpiringMessage = [self messageWithBody:@"unexpiringMessage" expiresInSeconds:0 expireStartedAt:0]; [unExpiringMessage save]; XCTAssertNil(self.nextExpirationTimestamp); } - (void)testNextExpirationTimestampNotNilWithUpcomingExpiringMessages { - TSMessage *soonToExpireMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"soonToExpireMessage" - attachmentIds:@[] - expiresInSeconds:10 - expireStartedAt:self.now - 9000]; + TSMessage *soonToExpireMessage = + [self messageWithBody:@"soonToExpireMessage" expiresInSeconds:10 expireStartedAt:self.now - 9000]; [soonToExpireMessage save]; XCTAssertNotNil(self.nextExpirationTimestamp); XCTAssertEqual(self.now + 1000, [self.nextExpirationTimestamp unsignedLongLongValue]); // expired message should take precedence - TSMessage *expiredMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:self.thread - messageBody:@"expiredMessage" - attachmentIds:@[] - expiresInSeconds:10 - expireStartedAt:self.now - 11000]; + TSMessage *expiredMessage = + [self messageWithBody:@"expiredMessage" expiresInSeconds:10 expireStartedAt:self.now - 11000]; [expiredMessage save]; - //FIXME remove sleep hack in favor of expiringMessage completion handler -// sleep(2); XCTAssertNotNil(self.nextExpirationTimestamp); XCTAssertEqual(self.now - 1000, [self.nextExpirationTimestamp unsignedLongLongValue]); } diff --git a/SignalServiceKit/tests/Messages/OWSDisappearingMessagesJobTest.m b/SignalServiceKit/tests/Messages/OWSDisappearingMessagesJobTest.m index 41677ec8e..d553459e6 100644 --- a/SignalServiceKit/tests/Messages/OWSDisappearingMessagesJobTest.m +++ b/SignalServiceKit/tests/Messages/OWSDisappearingMessagesJobTest.m @@ -1,15 +1,14 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import "NSDate+millisecondTimeStamp.h" +#import "OWSDisappearingMessagesJob.h" +#import "NSDate+OWS.h" #import "OWSDisappearingMessagesConfiguration.h" #import "OWSDisappearingMessagesFinder.h" -#import "OWSDisappearingMessagesJob.h" #import "OWSFakeContactsManager.h" #import "TSContactThread.h" #import "TSMessage.h" -#import "TSStorageManager.h" #import NS_ASSUME_NONNULL_BEGIN @@ -19,11 +18,12 @@ NS_ASSUME_NONNULL_BEGIN - (void)run; - (void)becomeConsistentWithConfigurationForMessage:(TSMessage *)message contactsManager:(id)contactsManager; - @end @interface OWSDisappearingMessagesJobTest : XCTestCase +@property TSThread *thread; + @end @implementation OWSDisappearingMessagesJobTest @@ -32,42 +32,39 @@ NS_ASSUME_NONNULL_BEGIN { [super setUp]; [TSMessage removeAllObjectsInCollection]; + self.thread = [TSContactThread getOrCreateThreadWithContactId:@"fake-thread-id"]; +} + +- (TSMessage *)messageWithBody:(NSString *)body + expiresInSeconds:(uint32_t)expiresInSeconds + expireStartedAt:(uint64_t)expireStartedAt +{ + return [[TSMessage alloc] initMessageWithTimestamp:1 + inThread:self.thread + messageBody:body + attachmentIds:@[] + expiresInSeconds:expiresInSeconds + expireStartedAt:expireStartedAt + quotedMessage:nil + contactShare:nil]; } - (void)testRemoveAnyExpiredMessage { - TSThread *thread = [TSContactThread getOrCreateThreadWithContactId:@"fake-thread-id"]; uint64_t now = [NSDate ows_millisecondTimeStamp]; - TSMessage *expiredMessage1 = [[TSMessage alloc] initWithTimestamp:1 - inThread:thread - messageBody:@"expiredMessage1" - attachmentIds:@[] - expiresInSeconds:1 - expireStartedAt:now - 20000]; + TSMessage *expiredMessage1 = + [self messageWithBody:@"expiredMessage1" expiresInSeconds:1 expireStartedAt:now - 20000]; [expiredMessage1 save]; - TSMessage *expiredMessage2 = [[TSMessage alloc] initWithTimestamp:1 - inThread:thread - messageBody:@"expiredMessage2" - attachmentIds:@[] - expiresInSeconds:2 - expireStartedAt:now - 2001]; + TSMessage *expiredMessage2 = + [self messageWithBody:@"expiredMessage2" expiresInSeconds:2 expireStartedAt:now - 2001]; [expiredMessage2 save]; - TSMessage *notYetExpiredMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:thread - messageBody:@"notYetExpiredMessage" - attachmentIds:@[] - expiresInSeconds:20 - expireStartedAt:now - 10000]; + TSMessage *notYetExpiredMessage = + [self messageWithBody:@"notYetExpiredMessage" expiresInSeconds:20 expireStartedAt:now - 10000]; [notYetExpiredMessage save]; - TSMessage *unExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:thread - messageBody:@"unexpiringMessage" - attachmentIds:@[] - expiresInSeconds:0 - expireStartedAt:0]; + TSMessage *unExpiringMessage = [self messageWithBody:@"unexpiringMessage" expiresInSeconds:0 expireStartedAt:0]; [unExpiringMessage save]; @@ -84,25 +81,17 @@ NS_ASSUME_NONNULL_BEGIN - (void)testBecomeConsistentWithMessageConfiguration { - TSThread *thread = [TSContactThread getOrCreateThreadWithContactId:@"fake-thread-id"]; - [thread save]; - OWSDisappearingMessagesJob *job = [OWSDisappearingMessagesJob sharedJob]; - + OWSDisappearingMessagesConfiguration *configuration = - [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:thread.uniqueId]; + [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:self.thread.uniqueId]; [configuration remove]; - TSMessage *expiringMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:thread - messageBody:@"notYetExpiredMessage" - attachmentIds:@[] - expiresInSeconds:20 - expireStartedAt:0]; + TSMessage *expiringMessage = [self messageWithBody:@"notYetExpiredMessage" expiresInSeconds:20 expireStartedAt:0]; [expiringMessage save]; [job becomeConsistentWithConfigurationForMessage:expiringMessage contactsManager:[OWSFakeContactsManager new]]; - configuration = [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:thread.uniqueId]; + configuration = [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:self.thread.uniqueId]; XCTAssertNotNil(configuration); XCTAssert(configuration.isEnabled); @@ -111,22 +100,16 @@ NS_ASSUME_NONNULL_BEGIN - (void)testBecomeConsistentWithUnexpiringMessageConfiguration { - TSThread *thread = [TSContactThread getOrCreateThreadWithContactId:@"fake-thread-id"]; - [thread save]; - OWSDisappearingMessagesConfiguration *configuration = - [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:thread.uniqueId]; + [OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:self.thread.uniqueId]; [configuration remove]; - TSMessage *unExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 - inThread:thread - messageBody:@"unexpiringMessage" - attachmentIds:@[] - expiresInSeconds:0 - expireStartedAt:0]; + TSMessage *unExpiringMessage = [self messageWithBody:@"unexpiringMessage" expiresInSeconds:0 expireStartedAt:0]; [unExpiringMessage save]; - [OWSDisappearingMessagesJob becomeConsistentWithConfigurationForMessage:unExpiringMessage contactsManager:[OWSFakeContactsManager new]]; - XCTAssertNil([OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:thread.uniqueId]); + [OWSDisappearingMessagesJob.sharedJob becomeConsistentWithConfigurationForMessage:unExpiringMessage + contactsManager:[OWSFakeContactsManager new]]; + + XCTAssertNil([OWSDisappearingMessagesConfiguration fetchObjectWithUniqueID:self.thread.uniqueId]); } @end diff --git a/SignalServiceKit/tests/Messages/OWSIncomingMessageFinderTest.m b/SignalServiceKit/tests/Messages/OWSIncomingMessageFinderTest.m index ba859ad95..b0046903b 100644 --- a/SignalServiceKit/tests/Messages/OWSIncomingMessageFinderTest.m +++ b/SignalServiceKit/tests/Messages/OWSIncomingMessageFinderTest.m @@ -1,9 +1,10 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import "OWSDevice.h" #import "OWSIncomingMessageFinder.h" +#import "OWSDevice.h" +#import "OWSPrimaryStorage.h" #import "TSContactThread.h" #import "TSIncomingMessage.h" #import @@ -21,6 +22,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic) NSString *sourceId; @property (nonatomic) TSThread *thread; @property (nonatomic) OWSIncomingMessageFinder *finder; +@property (nonatomic) YapDatabaseConnection *dbConnection; @end @@ -33,6 +35,7 @@ NS_ASSUME_NONNULL_BEGIN self.thread = [TSContactThread getOrCreateThreadWithContactId:self.sourceId]; self.finder = [OWSIncomingMessageFinder new]; [self.finder registerExtension]; + self.dbConnection = [OWSPrimaryStorage sharedManager].dbReadConnection; } - (void)tearDown @@ -41,62 +44,90 @@ NS_ASSUME_NONNULL_BEGIN [super tearDown]; } + +- (void)createIncomingMessageWithTimestamp:(uint64_t)timestamp + authorId:(NSString *)authorId + sourceDeviceId:(uint32_t)sourceDeviceId +{ + TSIncomingMessage *incomingMessage = [[TSIncomingMessage alloc] initIncomingMessageWithTimestamp:timestamp + inThread:self.thread + authorId:authorId + sourceDeviceId:sourceDeviceId + messageBody:@"foo" + attachmentIds:@[] + expiresInSeconds:0 + quotedMessage:nil + contactShare:nil]; + [incomingMessage save]; +} + - (void)testExistingMessages { uint64_t timestamp = 1234; - BOOL result = [self.finder existsMessageWithTimestamp:timestamp - sourceId:self.sourceId - sourceDeviceId:OWSDevicePrimaryDeviceId]; + __block BOOL result; + + [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { + result = [self.finder existsMessageWithTimestamp:timestamp + sourceId:self.sourceId + sourceDeviceId:OWSDevicePrimaryDeviceId + transaction:transaction]; + }]; + // Sanity check. XCTAssertFalse(result); // Different timestamp - [[[TSIncomingMessage alloc] initWithTimestamp:timestamp + 1 - inThread:self.thread - authorId:self.sourceId - sourceDeviceId:OWSDevicePrimaryDeviceId - messageBody:@"foo"] save]; - result = [self.finder existsMessageWithTimestamp:timestamp - sourceId:self.sourceId - sourceDeviceId:OWSDevicePrimaryDeviceId]; + [self createIncomingMessageWithTimestamp:timestamp + 1 + authorId:self.sourceId + sourceDeviceId:OWSDevicePrimaryDeviceId]; + + [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { + result = [self.finder existsMessageWithTimestamp:timestamp + sourceId:self.sourceId + sourceDeviceId:OWSDevicePrimaryDeviceId + transaction:transaction]; + }]; + XCTAssertFalse(result); // Different authorId - [[[TSIncomingMessage alloc] initWithTimestamp:timestamp - inThread:self.thread - authorId:@"some-other-author-id" - sourceDeviceId:OWSDevicePrimaryDeviceId - messageBody:@"foo"] save]; - - result = [self.finder existsMessageWithTimestamp:timestamp - sourceId:self.sourceId - sourceDeviceId:OWSDevicePrimaryDeviceId]; + [self createIncomingMessageWithTimestamp:timestamp + authorId:@"some-other-author-id" + sourceDeviceId:OWSDevicePrimaryDeviceId]; + + [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { + result = [self.finder existsMessageWithTimestamp:timestamp + sourceId:self.sourceId + sourceDeviceId:OWSDevicePrimaryDeviceId + transaction:transaction]; + }]; XCTAssertFalse(result); // Different device - [[[TSIncomingMessage alloc] initWithTimestamp:timestamp - inThread:self.thread - authorId:self.sourceId - sourceDeviceId:OWSDevicePrimaryDeviceId + 1 - messageBody:@"foo"] save]; - - result = [self.finder existsMessageWithTimestamp:timestamp - sourceId:self.sourceId - sourceDeviceId:OWSDevicePrimaryDeviceId]; + [self createIncomingMessageWithTimestamp:timestamp + authorId:self.sourceId + sourceDeviceId:OWSDevicePrimaryDeviceId + 1]; + + [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { + result = [self.finder existsMessageWithTimestamp:timestamp + sourceId:self.sourceId + sourceDeviceId:OWSDevicePrimaryDeviceId + transaction:transaction]; + }]; XCTAssertFalse(result); // The real deal... - [[[TSIncomingMessage alloc] initWithTimestamp:timestamp - inThread:self.thread - authorId:self.sourceId - sourceDeviceId:OWSDevicePrimaryDeviceId - messageBody:@"foo"] save]; - - result = [self.finder existsMessageWithTimestamp:timestamp - sourceId:self.sourceId - sourceDeviceId:OWSDevicePrimaryDeviceId]; + [self createIncomingMessageWithTimestamp:timestamp authorId:self.sourceId sourceDeviceId:OWSDevicePrimaryDeviceId]; + + [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction *_Nonnull transaction) { + result = [self.finder existsMessageWithTimestamp:timestamp + sourceId:self.sourceId + sourceDeviceId:OWSDevicePrimaryDeviceId + transaction:transaction]; + }]; + XCTAssertTrue(result); } diff --git a/SignalServiceKit/tests/Messages/OWSMessageSenderTest.m b/SignalServiceKit/tests/Messages/OWSMessageSenderTest.m index d7a8aa048..458211940 100644 --- a/SignalServiceKit/tests/Messages/OWSMessageSenderTest.m +++ b/SignalServiceKit/tests/Messages/OWSMessageSenderTest.m @@ -1,23 +1,22 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // +#import "OWSMessageSender.h" #import "Cryptography.h" #import "OWSDisappearingMessagesConfiguration.h" #import "OWSError.h" #import "OWSFakeContactsManager.h" #import "OWSFakeContactsUpdater.h" #import "OWSFakeNetworkManager.h" -#import "OWSMessageSender.h" -#import "OWSUploadingService.h" +#import "OWSPrimaryStorage.h" +#import "OWSUploadOperation.h" #import "TSAccountManager.h" #import "TSContactThread.h" #import "TSGroupModel.h" #import "TSGroupThread.h" -#import "TSMessagesManager.h" #import "TSNetworkManager.h" #import "TSOutgoingMessage.h" -#import "TSStorageManager.h" #import #import #import @@ -26,7 +25,7 @@ NS_ASSUME_NONNULL_BEGIN @interface OWSMessageSender (Testing) -@property (nonatomic) OWSUploadingService *uploadingService; +@property (nonatomic) OWSUploadingOperation *uploadingService; @property (nonatomic) ContactsUpdater *contactsUpdater; // Private Methods to test @@ -66,7 +65,7 @@ NS_ASSUME_NONNULL_BEGIN @end -@interface OWSFakeUploadingService : OWSUploadingService +@interface OWSFakeUploadingService : OWSUploadingOperation @property (nonatomic, readonly) BOOL shouldSucceed; @@ -88,7 +87,7 @@ NS_ASSUME_NONNULL_BEGIN - (void)uploadAttachmentStream:(TSAttachmentStream *)attachmentStream message:(TSOutgoingMessage *)outgoingMessage - success:(void (^)())successHandler + success:(void (^)(void))successHandler failure:(void (^)(NSError *error))failureHandler { if (self.shouldSucceed) { @@ -217,7 +216,7 @@ NS_ASSUME_NONNULL_BEGIN expiresInSeconds:30]; [self.expiringMessage save]; - TSStorageManager *storageManager = [TSStorageManager sharedManager]; + OWSPrimaryStorage *storageManager = [OWSPrimaryStorage sharedManager]; OWSFakeContactsManager *contactsManager = [OWSFakeContactsManager new]; OWSFakeContactsUpdater *contactsUpdater = [OWSFakeContactsUpdater new]; diff --git a/SignalServiceKit/tests/Messages/TSMessagesManagerTest.m b/SignalServiceKit/tests/Messages/TSMessagesManagerTest.m index 4064fef20..1c52ea2e5 100644 --- a/SignalServiceKit/tests/Messages/TSMessagesManagerTest.m +++ b/SignalServiceKit/tests/Messages/TSMessagesManagerTest.m @@ -1,9 +1,7 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import - #import "ContactsManagerProtocol.h" #import "ContactsUpdater.h" #import "Cryptography.h" @@ -12,14 +10,14 @@ #import "OWSFakeContactsUpdater.h" #import "OWSFakeMessageSender.h" #import "OWSFakeNetworkManager.h" +#import "OWSIdentityManager.h" #import "OWSMessageSender.h" +#import "OWSPrimaryStorage.h" #import "OWSSignalServiceProtos.pb.h" +#import "OWSUnitTestEnvironment.h" #import "TSGroupThread.h" -#import "TSMessagesManager.h" #import "TSNetworkManager.h" -#import "OWSIdentityManager.h" -#import "TSStorageManager.h" -#import "OWSUnitTestEnvironment.h" +#import NS_ASSUME_NONNULL_BEGIN @@ -28,7 +26,7 @@ NS_ASSUME_NONNULL_BEGIN // Private init for stubbing dependencies - (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager - storageManager:(TSStorageManager *)storageManager + storageManager:(OWSPrimaryStorage *)storageManager callMessageHandler:(id)callMessageHandler contactsManager:(id)contactsManager contactsUpdater:(ContactsUpdater *)contactsUpdater @@ -53,7 +51,7 @@ NS_ASSUME_NONNULL_BEGIN - (TSMessagesManager *)messagesManagerWithSender:(OWSMessageSender *)messageSender { return [[TSMessagesManager alloc] initWithNetworkManager:[OWSFakeNetworkManager new] - storageManager:[TSStorageManager sharedManager] + storageManager:[OWSPrimaryStorage sharedManager] callMessageHandler:[OWSFakeCallMessageHandler new] contactsManager:[OWSFakeContactsManager new] contactsUpdater:[OWSFakeContactsUpdater new] diff --git a/SignalServiceKit/tests/Security/OWSFingerprintTest.m b/SignalServiceKit/tests/Security/OWSFingerprintTest.m index ff67191e0..76cd50269 100644 --- a/SignalServiceKit/tests/Security/OWSFingerprintTest.m +++ b/SignalServiceKit/tests/Security/OWSFingerprintTest.m @@ -1,8 +1,9 @@ -// Created by Michael Kirk on 9/14/16. -// Copyright © 2016 Open Whisper Systems. All rights reserved. +// +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. +// #import "OWSFingerprint.h" -#import <25519/Curve25519.h> +#import #import @interface OWSFingerprintTest : XCTestCase diff --git a/SignalServiceKit/tests/Storage/OWSOrphanedDataCleanerTest.m b/SignalServiceKit/tests/Storage/OWSOrphanedDataCleanerTest.m index 0abda3f4b..cbb2edba0 100644 --- a/SignalServiceKit/tests/Storage/OWSOrphanedDataCleanerTest.m +++ b/SignalServiceKit/tests/Storage/OWSOrphanedDataCleanerTest.m @@ -1,13 +1,13 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import "OWSDevice.h" #import "OWSOrphanedDataCleaner.h" +#import "OWSDevice.h" +#import "OWSPrimaryStorage.h" #import "TSAttachmentStream.h" #import "TSContactThread.h" #import "TSIncomingMessage.h" -#import "TSStorageManager.h" #import @interface OWSOrphanedDataCleanerTest : XCTestCase @@ -22,7 +22,8 @@ { [super setUp]; // Register views, etc. - [[TSStorageManager sharedManager] setupDatabaseWithSafeBlockingMigrations:^{}]; + [OWSPrimaryStorage registerExtensionsWithMigrationBlock:^{ + }]; // Set up initial conditions & Sanity check [TSAttachmentStream deleteAttachments]; @@ -45,6 +46,38 @@ return [OWSOrphanedDataCleaner filePathsInAttachmentsFolder].count; } +- (TSIncomingMessage *)createIncomingMessageWithThread:(TSThread *)thread + attachmentIds:(NSArray *)attachmentIds +{ + TSIncomingMessage *incomingMessage = + [[TSIncomingMessage alloc] initIncomingMessageWithTimestamp:1 + inThread:thread + authorId:@"fake-author-id" + sourceDeviceId:OWSDevicePrimaryDeviceId + messageBody:@"footch" + attachmentIds:attachmentIds + expiresInSeconds:0 + quotedMessage:nil + contactShare:nil]; + [incomingMessage save]; + + return incomingMessage; +} + +- (TSAttachmentStream *)createAttachmentStream +{ + NSError *error; + TSAttachmentStream *attachmentStream = + [[TSAttachmentStream alloc] initWithContentType:@"image/jpeg" byteCount:12 sourceFilename:nil]; + [attachmentStream writeData:[NSData new] error:&error]; + + XCTAssertNil(error); + + [attachmentStream save]; + + return attachmentStream; +} + - (void)testInteractionsWithoutThreadAreDeleted { // This thread is intentionally not saved. It's meant to recreate a situation we've seen where interactions exist @@ -52,12 +85,9 @@ // properly deleting it's interactions. TSContactThread *unsavedThread = [[TSContactThread alloc] initWithUniqueId:@"this-thread-does-not-exist"]; - TSIncomingMessage *incomingMessage = [[TSIncomingMessage alloc] initWithTimestamp:1 - inThread:unsavedThread - authorId:@"fake-author-id" - sourceDeviceId:OWSDevicePrimaryDeviceId - messageBody:@"footch"]; - [incomingMessage save]; + __unused TSIncomingMessage *incomingMessage = + [self createIncomingMessageWithThread:unsavedThread attachmentIds:@[]]; + XCTAssertEqual(1, [TSIncomingMessage numberOfKeysInCollection]); XCTestExpectation *expectation = [self expectationWithDescription:@"Cleanup"]; @@ -79,12 +109,8 @@ TSContactThread *savedThread = [[TSContactThread alloc] initWithUniqueId:@"this-thread-exists"]; [savedThread save]; - TSIncomingMessage *incomingMessage = [[TSIncomingMessage alloc] initWithTimestamp:1 - inThread:savedThread - authorId:@"fake-author-id" - sourceDeviceId:OWSDevicePrimaryDeviceId - messageBody:@"footch"]; - [incomingMessage save]; + __unused TSIncomingMessage *incomingMessage = [self createIncomingMessageWithThread:savedThread attachmentIds:@[]]; + XCTAssertEqual(1, [TSIncomingMessage numberOfKeysInCollection]); XCTestExpectation *expectation = [self expectationWithDescription:@"Cleanup"]; @@ -106,10 +132,8 @@ // sanity check XCTAssertEqual(0, [self numberOfItemsInAttachmentsFolder]); - NSError *error; - TSAttachmentStream *attachmentStream = [[TSAttachmentStream alloc] initWithContentType:@"image/jpeg" sourceFilename:nil]; - [attachmentStream writeData:[NSData new] error:&error]; - [attachmentStream save]; + TSAttachmentStream *attachmentStream = [self createAttachmentStream]; + NSString *orphanedFilePath = [attachmentStream filePath]; BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:orphanedFilePath]; XCTAssert(fileExists); @@ -139,19 +163,10 @@ TSContactThread *savedThread = [[TSContactThread alloc] initWithUniqueId:@"this-thread-exists"]; [savedThread save]; - NSError *error; - TSAttachmentStream *attachmentStream = [[TSAttachmentStream alloc] initWithContentType:@"image/jpeg" sourceFilename:nil]; - [attachmentStream writeData:[NSData new] error:&error]; - [attachmentStream save]; + TSAttachmentStream *attachmentStream = [self createAttachmentStream]; - TSIncomingMessage *incomingMessage = [[TSIncomingMessage alloc] initWithTimestamp:1 - inThread:savedThread - authorId:@"fake-author-id" - sourceDeviceId:OWSDevicePrimaryDeviceId - messageBody:@"footch" - attachmentIds:@[ attachmentStream.uniqueId ] - expiresInSeconds:0]; - [incomingMessage save]; + __unused TSIncomingMessage *incomingMessage = + [self createIncomingMessageWithThread:savedThread attachmentIds:@[ attachmentStream.uniqueId ]]; NSString *attachmentFilePath = [attachmentStream filePath]; BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:attachmentFilePath]; @@ -177,7 +192,8 @@ - (void)testFilesWithoutAttachmentStreamsAreDeleted { NSError *error; - TSAttachmentStream *attachmentStream = [[TSAttachmentStream alloc] initWithContentType:@"image/jpeg" sourceFilename:nil]; + TSAttachmentStream *attachmentStream = + [[TSAttachmentStream alloc] initWithContentType:@"image/jpeg" byteCount:0 sourceFilename:nil]; [attachmentStream writeData:[NSData new] error:&error]; // Intentionally not saved, because we want a lingering file. diff --git a/SignalServiceKit/tests/Storage/TSMessageStorageTests.m b/SignalServiceKit/tests/Storage/TSMessageStorageTests.m index 64b351dba..58ed24acf 100644 --- a/SignalServiceKit/tests/Storage/TSMessageStorageTests.m +++ b/SignalServiceKit/tests/Storage/TSMessageStorageTests.m @@ -1,20 +1,16 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import - #import "Cryptography.h" -#import "TSThread.h" +#import "OWSPrimaryStorage.h" #import "TSContactThread.h" #import "TSGroupThread.h" - -#import "TSStorageManager.h" - #import "TSIncomingMessage.h" #import "TSMessage.h" #import "TSOutgoingMessage.h" - +#import "TSThread.h" +#import @interface TSMessageStorageTests : XCTestCase @@ -28,14 +24,14 @@ { [super setUp]; - [[TSStorageManager sharedManager].dbReadWriteConnection + [[OWSPrimaryStorage sharedManager].dbReadWriteConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { self.thread = [TSContactThread getOrCreateThreadWithContactId:@"aStupidId" transaction:transaction]; [self.thread saveWithTransaction:transaction]; }]; - TSStorageManager *manager = [TSStorageManager sharedManager]; + OWSPrimaryStorage *manager = [OWSPrimaryStorage sharedManager]; [manager purgeCollection:[TSMessage collection]]; } @@ -49,8 +45,8 @@ { __block NSInteger messageInt; NSString *body = @"I don't see myself as a hero because what I'm doing is self-interested: I don't want to live in a world where there's no privacy and therefore no room for intellectual exploration and creativity."; - [[TSStorageManager sharedManager].newDatabaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - + [[OWSPrimaryStorage sharedManager].newDatabaseConnection readWriteWithBlock:^( + YapDatabaseReadWriteTransaction *transaction) { NSString* messageId; for (uint64_t i = 0; i<50; i++) { @@ -59,7 +55,7 @@ [newMessage saveWithTransaction:transaction]; if (i == 0) { messageId = newMessage.uniqueId; - } + } } messageInt = [messageId integerValue]; @@ -72,7 +68,7 @@ } }]; - [[TSStorageManager sharedManager].newDatabaseConnection + [[OWSPrimaryStorage sharedManager].newDatabaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { TSOutgoingMessage *deletedmessage = [TSOutgoingMessage fetchObjectWithUniqueID:[@(messageInt + 49) stringValue]]; @@ -101,11 +97,12 @@ authorId:[self.thread contactIdentifier] sourceDeviceId:1 messageBody:body]; - [[TSStorageManager sharedManager].newDatabaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { - [newMessage saveWithTransaction:transaction]; - messageId = newMessage.uniqueId; - }]; - + [[OWSPrimaryStorage sharedManager].newDatabaseConnection + readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + [newMessage saveWithTransaction:transaction]; + messageId = newMessage.uniqueId; + }]; + TSIncomingMessage *fetchedMessage = [TSIncomingMessage fetchObjectWithUniqueID:messageId]; XCTAssertEqualObjects(body, fetchedMessage.body); @@ -155,7 +152,7 @@ NSString *body = @"A child born today will grow up with no conception of privacy at all. They’ll never know what it means to have a private moment to themselves an unrecorded, unanalyzed thought. And that’s a problem because privacy matters; privacy is what allows us to determine who we are and who we want to be."; __block TSGroupThread *thread; - [[TSStorageManager sharedManager].dbReadWriteConnection readWriteWithBlock:^( + [[OWSPrimaryStorage sharedManager].dbReadWriteConnection readWriteWithBlock:^( YapDatabaseReadWriteTransaction *transaction) { thread = [TSGroupThread getOrCreateThreadWithGroupModel:[[TSGroupModel alloc] initWithTitle:@"fdsfsd" memberIds:[@[] mutableCopy] @@ -166,7 +163,7 @@ [thread saveWithTransaction:transaction]; }]; - TSStorageManager *manager = [TSStorageManager sharedManager]; + OWSPrimaryStorage *manager = [OWSPrimaryStorage sharedManager]; [manager purgeCollection:[TSMessage collection]]; NSMutableArray *messages = [NSMutableArray new]; diff --git a/SignalServiceKit/tests/Storage/TSStorageIdentityKeyStoreTests.m b/SignalServiceKit/tests/Storage/TSStorageIdentityKeyStoreTests.m index 57388b6cf..14365caa9 100644 --- a/SignalServiceKit/tests/Storage/TSStorageIdentityKeyStoreTests.m +++ b/SignalServiceKit/tests/Storage/TSStorageIdentityKeyStoreTests.m @@ -1,16 +1,15 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import -#import <25519/Curve25519.h> - -#import "OWSUnitTestEnvironment.h" -#import "SecurityUtils.h" #import "OWSIdentityManager.h" +#import "OWSPrimaryStorage.h" #import "OWSRecipientIdentity.h" -#import "TSStorageManager.h" +#import "OWSUnitTestEnvironment.h" +#import "SecurityUtils.h" #import "TextSecureKitEnv.h" +#import +#import @interface TSStorageIdentityKeyStoreTests : XCTestCase @@ -20,8 +19,8 @@ - (void)setUp { [super setUp]; - - [[TSStorageManager sharedManager] purgeCollection:@"TSStorageManagerTrustedKeysCollection"]; + + [[OWSPrimaryStorage sharedManager] purgeCollection:OWSPrimaryStorageTrustedKeysCollection]; [OWSRecipientIdentity removeAllObjectsInCollection]; } diff --git a/SignalServiceKit/tests/Storage/TSStoragePreKeyStoreTests.m b/SignalServiceKit/tests/Storage/TSStoragePreKeyStoreTests.m index 2eddbc39c..468a94fff 100644 --- a/SignalServiceKit/tests/Storage/TSStoragePreKeyStoreTests.m +++ b/SignalServiceKit/tests/Storage/TSStoragePreKeyStoreTests.m @@ -1,12 +1,8 @@ // -// TSStoragePreKeyStoreTests.m -// TextSecureKit -// -// Created by Frederic Jacobs on 07/11/14. -// Copyright (c) 2014 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import "TSStorageManager+PreKeyStore.h" +#import "OWSPrimaryStorage+PreKeyStore.h" #import @interface TSStoragePreKeyStoreTests : XCTestCase @@ -26,38 +22,38 @@ } - (void)testGeneratingAndStoringPreKeys { - NSArray *generatedKeys = [[TSStorageManager sharedManager] generatePreKeyRecords]; - - + NSArray *generatedKeys = [[OWSPrimaryStorage sharedManager] generatePreKeyRecords]; + + XCTAssert([generatedKeys count] == 100, @"Not hundred keys generated"); - - [[TSStorageManager sharedManager] storePreKeyRecords:generatedKeys]; - + + [[OWSPrimaryStorage sharedManager] storePreKeyRecords:generatedKeys]; + PreKeyRecord *lastPreKeyRecord = [generatedKeys lastObject]; PreKeyRecord *firstPreKeyRecord = [generatedKeys firstObject]; - - XCTAssert([[[TSStorageManager sharedManager] loadPreKey:lastPreKeyRecord.Id].keyPair.publicKey isEqualToData:lastPreKeyRecord.keyPair.publicKey]); - - XCTAssert([[[TSStorageManager sharedManager] loadPreKey:firstPreKeyRecord.Id].keyPair.publicKey isEqualToData:firstPreKeyRecord.keyPair.publicKey]); - + + XCTAssert([[[OWSPrimaryStorage sharedManager] loadPreKey:lastPreKeyRecord.Id].keyPair.publicKey + isEqualToData:lastPreKeyRecord.keyPair.publicKey]); + + XCTAssert([[[OWSPrimaryStorage sharedManager] loadPreKey:firstPreKeyRecord.Id].keyPair.publicKey + isEqualToData:firstPreKeyRecord.keyPair.publicKey]); } - (void)testRemovingPreKeys { - NSArray *generatedKeys = [[TSStorageManager sharedManager] generatePreKeyRecords]; - + NSArray *generatedKeys = [[OWSPrimaryStorage sharedManager] generatePreKeyRecords]; + XCTAssert([generatedKeys count] == 100, @"Not hundred keys generated"); - - [[TSStorageManager sharedManager] storePreKeyRecords:generatedKeys]; - + + [[OWSPrimaryStorage sharedManager] storePreKeyRecords:generatedKeys]; + PreKeyRecord *lastPreKeyRecord = [generatedKeys lastObject]; PreKeyRecord *firstPreKeyRecord = [generatedKeys firstObject]; - - [[TSStorageManager sharedManager] removePreKey:lastPreKeyRecord.Id]; - - XCTAssertThrows([[TSStorageManager sharedManager] loadPreKey:lastPreKeyRecord.Id]); - XCTAssertNoThrow([[TSStorageManager sharedManager] loadPreKey:firstPreKeyRecord.Id]); - + + [[OWSPrimaryStorage sharedManager] removePreKey:lastPreKeyRecord.Id]; + + XCTAssertThrows([[OWSPrimaryStorage sharedManager] loadPreKey:lastPreKeyRecord.Id]); + XCTAssertNoThrow([[OWSPrimaryStorage sharedManager] loadPreKey:firstPreKeyRecord.Id]); } @end diff --git a/SignalServiceKit/tests/Util/CryptographyTests.m b/SignalServiceKit/tests/Util/CryptographyTests.m index 958efdbc7..215143a59 100644 --- a/SignalServiceKit/tests/Util/CryptographyTests.m +++ b/SignalServiceKit/tests/Util/CryptographyTests.m @@ -1,10 +1,10 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -#import #import "Cryptography.h" #import "NSData+Base64.h" +#import NS_ASSUME_NONNULL_BEGIN @@ -57,11 +57,44 @@ NS_ASSUME_NONNULL_BEGIN NSData *cipherText = [Cryptography encryptAttachmentData:plainTextData outKey:&generatedKey outDigest:&generatedDigest]; - NSData *decryptedData = [Cryptography decryptAttachment:cipherText withKey:generatedKey digest:generatedDigest]; + + NSError *error; + NSData *decryptedData = [Cryptography decryptAttachment:cipherText + withKey:generatedKey + digest:generatedDigest + unpaddedSize:(UInt32)cipherText.length + error:&error]; + XCTAssertNil(error); XCTAssertEqualObjects(plainTextData, decryptedData); } +- (void)testEncryptAttachmentDataWithBadUnpaddedSize +{ + + NSString *plainText = @"SGF3YWlpIGlzIEF3ZXNvbWUh"; + NSData *plainTextData = [NSData dataFromBase64String:plainText]; + + // Sanity + XCTAssertNotNil(plainTextData); + + NSData *generatedKey; + NSData *generatedDigest; + + NSData *cipherText = + [Cryptography encryptAttachmentData:plainTextData outKey:&generatedKey outDigest:&generatedDigest]; + + + NSError *error; + NSData *decryptedData = [Cryptography decryptAttachment:cipherText + withKey:generatedKey + digest:generatedDigest + unpaddedSize:(UInt32)cipherText.length + 1 + error:&error]; + XCTAssertNotNil(error); + XCTAssertNil(decryptedData); +} + - (void)testDecryptAttachmentWithBadKey { NSString *plainText = @"SGF3YWlpIGlzIEF3ZXNvbWUh"; @@ -78,7 +111,12 @@ NS_ASSUME_NONNULL_BEGIN NSData *badKey = [Cryptography generateRandomBytes:64]; - NSData *decryptedData = [Cryptography decryptAttachment:cipherText withKey:badKey digest:generatedDigest]; + NSError *error; + NSData *decryptedData = [Cryptography decryptAttachment:cipherText + withKey:badKey + digest:generatedDigest + unpaddedSize:(UInt32)cipherText.length + 1 + error:&error]; XCTAssertNil(decryptedData); } @@ -99,7 +137,12 @@ NS_ASSUME_NONNULL_BEGIN NSData *badDigest = [Cryptography generateRandomBytes:32]; - NSData *decryptedData = [Cryptography decryptAttachment:cipherText withKey:generatedKey digest:badDigest]; + NSError *error; + NSData *decryptedData = [Cryptography decryptAttachment:cipherText + withKey:generatedKey + digest:badDigest + unpaddedSize:(UInt32)cipherText.length + 1 + error:&error]; XCTAssertNil(decryptedData); }