mirror of
https://github.com/fluencelabs/js-libp2p
synced 2025-06-13 01:01:23 +00:00
feat: custom dialer addr sorter (#792)
* feat: custom dialer addr sorter * chore: use libp2p utils sorter via addressBook getMultiaddrsForPeer * chore: use new libp2p utils * chore: apply suggestions from code review Co-authored-by: Jacob Heun <jacobheun@gmail.com> Co-authored-by: Jacob Heun <jacobheun@gmail.com>
This commit is contained in:
committed by
Vasco Santos
parent
e50c6abcf2
commit
585ad52b4c
@ -16,6 +16,7 @@ const { AbortError } = require('libp2p-interfaces/src/transport/errors')
|
||||
const { codes: ErrorCodes } = require('../../src/errors')
|
||||
const Constants = require('../../src/constants')
|
||||
const Dialer = require('../../src/dialer')
|
||||
const addressSort = require('libp2p-utils/src/address-sort')
|
||||
const PeerStore = require('../../src/peer-store')
|
||||
const TransportManager = require('../../src/transport-manager')
|
||||
const Libp2p = require('../../src')
|
||||
@ -44,6 +45,7 @@ describe('Dialing (direct, WebSockets)', () => {
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
peerStore.delete(peerId)
|
||||
sinon.restore()
|
||||
})
|
||||
|
||||
@ -176,6 +178,37 @@ describe('Dialing (direct, WebSockets)', () => {
|
||||
.and.to.have.property('code', ErrorCodes.ERR_TIMEOUT)
|
||||
})
|
||||
|
||||
it('should sort addresses on dial', async () => {
|
||||
const peerMultiaddrs = [
|
||||
multiaddr('/ip4/127.0.0.1/tcp/15001/ws'),
|
||||
multiaddr('/ip4/20.0.0.1/tcp/15001/ws'),
|
||||
multiaddr('/ip4/30.0.0.1/tcp/15001/ws')
|
||||
]
|
||||
|
||||
sinon.spy(addressSort, 'publicAddressesFirst')
|
||||
sinon.stub(localTM, 'dial').callsFake(createMockConnection)
|
||||
|
||||
const dialer = new Dialer({
|
||||
transportManager: localTM,
|
||||
addressSorter: addressSort.publicAddressesFirst,
|
||||
concurrency: 3,
|
||||
peerStore
|
||||
})
|
||||
|
||||
// Inject data in the AddressBook
|
||||
peerStore.addressBook.add(peerId, peerMultiaddrs)
|
||||
|
||||
// Perform 3 multiaddr dials
|
||||
await dialer.connectToPeer(peerId)
|
||||
|
||||
expect(addressSort.publicAddressesFirst.callCount).to.eql(1)
|
||||
|
||||
const sortedAddresses = addressSort.publicAddressesFirst(peerMultiaddrs.map((m) => ({ multiaddr: m })))
|
||||
expect(localTM.dial.getCall(0).args[0].equals(sortedAddresses[0].multiaddr))
|
||||
expect(localTM.dial.getCall(1).args[0].equals(sortedAddresses[1].multiaddr))
|
||||
expect(localTM.dial.getCall(2).args[0].equals(sortedAddresses[2].multiaddr))
|
||||
})
|
||||
|
||||
it('should dial to the max concurrency', async () => {
|
||||
const dialer = new Dialer({
|
||||
transportManager: localTM,
|
||||
|
Reference in New Issue
Block a user