Skip to content

Commit

Permalink
chore: use libp2p 0.28.x
Browse files Browse the repository at this point in the history
  • Loading branch information
vasco-santos committed May 26, 2020
1 parent bd676f0 commit 4d05404
Show file tree
Hide file tree
Showing 10 changed files with 103 additions and 76 deletions.
6 changes: 2 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@
"iso-random-stream": "^1.1.1",
"it-all": "^1.0.2",
"it-drain": "^1.0.1",
"libp2p": "^0.27.0",
"libp2p-kad-dht": "^0.18.3",
"libp2p": "libp2p/js-libp2p#0.28.x",
"libp2p-kad-dht": "^0.19.1",
"libp2p-mplex": "^0.9.2",
"libp2p-secio": "^0.12.1",
"libp2p-tcp": "^0.14.2",
Expand All @@ -65,9 +65,7 @@
"p-defer": "^3.0.0",
"p-event": "^4.1.0",
"p-wait-for": "^3.1.0",
"peer-book": "~0.9.0",
"peer-id": "^0.13.5",
"peer-info": "^0.17.0",
"promisify-es6": "^1.0.3",
"rimraf": "^3.0.0",
"sinon": "^9.0.0",
Expand Down
12 changes: 6 additions & 6 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ const statsKeys = [
class Bitswap {
constructor (libp2p, blockstore, options) {
this._libp2p = libp2p
this._log = logger(this.peerInfo.id)
this._log = logger(this.peerId)

this._options = Object.assign({}, defaultOptions, options)

Expand All @@ -54,16 +54,16 @@ class Bitswap {
// local database
this.blockstore = blockstore

this.engine = new DecisionEngine(this.peerInfo.id, blockstore, this.network, this._stats)
this.engine = new DecisionEngine(this.peerId, blockstore, this.network, this._stats)

// handle message sending
this.wm = new WantManager(this.peerInfo.id, this.network, this._stats)
this.wm = new WantManager(this.peerId, this.network, this._stats)

this.notifications = new Notifications(this.peerInfo.id)
this.notifications = new Notifications(this.peerId)
}

get peerInfo () {
return this._libp2p.peerInfo
get peerId () {
return this._libp2p.peerId
}

// handle messages received through the network
Expand Down
26 changes: 13 additions & 13 deletions src/network.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const BITSWAP120 = '/ipfs/bitswap/1.2.0'

class Network {
constructor (libp2p, bitswap, options, stats) {
this._log = logger(libp2p.peerInfo.id, 'network')
this._log = logger(libp2p.peerId, 'network')
options = options || {}
this.libp2p = libp2p
this.bitswap = bitswap
Expand All @@ -37,14 +37,14 @@ class Network {
this._running = true
this.libp2p.handle(this.protocols, this._onConnection)

this.libp2p.on('peer:connect', this._onPeerConnect)
this.libp2p.on('peer:disconnect', this._onPeerDisconnect)
this.libp2p.connectionManager.on('peer:connect', this._onPeerConnect)
this.libp2p.connectionManager.on('peer:disconnect', this._onPeerDisconnect)

// All existing connections are like new ones for us
for (const peer of this.libp2p.peerStore.peers.values()) {
if (this.libp2p.registrar.getConnection(peer)) {
this._onPeerConnect(peer)
}
const conn = this.libp2p.connectionManager.get(peer.id)

conn && this._onPeerConnect(conn)
}
}

Expand All @@ -54,8 +54,8 @@ class Network {
// Unhandle both, libp2p doesn't care if it's not already handled
this.libp2p.unhandle(this.protocols)

this.libp2p.removeListener('peer:connect', this._onPeerConnect)
this.libp2p.removeListener('peer:disconnect', this._onPeerDisconnect)
this.libp2p.connectionManager.removeListener('peer:connect', this._onPeerConnect)
this.libp2p.connectionManager.removeListener('peer:disconnect', this._onPeerDisconnect)
}

/**
Expand Down Expand Up @@ -92,12 +92,12 @@ class Network {
}
}

_onPeerConnect (peerInfo) {
this.bitswap._onPeerConnected(peerInfo.id)
_onPeerConnect (connection) {
this.bitswap._onPeerConnected(connection.remotePeer)
}

_onPeerDisconnect (peerInfo) {
this.bitswap._onPeerDisconnected(peerInfo.id)
_onPeerDisconnect (connection) {
this.bitswap._onPeerDisconnected(connection.remotePeer)
}

/**
Expand Down Expand Up @@ -181,7 +181,7 @@ class Network {
/**
* Connects to another peer
*
* @param {PeerInfo|PeerId|Multiaddr} peer
* @param {PeerId|Multiaddr} peer
* @param {Object} options
* @param {AbortSignal} options.abortSignal
* @returns {Promise<Connection>}
Expand Down
5 changes: 3 additions & 2 deletions test/bitswap-stats.js
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,8 @@ describe('bitswap stats', () => {
bs2 = bitswaps[1]
bs2.start()

await libp2pNodes[0].dial(libp2pNodes[1].peerInfo)
libp2pNodes[0].peerStore.addressBook.set(libp2pNodes[1].peerId, libp2pNodes[1].multiaddrs)
await libp2pNodes[0].dial(libp2pNodes[1].peerId)

block = await makeBlock()

Expand Down Expand Up @@ -212,7 +213,7 @@ describe('bitswap stats', () => {
})

it('has peer stats', async () => {
const peerStats = bs2.stat().forPeer(libp2pNodes[0].peerInfo.id)
const peerStats = bs2.stat().forPeer(libp2pNodes[0].peerId)
expect(peerStats).to.exist()

const stats = await pEvent(peerStats, 'update')
Expand Down
26 changes: 21 additions & 5 deletions test/bitswap.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const { expect } = require('aegir/utils/chai')
const delay = require('delay')
const PeerId = require('peer-id')
const sinon = require('sinon')
const pWaitFor = require('p-wait-for')

const Bitswap = require('../src')

Expand Down Expand Up @@ -38,9 +39,12 @@ describe('bitswap without DHT', function () {
])

// connect 0 -> 1 && 1 -> 2
nodes[0].libp2pNode.peerStore.addressBook.set(nodes[1].libp2pNode.peerId, nodes[1].libp2pNode.multiaddrs)
nodes[1].libp2pNode.peerStore.addressBook.set(nodes[2].libp2pNode.peerId, nodes[2].libp2pNode.multiaddrs)

await Promise.all([
nodes[0].libp2pNode.dial(nodes[1].libp2pNode.peerInfo),
nodes[1].libp2pNode.dial(nodes[2].libp2pNode.peerInfo)
nodes[0].libp2pNode.dial(nodes[1].libp2pNode.peerId),
nodes[1].libp2pNode.dial(nodes[2].libp2pNode.peerId)
])
})

Expand Down Expand Up @@ -132,10 +136,22 @@ describe('bitswap with DHT', function () {
])

// connect 0 -> 1 && 1 -> 2
nodes[0].libp2pNode.peerStore.addressBook.set(nodes[1].libp2pNode.peerId, nodes[1].libp2pNode.multiaddrs)
nodes[1].libp2pNode.peerStore.addressBook.set(nodes[2].libp2pNode.peerId, nodes[2].libp2pNode.multiaddrs)

await Promise.all([
nodes[0].libp2pNode.dial(nodes[1].libp2pNode.peerId),
nodes[1].libp2pNode.dial(nodes[2].libp2pNode.peerId)
])

// await dht routing table are updated
await Promise.all([
nodes[0].libp2pNode.dial(nodes[1].libp2pNode.peerInfo),
nodes[1].libp2pNode.dial(nodes[2].libp2pNode.peerInfo)
pWaitFor(() => nodes[0].libp2pNode._dht.routingTable.size >= 1),
pWaitFor(() => nodes[1].libp2pNode._dht.routingTable.size >= 1)
])

// Give time to process
await delay(300)
})

after(async () => {
Expand All @@ -151,7 +167,7 @@ describe('bitswap with DHT', function () {
await nodes[2].bitswap.put(block)

// Give put time to process
await delay(100)
await delay(300)

const blockRetrieved = await nodes[0].bitswap.get(block.cid)
expect(block.data).to.eql(blockRetrieved.data)
Expand Down
2 changes: 1 addition & 1 deletion test/network/gen-bitswap-network.node.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ async function exchangeBlocks (nodes, blocksPerNode = 10) {
const d = Date.now()

// fetch all blocks on every node
await Promise.all(nodes.map(async (node) => {
await Promise.all(nodes.map(async (node, index) => {
const bs = await Promise.all(cids.map((cid) => node.bitswap.get(cid)))
expect(bs).to.deep.equal(blocks)
}))
Expand Down
27 changes: 16 additions & 11 deletions test/network/network.node.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ describe('network', () => {

it('connectTo fail', async () => {
try {
await networkA.connectTo(p2pB.peerInfo.id)
await networkA.connectTo(p2pB.peerId)
assert.fail()
} catch (err) {
expect(err).to.exist()
Expand All @@ -87,24 +87,26 @@ describe('network', () => {
var counter = 0

bitswapMockA._onPeerConnected = (peerId) => {
expect(peerId.toB58String()).to.equal(p2pB.peerInfo.id.toB58String())
expect(peerId.toB58String()).to.equal(p2pB.peerId.toB58String())
counter++
}

bitswapMockB._onPeerConnected = (peerId) => {
expect(peerId.toB58String()).to.equal(p2pA.peerInfo.id.toB58String())
expect(peerId.toB58String()).to.equal(p2pA.peerId.toB58String())
counter++
}

await p2pA.dial(p2pB.peerInfo)
p2pA.peerStore.addressBook.set(p2pB.peerId, p2pB.multiaddrs)
await p2pA.dial(p2pB.peerId)

await pWaitFor(() => counter >= 2)
bitswapMockA._onPeerConnected = () => {}
bitswapMockB._onPeerConnected = () => {}
})

it('connectTo success', async () => {
await networkA.connectTo(p2pB.peerInfo)
p2pA.peerStore.addressBook.set(p2pB.peerId, p2pB.multiaddrs)
await networkA.connectTo(p2pB.peerId)
})

const versions = [{
Expand Down Expand Up @@ -134,7 +136,8 @@ describe('network', () => {

bitswapMockB._receiveError = (err) => deferred.reject(err)

const { stream } = await p2pA.dialProtocol(p2pB.peerInfo, '/ipfs/bitswap/' + version.num)
// TODO: set addr
const { stream } = await p2pA.dialProtocol(p2pB.peerId, '/ipfs/bitswap/' + version.num)
await pipe(
[version.serialize(msg)],
lp.encode(),
Expand Down Expand Up @@ -165,11 +168,12 @@ describe('network', () => {

bitswapMockB._receiveError = deferred.reject

await networkA.sendMessage(p2pB.peerInfo.id, msg)
await networkA.sendMessage(p2pB.peerId, msg)
})

it('dial to peer on Bitswap 1.0.0', async () => {
const { protocol } = await p2pA.dialProtocol(p2pC.peerInfo, ['/ipfs/bitswap/1.1.0', '/ipfs/bitswap/1.0.0'])
p2pA.peerStore.addressBook.set(p2pC.peerId, p2pC.multiaddrs)
const { protocol } = await p2pA.dialProtocol(p2pC.peerId, ['/ipfs/bitswap/1.1.0', '/ipfs/bitswap/1.0.0'])

expect(protocol).to.equal('/ipfs/bitswap/1.0.0')
})
Expand All @@ -194,7 +198,7 @@ describe('network', () => {

bitswapMockC._receiveError = deferred.reject

await networkA.sendMessage(p2pC.peerInfo.id, msg)
await networkA.sendMessage(p2pC.peerId, msg)
await deferred.promise
})

Expand All @@ -209,15 +213,16 @@ describe('network', () => {
networkB.start()

// FIXME: have to already be connected as sendMessage only accepts a peer id, not a PeerInfo
await p2pA.dial(p2pB.peerInfo)
p2pA.peerStore.addressBook.set(p2pB.peerId, p2pB.multiaddrs)
await p2pA.dial(p2pB.peerId)

const deferred = pDefer()

bitswapMockB._receiveMessage = () => {
deferred.resolve()
}

await networkA.sendMessage(p2pB.peerInfo.id, new Message(true))
await networkA.sendMessage(p2pB.peerId, new Message(true))

return deferred
})
Expand Down
3 changes: 2 additions & 1 deletion test/utils/connect-all.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ const without = require('lodash.without')
module.exports = async (nodes) => {
for (const node of nodes) {
for (const otherNode of without(nodes, node)) {
await node.libp2pNode.dial(otherNode.bitswap.peerInfo)
// TODO: set addrs
await node.libp2pNode.dial(otherNode.bitswap.peerId)
}
}
}
13 changes: 8 additions & 5 deletions test/utils/create-libp2p-node.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ const MPLEX = require('libp2p-mplex')
const SECIO = require('libp2p-secio')
const libp2p = require('libp2p')
const KadDHT = require('libp2p-kad-dht')
const PeerInfo = require('peer-info')
const PeerId = require('peer-id')

const defaultsDeep = require('@nodeutils/defaults-deep')

class Node extends libp2p {
Expand Down Expand Up @@ -38,10 +38,13 @@ class Node extends libp2p {

async function createLibp2pNode (options = {}) {
const id = await PeerId.create({ bits: 512 })
const peerInfo = new PeerInfo(id)
peerInfo.multiaddrs.add('/ip4/0.0.0.0/tcp/0')
options.peerInfo = peerInfo
const node = new Node(options)
const node = new Node({
peerId: id,
addresses: {
listen: ['/ip4/0.0.0.0/tcp/0']
},
...options
})
await node.start()

return node
Expand Down
Loading

0 comments on commit 4d05404

Please sign in to comment.