fix: yield only final peers from dht getClosestPeers (#1380)

* fix: yield final peers from dht getClosestPeers

`PEER_RESPONSE` is an intermediate event, we should only yield from `FINAL_PEER` events as we'll only get `K` of those.

* chore: fix test
This commit is contained in:
Alex Potsides 2022-09-23 09:31:04 +01:00 committed by GitHub
parent 62198414b3
commit 3f57edaf3b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 19 deletions

View File

@ -27,8 +27,8 @@ export class DHTPeerRouting implements PeerRouting {
async * getClosestPeers (key: Uint8Array, options: AbortOptions = {}) {
for await (const event of this.dht.getClosestPeers(key, options)) {
if (event.name === 'PEER_RESPONSE') {
yield * event.closer
if (event.name === 'FINAL_PEER') {
yield event.peer
}
}
}

View File

@ -112,16 +112,15 @@ describe('peer-routing', () => {
const dhtGetClosestPeersStub = sinon.stub(nodes[0].dht, 'getClosestPeers').callsFake(async function * () {
yield {
from: nodes[2].peerId,
type: EventTypes.PEER_RESPONSE,
name: 'PEER_RESPONSE',
type: EventTypes.FINAL_PEER,
name: 'FINAL_PEER',
messageName: 'FIND_NODE',
messageType: MessageType.FIND_NODE,
closer: [{
peer: {
id: nodes[1].peerId,
multiaddrs: [],
protocols: []
}],
providers: []
}
}
})
@ -589,26 +588,20 @@ describe('peer-routing', () => {
const peerStoreAddressBookAddStub = sinon.spy(node.peerStore.addressBook, 'add')
const dhtGetClosestPeersStub = sinon.stub(node.dht, 'getClosestPeers').callsFake(async function * () {
yield {
name: 'PEER_RESPONSE',
type: EventTypes.PEER_RESPONSE,
name: 'FINAL_PEER',
type: EventTypes.FINAL_PEER,
messageName: 'FIND_NODE',
messageType: MessageType.FIND_NODE,
from: peerIds[0],
closer: [
results[0]
],
providers: []
peer: results[0]
}
yield {
name: 'PEER_RESPONSE',
type: EventTypes.PEER_RESPONSE,
name: 'FINAL_PEER',
type: EventTypes.FINAL_PEER,
messageName: 'FIND_NODE',
messageType: MessageType.FIND_NODE,
from: peerIds[0],
closer: [
results[1]
],
providers: []
peer: results[1]
}
})