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.
		
		
		
		
		
			
		
			
	
	
		
			157 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
		
		
			
		
	
	
			157 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
| 
											8 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | describe("AccountManager", function() { | ||
|  |   let accountManager; | ||
|  |   let originalServer; | ||
|  | 
 | ||
|  |   before(function() { | ||
|  |     originalServer = window.TextSecureServer; | ||
|  |     window.TextSecureServer = function() {}; | ||
|  |   }); | ||
|  |   after(function() { | ||
|  |     window.TextSecureServer = originalServer; | ||
|  |   }); | ||
|  | 
 | ||
|  |   beforeEach(function() { | ||
|  |     accountManager = new window.textsecure.AccountManager(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   describe('#cleanSignedPreKeys', function() { | ||
|  |     let originalProtocolStorage; | ||
|  |     let signedPreKeys; | ||
|  |     const DAY = 1000 * 60 * 60 * 24; | ||
|  | 
 | ||
|  |     beforeEach(function() { | ||
|  |       originalProtocolStorage = window.textsecure.storage.protocol; | ||
|  |       window.textsecure.storage.protocol = { | ||
|  |         loadSignedPreKeys: function() { | ||
|  |           return Promise.resolve(signedPreKeys); | ||
|  |         }, | ||
|  |       }; | ||
|  |     }); | ||
|  |     afterEach(function() { | ||
|  |       window.textsecure.storage.protocol = originalProtocolStorage; | ||
|  |     }); | ||
|  | 
 | ||
|  |     it('keeps three confirmed keys even if over a week old', function() { | ||
|  |       const now = Date.now(); | ||
|  |       signedPreKeys = [{ | ||
|  |         keyId: 1, | ||
|  |         created_at: now - DAY * 21, | ||
|  |         confirmed: true, | ||
|  |       }, { | ||
|  |         keyId: 2, | ||
|  |         created_at: now - DAY * 14, | ||
|  |         confirmed: true, | ||
|  |       }, { | ||
|  |         keyId: 3, | ||
|  |         created_at: now - DAY * 18, | ||
|  |         confirmed: true, | ||
|  |       }]; | ||
|  | 
 | ||
|  |       // should be no calls to store.removeSignedPreKey, would cause crash
 | ||
|  |       return accountManager.cleanSignedPreKeys(); | ||
|  |     }); | ||
|  | 
 | ||
|  |     it('eliminates confirmed keys over a week old, if more than three', function() { | ||
|  |       const now = Date.now(); | ||
|  |       signedPreKeys = [{ | ||
|  |         keyId: 1, | ||
|  |         created_at: now - DAY * 21, | ||
|  |         confirmed: true, | ||
|  |       }, { | ||
|  |         keyId: 2, | ||
|  |         created_at: now - DAY * 14, | ||
|  |         confirmed: true, | ||
|  |       }, { | ||
|  |         keyId: 3, | ||
|  |         created_at: now - DAY * 4, | ||
|  |         confirmed: true, | ||
|  |       }, { | ||
|  |         keyId: 4, | ||
|  |         created_at: now - DAY * 18, | ||
|  |         confirmed: true, | ||
|  |       }, { | ||
|  |         keyId: 5, | ||
|  |         created_at: now - DAY, | ||
|  |         confirmed: true, | ||
|  |       }]; | ||
|  | 
 | ||
|  |       let count = 0; | ||
|  |       window.textsecure.storage.protocol.removeSignedPreKey = function(keyId) { | ||
|  |         if (keyId !== 1 && keyId !== 4) { | ||
|  |           throw new Error('Wrong keys were eliminated! ' + keyId); | ||
|  |         } | ||
|  | 
 | ||
|  |         count++; | ||
|  |       }; | ||
|  | 
 | ||
|  |       return accountManager.cleanSignedPreKeys().then(function() { | ||
|  |         assert.strictEqual(count, 2); | ||
|  |       }); | ||
|  |     }); | ||
|  | 
 | ||
|  |     it('keeps at least three unconfirmed keys if no confirmed', function() { | ||
|  |       const now = Date.now(); | ||
|  |       signedPreKeys = [{ | ||
|  |         keyId: 1, | ||
|  |         created_at: now - DAY * 14, | ||
|  |       }, { | ||
|  |         keyId: 2, | ||
|  |         created_at: now - DAY * 21, | ||
|  |       }, { | ||
|  |         keyId: 3, | ||
|  |         created_at: now - DAY * 18, | ||
|  |       }, { | ||
|  |         keyId: 4, | ||
|  |         created_at: now - DAY | ||
|  |       }]; | ||
|  | 
 | ||
|  |       let count = 0; | ||
|  |       window.textsecure.storage.protocol.removeSignedPreKey = function(keyId) { | ||
|  |         if (keyId !== 2) { | ||
|  |           throw new Error('Wrong keys were eliminated! ' + keyId); | ||
|  |         } | ||
|  | 
 | ||
|  |         count++; | ||
|  |       }; | ||
|  | 
 | ||
|  |       return accountManager.cleanSignedPreKeys().then(function() { | ||
|  |         assert.strictEqual(count, 1); | ||
|  |       }); | ||
|  |     }); | ||
|  | 
 | ||
|  |     it('if some confirmed keys, keeps unconfirmed to addd up to three total', function() { | ||
|  |       const now = Date.now(); | ||
|  |       signedPreKeys = [{ | ||
|  |         keyId: 1, | ||
|  |         created_at: now - DAY * 21, | ||
|  |         confirmed: true, | ||
|  |       }, { | ||
|  |         keyId: 2, | ||
|  |         created_at: now - DAY * 14, | ||
|  |         confirmed: true, | ||
|  |       }, { | ||
|  |         keyId: 3, | ||
|  |         created_at: now - DAY * 12, | ||
|  |       }, { | ||
|  |         keyId: 4, | ||
|  |         created_at: now - DAY * 8, | ||
|  |       }]; | ||
|  | 
 | ||
|  |       let count = 0; | ||
|  |       window.textsecure.storage.protocol.removeSignedPreKey = function(keyId) { | ||
|  |         if (keyId !== 3) { | ||
|  |           throw new Error('Wrong keys were eliminated! ' + keyId); | ||
|  |         } | ||
|  | 
 | ||
|  |         count++; | ||
|  |       }; | ||
|  | 
 | ||
|  |       return accountManager.cleanSignedPreKeys().then(function() { | ||
|  |         assert.strictEqual(count, 1); | ||
|  |       }); | ||
|  |     }); | ||
|  |   }); | ||
|  | }); |