mirror of
https://github.com/fluencelabs/js-libp2p-interfaces
synced 2025-04-25 12:52:35 +00:00
chore: add tests for peer-discovery
This commit is contained in:
parent
bdd2502ef6
commit
5b138ef0a0
@ -39,6 +39,7 @@
|
|||||||
"chai": "^4.2.0",
|
"chai": "^4.2.0",
|
||||||
"chai-checkmark": "^1.0.1",
|
"chai-checkmark": "^1.0.1",
|
||||||
"class-is": "^1.1.0",
|
"class-is": "^1.1.0",
|
||||||
|
"delay": "^4.3.0",
|
||||||
"detect-node": "^2.0.4",
|
"detect-node": "^2.0.4",
|
||||||
"dirty-chai": "^2.0.1",
|
"dirty-chai": "^2.0.1",
|
||||||
"err-code": "^2.0.0",
|
"err-code": "^2.0.0",
|
||||||
@ -47,6 +48,7 @@
|
|||||||
"it-pipe": "^1.0.1",
|
"it-pipe": "^1.0.1",
|
||||||
"libp2p-tcp": "^0.14.1",
|
"libp2p-tcp": "^0.14.1",
|
||||||
"multiaddr": "^7.4.3",
|
"multiaddr": "^7.4.3",
|
||||||
|
"p-defer": "^3.0.0",
|
||||||
"p-limit": "^2.3.0",
|
"p-limit": "^2.3.0",
|
||||||
"p-wait-for": "^3.1.0",
|
"p-wait-for": "^3.1.0",
|
||||||
"peer-id": "^0.13.11",
|
"peer-id": "^0.13.11",
|
||||||
|
@ -1,17 +1,31 @@
|
|||||||
/* eslint-env mocha */
|
/* eslint-env mocha */
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
|
const chai = require('chai')
|
||||||
|
const expect = chai.expect
|
||||||
|
chai.use(require('dirty-chai'))
|
||||||
|
|
||||||
|
const multiaddr = require('multiaddr')
|
||||||
|
const PeerId = require('peer-id')
|
||||||
|
|
||||||
|
const delay = require('delay')
|
||||||
|
const pDefer = require('p-defer')
|
||||||
|
|
||||||
module.exports = (common) => {
|
module.exports = (common) => {
|
||||||
describe('interface-peer-discovery', () => {
|
describe('interface-peer-discovery', () => {
|
||||||
let discovery
|
let discovery
|
||||||
|
|
||||||
before(async () => {
|
beforeEach(async () => {
|
||||||
discovery = await common.setup()
|
discovery = await common.setup()
|
||||||
})
|
})
|
||||||
|
|
||||||
after(() => common.teardown && common.teardown())
|
after(() => common.teardown && common.teardown())
|
||||||
|
|
||||||
afterEach('ensure discovery was stopped', () => discovery.stop())
|
afterEach('ensure discovery was stopped', async () => {
|
||||||
|
await discovery.stop()
|
||||||
|
|
||||||
|
discovery.removeAllListeners()
|
||||||
|
})
|
||||||
|
|
||||||
it('can start the service', async () => {
|
it('can start the service', async () => {
|
||||||
await discovery.start()
|
await discovery.start()
|
||||||
@ -30,5 +44,49 @@ module.exports = (common) => {
|
|||||||
await discovery.start()
|
await discovery.start()
|
||||||
await discovery.start()
|
await discovery.start()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should listen a peer event after start', async () => {
|
||||||
|
const defer = pDefer()
|
||||||
|
await discovery.start()
|
||||||
|
|
||||||
|
discovery.once('peer', ({ id, multiaddrs }) => {
|
||||||
|
expect(id).to.exist()
|
||||||
|
expect(PeerId.isPeerId(id)).to.eql(true)
|
||||||
|
expect(multiaddrs).to.exist()
|
||||||
|
|
||||||
|
multiaddrs.forEach((m) => expect(multiaddr.isMultiaddr(m)).to.eql(true))
|
||||||
|
|
||||||
|
defer.resolve()
|
||||||
|
})
|
||||||
|
|
||||||
|
return defer.promise
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not receive a peer event before start', async () => {
|
||||||
|
discovery.once('peer', () => {
|
||||||
|
throw new Error('should not receive a peer event before start')
|
||||||
|
})
|
||||||
|
|
||||||
|
await delay(2000)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should not receive a peer event after stop', async () => {
|
||||||
|
const deferStart = pDefer()
|
||||||
|
|
||||||
|
await discovery.start()
|
||||||
|
|
||||||
|
discovery.once('peer', () => {
|
||||||
|
deferStart.resolve()
|
||||||
|
})
|
||||||
|
|
||||||
|
await deferStart.promise
|
||||||
|
await discovery.stop()
|
||||||
|
|
||||||
|
discovery.once('peer', () => {
|
||||||
|
throw new Error('should not receive a peer event after stop')
|
||||||
|
})
|
||||||
|
|
||||||
|
await delay(2000)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,22 @@ const tests = require('../../src/peer-discovery/tests')
|
|||||||
const MockDiscovery = require('./mock-discovery')
|
const MockDiscovery = require('./mock-discovery')
|
||||||
|
|
||||||
describe('compliance tests', () => {
|
describe('compliance tests', () => {
|
||||||
|
let intervalId
|
||||||
|
|
||||||
tests({
|
tests({
|
||||||
async setup () {
|
async setup () {
|
||||||
await new Promise(resolve => setTimeout(resolve, 10))
|
await new Promise(resolve => setTimeout(resolve, 10))
|
||||||
return new MockDiscovery()
|
|
||||||
|
const mockDiscovery = new MockDiscovery({
|
||||||
|
discoveryDelay: 1
|
||||||
|
})
|
||||||
|
|
||||||
|
intervalId = setInterval(mockDiscovery._discoverPeer, 1000)
|
||||||
|
|
||||||
|
return mockDiscovery
|
||||||
},
|
},
|
||||||
async teardown () {
|
async teardown () {
|
||||||
|
clearInterval(intervalId)
|
||||||
await new Promise(resolve => setTimeout(resolve, 10))
|
await new Promise(resolve => setTimeout(resolve, 10))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
const { EventEmitter } = require('events')
|
const { EventEmitter } = require('events')
|
||||||
|
|
||||||
|
const multiaddr = require('multiaddr')
|
||||||
const PeerId = require('peer-id')
|
const PeerId = require('peer-id')
|
||||||
const PeerInfo = require('peer-info')
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emits 'peer' events on discovery.
|
* Emits 'peer' events on discovery.
|
||||||
@ -37,10 +37,12 @@ class MockDiscovery extends EventEmitter {
|
|||||||
if (!this._isRunning) return
|
if (!this._isRunning) return
|
||||||
|
|
||||||
const peerId = await PeerId.create({ bits: 512 })
|
const peerId = await PeerId.create({ bits: 512 })
|
||||||
const peerInfo = new PeerInfo(peerId)
|
|
||||||
|
|
||||||
this._timer = setTimeout(() => {
|
this._timer = setTimeout(() => {
|
||||||
this.emit('peer', peerInfo)
|
this.emit('peer', {
|
||||||
|
id: peerId,
|
||||||
|
multiaddrs: [multiaddr('/ip4/127.0.0.1/tcp/8000')]
|
||||||
|
})
|
||||||
}, this.options.discoveryDelay || 1000)
|
}, this.options.discoveryDelay || 1000)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user