Fixup some SSK tests

Still more to do...
pull/1/head
Michael Kirk 7 years ago
parent 6d92413931
commit 495830f08d

@ -1,13 +1,11 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import <XCTest/XCTest.h>
#import <AxolotlKit/SignedPrekeyRecord.h>
#import "OWSPrimaryStorage+SignedPreKeyStore.h"
#import "TSPreKeyManager.h"
#import "TSStorageManager+SignedPreKeyStore.h"
#import <AxolotlKit/SignedPrekeyRecord.h>
#import <XCTest/XCTest.h>
@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<SignedPreKeyRecord *> *signedPreKeys = [[TSStorageManager sharedManager] loadSignedPreKeys];
NSArray<SignedPreKeyRecord *> *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<SignedPreKeyRecord *> *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<SignedPreKeyRecord *> *signedPreKeys = [[TSStorageManager sharedManager] loadSignedPreKeys];
NSArray<SignedPreKeyRecord *> *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<SignedPreKeyRecord *> *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<SignedPreKeyRecord *> *signedPreKeys = [[TSStorageManager sharedManager] loadSignedPreKeys];
NSArray<SignedPreKeyRecord *> *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<SignedPreKeyRecord *> *signedPreKeys =
[[TSStorageManager sharedManager] loadSignedPreKeys];
[[OWSPrimaryStorage sharedManager] loadSignedPreKeys];
XCTAssert(signedPreKeys.count == 4);
[expection fulfill];
}];

@ -1,11 +1,10 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import <XCTest/XCTest.h>
#import "TSAttributes.h"
#import "TSAccountManager.h"
#import <XCTest/XCTest.h>
@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);
}

@ -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 <XCTest/XCTest.h>
@import Contacts;
NS_ASSUME_NONNULL_BEGIN
@interface ContactSortingTest : XCTestCase
@ -85,17 +88,15 @@ NS_ASSUME_NONNULL_BEGIN
+ (NSArray<Contact *> *)contactArrayForNames:(NSArray<NSArray<NSString *>*>*)namePairs
{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
ABRecordID fakeRecordId = 0;
#pragma clang diagnostic pop
NSMutableArray<Contact *>*contacts = [[NSMutableArray alloc] initWithCapacity:namePairs.count];
for (NSArray<NSString *>*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];
}

@ -1,9 +1,9 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import <XCTest/XCTest.h>
#import "PhoneNumber.h"
#import <XCTest/XCTest.h>
@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--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--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 {

@ -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 <XCTest/XCTest.h>
@interface TSAccountManager (Testing)

@ -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 <XCTest/XCTest.h>
@interface TSThreadTest : XCTestCase
@ -21,7 +21,8 @@
[super setUp];
// Register views, etc.
[[TSStorageManager sharedManager] setupDatabaseWithSafeBlockingMigrations:^{}];
[[OWSPrimaryStorage sharedManager] setupDatabaseWithSafeBlockingMigrations:^{
}];
}
- (void)tearDown

@ -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 <XCTest/XCTest.h>
@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]];

@ -1,11 +1,11 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import <XCTest/XCTest.h>
#import <SignalServiceKit/OWSProvisioningCipher.h>
#import <25519/Curve25519.h>
#import <Curve25519Kit/Curve25519.h>
#import <SignalServiceKit/Cryptography.h>
#import <SignalServiceKit/OWSProvisioningCipher.h>
#import <XCTest/XCTest.h>
@interface OWSProvisioningCipher(Testing)

@ -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 <XCTest/XCTest.h>
NS_ASSUME_NONNULL_BEGIN

@ -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 <XCTest/XCTest.h>
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<TSMessage *> *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<TSMessage *> *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]);
}

@ -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 <XCTest/XCTest.h>
NS_ASSUME_NONNULL_BEGIN
@ -19,11 +18,12 @@ NS_ASSUME_NONNULL_BEGIN
- (void)run;
- (void)becomeConsistentWithConfigurationForMessage:(TSMessage *)message
contactsManager:(id<ContactsManagerProtocol>)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

@ -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 <XCTest/XCTest.h>
@ -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);
}

@ -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 <AxolotlKit/AxolotlExceptions.h>
#import <AxolotlKit/SessionBuilder.h>
#import <XCTest/XCTest.h>
@ -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];

@ -1,9 +1,7 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import <XCTest/XCTest.h>
#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 <XCTest/XCTest.h>
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<OWSCallMessageHandler>)callMessageHandler
contactsManager:(id<ContactsManagerProtocol>)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]

@ -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 <Curve25519Kit/Curve25519.h>
#import <XCTest/XCTest.h>
@interface OWSFingerprintTest : XCTestCase

@ -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 <XCTest/XCTest.h>
@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<NSString *> *)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.

@ -1,20 +1,16 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import <XCTest/XCTest.h>
#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 <XCTest/XCTest.h>
@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. Theyll never know what it means to have a private moment to themselves an unrecorded, unanalyzed thought. And thats 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<TSIncomingMessage *> *messages = [NSMutableArray new];

@ -1,16 +1,15 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import <XCTest/XCTest.h>
#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 <Curve25519Kit/Curve25519.h>
#import <XCTest/XCTest.h>
@interface TSStorageIdentityKeyStoreTests : XCTestCase
@ -20,8 +19,8 @@
- (void)setUp {
[super setUp];
[[TSStorageManager sharedManager] purgeCollection:@"TSStorageManagerTrustedKeysCollection"];
[[OWSPrimaryStorage sharedManager] purgeCollection:OWSPrimaryStorageTrustedKeysCollection];
[OWSRecipientIdentity removeAllObjectsInCollection];
}

@ -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 <XCTest/XCTest.h>
@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

@ -1,10 +1,10 @@
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import <XCTest/XCTest.h>
#import "Cryptography.h"
#import "NSData+Base64.h"
#import <XCTest/XCTest.h>
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);
}

Loading…
Cancel
Save