Skip to content

Commit dfb6ba3

Browse files
committed
chore: address review
1 parent 4c34155 commit dfb6ba3

File tree

5 files changed

+66
-60
lines changed

5 files changed

+66
-60
lines changed

src/record/utils.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
'use strict'
2+
3+
const Envelope = require('./envelope')
4+
const PeerRecord = require('./peer-record')
5+
6+
/**
7+
* Create (or update if existing) self peer record and store it in the AddressBook.
8+
* @param {libp2p} libp2p
9+
* @returns {Promise<void>}
10+
*/
11+
async function updateSelfPeerRecord (libp2p) {
12+
const peerRecord = new PeerRecord({
13+
peerId: libp2p.peerId,
14+
multiaddrs: libp2p.multiaddrs
15+
})
16+
const envelope = await Envelope.seal(peerRecord, libp2p.peerId)
17+
libp2p.peerStore.addressBook.consumePeerRecord(envelope)
18+
}
19+
20+
module.exports.updateSelfPeerRecord = updateSelfPeerRecord

src/transport-manager.js

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ const debug = require('debug')
77
const log = debug('libp2p:transports')
88
log.error = debug('libp2p:transports:error')
99

10-
const Envelope = require('./record/envelope')
11-
const PeerRecord = require('./record/peer-record')
10+
const { updateSelfPeerRecord } = require('./record/utils')
1211

1312
class TransportManager {
1413
/**
@@ -156,8 +155,8 @@ class TransportManager {
156155
this._listeners.get(key).push(listener)
157156

158157
// Track listen/close events
159-
listener.on('listening', () => this._createSelfPeerRecord())
160-
listener.on('close', () => this._createSelfPeerRecord())
158+
listener.on('listening', () => updateSelfPeerRecord(this.libp2p))
159+
listener.on('close', () => updateSelfPeerRecord(this.libp2p))
161160

162161
// We need to attempt to listen on everything
163162
tasks.push(listener.listen(addr))
@@ -226,26 +225,6 @@ class TransportManager {
226225

227226
await Promise.all(tasks)
228227
}
229-
230-
/**
231-
* Create self signed peer record raw envelope.
232-
* @return {Uint8Array}
233-
*/
234-
async _createSelfPeerRecord () {
235-
try {
236-
const peerRecord = new PeerRecord({
237-
peerId: this.libp2p.peerId,
238-
multiaddrs: this.libp2p.multiaddrs
239-
})
240-
const envelope = await Envelope.seal(peerRecord, this.libp2p.peerId)
241-
this.libp2p.peerStore.addressBook.consumePeerRecord(envelope)
242-
243-
return this.libp2p.peerStore.addressBook.getRawEnvelope(this.libp2p.peerId)
244-
} catch (err) {
245-
log.error('failed to get self peer record')
246-
}
247-
return null
248-
}
249228
}
250229

251230
/**

test/dialing/direct.node.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,28 @@ describe('Dialing (direct, TCP)', () => {
4040
let peerStore
4141
let remoteAddr
4242

43-
before(async () => {
44-
const [remotePeerId] = await Promise.all([
45-
PeerId.createFromJSON(Peers[0])
43+
beforeEach(async () => {
44+
const [localPeerId, remotePeerId] = await Promise.all([
45+
PeerId.createFromJSON(Peers[0]),
46+
PeerId.createFromJSON(Peers[1])
4647
])
48+
49+
peerStore = new PeerStore({ peerId: remotePeerId })
4750
remoteTM = new TransportManager({
4851
libp2p: {
49-
addressManager: new AddressManager({ listen: [listenAddr] })
52+
addressManager: new AddressManager({ listen: [listenAddr] }),
53+
peerId: remotePeerId,
54+
peerStore
5055
},
5156
upgrader: mockUpgrader
5257
})
5358
remoteTM.add(Transport.prototype[Symbol.toStringTag], Transport)
5459

55-
peerStore = new PeerStore({ peerId: remotePeerId })
5660
localTM = new TransportManager({
57-
libp2p: {},
61+
libp2p: {
62+
peerId: localPeerId,
63+
peerStore: new PeerStore({ peerId: localPeerId })
64+
},
5865
upgrader: mockUpgrader
5966
})
6067
localTM.add(Transport.prototype[Symbol.toStringTag], Transport)
@@ -64,7 +71,7 @@ describe('Dialing (direct, TCP)', () => {
6471
remoteAddr = remoteTM.getAddrs()[0].encapsulate(`/p2p/${remotePeerId.toB58String()}`)
6572
})
6673

67-
after(() => remoteTM.close())
74+
afterEach(() => remoteTM.close())
6875

6976
afterEach(() => {
7077
sinon.restore()
@@ -110,7 +117,7 @@ describe('Dialing (direct, TCP)', () => {
110117
peerStore
111118
})
112119

113-
peerStore.addressBook.set(peerId, [remoteAddr])
120+
peerStore.addressBook.set(peerId, remoteTM.getAddrs())
114121

115122
const connection = await dialer.connectToPeer(peerId)
116123
expect(connection).to.exist()

test/identify/index.spec.js

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ const { IdentifyService, multicodecs } = require('../../src/identify')
2020
const Peers = require('../fixtures/peers')
2121
const Libp2p = require('../../src')
2222
const Envelope = require('../../src/record/envelope')
23-
const PeerRecord = require('../../src/record/peer-record')
2423
const PeerStore = require('../../src/peer-store')
2524
const baseOptions = require('../utils/base-options.browser')
25+
const { updateSelfPeerRecord } = require('../../src/record/utils')
2626
const pkg = require('../../package.json')
2727

2828
const { MULTIADDRS_WEBSOCKETS } = require('../fixtures/browser')
@@ -80,7 +80,7 @@ describe('Identify', () => {
8080
sinon.spy(localIdentify.peerStore.protoBook, 'set')
8181

8282
// Transport Manager creates signed peer record
83-
await _createSelfPeerRecord(remoteIdentify._libp2p)
83+
await updateSelfPeerRecord(remoteIdentify._libp2p)
8484

8585
// Run identify
8686
await Promise.all([
@@ -244,8 +244,8 @@ describe('Identify', () => {
244244
sinon.spy(remoteIdentify.peerStore.protoBook, 'set')
245245

246246
// Transport Manager creates signed peer record
247-
await _createSelfPeerRecord(localIdentify._libp2p)
248-
await _createSelfPeerRecord(remoteIdentify._libp2p)
247+
await updateSelfPeerRecord(localIdentify._libp2p)
248+
await updateSelfPeerRecord(remoteIdentify._libp2p)
249249

250250
// Run identify
251251
await Promise.all([
@@ -389,8 +389,6 @@ describe('Identify', () => {
389389

390390
const connection = await libp2p.dialer.connectToPeer(remoteAddr)
391391
expect(connection).to.exist()
392-
// Wait for nextTick to trigger the identify call
393-
await delay(1)
394392

395393
// Wait for identify to finish
396394
await libp2p.identifyService.identify.firstCall.returnValue
@@ -426,8 +424,6 @@ describe('Identify', () => {
426424

427425
const connection = await libp2p.dialer.connectToPeer(remoteAddr)
428426
expect(connection).to.exist()
429-
// Wait for nextTick to trigger the identify call
430-
await delay(1)
431427

432428
// Wait for identify to finish
433429
await libp2p.identifyService.identify.firstCall.returnValue
@@ -450,15 +446,3 @@ describe('Identify', () => {
450446
})
451447
})
452448
})
453-
454-
// Self peer record creating on Transport Manager simulation
455-
const _createSelfPeerRecord = async (libp2p) => {
456-
try {
457-
const peerRecord = new PeerRecord({
458-
peerId: libp2p.peerId,
459-
multiaddrs: libp2p.multiaddrs
460-
})
461-
const envelope = await Envelope.seal(peerRecord, libp2p.peerId)
462-
libp2p.peerStore.addressBook.consumePeerRecord(envelope)
463-
} catch (_) {}
464-
}

test/transports/transport-manager.node.js

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
const chai = require('chai')
55
chai.use(require('dirty-chai'))
66
const { expect } = chai
7-
const sinon = require('sinon')
87

98
const AddressManager = require('../../src/address-manager')
109
const TransportManager = require('../../src/transport-manager')
1110
const PeerStore = require('../../src/peer-store')
11+
const PeerRecord = require('../../src/record/peer-record')
1212
const Transport = require('libp2p-tcp')
1313
const PeerId = require('peer-id')
1414
const multiaddr = require('multiaddr')
@@ -27,11 +27,13 @@ describe('Transport Manager (TCP)', () => {
2727
localPeer = await PeerId.createFromJSON(Peers[0])
2828
})
2929

30-
before(() => {
30+
beforeEach(() => {
3131
tm = new TransportManager({
3232
libp2p: {
33+
peerId: localPeer,
34+
multiaddrs: addrs,
3335
addressManager: new AddressManager({ listen: addrs }),
34-
PeerStore: new PeerStore({ peerId: localPeer })
36+
peerStore: new PeerStore({ peerId: localPeer })
3537
},
3638
upgrader: mockUpgrader,
3739
onConnection: () => {}
@@ -50,22 +52,36 @@ describe('Transport Manager (TCP)', () => {
5052
})
5153

5254
it('should be able to listen', async () => {
53-
sinon.spy(tm, '_createSelfPeerRecord')
54-
5555
tm.add(Transport.prototype[Symbol.toStringTag], Transport)
5656
await tm.listen(addrs)
5757
expect(tm._listeners).to.have.key(Transport.prototype[Symbol.toStringTag])
5858
expect(tm._listeners.get(Transport.prototype[Symbol.toStringTag])).to.have.length(addrs.length)
5959

60-
// Created Self Peer record on new listen address
61-
expect(tm._createSelfPeerRecord.callCount).to.equal(addrs.length)
62-
6360
// Ephemeral ip addresses may result in multiple listeners
6461
expect(tm.getAddrs().length).to.equal(addrs.length)
6562
await tm.close()
6663
expect(tm._listeners.get(Transport.prototype[Symbol.toStringTag])).to.have.length(0)
6764
})
6865

66+
it('should create self signed peer record on listen', async () => {
67+
let signedPeerRecord = await tm.libp2p.peerStore.addressBook.getPeerRecord(localPeer)
68+
expect(signedPeerRecord).to.not.exist()
69+
70+
tm.add(Transport.prototype[Symbol.toStringTag], Transport)
71+
await tm.listen(addrs)
72+
73+
// Should created Self Peer record on new listen address
74+
signedPeerRecord = await tm.libp2p.peerStore.addressBook.getPeerRecord(localPeer)
75+
expect(signedPeerRecord).to.exist()
76+
77+
const record = PeerRecord.createFromProtobuf(signedPeerRecord.payload)
78+
expect(record).to.exist()
79+
expect(record.multiaddrs.length).to.equal(addrs.length)
80+
addrs.forEach((a, i) => {
81+
expect(record.multiaddrs[i].equals(a)).to.be.true()
82+
})
83+
})
84+
6985
it('should be able to dial', async () => {
7086
tm.add(Transport.prototype[Symbol.toStringTag], Transport)
7187
await tm.listen(addrs)

0 commit comments

Comments
 (0)