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.
		
		
		
		
		
			
		
			
	
	
		
			135 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Matlab
		
	
		
		
			
		
	
	
			135 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Matlab
		
	
| 
											11 years ago
										 | // | ||
|  | //  VersionMigrationsTests.m | ||
|  | //  TextSecureKit | ||
|  | // | ||
|  | //  Created by Frederic Jacobs on 06/11/14. | ||
|  | //  Copyright (c) 2014 Open Whisper Systems. All rights reserved. | ||
|  | // | ||
|  | 
 | ||
|  | #import <XCTest/XCTest.h> | ||
|  | #import "VersionMigrations.h" | ||
|  | 
 | ||
|  | #import "CategorizingLogger.h" | ||
|  | #import "Cryptography.h" | ||
|  | #import "Environment.h" | ||
|  | #import "TSStorageManager.h" | ||
|  | #import "TSStorageManager+IdentityKeyStore.h" | ||
|  | #import "RecentCall.h" | ||
|  | #import "RecentCallManager.h" | ||
|  | #import "Release.h" | ||
|  | #import "SecurityUtils.h" | ||
|  | #import "TestUtil.h" | ||
|  | #import "TSCall.h" | ||
|  | #import "TSContactThread.h" | ||
|  | #import "TSDatabaseView.h" | ||
|  | #import "SignalKeyingStorage.h" | ||
|  | #import "UICKeyChainStore.h" | ||
|  | #import "YapDatabaseConnection.h" | ||
|  | 
 | ||
|  | 
 | ||
|  | @interface VersionMigrations(Testing) | ||
|  | +(void) migrateRecentCallsToVersion2Dot0; | ||
|  | +(void) migrateKeyingStorageToVersion2Dot0; | ||
|  | @end | ||
|  | 
 | ||
|  | 
 | ||
|  | @interface SignalKeyingStorage(Testing) | ||
|  | +(void)storeData:(NSData*)data forKey:(NSString*)key; | ||
|  | +(NSData*)dataForKey:(NSString*)key; | ||
|  | +(void)storeString:(NSString*)string forKey:(NSString*)key; | ||
|  | +(NSString*)stringForKey:(NSString*)key; | ||
|  | @end | ||
|  | 
 | ||
|  | @interface TSDatabaseView(Testing) | ||
|  | + (BOOL)threadShouldBeInInbox:(TSThread*)thread; | ||
|  | @end | ||
|  | 
 | ||
|  | 
 | ||
|  | @interface VersionMigrationsTests : XCTestCase | ||
|  | @property (nonatomic,strong) NSString* localNumber; | ||
|  | @property (nonatomic,strong) NSString* passwordCounter; | ||
|  | @property (nonatomic,strong) NSString* savedPassword; | ||
|  | 
 | ||
|  | @property (nonatomic,strong) NSData* signalingMacKey; | ||
|  | @property (nonatomic,strong) NSData* signalingCipherKey; | ||
|  | @property (nonatomic,strong) NSData* zidKey; | ||
|  | @property (nonatomic,strong) NSData* signalingExtraKey; | ||
|  | @property (nonatomic,strong) NSMutableArray* recentCalls; | ||
|  | @end | ||
|  | 
 | ||
|  | @implementation VersionMigrationsTests | ||
|  | 
 | ||
|  | - (void)setUp { | ||
|  |     [super setUp]; | ||
|  |     [Environment setCurrent:[Release unitTestEnvironment:@[]]]; | ||
|  | 
 | ||
|  | 
 | ||
|  |     _localNumber = @"+123456789"; | ||
|  |     _passwordCounter = @"20"; | ||
|  |     _savedPassword = @"muchlettersverysecure"; | ||
|  |     _signalingMacKey = [Cryptography generateRandomBytes:8]; | ||
|  |     _signalingCipherKey = [Cryptography generateRandomBytes:8]; | ||
|  |     _zidKey = [Cryptography generateRandomBytes:8]; | ||
|  |     _signalingExtraKey = [Cryptography generateRandomBytes:8]; | ||
|  | 
 | ||
|  |     // setup the keys | ||
|  |     [UICKeyChainStore setString:_localNumber forKey:LOCAL_NUMBER_KEY]; | ||
|  |     [UICKeyChainStore setString:_passwordCounter forKey:PASSWORD_COUNTER_KEY]; | ||
|  |     [UICKeyChainStore setString:_savedPassword forKey:SAVED_PASSWORD_KEY]; | ||
|  |     [UICKeyChainStore setData:_signalingMacKey forKey:SIGNALING_MAC_KEY]; | ||
|  |     [UICKeyChainStore setData:_signalingCipherKey forKey:SIGNALING_CIPHER_KEY]; | ||
|  |     [UICKeyChainStore setData:_zidKey forKey:ZID_KEY]; | ||
|  |     [UICKeyChainStore setData:_signalingExtraKey forKey:SIGNALING_EXTRA_KEY]; | ||
|  | 
 | ||
|  |     // setup the recent calls | ||
|  |     RecentCall* r1 = [RecentCall recentCallWithContactID:123 | ||
|  |                                               andNumber:testPhoneNumber1 | ||
|  |                                             andCallType:RPRecentCallTypeIncoming]; | ||
|  |     RecentCall* r2 = [RecentCall recentCallWithContactID:456 | ||
|  |                                               andNumber:testPhoneNumber2 | ||
|  |                                             andCallType:RPRecentCallTypeMissed]; | ||
|  |      | ||
|  |     r2.isArchived = YES; | ||
|  |      | ||
|  |     _recentCalls = [[NSMutableArray alloc] initWithObjects:r1,r2,nil]; | ||
|  | 
 | ||
|  |     NSUserDefaults *defaults = NSUserDefaults.standardUserDefaults; | ||
|  |     NSData *saveData = [NSKeyedArchiver archivedDataWithRootObject:_recentCalls.copy]; | ||
|  |     [defaults setObject:saveData forKey:RECENT_CALLS_DEFAULT_KEY]; | ||
|  |     [defaults synchronize]; | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | - (void)tearDown { | ||
|  |     // Put teardown code here. This method is called after the invocation of each test method in the class. | ||
|  |     [super tearDown]; | ||
|  | } | ||
|  | 
 | ||
|  | - (void)testMigrateKeyingStorageToVersion2Dot0 { | ||
|  |     // migrate keying storage | ||
|  |     [VersionMigrations migrateKeyingStorageToVersion2Dot0]; | ||
|  |      | ||
|  |     // checking that everything is migrated correctly | ||
|  |     XCTAssert([[SignalKeyingStorage stringForKey:LOCAL_NUMBER_KEY] isEqualToString:_localNumber]); | ||
|  |     XCTAssert([[SignalKeyingStorage stringForKey:PASSWORD_COUNTER_KEY] isEqualToString:_passwordCounter]); | ||
|  |     XCTAssert([[SignalKeyingStorage stringForKey:SAVED_PASSWORD_KEY] isEqualToString:_savedPassword]); | ||
|  | 
 | ||
|  |     XCTAssert([[SignalKeyingStorage dataForKey:SIGNALING_MAC_KEY] isEqualToData:_signalingMacKey]); | ||
|  |     XCTAssert([[SignalKeyingStorage dataForKey:SIGNALING_CIPHER_KEY] isEqualToData:_signalingCipherKey]); | ||
|  |     XCTAssert([[SignalKeyingStorage dataForKey:ZID_KEY] isEqualToData:_zidKey]); | ||
|  |     XCTAssert([[SignalKeyingStorage dataForKey:SIGNALING_EXTRA_KEY] isEqualToData:_signalingExtraKey]); | ||
|  | 
 | ||
|  |     // checking that the old storage is empty | ||
|  |     XCTAssert([UICKeyChainStore stringForKey:LOCAL_NUMBER_KEY] == nil); | ||
|  |     XCTAssert([UICKeyChainStore stringForKey:PASSWORD_COUNTER_KEY] == nil); | ||
|  |     XCTAssert([UICKeyChainStore stringForKey:SAVED_PASSWORD_KEY] == nil); | ||
|  |      | ||
|  |     XCTAssert([UICKeyChainStore dataForKey:SIGNALING_MAC_KEY] == nil); | ||
|  |     XCTAssert([UICKeyChainStore dataForKey:SIGNALING_CIPHER_KEY] == nil); | ||
|  |     XCTAssert([UICKeyChainStore dataForKey:ZID_KEY] == nil); | ||
|  |     XCTAssert([UICKeyChainStore dataForKey:SIGNALING_EXTRA_KEY] == nil); | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | @end |