@@ -5,13 +5,16 @@ import { peerIdFromBytes } from '@libp2p/peer-id'
5
5
import { multiaddr } from '@multiformats/multiaddr'
6
6
import { expect } from 'aegir/chai'
7
7
import Sinon , { type SinonStubbedInstance } from 'sinon'
8
+ import { stubInterface } from 'sinon-ts'
8
9
import { type Message , MessageType } from '../../../src/message/dht.js'
9
10
import { PeerRouting } from '../../../src/peer-routing/index.js'
10
11
import { FindNodeHandler } from '../../../src/rpc/handlers/find-node.js'
11
12
import { passthroughMapper , removePrivateAddressesMapper , removePublicAddressesMapper } from '../../../src/utils.js'
12
13
import { createPeerId } from '../../utils/create-peer-id.js'
13
14
import type { DHTMessageHandler } from '../../../src/rpc/index.js'
14
15
import type { PeerId } from '@libp2p/interface'
16
+ import type { AddressManager } from '@libp2p/interface-internal'
17
+ import type { StubbedInstance } from 'sinon-ts'
15
18
16
19
const T = MessageType . FIND_NODE
17
20
@@ -21,15 +24,18 @@ describe('rpc - handlers - FindNode', () => {
21
24
let targetPeer : PeerId
22
25
let handler : DHTMessageHandler
23
26
let peerRouting : SinonStubbedInstance < PeerRouting >
27
+ let addressManager : StubbedInstance < AddressManager >
24
28
25
29
beforeEach ( async ( ) => {
26
30
peerId = await createPeerId ( )
27
31
sourcePeer = await createPeerId ( )
28
32
targetPeer = await createPeerId ( )
29
33
peerRouting = Sinon . createStubInstance ( PeerRouting )
34
+ addressManager = stubInterface < AddressManager > ( )
30
35
31
36
handler = new FindNodeHandler ( {
32
37
peerId,
38
+ addressManager,
33
39
logger : defaultLogger ( )
34
40
} , {
35
41
peerRouting,
@@ -38,14 +44,20 @@ describe('rpc - handlers - FindNode', () => {
38
44
} )
39
45
} )
40
46
41
- it ( 'returns nodes close to self but excludes self, if asked for self' , async ( ) => {
47
+ it ( 'returns nodes close to self and includes self, if asked for self' , async ( ) => {
42
48
const msg : Message = {
43
49
type : T ,
44
50
key : peerId . multihash . bytes ,
45
51
closer : [ ] ,
46
52
providers : [ ]
47
53
}
48
54
55
+ addressManager . getAddresses . returns ( [
56
+ multiaddr ( '/ip4/127.0.0.1/tcp/4002' ) ,
57
+ multiaddr ( '/ip4/192.168.1.5/tcp/4002' ) ,
58
+ multiaddr ( '/ip4/221.4.67.0/tcp/4002' )
59
+ ] )
60
+
49
61
peerRouting . getCloserPeersOffline
50
62
. withArgs ( peerId . multihash . bytes , peerId )
51
63
. resolves ( [ {
@@ -55,13 +67,6 @@ describe('rpc - handlers - FindNode', () => {
55
67
multiaddr ( '/ip4/192.168.1.5/tcp/4002' ) ,
56
68
multiaddr ( '/ip4/221.4.67.0/tcp/4002' )
57
69
]
58
- } , {
59
- id : peerId , // self peer
60
- multiaddrs : [
61
- multiaddr ( '/ip4/127.0.0.1/tcp/4002' ) ,
62
- multiaddr ( '/ip4/192.168.1.5/tcp/4002' ) ,
63
- multiaddr ( '/ip4/221.4.67.0/tcp/4002' )
64
- ]
65
70
} ] )
66
71
67
72
const response = await handler . handle ( peerId , msg )
@@ -70,11 +75,14 @@ describe('rpc - handlers - FindNode', () => {
70
75
throw new Error ( 'No response received from handler' )
71
76
}
72
77
73
- expect ( response . closer ) . to . have . length ( 1 )
78
+ expect ( response . closer ) . to . have . length ( 2 )
74
79
const peer = response . closer [ 0 ]
75
80
76
81
expect ( peerIdFromBytes ( peer . id ) . toString ( ) ) . to . equal ( targetPeer . toString ( ) )
77
82
expect ( peer . multiaddrs ) . to . not . be . empty ( )
83
+
84
+ const self = response . closer [ 1 ]
85
+ expect ( peerIdFromBytes ( self . id ) . toString ( ) ) . to . equal ( peerId . toString ( ) )
78
86
} )
79
87
80
88
it ( 'returns closer peers' , async ( ) => {
@@ -145,6 +153,7 @@ describe('rpc - handlers - FindNode', () => {
145
153
146
154
handler = new FindNodeHandler ( {
147
155
peerId,
156
+ addressManager,
148
157
logger : defaultLogger ( )
149
158
} , {
150
159
peerRouting,
@@ -187,6 +196,7 @@ describe('rpc - handlers - FindNode', () => {
187
196
188
197
handler = new FindNodeHandler ( {
189
198
peerId,
199
+ addressManager,
190
200
logger : defaultLogger ( )
191
201
} , {
192
202
peerRouting,
0 commit comments