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.
		
		
		
		
		
			
		
			
				
	
	
		
			134 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			134 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Objective-C
		
	
| //
 | |
| //  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | |
| //
 | |
| 
 | |
| #import "OWSPrimaryStorage+SignedPreKeyStore.h"
 | |
| #import "SSKBaseTestObjC.h"
 | |
| #import "TSPreKeyManager.h"
 | |
| #import <SessionAxolotlKit/SignedPrekeyRecord.h>
 | |
| 
 | |
| @interface  TSPreKeyManager (Testing)
 | |
| 
 | |
| + (void)clearSignedPreKeyRecordsWithKeyId:(NSNumber *)keyId;
 | |
| 
 | |
| @end
 | |
| 
 | |
| @interface SignedPreKeyDeletionTests : SSKBaseTestObjC
 | |
| 
 | |
| @end
 | |
| 
 | |
| @implementation SignedPreKeyDeletionTests
 | |
| 
 | |
| #ifdef BROKEN_TESTS
 | |
| 
 | |
| - (void)setUp {
 | |
|     [super setUp];
 | |
| }
 | |
| 
 | |
| - (void)tearDown {
 | |
|     [super tearDown];
 | |
| }
 | |
| 
 | |
| - (void)testSignedPreKeyDeletion {
 | |
|     [self readWithBlock:^(YapDatabaseReadTransaction *transaction) {
 | |
|         XCTAssertEqual(0, [transaction numberOfKeysInCollection:OWSPrimaryStorageSignedPreKeyStoreCollection]);
 | |
|     }];
 | |
| 
 | |
|     int days = 20;
 | |
|     int lastPreKeyId = days;
 | |
| 
 | |
|     for (int i = 0; i <= days; i++) { // 21 signed keys are generated, one per day from now until 20 days ago.
 | |
|         int secondsAgo = (i - days) * 24 * 60 * 60;
 | |
|         NSAssert(secondsAgo <= 0, @"Time in past must be negative");
 | |
|         NSDate *generatedAt = [NSDate dateWithTimeIntervalSinceNow:secondsAgo];
 | |
|         SignedPreKeyRecord *record = [[SignedPreKeyRecord alloc] initWithId:i
 | |
|                                                                     keyPair:[Curve25519 generateKeyPair]
 | |
|                                                                   signature:[NSData new]
 | |
|                                                                 generatedAt:generatedAt];
 | |
|         [[OWSPrimaryStorage sharedManager] storeSignedPreKey:i signedPreKeyRecord:record];
 | |
|     }
 | |
| 
 | |
|     NSArray<SignedPreKeyRecord *> *signedPreKeys = [[OWSPrimaryStorage sharedManager] loadSignedPreKeys];
 | |
|     // Sanity check
 | |
|     XCTAssert(signedPreKeys.count == 21);
 | |
| 
 | |
|     [TSPreKeyManager clearSignedPreKeyRecordsWithKeyId:@(lastPreKeyId)];
 | |
|     XCTAssert([[OWSPrimaryStorage sharedManager] loadSignedPrekey:lastPreKeyId] != nil);
 | |
| 
 | |
|     // We'll delete every key created 7 or more days ago.
 | |
|     signedPreKeys = [[OWSPrimaryStorage sharedManager] loadSignedPreKeys];
 | |
|     XCTAssert(signedPreKeys.count == 7);
 | |
| }
 | |
| 
 | |
| - (void)testSignedPreKeyDeletionKeepsSomeOldKeys
 | |
| {
 | |
|     [self readWithBlock:^(YapDatabaseReadTransaction *transaction) {
 | |
|         XCTAssertEqual(0, [transaction numberOfKeysInCollection:OWSPrimaryStorageSignedPreKeyStoreCollection]);
 | |
|     }];
 | |
| 
 | |
|     int lastPreKeyId = 10;
 | |
|     for (int i = 0; i <= 10; i++) {
 | |
|         // All these keys will be considered "old", since they were created more than 7 days ago.
 | |
|         int secondsAgo = (i - 20) * 24 * 60 * 60;
 | |
|         NSAssert(secondsAgo <= 0, @"Time in past must be negative");
 | |
|         NSDate *generatedAt = [NSDate dateWithTimeIntervalSinceNow:secondsAgo];
 | |
|         SignedPreKeyRecord *record = [[SignedPreKeyRecord alloc] initWithId:i
 | |
|                                                                     keyPair:[Curve25519 generateKeyPair]
 | |
|                                                                   signature:[NSData new]
 | |
|                                                                 generatedAt:generatedAt];
 | |
|         // we only retain accepted keys
 | |
|         [record markAsAcceptedByService];
 | |
|         [[OWSPrimaryStorage sharedManager] storeSignedPreKey:i signedPreKeyRecord:record];
 | |
|     }
 | |
| 
 | |
| 
 | |
|     NSArray<SignedPreKeyRecord *> *signedPreKeys = [[OWSPrimaryStorage sharedManager] loadSignedPreKeys];
 | |
|     // Sanity check
 | |
|     XCTAssert(signedPreKeys.count == 11);
 | |
| 
 | |
|     [TSPreKeyManager clearSignedPreKeyRecordsWithKeyId:@(lastPreKeyId)];
 | |
| 
 | |
|     XCTAssert([[OWSPrimaryStorage sharedManager] loadSignedPrekey:lastPreKeyId] != nil);
 | |
| 
 | |
|     signedPreKeys = [[OWSPrimaryStorage sharedManager] loadSignedPreKeys];
 | |
| 
 | |
|     // We need to keep 3 "old" keys, plus the "current" key
 | |
|     XCTAssert(signedPreKeys.count == 4);
 | |
| }
 | |
| 
 | |
| - (void)testOlderRecordsNotDeletedIfNoReplacement {
 | |
| 
 | |
|     [self readWithBlock:^(YapDatabaseReadTransaction *transaction) {
 | |
|         XCTAssertEqual(0, [transaction numberOfKeysInCollection:OWSPrimaryStorageSignedPreKeyStoreCollection]);
 | |
|     }];
 | |
| 
 | |
|     int days = 3;
 | |
|     int lastPreKeyId = days;
 | |
| 
 | |
|     for (int i = 0; i <= days; i++) { // 4 signed keys are generated, one per day from now until 3 days ago.
 | |
|         int secondsAgo = (i - days) * 24 * 60 * 60;
 | |
|         NSAssert(secondsAgo <= 0, @"Time in past must be negative");
 | |
|         NSDate *generatedAt = [NSDate dateWithTimeIntervalSinceNow:secondsAgo];
 | |
|         SignedPreKeyRecord *record = [[SignedPreKeyRecord alloc] initWithId:i
 | |
|                                                                     keyPair:[Curve25519 generateKeyPair]
 | |
|                                                                   signature:[NSData new]
 | |
|                                                                 generatedAt:generatedAt];
 | |
|         [[OWSPrimaryStorage sharedManager] storeSignedPreKey:i signedPreKeyRecord:record];
 | |
|     }
 | |
| 
 | |
|     NSArray<SignedPreKeyRecord *> *signedPreKeys = [[OWSPrimaryStorage sharedManager] loadSignedPreKeys];
 | |
|     // Sanity check
 | |
|     XCTAssert(signedPreKeys.count == 4);
 | |
| 
 | |
|     [TSPreKeyManager clearSignedPreKeyRecordsWithKeyId:@(lastPreKeyId)];
 | |
|     XCTAssert([[OWSPrimaryStorage sharedManager] loadSignedPrekey:lastPreKeyId] != nil);
 | |
| 
 | |
|     // All three records should still be stored.
 | |
|     signedPreKeys = [[OWSPrimaryStorage sharedManager] loadSignedPreKeys];
 | |
|     XCTAssert(signedPreKeys.count == 4);
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| @end
 |