diff --git a/Podfile b/Podfile
index a161c4805..485fd48ea 100644
--- a/Podfile
+++ b/Podfile
@@ -11,7 +11,7 @@ def shared_pods
pod 'YapDatabase/SQLCipher', :git => 'https://github.com/signalapp/YapDatabase.git', branch: 'signal-release'
pod 'AxolotlKit', git: 'https://github.com/signalapp/SignalProtocolKit.git'
# pod 'AxolotlKit', path: '../SignalProtocolKit'
- pod 'SignalServiceKit', path: '.'
+ pod 'SignalServiceKit', path: '.', testspecs: ["Tests"]
pod 'HKDFKit', git: 'https://github.com/signalapp/HKDFKit.git'
# pod 'HKDFKit', path: '../HKDFKit'
pod 'Curve25519Kit', git: 'https://github.com/signalapp/Curve25519Kit'
diff --git a/Podfile.lock b/Podfile.lock
index fb716fd9a..a4f52ea81 100644
--- a/Podfile.lock
+++ b/Podfile.lock
@@ -60,6 +60,20 @@ PODS:
- SocketRocket
- SwiftProtobuf
- YapDatabase/SQLCipher
+ - SignalServiceKit/Tests (0.9.0):
+ - AFNetworking
+ - AxolotlKit
+ - CocoaLumberjack
+ - Curve25519Kit
+ - GRKOpenSSLFramework
+ - libPhoneNumber-iOS
+ - Mantle
+ - PromiseKit (~> 4.0)
+ - Reachability
+ - SAMKeychain
+ - SocketRocket
+ - SwiftProtobuf
+ - YapDatabase/SQLCipher
- SocketRocket (0.5.1)
- SQLCipher (3.4.2):
- SQLCipher/standard (= 3.4.2)
@@ -144,6 +158,7 @@ DEPENDENCIES:
- PureLayout
- Reachability
- SignalServiceKit (from `.`)
+ - SignalServiceKit/Tests (from `.`)
- SocketRocket (from `https://github.com/signalapp/SocketRocket.git`, branch `mkirk/handle-sec-err`)
- SQLCipher (from `https://github.com/sqlcipher/sqlcipher.git`, commit `d5c2bec`)
- SSZipArchive
@@ -221,7 +236,7 @@ SPEC CHECKSUMS:
PureLayout: 4d550abe49a94f24c2808b9b95db9131685fe4cd
Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
- SignalServiceKit: a16410721705f896905c65ad718424fa20728e7d
+ SignalServiceKit: 89940928e278a1b43c40678e651eb547ab4b56d8
SocketRocket: dbb1554b8fc288ef8ef370d6285aeca7361be31e
SQLCipher: f9fcf29b2e59ced7defc2a2bdd0ebe79b40d4990
SSZipArchive: 51a800ebb77f95a8329b6ced1faaff394b47f509
@@ -229,6 +244,6 @@ SPEC CHECKSUMS:
YapDatabase: b418a4baa6906e8028748938f9159807fd039af4
YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54
-PODFILE CHECKSUM: cb4f38eaa6b1bdf86cfe440ef964c628e6d8321d
+PODFILE CHECKSUM: 40c4fc7dfb6066c4fdb80bc08600096e172dd4d7
COCOAPODS: 1.5.3
diff --git a/Pods b/Pods
index 998b3cf39..06f955a16 160000
--- a/Pods
+++ b/Pods
@@ -1 +1 @@
-Subproject commit 998b3cf39f447b7f1abd01132814d72e46afe36d
+Subproject commit 06f955a16c14cd0370ab69186268c5a1888c45f2
diff --git a/Signal.xcodeproj/xcshareddata/xcschemes/Signal.xcscheme b/Signal.xcodeproj/xcshareddata/xcschemes/Signal.xcscheme
index 5074cd424..f08479b69 100644
--- a/Signal.xcodeproj/xcshareddata/xcschemes/Signal.xcscheme
+++ b/Signal.xcodeproj/xcshareddata/xcschemes/Signal.xcscheme
@@ -52,6 +52,16 @@
ReferencedContainer = "container:Signal.xcodeproj">
+
+
+
+
so we advise sticking with version 4 for the time being.
s.dependency 'PromiseKit', "~> 4.0"
+ s.test_spec 'Tests' do |test_spec|
+ test_spec.source_files = 'SignalServiceKit/tests/**/*.{h,m,swift}'
+ end
end
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/Devices/OWSReadReceiptTest.m b/SignalServiceKit/tests/Devices/OWSReadReceiptTest.m
deleted file mode 100644
index 3abab0f45..000000000
--- a/SignalServiceKit/tests/Devices/OWSReadReceiptTest.m
+++ /dev/null
@@ -1,30 +0,0 @@
-// Created by Michael Kirk on 9/25/16.
-// Copyright © 2016 Open Whisper Systems. All rights reserved.
-
-#import "OWSReadReceipt.h"
-#import
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface OWSReadReceiptTest : XCTestCase
-
-@end
-
-@implementation OWSReadReceiptTest
-
-- (void)testDontStoreEphemeralProperties
-{
- OWSReadReceipt *readReceipt = [[OWSReadReceipt alloc] initWithSenderId:@"fake-sender-id" timestamp:1];
-
- // Unfortunately this test will break every time you add, remove, or rename a property, but on the
- // plus side it has a chance of catching when you indadvertently remove our ephemeral properties
- // from our Mantle storage blacklist.
- NSSet *expected = [NSSet setWithArray:@[ @"senderId", @"uniqueId", @"timestamp" ]];
- NSSet *actual = [NSSet setWithArray:[readReceipt.dictionaryValue allKeys]];
-
- XCTAssertEqualObjects(expected, actual);
-}
-
-@end
-
-NS_ASSUME_NONNULL_END
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);
}