diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..223ed65 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,33 @@ +name: ci +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: npm install + - run: npx aegir lint + - run: npx aegir dep-check + test-node: + needs: check + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-latest, ubuntu-latest, macos-latest] + node: [14, 15] + fail-fast: true + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + - run: npm install + - run: npx aegir test -t node --bail --cov + - uses: codecov/codecov-action@v1 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 0b14c37..0000000 --- a/.travis.yml +++ /dev/null @@ -1,28 +0,0 @@ -language: node_js -cache: npm -stages: - - check - - test - - cov - -node_js: - - '10' - - '12' - -os: - - linux - - osx - - windows - -script: npx nyc -s npm run test:node -- --bail -after_success: npx nyc report --reporter=text-lcov > coverage.lcov && npx codecov - -jobs: - include: - - stage: check - script: - - npx aegir dep-check - - npm run lint - -notifications: - email: false \ No newline at end of file diff --git a/package.json b/package.json index a3a3618..bdd49c4 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,6 @@ "release-major": "aegir release --type major -t node --no-build", "coverage-publish": "aegir coverage publish" }, - "pre-push": [ - "lint" - ], "repository": { "type": "git", "url": "https://github.com/libp2p/js-libp2p-mdns.git" @@ -34,15 +31,15 @@ }, "homepage": "https://github.com/libp2p/js-libp2p-mdns", "devDependencies": { - "aegir": "^25.0.0", + "aegir": "^33.0.0", "delay": "^4.3.0", - "libp2p-interfaces": "^0.4.0", + "libp2p-interfaces": "^0.10.0", "p-defer": "^3.0.0", "p-wait-for": "^3.1.0" }, "dependencies": { - "debug": "^4.1.1", - "multiaddr": "^8.0.0", + "debug": "^4.3.1", + "multiaddr": "^9.0.1", "multicast-dns": "^7.2.0", "peer-id": "^0.14.0" }, diff --git a/src/compat/querier.js b/src/compat/querier.js index f53b99a..da1ab3c 100644 --- a/src/compat/querier.js +++ b/src/compat/querier.js @@ -2,7 +2,7 @@ const EE = require('events') const MDNS = require('multicast-dns') -const Multiaddr = require('multiaddr') +const { Multiaddr } = require('multiaddr') const PeerId = require('peer-id') const debug = require('debug') const log = debug('libp2p:mdns:compat:querier') @@ -127,10 +127,10 @@ module.exports = Querier * running it again. `fn` must return an object with a stop function, which is * called when the period expires. * - * @param {Function} fn function to run + * @param {Function} fn - function to run * @param {Object} [options] - * @param {Object} [options.period] Period in ms to run the function for - * @param {Object} [options.interval] Interval in ms between runs + * @param {Object} [options.period] - Period in ms to run the function for + * @param {Object} [options.interval] - Interval in ms between runs * @returns {Object} handle that can be used to stop execution */ function periodically (fn, options) { diff --git a/src/compat/responder.js b/src/compat/responder.js index bcaa295..44f852d 100644 --- a/src/compat/responder.js +++ b/src/compat/responder.js @@ -76,10 +76,10 @@ class Responder { }) addresses.forEach((ma) => { - if (['ipv4', 'ipv6'].includes(ma.family)) { + if ([4, 6].includes(ma.family)) { answers.push({ name: OS.hostname(), - type: ma.family === 'ipv4' ? 'A' : 'AAAA', + type: ma.family === 4 ? 'A' : 'AAAA', class: 'IN', ttl: 120, data: ma.host diff --git a/src/index.js b/src/index.js index 1528cd7..c55f1a5 100644 --- a/src/index.js +++ b/src/index.js @@ -73,7 +73,7 @@ class MulticastDNS extends EventEmitter { } _onPeer (peerData) { - this.emit('peer', peerData) + this.mdns && this.emit('peer', peerData) } /** diff --git a/src/query.js b/src/query.js index 5b2c408..398d9be 100644 --- a/src/query.js +++ b/src/query.js @@ -4,7 +4,7 @@ const os = require('os') const debug = require('debug') const log = debug('libp2p:mdns') log.error = debug('libp2p:mdns:error') -const Multiaddr = require('multiaddr') +const { Multiaddr } = require('multiaddr') const Id = require('peer-id') module.exports = { @@ -132,10 +132,10 @@ module.exports = { }) addresses.forEach((addr) => { - if (['ipv4', 'ipv6'].includes(addr.family)) { + if ([4, 6].includes(addr.family)) { answers.push({ name: os.hostname(), - type: addr.family === 'ipv4' ? 'A' : 'AAAA', + type: addr.family === 4 ? 'A' : 'AAAA', class: 'IN', ttl: 120, data: addr.host diff --git a/test/compat/go-multicast-dns.spec.js b/test/compat/go-multicast-dns.spec.js index 6c40e3b..6f63705 100644 --- a/test/compat/go-multicast-dns.spec.js +++ b/test/compat/go-multicast-dns.spec.js @@ -2,7 +2,7 @@ 'use strict' const { expect } = require('aegir/utils/chai') -const multiaddr = require('multiaddr') +const { Multiaddr } = require('multiaddr') const PeerId = require('peer-id') const pDefer = require('p-defer') @@ -10,8 +10,8 @@ const GoMulticastDNS = require('../../src/compat') describe('GoMulticastDNS', () => { const peerAddrs = [ - multiaddr('/ip4/127.0.0.1/tcp/20001'), - multiaddr('/ip4/127.0.0.1/tcp/20002') + new Multiaddr('/ip4/127.0.0.1/tcp/20001'), + new Multiaddr('/ip4/127.0.0.1/tcp/20002') ] let peerIds @@ -77,5 +77,10 @@ describe('GoMulticastDNS', () => { ]) await defer.promise + + await Promise.all([ + mdnsA.stop(), + mdnsB.stop() + ]) }) }) diff --git a/test/compat/querier.spec.js b/test/compat/querier.spec.js index 9fb3ab7..2268a45 100644 --- a/test/compat/querier.spec.js +++ b/test/compat/querier.spec.js @@ -237,7 +237,8 @@ describe('Querier', () => { /** * Ensure peerIds[1] are emitted from `querier` - * @param {Function} getResponse Given a query, construct a response to test the querier + * + * @param {Function} getResponse - Given a query, construct a response to test the querier */ async function ensurePeer (getResponse) { querier = new Querier({ peerId: peerIds[0] }) @@ -264,7 +265,8 @@ describe('Querier', () => { /** * Ensure none of peerIds are emitted from `querier` - * @param {Function} getResponse Given a query, construct a response to test the querier + * + * @param {Function} getResponse - Given a query, construct a response to test the querier */ async function ensureNoPeer (getResponse) { querier = new Querier({ peerId: peerIds[0] }) diff --git a/test/compat/responder.spec.js b/test/compat/responder.spec.js index e49ae8e..2be2320 100644 --- a/test/compat/responder.spec.js +++ b/test/compat/responder.spec.js @@ -2,7 +2,7 @@ 'use strict' const { expect } = require('aegir/utils/chai') -const multiaddr = require('multiaddr') +const { Multiaddr } = require('multiaddr') const PeerId = require('peer-id') const MDNS = require('multicast-dns') const delay = require('delay') @@ -14,8 +14,8 @@ const { SERVICE_TAG_LOCAL, MULTICAST_IP, MULTICAST_PORT } = require('../../src/c describe('Responder', () => { let responder, mdns const peerAddrs = [ - multiaddr('/ip4/127.0.0.1/tcp/20001'), - multiaddr('/ip4/127.0.0.1/tcp/20002') + new Multiaddr('/ip4/127.0.0.1/tcp/20001'), + new Multiaddr('/ip4/127.0.0.1/tcp/20002') ] let peerIds diff --git a/test/compliance.spec.js b/test/compliance.spec.js index be0debf..b89a746 100644 --- a/test/compliance.spec.js +++ b/test/compliance.spec.js @@ -4,16 +4,20 @@ const tests = require('libp2p-interfaces/src/peer-discovery/tests') +const { Multiaddr } = require('multiaddr') const PeerId = require('peer-id') const MulticastDNS = require('../src') let mdns describe('compliance tests', () => { + let intervalId tests({ async setup () { - const peerId = await PeerId.create() + const peerId1 = await PeerId.create() + const peerId2 = await PeerId.create() + mdns = new MulticastDNS({ - peerId: peerId, + peerId: peerId1, libp2p: { multiaddrs: [] }, @@ -22,10 +26,17 @@ describe('compliance tests', () => { compat: true }) + // Trigger discovery + const maStr = '/ip4/127.0.0.1/tcp/15555/ws/p2p-webrtc-star/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo2d' + intervalId = setInterval(() => mdns._onPeer({ + id: peerId2, + multiaddrs: [new Multiaddr(maStr)] + }), 1000) + return mdns }, async teardown () { - // clearInterval(intervalId) + clearInterval(intervalId) await new Promise(resolve => setTimeout(resolve, 10)) } }) diff --git a/test/multicast-dns.spec.js b/test/multicast-dns.spec.js index c7a04d2..bd1ff14 100644 --- a/test/multicast-dns.spec.js +++ b/test/multicast-dns.spec.js @@ -2,7 +2,7 @@ 'use strict' const { expect } = require('aegir/utils/chai') -const multiaddr = require('multiaddr') +const { Multiaddr } = require('multiaddr') const PeerId = require('peer-id') const pWaitFor = require('p-wait-for') @@ -25,25 +25,25 @@ describe('MulticastDNS', () => { ]) aMultiaddrs = [ - multiaddr('/ip4/127.0.0.1/tcp/20001'), - multiaddr('/dns4/webrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'), - multiaddr('/dns4/discovery.libp2p.io/tcp/8443') + new Multiaddr('/ip4/127.0.0.1/tcp/20001'), + new Multiaddr('/dns4/webrtc-star.discovery.libp2p.io/tcp/443/wss/p2p-webrtc-star'), + new Multiaddr('/dns4/discovery.libp2p.io/tcp/8443') ] bMultiaddrs = [ - multiaddr('/ip4/127.0.0.1/tcp/20002'), - multiaddr('/ip6/::1/tcp/20002'), - multiaddr('/dnsaddr/discovery.libp2p.io') + new Multiaddr('/ip4/127.0.0.1/tcp/20002'), + new Multiaddr('/ip6/::1/tcp/20002'), + new Multiaddr('/dnsaddr/discovery.libp2p.io') ] cMultiaddrs = [ - multiaddr('/ip4/127.0.0.1/tcp/20003'), - multiaddr('/ip4/127.0.0.1/tcp/30003/ws'), - multiaddr('/dns4/discovery.libp2p.io') + new Multiaddr('/ip4/127.0.0.1/tcp/20003'), + new Multiaddr('/ip4/127.0.0.1/tcp/30003/ws'), + new Multiaddr('/dns4/discovery.libp2p.io') ] dMultiaddrs = [ - multiaddr('/ip4/127.0.0.1/tcp/30003/ws') + new Multiaddr('/ip4/127.0.0.1/tcp/30003/ws') ] }) @@ -220,7 +220,7 @@ describe('MulticastDNS', () => { }) await mdns.start() - return new Promise((resolve, reject) => { + await new Promise((resolve, reject) => { mdns.on('peer', (peerData) => { if (!peerData) { reject(new Error('peerData was not set')) @@ -245,5 +245,7 @@ describe('MulticastDNS', () => { }] }) }) + + await mdns.stop() }) })