Skip to content
This repository was archived by the owner on Feb 26, 2021. It is now read-only.

Commit 8a6cc98

Browse files
SidHarderdaviddias
authored andcommitted
Added distinctMultiaddr method (#29)
* Added distinctMultiaddr method * made distinctAddr filter by port and transport * adding multi addr tests * changing lodash require
1 parent 64c1dc0 commit 8a6cc98

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

src/index.js

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const Id = require('peer-id')
44
const multiaddr = require('multiaddr')
5+
const uniqBy = require('lodash').uniqBy
56

67
exports = module.exports = PeerInfo
78

@@ -88,6 +89,13 @@ function PeerInfo (peerId) {
8889
})
8990
}
9091

92+
this.distinctMultiaddr = () => {
93+
var result = uniqBy(this.multiaddrs, function (item) {
94+
return [item.toOptions().port, item.toOptions().transport].join()
95+
})
96+
return result
97+
}
98+
9199
// TODO: add features to fetch multiaddr using filters
92100
// look at https://github.com/whyrusleeping/js-mafmt/blob/master/src/index.js
93101
}

test/index.spec.js

+77
Original file line numberDiff line numberDiff line change
@@ -151,4 +151,81 @@ describe('peer-info', () => {
151151

152152
expect(pi.multiaddrs.length).to.equal(4)
153153
})
154+
155+
it('get distinct multiaddr same transport multiple different ports', () => {
156+
const mh1 = Multiaddr('/ip4/127.0.0.1/tcp/5001')
157+
const mh2 = Multiaddr('/ip4/127.0.0.1/tcp/5002')
158+
const mh3 = Multiaddr('/ip4/127.0.0.1/tcp/5003')
159+
const mh4 = Multiaddr('/ip4/127.0.0.1/tcp/5004')
160+
161+
pi.multiaddr.add(mh1)
162+
pi.multiaddr.add(mh2)
163+
pi.multiaddr.add(mh3)
164+
pi.multiaddr.add(mh4)
165+
166+
var distinctMultiaddr = pi.distinctMultiaddr()
167+
expect(distinctMultiaddr.length).to.equal(4)
168+
})
169+
170+
it('get distinct multiaddr same transport different port', () => {
171+
const mh1 = Multiaddr('/ip4/127.0.0.1/tcp/5001')
172+
const mh2 = Multiaddr('/ip4/127.0.0.1/tcp/5002')
173+
174+
pi.multiaddr.add(mh1)
175+
pi.multiaddr.add(mh2)
176+
177+
var distinctMultiaddr = pi.distinctMultiaddr()
178+
expect(distinctMultiaddr.length).to.equal(2)
179+
})
180+
181+
it('get distinct multiaddr same transport same port', () => {
182+
const mh1 = Multiaddr('/ip4/127.0.0.1/tcp/5001')
183+
const mh2 = Multiaddr('/ip4/127.0.0.1/tcp/5001')
184+
185+
pi.multiaddr.add(mh1)
186+
pi.multiaddr.add(mh2)
187+
188+
var distinctMultiaddr = pi.distinctMultiaddr()
189+
expect(distinctMultiaddr.length).to.equal(1)
190+
})
191+
192+
it('get distinct multiaddr different transport same port', () => {
193+
const mh1 = Multiaddr('/ip4/127.0.0.1/tcp/5001')
194+
const mh2 = Multiaddr('/ip4/127.0.0.1/udp/5001')
195+
196+
pi.multiaddr.add(mh1)
197+
pi.multiaddr.add(mh2)
198+
199+
var distinctMultiaddr = pi.distinctMultiaddr()
200+
expect(distinctMultiaddr.length).to.equal(2)
201+
})
202+
203+
it('get distinct multiaddr different family same port same transport', () => {
204+
const mh1 = Multiaddr('/ip4/127.0.0.1/tcp/5001')
205+
const mh2 = Multiaddr('/ip6/::/tcp/5001')
206+
207+
pi.multiaddr.add(mh1)
208+
pi.multiaddr.add(mh2)
209+
210+
var distinctMultiaddr = pi.distinctMultiaddr()
211+
expect(distinctMultiaddr.length).to.equal(1)
212+
})
213+
214+
it('get distinct multiaddr different family same port multiple transports', () => {
215+
const mh1 = Multiaddr('/ip4/127.0.0.1/tcp/5001')
216+
const mh2 = Multiaddr('/ip6/::/tcp/5001')
217+
const mh3 = Multiaddr('/ip6/::/udp/5002')
218+
const mh4 = Multiaddr('/ip4/127.0.0.1/udp/5002')
219+
220+
pi.multiaddr.add(mh1)
221+
pi.multiaddr.add(mh2)
222+
pi.multiaddr.add(mh3)
223+
pi.multiaddr.add(mh4)
224+
225+
var distinctMultiaddr = pi.distinctMultiaddr()
226+
expect(distinctMultiaddr.length).to.equal(2)
227+
228+
expect(distinctMultiaddr[0].toOptions().family).to.equal('ipv4')
229+
expect(distinctMultiaddr[1].toOptions().family).to.equal('ipv6')
230+
})
154231
})

0 commit comments

Comments
 (0)