Skip to content

Commit

Permalink
fix: replace peerInfo addresses with listen addresses (#485)
Browse files Browse the repository at this point in the history
* feat: replace peer info addresses with listen addresses

* test: add listening test

* chore: fix linting
  • Loading branch information
dirkmc authored and jacobheun committed Jan 24, 2020
1 parent 472e14f commit 1999606
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -301,10 +301,18 @@ class Libp2p extends EventEmitter {
}

async _onStarting () {
// Listen on the addresses supplied in the peerInfo
const multiaddrs = this.peerInfo.multiaddrs.toArray()

await this.transportManager.listen(multiaddrs)

// The addresses may change once the listener starts
// eg /ip4/0.0.0.0/tcp/0 => /ip4/192.168.1.0/tcp/58751
this.peerInfo.multiaddrs.clear()
for (const ma of this.transportManager.getAddrs()) {
this.peerInfo.multiaddrs.add(ma)
}

if (this._config.pubsub.enabled) {
this.pubsub && this.pubsub.start()
}
Expand Down
56 changes: 56 additions & 0 deletions test/core/listening.node.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
'use strict'
/* eslint-env mocha */

const chai = require('chai')
chai.use(require('dirty-chai'))
const { expect } = chai

const multiaddr = require('multiaddr')
const Transport = require('libp2p-tcp')

const { create } = require('../../src')
const peerUtils = require('../utils/creators/peer')

const listenAddr = multiaddr('/ip4/0.0.0.0/tcp/0')

describe('Listening', () => {
let peerInfo
let libp2p

before(async () => {
[peerInfo] = await peerUtils.createPeerInfoFromFixture(1)
peerInfo.multiaddrs.add(listenAddr)
})

after(async () => {
await libp2p.stop()
})

it('should replace wildcard host and port with actual host and port on startup', async () => {
libp2p = await create({
peerInfo,
modules: {
transport: [Transport]
}
})

await libp2p.start()

const addrs = libp2p.peerInfo.multiaddrs.toArray()

// Should get something like:
// /ip4/127.0.0.1/tcp/50866
// /ip4/192.168.1.2/tcp/50866
expect(addrs.length).to.equal(2)

const opts = [addrs[0].toOptions(), addrs[1].toOptions()]
expect(opts[0].family).to.equal('ipv4')
expect(opts[1].family).to.equal('ipv4')
expect(opts[0].transport).to.equal('tcp')
expect(opts[1].transport).to.equal('tcp')
expect(opts[0].host).to.match(/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/)
expect(opts[1].host).to.match(/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/)
expect(opts[0].port).to.be.gt(0)
expect(opts[1].port).to.be.gt(0)
})
})

0 comments on commit 1999606

Please sign in to comment.