|
1 | | -import { generateKeyPair } from '@libp2p/crypto/keys' |
2 | | -import { peerIdFromPrivateKey } from '@libp2p/peer-id' |
3 | 1 | import { multiaddr } from '@multiformats/multiaddr' |
4 | 2 | import { expect } from 'aegir/chai' |
5 | 3 | import { TypedEventEmitter } from 'main-event' |
6 | | -import { pEvent } from 'p-event' |
7 | 4 | import sinon from 'sinon' |
8 | 5 | import { stubInterface } from 'sinon-ts' |
9 | 6 | import { createLibp2p } from '../../src/index.js' |
10 | | -import type { PeerDiscovery, PeerDiscoveryEvents, PeerInfo, Startable, Libp2p } from '@libp2p/interface' |
| 7 | +import type { PeerDiscovery, PeerDiscoveryEvents, Startable, Libp2p } from '@libp2p/interface' |
11 | 8 |
|
12 | 9 | describe('peer discovery', () => { |
13 | 10 | let libp2p: Libp2p |
@@ -36,202 +33,6 @@ describe('peer discovery', () => { |
36 | 33 | expect(discovery.stop.calledOnce).to.be.true() |
37 | 34 | }) |
38 | 35 |
|
39 | | - it('should append peer id to circuit relay addresses in peer:discovery event', async () => { |
40 | | - const discovery = new TypedEventEmitter<PeerDiscoveryEvents>() |
41 | | - |
42 | | - libp2p = await createLibp2p({ |
43 | | - peerDiscovery: [() => discovery] |
44 | | - }) |
45 | | - |
46 | | - await libp2p.start() |
47 | | - |
48 | | - const remotePeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
49 | | - const relayPeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
50 | | - |
51 | | - // Address without target peer ID (e.g. as announced via identify by the remote peer) |
52 | | - const relayAddr = multiaddr(`/ip4/1.2.3.4/tcp/1234/p2p/${relayPeerId}/p2p-circuit`) |
53 | | - |
54 | | - const eventPromise = pEvent<'peer:discovery', CustomEvent<PeerInfo>>(libp2p, 'peer:discovery') |
55 | | - |
56 | | - discovery.safeDispatchEvent('peer', { |
57 | | - detail: { |
58 | | - id: remotePeerId, |
59 | | - multiaddrs: [relayAddr] |
60 | | - } |
61 | | - }) |
62 | | - |
63 | | - const evt = await eventPromise |
64 | | - |
65 | | - expect(evt.detail.id.toString()).to.equal(remotePeerId.toString()) |
66 | | - expect(evt.detail.multiaddrs).to.have.length(1) |
67 | | - expect(evt.detail.multiaddrs[0].toString()).to.equal( |
68 | | - `/ip4/1.2.3.4/tcp/1234/p2p/${relayPeerId}/p2p-circuit/p2p/${remotePeerId}` |
69 | | - ) |
70 | | - }) |
71 | | - |
72 | | - it('should not duplicate peer id in circuit relay addresses that already have one', async () => { |
73 | | - const discovery = new TypedEventEmitter<PeerDiscoveryEvents>() |
74 | | - |
75 | | - libp2p = await createLibp2p({ |
76 | | - peerDiscovery: [() => discovery] |
77 | | - }) |
78 | | - |
79 | | - await libp2p.start() |
80 | | - |
81 | | - const remotePeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
82 | | - const relayPeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
83 | | - |
84 | | - // Address already has the target peer ID (e.g. as sent by pubsub-peer-discovery) |
85 | | - const relayAddrWithPeerId = multiaddr(`/ip4/1.2.3.4/tcp/1234/p2p/${relayPeerId}/p2p-circuit/p2p/${remotePeerId}`) |
86 | | - |
87 | | - const eventPromise = pEvent<'peer:discovery', CustomEvent<PeerInfo>>(libp2p, 'peer:discovery') |
88 | | - |
89 | | - discovery.safeDispatchEvent('peer', { |
90 | | - detail: { |
91 | | - id: remotePeerId, |
92 | | - multiaddrs: [relayAddrWithPeerId] |
93 | | - } |
94 | | - }) |
95 | | - |
96 | | - const evt = await eventPromise |
97 | | - |
98 | | - expect(evt.detail.id.toString()).to.equal(remotePeerId.toString()) |
99 | | - expect(evt.detail.multiaddrs).to.have.length(1) |
100 | | - expect(evt.detail.multiaddrs[0].toString()).to.equal( |
101 | | - `/ip4/1.2.3.4/tcp/1234/p2p/${relayPeerId}/p2p-circuit/p2p/${remotePeerId}` |
102 | | - ) |
103 | | - }) |
104 | | - |
105 | | - it('should not modify direct (non-relay) addresses in peer:discovery event', async () => { |
106 | | - const discovery = new TypedEventEmitter<PeerDiscoveryEvents>() |
107 | | - |
108 | | - libp2p = await createLibp2p({ |
109 | | - peerDiscovery: [() => discovery] |
110 | | - }) |
111 | | - |
112 | | - await libp2p.start() |
113 | | - |
114 | | - const remotePeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
115 | | - const directAddr = multiaddr('/ip4/1.2.3.4/tcp/4001') |
116 | | - |
117 | | - const eventPromise = pEvent<'peer:discovery', CustomEvent<PeerInfo>>(libp2p, 'peer:discovery') |
118 | | - |
119 | | - discovery.safeDispatchEvent('peer', { |
120 | | - detail: { |
121 | | - id: remotePeerId, |
122 | | - multiaddrs: [directAddr] |
123 | | - } |
124 | | - }) |
125 | | - |
126 | | - const evt = await eventPromise |
127 | | - |
128 | | - expect(evt.detail.multiaddrs).to.have.length(1) |
129 | | - expect(evt.detail.multiaddrs[0].toString()).to.equal('/ip4/1.2.3.4/tcp/4001') |
130 | | - }) |
131 | | - |
132 | | - it('should append peer id to WebRTC circuit relay addresses missing one', async () => { |
133 | | - const discovery = new TypedEventEmitter<PeerDiscoveryEvents>() |
134 | | - |
135 | | - libp2p = await createLibp2p({ |
136 | | - peerDiscovery: [() => discovery] |
137 | | - }) |
138 | | - |
139 | | - await libp2p.start() |
140 | | - |
141 | | - const remotePeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
142 | | - const relayPeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
143 | | - |
144 | | - // WebRTC relay address without target peer ID |
145 | | - const webrtcRelayAddr = multiaddr(`/ip4/1.2.3.4/tcp/1234/p2p/${relayPeerId}/p2p-circuit/webrtc`) |
146 | | - |
147 | | - const eventPromise = pEvent<'peer:discovery', CustomEvent<PeerInfo>>(libp2p, 'peer:discovery') |
148 | | - |
149 | | - discovery.safeDispatchEvent('peer', { |
150 | | - detail: { |
151 | | - id: remotePeerId, |
152 | | - multiaddrs: [webrtcRelayAddr] |
153 | | - } |
154 | | - }) |
155 | | - |
156 | | - const evt = await eventPromise |
157 | | - |
158 | | - expect(evt.detail.multiaddrs).to.have.length(1) |
159 | | - expect(evt.detail.multiaddrs[0].toString()).to.equal( |
160 | | - `/ip4/1.2.3.4/tcp/1234/p2p/${relayPeerId}/p2p-circuit/webrtc/p2p/${remotePeerId}` |
161 | | - ) |
162 | | - }) |
163 | | - |
164 | | - it('should not duplicate peer id in WebRTC circuit relay addresses that already have one', async () => { |
165 | | - const discovery = new TypedEventEmitter<PeerDiscoveryEvents>() |
166 | | - |
167 | | - libp2p = await createLibp2p({ |
168 | | - peerDiscovery: [() => discovery] |
169 | | - }) |
170 | | - |
171 | | - await libp2p.start() |
172 | | - |
173 | | - const remotePeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
174 | | - const relayPeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
175 | | - |
176 | | - // WebRTC relay address that already includes the target peer ID (e.g. from pubsub-peer-discovery) |
177 | | - const webrtcRelayAddrWithPeerId = multiaddr(`/ip4/1.2.3.4/tcp/1234/p2p/${relayPeerId}/p2p-circuit/webrtc/p2p/${remotePeerId}`) |
178 | | - |
179 | | - const eventPromise = pEvent<'peer:discovery', CustomEvent<PeerInfo>>(libp2p, 'peer:discovery') |
180 | | - |
181 | | - discovery.safeDispatchEvent('peer', { |
182 | | - detail: { |
183 | | - id: remotePeerId, |
184 | | - multiaddrs: [webrtcRelayAddrWithPeerId] |
185 | | - } |
186 | | - }) |
187 | | - |
188 | | - const evt = await eventPromise |
189 | | - |
190 | | - expect(evt.detail.multiaddrs).to.have.length(1) |
191 | | - expect(evt.detail.multiaddrs[0].toString()).to.equal( |
192 | | - `/ip4/1.2.3.4/tcp/1234/p2p/${relayPeerId}/p2p-circuit/webrtc/p2p/${remotePeerId}` |
193 | | - ) |
194 | | - }) |
195 | | - |
196 | | - it('should handle mixed relay and direct addresses correctly in peer:discovery event', async () => { |
197 | | - const discovery = new TypedEventEmitter<PeerDiscoveryEvents>() |
198 | | - |
199 | | - libp2p = await createLibp2p({ |
200 | | - peerDiscovery: [() => discovery] |
201 | | - }) |
202 | | - |
203 | | - await libp2p.start() |
204 | | - |
205 | | - const remotePeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
206 | | - const relayPeerId = peerIdFromPrivateKey(await generateKeyPair('Ed25519')) |
207 | | - |
208 | | - const directAddr = multiaddr('/ip4/1.2.3.4/tcp/4001') |
209 | | - const relayAddrNoId = multiaddr(`/ip4/5.6.7.8/tcp/1234/p2p/${relayPeerId}/p2p-circuit`) |
210 | | - const relayAddrWithId = multiaddr(`/ip4/9.10.11.12/tcp/5678/p2p/${relayPeerId}/p2p-circuit/p2p/${remotePeerId}`) |
211 | | - |
212 | | - const eventPromise = pEvent<'peer:discovery', CustomEvent<PeerInfo>>(libp2p, 'peer:discovery') |
213 | | - |
214 | | - discovery.safeDispatchEvent('peer', { |
215 | | - detail: { |
216 | | - id: remotePeerId, |
217 | | - multiaddrs: [directAddr, relayAddrNoId, relayAddrWithId] |
218 | | - } |
219 | | - }) |
220 | | - |
221 | | - const evt = await eventPromise |
222 | | - |
223 | | - const addrStrings = evt.detail.multiaddrs.map(ma => ma.toString()) |
224 | | - |
225 | | - // Direct address unchanged |
226 | | - expect(addrStrings).to.include('/ip4/1.2.3.4/tcp/4001') |
227 | | - // Relay without peer ID gets it appended |
228 | | - expect(addrStrings).to.include(`/ip4/5.6.7.8/tcp/1234/p2p/${relayPeerId}/p2p-circuit/p2p/${remotePeerId}`) |
229 | | - // Relay that already has peer ID is not modified |
230 | | - expect(addrStrings).to.include(`/ip4/9.10.11.12/tcp/5678/p2p/${relayPeerId}/p2p-circuit/p2p/${remotePeerId}`) |
231 | | - // No address should have a double peer ID |
232 | | - expect(addrStrings.every(a => !a.includes(`/p2p/${remotePeerId}/p2p/${remotePeerId}`))).to.be.true() |
233 | | - }) |
234 | | - |
235 | 36 | it('should ignore self on discovery', async () => { |
236 | 37 | const discovery = new TypedEventEmitter<PeerDiscoveryEvents>() |
237 | 38 |
|
|
0 commit comments