mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			213 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Matlab
		
	
		
		
			
		
	
	
			213 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Matlab
		
	
| 
											8 years ago
										 | // | ||
|  | //  Copyright (c) 2017 Open Whisper Systems. All rights reserved. | ||
|  | // | ||
| 
											9 years ago
										 | 
 | ||
|  | #import "NSDate+millisecondTimeStamp.h" | ||
|  | #import "OWSDisappearingMessagesFinder.h" | ||
|  | #import "TSMessage.h" | ||
|  | #import "TSStorageManager.h" | ||
|  | #import "TSThread.h" | ||
|  | #import <XCTest/XCTest.h> | ||
|  | 
 | ||
|  | NS_ASSUME_NONNULL_BEGIN | ||
|  | 
 | ||
|  | @interface OWSDisappearingMessagesFinder (Testing) | ||
|  | 
 | ||
| 
											8 years ago
										 | - (NSArray<TSMessage *> *)fetchExpiredMessagesWithTransaction:(YapDatabaseReadTransaction *)transaction; | ||
|  | - (NSArray<TSMessage *> *)fetchUnstartedExpiringMessagesInThread:(TSThread *)thread | ||
|  |                                                      transaction:(YapDatabaseReadTransaction *)transaction; | ||
| 
											9 years ago
										 | 
 | ||
|  | @end | ||
|  | 
 | ||
|  | 
 | ||
|  | @interface OWSDisappearingMessageFinderTest : XCTestCase | ||
|  | 
 | ||
| 
											8 years ago
										 | @property YapDatabaseConnection *dbConnection; | ||
| 
											9 years ago
										 | @property OWSDisappearingMessagesFinder *finder; | ||
| 
											8 years ago
										 | @property TSStorageManager *storageManager; | ||
| 
											9 years ago
										 | @property TSThread *thread; | ||
|  | @property uint64_t now; | ||
|  | 
 | ||
|  | @end | ||
|  | 
 | ||
|  | @implementation OWSDisappearingMessageFinderTest | ||
|  | 
 | ||
|  | - (void)setUp | ||
|  | { | ||
|  |     [super setUp]; | ||
|  |     [TSMessage removeAllObjectsInCollection]; | ||
|  | 
 | ||
|  |     self.storageManager = [TSStorageManager sharedManager]; | ||
| 
											8 years ago
										 |     self.dbConnection = self.storageManager.newDatabaseConnection; | ||
| 
											9 years ago
										 |     self.thread = [TSThread new]; | ||
|  |     [self.thread save]; | ||
|  |     self.now = [NSDate ows_millisecondTimeStamp]; | ||
|  | 
 | ||
|  |     // Test subject | ||
| 
											8 years ago
										 |     self.finder = [OWSDisappearingMessagesFinder new]; | ||
|  |     [OWSDisappearingMessagesFinder blockingRegisterDatabaseExtensions:self.storageManager]; | ||
| 
											9 years ago
										 | } | ||
|  | 
 | ||
|  | - (void)testExpiredMessages | ||
|  | { | ||
|  |     TSMessage *expiredMessage1 = [[TSMessage alloc] initWithTimestamp:1 | ||
|  |                                                              inThread:self.thread | ||
|  |                                                           messageBody:@"expiredMessage1" | ||
|  |                                                         attachmentIds:@[] | ||
|  |                                                      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]; | ||
|  |     [expiredMessage2 save]; | ||
|  | 
 | ||
|  |     TSMessage *notYetExpiredMessage = [[TSMessage alloc] initWithTimestamp:1 | ||
|  |                                                                   inThread:self.thread | ||
|  |                                                                messageBody:@"notYetExpiredMessage" | ||
|  |                                                              attachmentIds:@[] | ||
|  |                                                           expiresInSeconds:20 | ||
|  |                                                            expireStartedAt:self.now - 10000]; | ||
|  |     [notYetExpiredMessage save]; | ||
|  | 
 | ||
|  |     TSMessage *unreadExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 | ||
|  |                                                                    inThread:self.thread | ||
|  |                                                                 messageBody:@"unereadExpiringMessage" | ||
|  |                                                               attachmentIds:@[] | ||
|  |                                                            expiresInSeconds:10 | ||
|  |                                                             expireStartedAt:0]; | ||
|  |     [unreadExpiringMessage save]; | ||
|  | 
 | ||
|  |     TSMessage *unExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 | ||
|  |                                                                inThread:self.thread | ||
|  |                                                             messageBody:@"unexpiringMessage" | ||
|  |                                                           attachmentIds:@[] | ||
|  |                                                        expiresInSeconds:0 | ||
|  |                                                         expireStartedAt:0]; | ||
|  |     [unExpiringMessage save]; | ||
|  | 
 | ||
|  |     TSMessage *unExpiringMessage2 = | ||
|  |         [[TSMessage alloc] initWithTimestamp:1 inThread:self.thread messageBody:@"unexpiringMessage2"]; | ||
|  |     [unExpiringMessage2 save]; | ||
|  | 
 | ||
| 
											8 years ago
										 |     __block NSArray<TSMessage *> *actualMessages; | ||
|  |     [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction * _Nonnull transaction) { | ||
|  |         actualMessages = [self.finder fetchExpiredMessagesWithTransaction:transaction]; | ||
|  |     }]; | ||
|  |      | ||
| 
											9 years ago
										 |     NSArray<TSMessage *> *expectedMessages = @[ expiredMessage1, expiredMessage2 ]; | ||
|  |     XCTAssertEqualObjects(expectedMessages, actualMessages); | ||
|  | } | ||
|  | 
 | ||
|  | - (void)testUnstartedExpiredMessagesForThread | ||
|  | { | ||
|  |     TSMessage *expiredMessage = [[TSMessage alloc] initWithTimestamp:1 | ||
|  |                                                             inThread:self.thread | ||
|  |                                                          messageBody:@"expiredMessage2" | ||
|  |                                                        attachmentIds:@[] | ||
|  |                                                     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]; | ||
|  |     [notYetExpiredMessage save]; | ||
|  | 
 | ||
|  |     TSMessage *unreadExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 | ||
|  |                                                                    inThread:self.thread | ||
|  |                                                                 messageBody:@"unereadExpiringMessage" | ||
|  |                                                               attachmentIds:@[] | ||
|  |                                                            expiresInSeconds:10 | ||
|  |                                                             expireStartedAt:0]; | ||
|  |     [unreadExpiringMessage save]; | ||
|  | 
 | ||
|  |     TSMessage *unExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 | ||
|  |                                                                inThread:self.thread | ||
|  |                                                             messageBody:@"unexpiringMessage" | ||
|  |                                                           attachmentIds:@[] | ||
|  |                                                        expiresInSeconds:0 | ||
|  |                                                         expireStartedAt:0]; | ||
|  |     [unExpiringMessage save]; | ||
|  | 
 | ||
|  |     TSMessage *unExpiringMessage2 = | ||
|  |         [[TSMessage alloc] initWithTimestamp:1 inThread:self.thread messageBody:@"unexpiringMessage2"]; | ||
|  |     [unExpiringMessage2 save]; | ||
|  | 
 | ||
| 
											8 years ago
										 |     __block NSArray<TSMessage *> *actualMessages; | ||
|  |     [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction * _Nonnull transaction) { | ||
|  |         actualMessages = [self.finder fetchUnstartedExpiringMessagesInThread:self.thread | ||
|  |                                                                  transaction:transaction]; | ||
|  |     }]; | ||
|  |      | ||
| 
											9 years ago
										 |     NSArray<TSMessage *> *expectedMessages = @[ unreadExpiringMessage ]; | ||
|  |     XCTAssertEqualObjects(expectedMessages, actualMessages); | ||
|  | } | ||
|  | 
 | ||
| 
											8 years ago
										 | - (NSNumber *)nextExpirationTimestamp | ||
|  | { | ||
|  |     __block NSNumber *nextExpirationTimestamp; | ||
|  |      | ||
|  |     [self.dbConnection readWithBlock:^(YapDatabaseReadTransaction * _Nonnull transaction) { | ||
|  |         XCTAssertNotNil(self.finder); | ||
|  |         nextExpirationTimestamp = [self.finder nextExpirationTimestampWithTransaction:transaction]; | ||
|  |     }]; | ||
|  |          | ||
|  |     return nextExpirationTimestamp; | ||
|  | } | ||
|  | 
 | ||
| 
											9 years ago
										 | - (void)testNextExpirationTimestampNilWhenNoExpiringMessages | ||
|  | { | ||
|  |     // Sanity check. | ||
| 
											8 years ago
										 | 
 | ||
|  |     XCTAssertNil(self.nextExpirationTimestamp); | ||
| 
											9 years ago
										 | 
 | ||
|  |     TSMessage *unExpiringMessage = [[TSMessage alloc] initWithTimestamp:1 | ||
|  |                                                                inThread:self.thread | ||
|  |                                                             messageBody:@"unexpiringMessage" | ||
|  |                                                           attachmentIds:@[] | ||
|  |                                                        expiresInSeconds:0 | ||
|  |                                                         expireStartedAt:0]; | ||
|  |     [unExpiringMessage save]; | ||
| 
											8 years ago
										 |     XCTAssertNil(self.nextExpirationTimestamp); | ||
| 
											9 years ago
										 | } | ||
|  | 
 | ||
| 
											9 years ago
										 | - (void)testNextExpirationTimestampNotNilWithUpcomingExpiringMessages | ||
| 
											9 years ago
										 | { | ||
|  |     TSMessage *soonToExpireMessage = [[TSMessage alloc] initWithTimestamp:1 | ||
|  |                                                                  inThread:self.thread | ||
|  |                                                               messageBody:@"soonToExpireMessage" | ||
|  |                                                             attachmentIds:@[] | ||
|  |                                                          expiresInSeconds:10 | ||
|  |                                                           expireStartedAt:self.now - 9000]; | ||
|  |     [soonToExpireMessage save]; | ||
|  | 
 | ||
| 
											8 years ago
										 |     XCTAssertNotNil(self.nextExpirationTimestamp); | ||
|  |     XCTAssertEqual(self.now + 1000, [self.nextExpirationTimestamp unsignedLongLongValue]); | ||
| 
											9 years ago
										 | 
 | ||
|  |     // expired message should take precedence | ||
|  |     TSMessage *expiredMessage = [[TSMessage alloc] initWithTimestamp:1 | ||
|  |                                                             inThread:self.thread | ||
|  |                                                          messageBody:@"expiredMessage" | ||
|  |                                                        attachmentIds:@[] | ||
|  |                                                     expiresInSeconds:10 | ||
|  |                                                      expireStartedAt:self.now - 11000]; | ||
|  |     [expiredMessage save]; | ||
|  | 
 | ||
| 
											8 years ago
										 |     //FIXME remove sleep hack in favor of expiringMessage completion handler | ||
|  | //    sleep(2); | ||
|  |     XCTAssertNotNil(self.nextExpirationTimestamp); | ||
|  |     XCTAssertEqual(self.now - 1000, [self.nextExpirationTimestamp unsignedLongLongValue]); | ||
| 
											9 years ago
										 | } | ||
|  | 
 | ||
|  | @end | ||
|  | 
 | ||
|  | NS_ASSUME_NONNULL_END |