From ab64395da2d29992fff11e78c10f8e1a2805e4f0 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 30 Mar 2017 15:56:23 +0100 Subject: [PATCH] new peer-book --- package.json | 4 +-- src/index.js | 56 +++++++++++++++++++++++------------------- test/peer-book.spec.js | 12 ++++----- 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 32881d0..f750860 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,8 @@ "async": "^2.2.0", "chai": "^3.5.0", "dirty-chai": "^1.2.2", - "multiaddr": "^2.2.3", - "peer-info": "~0.8.5", + "multiaddr": "^2.3.0", + "peer-info": "~0.9.0", "pre-commit": "^1.2.2" }, "contributors": [ diff --git a/src/index.js b/src/index.js index 0f7697e..103e2a0 100644 --- a/src/index.js +++ b/src/index.js @@ -2,25 +2,30 @@ const bs58 = require('bs58') -module.exports = PeerBook - -function PeerBook () { - if (!(this instanceof PeerBook)) { - return new PeerBook() +class PeerBook { + constructor () { + this._peers = {} } - const peers = {} - - this.put = (peerInfo, replace) => { - if (peers[peerInfo.id.toB58String()] && !replace) { - // peerInfo.replace merges by default - peers[peerInfo.id.toB58String()].multiaddr.replace([], peerInfo.multiaddrs) + /** + * Stores a peerInfo, if already exist, only adds the multiaddrs + * + * @param {PeerInfo} peerInfo + * @param {replace} boolean + * @returns {null} + */ + put (peerInfo, replace) { + if (this._peers[peerInfo.id.toB58String()] && !replace) { + // peerInfo.replace merges by default if none to replace are passed + this._peers[peerInfo.id.toB58String()] + .multiaddrs.replace([], peerInfo.multiaddrs.toArray()) } - peers[peerInfo.id.toB58String()] = peerInfo + + this._peers[peerInfo.id.toB58String()] = peerInfo } - this.getAll = () => { - return peers + getAll () { + return this._peers } /** @@ -29,30 +34,31 @@ function PeerBook () { * @param {PeerId} id * @returns {PeerInfo} */ - this.get = (id) => { + get (id) { return this.getByB58String(id.toB58String()) } - this.getByB58String = (b58String) => { - const peerInfo = peers[b58String] + getByB58String (b58String) { + const peerInfo = this._peers[b58String] + if (peerInfo) { return peerInfo } throw new Error('PeerInfo not found') } - this.getByMultihash = (multihash) => { + getByMultihash (multihash) { const b58multihash = bs58.encode(multihash).toString() return this.getByB58String(b58multihash) } - this.removeByB58String = (b58String) => { - if (peers[b58String]) { - delete peers[b58String] + removeByB58String (b58String) { + if (this._peers[b58String]) { + delete this._peers[b58String] } } - this.removeByMultihash = (multihash) => { + removeByMultihash (multihash) { const b58multihash = bs58.encode(multihash).toString() this.removeByB58String(b58multihash) } @@ -63,10 +69,10 @@ function PeerBook () { * @param {PeerId} id * @returns {Array} */ - this.getAddrs = (id) => { + getAddrs (id) { const info = this.get(id) return info.multiaddrs } - - // TODO serialize PeerBook into MerkleDAG Objects } + +module.exports = PeerBook diff --git a/test/peer-book.spec.js b/test/peer-book.spec.js index 70023ea..956226c 100644 --- a/test/peer-book.spec.js +++ b/test/peer-book.spec.js @@ -57,13 +57,13 @@ describe('peer-book', function () { it('get', () => { const peer = pb.get(p1.id) - expect(peer).to.deep.equal(p1) + expect(peer).to.eql(p1) }) it('getByB58String', () => { const p1Id = p1.id.toB58String() const peer = pb.getByB58String(p1Id) - expect(peer).to.deep.equal(p1) + expect(peer).to.eql(p1) }) it('getByB58String non existent', (done) => { @@ -114,15 +114,15 @@ describe('peer-book', function () { it('add repeated Id, merge info', () => { const peerA = new PeerInfo(p3.id) - peerA.multiaddr.add(new Multiaddr('/ip4/127.0.0.1/tcp/4001')) + peerA.multiaddrs.add(new Multiaddr('/ip4/127.0.0.1/tcp/4001')) pb.put(peerA) const peerB = pb.getByB58String(p3.id.toB58String()) - expect(peerA).to.deep.equal(peerB) + expect(peerA).to.eql(peerB) }) it('add repeated Id, replace info', () => { const peerA = new PeerInfo(p3.id) - peerA.multiaddr.add(new Multiaddr('/ip4/188.0.0.1/tcp/5001')) + peerA.multiaddrs.add(new Multiaddr('/ip4/188.0.0.1/tcp/5001')) pb.put(peerA, true) const peerB = pb.getByB58String(p3.id.toB58String()) expect(peerA).to.deep.equal(peerB) @@ -131,7 +131,7 @@ describe('peer-book', function () { it('getAddrs', () => { const pb = new PeerBook() const peer = new PeerInfo(p3.id) - peer.multiaddr.add(new Multiaddr('/ip4/127.0.0.1/tcp/1234')) + peer.multiaddrs.add(new Multiaddr('/ip4/127.0.0.1/tcp/1234')) pb.put(peer) expect(pb.getAddrs(p3.id)).to.be.eql(peer.multiaddrs) })