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.
		
		
		
		
		
			
		
			
				
	
	
		
			194 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			194 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
| const { assert } = require('chai');
 | |
| const LokiP2pAPI = require('../../../js/modules/loki_p2p_api');
 | |
| 
 | |
| describe('LokiP2pAPI', () => {
 | |
|   const usedKey = 'aPubKey';
 | |
|   const usedAddress = 'anAddress';
 | |
|   const usedPort = 'aPort';
 | |
| 
 | |
|   const usedDetails = {
 | |
|     address: usedAddress,
 | |
|     port: usedPort,
 | |
|     timerDuration: 100,
 | |
|     pingTimer: null,
 | |
|     isOnline: false,
 | |
|   };
 | |
| 
 | |
|   beforeEach(() => {
 | |
|     this.lokiP2pAPI = new LokiP2pAPI();
 | |
|   });
 | |
| 
 | |
|   afterEach(() => {
 | |
|     this.lokiP2pAPI.removeAllListeners();
 | |
|     this.lokiP2pAPI.reset();
 | |
|   });
 | |
| 
 | |
|   describe('getContactP2pDetails', () => {
 | |
|     it('Should return null if no contact details exist', () => {
 | |
|       const details = this.lokiP2pAPI.getContactP2pDetails(usedKey);
 | |
|       assert.isNull(details);
 | |
|     });
 | |
| 
 | |
|     it('Should return the exact same object if contact details exist', () => {
 | |
|       this.lokiP2pAPI.contactP2pDetails[usedKey] = usedDetails;
 | |
|       const details = this.lokiP2pAPI.getContactP2pDetails(usedKey);
 | |
|       assert.deepEqual(details, usedDetails);
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('pingContact', () => {
 | |
|     it("Should not emit a pingContact event if that contact doesn't exits", () => {
 | |
|       this.lokiP2pAPI.on('pingContact', () => {
 | |
|         assert.fail();
 | |
|       });
 | |
|       this.lokiP2pAPI.pingContact('not stored');
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   describe('updateContactP2pDetails', () => {
 | |
|     it("Shouldn't ping a contact if contact exists, p2p message was sent, contact was online and details didn't change", () => {
 | |
|       this.lokiP2pAPI.on('pingContact', () => {
 | |
|         assert.fail();
 | |
|       });
 | |
| 
 | |
|       // contact exists
 | |
|       const details = { ...usedDetails };
 | |
|       // P2p message
 | |
|       const isP2P = true;
 | |
|       // Contact was online
 | |
|       details.isOnline = true;
 | |
|       // details were the same
 | |
|       const { address, port } = details;
 | |
| 
 | |
|       this.lokiP2pAPI.contactP2pDetails[usedKey] = details;
 | |
|       this.lokiP2pAPI.updateContactP2pDetails(usedKey, address, port, isP2P);
 | |
| 
 | |
|       // They should also be marked as online
 | |
|       assert.isTrue(this.lokiP2pAPI.isOnline(usedKey));
 | |
|     });
 | |
| 
 | |
|     it("Should ping a contact if we don't have details for it", done => {
 | |
|       this.lokiP2pAPI.on('pingContact', pubKey => {
 | |
|         assert.strictEqual(pubKey, usedKey);
 | |
|         assert.isFalse(this.lokiP2pAPI.isOnline(usedKey));
 | |
|         done();
 | |
|       });
 | |
|       this.lokiP2pAPI.updateContactP2pDetails(
 | |
|         usedKey,
 | |
|         usedAddress,
 | |
|         usedPort,
 | |
|         true
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     it("Should ping a contact if a P2P message wasn't received", done => {
 | |
|       // The precondition for this is that we had the contact stored
 | |
|       this.lokiP2pAPI.contactP2pDetails[usedKey] = { ...usedDetails };
 | |
| 
 | |
|       this.lokiP2pAPI.on('pingContact', pubKey => {
 | |
|         assert.strictEqual(pubKey, usedKey);
 | |
|         assert.isFalse(this.lokiP2pAPI.isOnline(usedKey));
 | |
|         done();
 | |
|       });
 | |
|       this.lokiP2pAPI.updateContactP2pDetails(
 | |
|         usedKey,
 | |
|         usedAddress,
 | |
|         usedPort,
 | |
|         false // We didn't get a p2p message
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     it('Should ping a contact if they were marked as offline', done => {
 | |
|       // The precondition for this is that we had the contact stored
 | |
|       // And that p2p message was true
 | |
|       this.lokiP2pAPI.contactP2pDetails[usedKey] = { ...usedDetails };
 | |
| 
 | |
|       this.lokiP2pAPI.on('pingContact', pubKey => {
 | |
|         assert.strictEqual(pubKey, usedKey);
 | |
|         assert.isFalse(this.lokiP2pAPI.isOnline(usedKey));
 | |
|         done();
 | |
|       });
 | |
|       this.lokiP2pAPI.updateContactP2pDetails(
 | |
|         usedKey,
 | |
|         usedAddress,
 | |
|         usedPort,
 | |
|         true // We got a p2p message
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     it('Should ping a contact if the address was different', done => {
 | |
|       // The precondition for this is that we had the contact stored
 | |
|       // And that p2p message was true
 | |
|       // And that the user was online
 | |
|       this.lokiP2pAPI.contactP2pDetails[usedKey] = { ...usedDetails };
 | |
|       this.lokiP2pAPI.contactP2pDetails[usedKey].isOnline = true;
 | |
| 
 | |
|       this.lokiP2pAPI.on('pingContact', pubKey => {
 | |
|         assert.strictEqual(pubKey, usedKey);
 | |
|         done();
 | |
|       });
 | |
|       this.lokiP2pAPI.updateContactP2pDetails(
 | |
|         usedKey,
 | |
|         'different address',
 | |
|         usedPort,
 | |
|         true // We got a p2p message
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     it('Should ping a contact if the port was different', done => {
 | |
|       // The precondition for this is that we had the contact stored
 | |
|       // And that p2p message was true
 | |
|       // And that the user was online
 | |
|       this.lokiP2pAPI.contactP2pDetails[usedKey] = { ...usedDetails };
 | |
|       this.lokiP2pAPI.contactP2pDetails[usedKey].isOnline = true;
 | |
| 
 | |
|       this.lokiP2pAPI.on('pingContact', pubKey => {
 | |
|         assert.strictEqual(pubKey, usedKey);
 | |
|         done();
 | |
|       });
 | |
|       this.lokiP2pAPI.updateContactP2pDetails(
 | |
|         usedKey,
 | |
|         usedAddress,
 | |
|         'different port',
 | |
|         true // We got a p2p message
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     it('Should emit an online event if the contact is online', done => {
 | |
|       this.lokiP2pAPI.on('online', pubKey => {
 | |
|         assert.strictEqual(pubKey, usedKey);
 | |
|         done();
 | |
|       });
 | |
|       this.lokiP2pAPI.contactP2pDetails[usedKey] = { ...usedDetails };
 | |
|       this.lokiP2pAPI.setContactOnline(usedKey);
 | |
|     }).timeout(1000);
 | |
| 
 | |
|     it('Should store a contacts p2p details', () => {
 | |
|       this.lokiP2pAPI.updateContactP2pDetails(
 | |
|         usedKey,
 | |
|         usedAddress,
 | |
|         usedPort,
 | |
|         true
 | |
|       );
 | |
|       const p2pDetails = this.lokiP2pAPI.getContactP2pDetails(usedKey);
 | |
|       assert.strictEqual(usedAddress, p2pDetails.address);
 | |
|       assert.strictEqual(usedPort, p2pDetails.port);
 | |
|     });
 | |
| 
 | |
|     it('Should set a contact as offline and online', () => {
 | |
|       this.lokiP2pAPI.contactP2pDetails[usedKey] = { ...usedDetails };
 | |
|       let p2pDetails = this.lokiP2pAPI.getContactP2pDetails(usedKey);
 | |
|       assert.isNotNull(p2pDetails);
 | |
|       assert.isFalse(p2pDetails.isOnline);
 | |
|       this.lokiP2pAPI.setContactOnline(usedKey);
 | |
| 
 | |
|       p2pDetails = this.lokiP2pAPI.getContactP2pDetails(usedKey);
 | |
|       assert.isTrue(p2pDetails.isOnline);
 | |
|       this.lokiP2pAPI.setContactOffline(usedKey);
 | |
| 
 | |
|       p2pDetails = this.lokiP2pAPI.getContactP2pDetails(usedKey);
 | |
|       assert.isFalse(p2pDetails.isOnline);
 | |
|     });
 | |
|   });
 | |
| });
 |