UNPKG

ipfs-coord

Version:

A JS library for helping IPFS peers coordinate, find a common interest, and stay connected around that interest.

201 lines (170 loc) 5.66 kB
/* Unit tests for the Peer Use Case library. */ // npm libraries const assert = require('chai').assert const sinon = require('sinon') // Local libraries const PeerUseCases = require('../../../lib/use-cases/peer-use-cases') // const RelayUseCases = require('../../../lib/use-cases/relay-use-cases') const ThisNodeUseCases = require('../../../lib/use-cases/this-node-use-cases') const AdapterMock = require('../../mocks/adapter-mock') const adapters = new AdapterMock() // const mockData = require('../../mocks/peers-mock') describe('#Peer-Use-Cases', () => { let uut let sandbox let thisNode beforeEach(async () => { // Restore the sandbox before each test. sandbox = sinon.createSandbox() const thisNodeUseCases = new ThisNodeUseCases({ adapters, controllers: {}, statusLog: () => { } }) thisNode = await thisNodeUseCases.createSelf({ type: 'node.js' }) // // uut = new RelayUseCases({ // adapters, // controllers: {}, // statusLog: () => {} // }) uut = new PeerUseCases({ adapters, controllers: {} }) }) afterEach(() => sandbox.restore()) describe('#constructor', () => { it('should throw an error if adapters is not included', () => { try { uut = new PeerUseCases() assert.fail('Unexpected code path') } catch (err) { assert.include( err.message, 'Must inject instance of adapters when instantiating Peer Use Cases library.' ) } }) it('should throw an error if controllers are not included', () => { try { uut = new PeerUseCases({ adapters: {} }) assert.fail('Unexpected code path') } catch (err) { assert.include( err.message, 'Must inject instance of controllers when instantiating Peer Use Cases library.' ) } }) }) describe('#sendPrivateMessage', () => { it('should throw an error if peer data can not be found', async () => { try { const result = await uut.sendPrivateMessage( 'fakeId', 'messageStr', thisNode ) console.log('result: ', result) } catch (err) { assert.include(err.message, 'Data for peer') } }) it('should encrypt a message and add it to the peers OrbitDB', async () => { thisNode.peerData.push({ from: 'fakeId' }) // thisNode.orbitData.push({ // ipfsId: 'fakeId', // db: { // add: () => { // } // } // }) // Mock dependencies // sandbox.stub(uut.adapters.encryption, 'encryptMsg') sandbox.stub(uut, 'connectToPeer').resolves(true) const result = await uut.sendPrivateMessage( 'fakeId', 'messageStr', thisNode ) // console.log('result: ', result) assert.equal(result, true) }) }) describe('#connectToPeer', () => { it('should skip if peer is already connected', async () => { // Test data const peerId = 'QmbyYXKbnAmMbMGo8LRBZ58jYs58anqUzY1m4jxDmhDsjd' thisNode.peerList = [peerId] // Mock dependencies sandbox.stub(uut.adapters.ipfs, 'getPeers').resolves([{ peer: peerId }]) // Connect to that peer const result = await uut.connectToPeer(peerId, thisNode) assert.equal(result, true) }) it('should connect to peer through circuit relay', async () => { // Test data const peerId = 'QmbyYXKbnAmMbMGo8LRBZ58jYs58anqUzY1m4jxDmhDsjd' thisNode.peerList = [peerId] thisNode.relayData = [ { multiaddr: '/ip4/139.162.76.54/tcp/5269/ws/p2p/QmaKzQTAtoJWYMiG5ATx41uWsMajr1kSxRdtg919s8fK77', connected: true, updatedAt: '2021-09-20T15:59:12.961Z', ipfsId: 'QmaKzQTAtoJWYMiG5ATx41uWsMajr1kSxRdtg919s8fK77', isBootstrap: false, metrics: { aboutLatency: [] }, latencyScore: 10000 } ] // Mock dependencies sandbox.stub(uut.adapters.ipfs, 'getPeers').resolves([]) sandbox.stub(uut.adapters.ipfs, 'connectToPeer').resolves(true) thisNode.useCases = { relays: { sortRelays: () => thisNode.relayData } } // Connect to that peer const result = await uut.connectToPeer(peerId, thisNode) assert.equal(result, true) }) it('should return false if not able to connect to peer', async () => { // Test data const peerId = 'QmbyYXKbnAmMbMGo8LRBZ58jYs58anqUzY1m4jxDmhDsjd' thisNode.peerList = [peerId] thisNode.relayData = [ { multiaddr: '/ip4/139.162.76.54/tcp/5269/ws/p2p/QmaKzQTAtoJWYMiG5ATx41uWsMajr1kSxRdtg919s8fK77', connected: true, updatedAt: '2021-09-20T15:59:12.961Z', ipfsId: 'QmaKzQTAtoJWYMiG5ATx41uWsMajr1kSxRdtg919s8fK77', isBootstrap: false, metrics: { aboutLatency: [] }, latencyScore: 10000 } ] // Mock dependencies sandbox.stub(uut.adapters.ipfs, 'getPeers').resolves([]) sandbox.stub(uut.adapters.ipfs, 'connectToPeer').resolves(false) thisNode.useCases = { relays: { sortRelays: () => thisNode.relayData } } // Connect to that peer const result = await uut.connectToPeer(peerId, thisNode) assert.equal(result, false) }) it('should catch and throw errors', async () => { try { await uut.connectToPeer() assert.fail('Unexpected code path') } catch (err) { // console.log(err) assert.include(err.message, 'Cannot read') } }) }) })