@libp2p/interface-compliance-tests 1.1.15 → 1.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/connection-encrypter/index.d.ts +2 -2
- package/dist/src/connection-encrypter/index.d.ts.map +1 -1
- package/dist/src/connection-encrypter/index.js.map +1 -1
- package/dist/src/mocks/connection-encrypter.d.ts +3 -0
- package/dist/src/mocks/connection-encrypter.d.ts.map +1 -0
- package/dist/src/mocks/connection-encrypter.js +93 -0
- package/dist/src/mocks/connection-encrypter.js.map +1 -0
- package/dist/src/mocks/connection-manager.d.ts +6 -3
- package/dist/src/mocks/connection-manager.d.ts.map +1 -1
- package/dist/src/mocks/connection-manager.js +9 -0
- package/dist/src/mocks/connection-manager.js.map +1 -1
- package/dist/src/mocks/connection.d.ts +1 -1
- package/dist/src/mocks/connection.d.ts.map +1 -1
- package/dist/src/mocks/connection.js +68 -49
- package/dist/src/mocks/connection.js.map +1 -1
- package/dist/src/mocks/duplex.d.ts +3 -0
- package/dist/src/mocks/duplex.d.ts.map +1 -0
- package/dist/src/mocks/duplex.js +7 -0
- package/dist/src/mocks/duplex.js.map +1 -0
- package/dist/src/mocks/index.d.ts +2 -1
- package/dist/src/mocks/index.d.ts.map +1 -1
- package/dist/src/mocks/index.js +2 -1
- package/dist/src/mocks/index.js.map +1 -1
- package/dist/src/mocks/multiaddr-connection.d.ts +12 -0
- package/dist/src/mocks/multiaddr-connection.d.ts.map +1 -1
- package/dist/src/mocks/multiaddr-connection.js +37 -0
- package/dist/src/mocks/multiaddr-connection.js.map +1 -1
- package/dist/src/mocks/muxer.d.ts +8 -2
- package/dist/src/mocks/muxer.d.ts.map +1 -1
- package/dist/src/mocks/muxer.js +18 -9
- package/dist/src/mocks/muxer.js.map +1 -1
- package/dist/src/mocks/registrar.d.ts +6 -6
- package/dist/src/mocks/registrar.d.ts.map +1 -1
- package/dist/src/mocks/registrar.js +23 -33
- package/dist/src/mocks/registrar.js.map +1 -1
- package/dist/src/mocks/upgrader.d.ts +10 -2
- package/dist/src/mocks/upgrader.d.ts.map +1 -1
- package/dist/src/mocks/upgrader.js +28 -23
- package/dist/src/mocks/upgrader.js.map +1 -1
- package/dist/src/pubsub/api.d.ts +3 -4
- package/dist/src/pubsub/api.d.ts.map +1 -1
- package/dist/src/pubsub/api.js +8 -3
- package/dist/src/pubsub/api.js.map +1 -1
- package/dist/src/pubsub/connection-handlers.d.ts +3 -4
- package/dist/src/pubsub/connection-handlers.d.ts.map +1 -1
- package/dist/src/pubsub/connection-handlers.js +41 -16
- package/dist/src/pubsub/connection-handlers.js.map +1 -1
- package/dist/src/pubsub/emit-self.d.ts +3 -4
- package/dist/src/pubsub/emit-self.d.ts.map +1 -1
- package/dist/src/pubsub/emit-self.js +15 -6
- package/dist/src/pubsub/emit-self.js.map +1 -1
- package/dist/src/pubsub/index.d.ts +8 -3
- package/dist/src/pubsub/index.d.ts.map +1 -1
- package/dist/src/pubsub/index.js.map +1 -1
- package/dist/src/pubsub/messages.d.ts +3 -4
- package/dist/src/pubsub/messages.d.ts.map +1 -1
- package/dist/src/pubsub/messages.js +13 -6
- package/dist/src/pubsub/messages.js.map +1 -1
- package/dist/src/pubsub/multiple-nodes.d.ts +3 -4
- package/dist/src/pubsub/multiple-nodes.d.ts.map +1 -1
- package/dist/src/pubsub/multiple-nodes.js +57 -24
- package/dist/src/pubsub/multiple-nodes.js.map +1 -1
- package/dist/src/pubsub/two-nodes.d.ts +3 -4
- package/dist/src/pubsub/two-nodes.d.ts.map +1 -1
- package/dist/src/pubsub/two-nodes.js +16 -7
- package/dist/src/pubsub/two-nodes.js.map +1 -1
- package/dist/src/pubsub/utils.d.ts +2 -2
- package/dist/src/pubsub/utils.js +1 -1
- package/dist/src/pubsub/utils.js.map +1 -1
- package/dist/src/stream-muxer/base-test.d.ts +2 -2
- package/dist/src/stream-muxer/base-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/base-test.js +17 -8
- package/dist/src/stream-muxer/base-test.js.map +1 -1
- package/dist/src/stream-muxer/close-test.d.ts +2 -2
- package/dist/src/stream-muxer/close-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/close-test.js +9 -4
- package/dist/src/stream-muxer/close-test.js.map +1 -1
- package/dist/src/stream-muxer/index.d.ts +2 -2
- package/dist/src/stream-muxer/index.d.ts.map +1 -1
- package/dist/src/stream-muxer/index.js.map +1 -1
- package/dist/src/stream-muxer/mega-stress-test.d.ts +2 -2
- package/dist/src/stream-muxer/mega-stress-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/mega-stress-test.js +5 -1
- package/dist/src/stream-muxer/mega-stress-test.js.map +1 -1
- package/dist/src/stream-muxer/spawner.d.ts +2 -2
- package/dist/src/stream-muxer/spawner.d.ts.map +1 -1
- package/dist/src/stream-muxer/spawner.js.map +1 -1
- package/dist/src/stream-muxer/stress-test.d.ts +2 -2
- package/dist/src/stream-muxer/stress-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/stress-test.js +5 -1
- package/dist/src/stream-muxer/stress-test.js.map +1 -1
- package/dist/src/transport/dial-test.d.ts +2 -2
- package/dist/src/transport/dial-test.d.ts.map +1 -1
- package/dist/src/transport/dial-test.js +17 -9
- package/dist/src/transport/dial-test.js.map +1 -1
- package/dist/src/transport/filter-test.d.ts +2 -2
- package/dist/src/transport/filter-test.d.ts.map +1 -1
- package/dist/src/transport/filter-test.js +1 -2
- package/dist/src/transport/filter-test.js.map +1 -1
- package/dist/src/transport/index.d.ts +3 -6
- package/dist/src/transport/index.d.ts.map +1 -1
- package/dist/src/transport/index.js.map +1 -1
- package/dist/src/transport/listen-test.d.ts +2 -2
- package/dist/src/transport/listen-test.d.ts.map +1 -1
- package/dist/src/transport/listen-test.js +35 -19
- package/dist/src/transport/listen-test.js.map +1 -1
- package/package.json +8 -8
- package/src/connection-encrypter/index.ts +3 -3
- package/src/mocks/connection-encrypter.ts +110 -0
- package/src/mocks/connection-manager.ts +15 -3
- package/src/mocks/connection.ts +104 -57
- package/src/mocks/duplex.ts +8 -0
- package/src/mocks/index.ts +2 -1
- package/src/mocks/multiaddr-connection.ts +47 -0
- package/src/mocks/muxer.ts +29 -19
- package/src/mocks/registrar.ts +30 -40
- package/src/mocks/upgrader.ts +32 -22
- package/src/pubsub/api.ts +15 -10
- package/src/pubsub/connection-handlers.ts +64 -39
- package/src/pubsub/emit-self.ts +21 -13
- package/src/pubsub/index.ts +9 -3
- package/src/pubsub/messages.ts +23 -14
- package/src/pubsub/multiple-nodes.ts +75 -42
- package/src/pubsub/two-nodes.ts +29 -20
- package/src/pubsub/utils.ts +4 -4
- package/src/stream-muxer/base-test.ts +19 -10
- package/src/stream-muxer/close-test.ts +11 -6
- package/src/stream-muxer/index.ts +2 -2
- package/src/stream-muxer/mega-stress-test.ts +7 -3
- package/src/stream-muxer/spawner.ts +2 -2
- package/src/stream-muxer/stress-test.ts +7 -3
- package/src/transport/dial-test.ts +21 -13
- package/src/transport/filter-test.ts +4 -5
- package/src/transport/index.ts +3 -7
- package/src/transport/listen-test.ts +41 -25
package/src/pubsub/api.ts
CHANGED
|
@@ -8,15 +8,16 @@ import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
|
8
8
|
import delay from 'delay'
|
|
9
9
|
import { CustomEvent } from '@libp2p/interfaces'
|
|
10
10
|
import type { TestSetup } from '../index.js'
|
|
11
|
-
import type { PubSub
|
|
12
|
-
import type { EventMap } from './index.js'
|
|
13
|
-
import type { Registrar } from '@libp2p/interfaces/
|
|
14
|
-
import type {
|
|
11
|
+
import type { PubSub } from '@libp2p/interfaces/pubsub'
|
|
12
|
+
import type { EventMap, PubSubArgs } from './index.js'
|
|
13
|
+
import type { Registrar } from '@libp2p/interfaces/registrar'
|
|
14
|
+
import type { PubSubBaseProtocol } from '@libp2p/pubsub'
|
|
15
|
+
import { Components } from '@libp2p/interfaces/components'
|
|
15
16
|
|
|
16
17
|
const topic = 'foo'
|
|
17
18
|
const data = uint8ArrayFromString('bar')
|
|
18
19
|
|
|
19
|
-
export default (common: TestSetup<
|
|
20
|
+
export default (common: TestSetup<PubSubBaseProtocol<EventMap>, PubSubArgs>) => {
|
|
20
21
|
describe('pubsub api', () => {
|
|
21
22
|
let pubsub: PubSub<EventMap>
|
|
22
23
|
let registrar: Registrar
|
|
@@ -26,9 +27,13 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
26
27
|
registrar = mockRegistrar()
|
|
27
28
|
|
|
28
29
|
pubsub = await common.setup({
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
components: new Components({
|
|
31
|
+
peerId: await createEd25519PeerId(),
|
|
32
|
+
registrar
|
|
33
|
+
}),
|
|
34
|
+
init: {
|
|
35
|
+
emitSelf: true
|
|
36
|
+
}
|
|
32
37
|
})
|
|
33
38
|
})
|
|
34
39
|
|
|
@@ -75,7 +80,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
75
80
|
await pWaitFor(() => pubsub.getTopics().length === 0)
|
|
76
81
|
|
|
77
82
|
// Publish to guarantee the handler is not called
|
|
78
|
-
pubsub.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
83
|
+
pubsub.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: data }))
|
|
79
84
|
|
|
80
85
|
// handlers are called async
|
|
81
86
|
await delay(100)
|
|
@@ -93,7 +98,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
93
98
|
expect(msg).to.not.eql(undefined)
|
|
94
99
|
defer.resolve()
|
|
95
100
|
})
|
|
96
|
-
pubsub.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
101
|
+
pubsub.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: data }))
|
|
97
102
|
await defer.promise
|
|
98
103
|
|
|
99
104
|
await pubsub.stop()
|
|
@@ -8,16 +8,17 @@ import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
|
8
8
|
import { connectPeers, mockRegistrar } from '../mocks/registrar.js'
|
|
9
9
|
import { CustomEvent } from '@libp2p/interfaces'
|
|
10
10
|
import type { TestSetup } from '../index.js'
|
|
11
|
-
import type { Message
|
|
12
|
-
import type { EventMap } from './index.js'
|
|
13
|
-
import type { PeerId } from '@libp2p/interfaces/
|
|
14
|
-
import type { Registrar } from '@libp2p/interfaces/
|
|
15
|
-
import type {
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
import type { Message } from '@libp2p/interfaces/pubsub'
|
|
12
|
+
import type { EventMap, PubSubArgs } from './index.js'
|
|
13
|
+
import type { PeerId } from '@libp2p/interfaces/peer-id'
|
|
14
|
+
import type { Registrar } from '@libp2p/interfaces/registrar'
|
|
15
|
+
import type { PubSubBaseProtocol } from '@libp2p/pubsub'
|
|
16
|
+
import { Components } from '@libp2p/interfaces/components'
|
|
17
|
+
|
|
18
|
+
export default (common: TestSetup<PubSubBaseProtocol<EventMap>, PubSubArgs>) => {
|
|
18
19
|
describe('pubsub connection handlers', () => {
|
|
19
|
-
let psA:
|
|
20
|
-
let psB:
|
|
20
|
+
let psA: PubSubBaseProtocol<EventMap>
|
|
21
|
+
let psB: PubSubBaseProtocol<EventMap>
|
|
21
22
|
let peerA: PeerId
|
|
22
23
|
let peerB: PeerId
|
|
23
24
|
let registrarA: Registrar
|
|
@@ -33,12 +34,18 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
33
34
|
registrarB = mockRegistrar()
|
|
34
35
|
|
|
35
36
|
psA = await common.setup({
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
components: new Components({
|
|
38
|
+
peerId: peerA,
|
|
39
|
+
registrar: registrarA
|
|
40
|
+
}),
|
|
41
|
+
init: {}
|
|
38
42
|
})
|
|
39
43
|
psB = await common.setup({
|
|
40
|
-
|
|
41
|
-
|
|
44
|
+
components: new Components({
|
|
45
|
+
peerId: peerB,
|
|
46
|
+
registrar: registrarB
|
|
47
|
+
}),
|
|
48
|
+
init: {}
|
|
42
49
|
})
|
|
43
50
|
|
|
44
51
|
// Start pubsub
|
|
@@ -97,8 +104,8 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
97
104
|
})
|
|
98
105
|
|
|
99
106
|
describe('pubsub started before connect', () => {
|
|
100
|
-
let psA:
|
|
101
|
-
let psB:
|
|
107
|
+
let psA: PubSubBaseProtocol<EventMap>
|
|
108
|
+
let psB: PubSubBaseProtocol<EventMap>
|
|
102
109
|
let peerA: PeerId
|
|
103
110
|
let peerB: PeerId
|
|
104
111
|
let registrarA: Registrar
|
|
@@ -113,12 +120,18 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
113
120
|
registrarB = mockRegistrar()
|
|
114
121
|
|
|
115
122
|
psA = await common.setup({
|
|
116
|
-
|
|
117
|
-
|
|
123
|
+
components: new Components({
|
|
124
|
+
peerId: peerA,
|
|
125
|
+
registrar: registrarA
|
|
126
|
+
}),
|
|
127
|
+
init: {}
|
|
118
128
|
})
|
|
119
129
|
psB = await common.setup({
|
|
120
|
-
|
|
121
|
-
|
|
130
|
+
components: new Components({
|
|
131
|
+
peerId: peerB,
|
|
132
|
+
registrar: registrarB
|
|
133
|
+
}),
|
|
134
|
+
init: {}
|
|
122
135
|
})
|
|
123
136
|
|
|
124
137
|
await psA.start()
|
|
@@ -177,15 +190,15 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
177
190
|
const subscribedPeers = psB.getSubscribers(topic)
|
|
178
191
|
return subscribedPeers.map(p => p.toString()).includes(peerA.toString())
|
|
179
192
|
})
|
|
180
|
-
void psB.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
193
|
+
void psB.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: data }))
|
|
181
194
|
|
|
182
195
|
await defer.promise
|
|
183
196
|
})
|
|
184
197
|
})
|
|
185
198
|
|
|
186
199
|
describe('pubsub started after connect', () => {
|
|
187
|
-
let psA:
|
|
188
|
-
let psB:
|
|
200
|
+
let psA: PubSubBaseProtocol<EventMap>
|
|
201
|
+
let psB: PubSubBaseProtocol<EventMap>
|
|
189
202
|
let peerA: PeerId
|
|
190
203
|
let peerB: PeerId
|
|
191
204
|
let registrarA: Registrar
|
|
@@ -200,12 +213,18 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
200
213
|
registrarB = mockRegistrar()
|
|
201
214
|
|
|
202
215
|
psA = await common.setup({
|
|
203
|
-
|
|
204
|
-
|
|
216
|
+
components: new Components({
|
|
217
|
+
peerId: peerA,
|
|
218
|
+
registrar: registrarA
|
|
219
|
+
}),
|
|
220
|
+
init: {}
|
|
205
221
|
})
|
|
206
222
|
psB = await common.setup({
|
|
207
|
-
|
|
208
|
-
|
|
223
|
+
components: new Components({
|
|
224
|
+
peerId: peerB,
|
|
225
|
+
registrar: registrarB
|
|
226
|
+
}),
|
|
227
|
+
init: {}
|
|
209
228
|
})
|
|
210
229
|
})
|
|
211
230
|
|
|
@@ -275,15 +294,15 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
275
294
|
const subscribedPeers = psB.getSubscribers(topic)
|
|
276
295
|
return subscribedPeers.map(p => p.toString()).includes(peerA.toString())
|
|
277
296
|
})
|
|
278
|
-
void psB.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
297
|
+
void psB.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: data }))
|
|
279
298
|
|
|
280
299
|
await defer.promise
|
|
281
300
|
})
|
|
282
301
|
})
|
|
283
302
|
|
|
284
303
|
describe('pubsub with intermittent connections', () => {
|
|
285
|
-
let psA:
|
|
286
|
-
let psB:
|
|
304
|
+
let psA: PubSubBaseProtocol<EventMap>
|
|
305
|
+
let psB: PubSubBaseProtocol<EventMap>
|
|
287
306
|
let peerA: PeerId
|
|
288
307
|
let peerB: PeerId
|
|
289
308
|
let registrarA: Registrar
|
|
@@ -298,12 +317,18 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
298
317
|
registrarB = mockRegistrar()
|
|
299
318
|
|
|
300
319
|
psA = await common.setup({
|
|
301
|
-
|
|
302
|
-
|
|
320
|
+
components: new Components({
|
|
321
|
+
peerId: peerA,
|
|
322
|
+
registrar: registrarA
|
|
323
|
+
}),
|
|
324
|
+
init: {}
|
|
303
325
|
})
|
|
304
326
|
psB = await common.setup({
|
|
305
|
-
|
|
306
|
-
|
|
327
|
+
components: new Components({
|
|
328
|
+
peerId: peerB,
|
|
329
|
+
registrar: registrarB
|
|
330
|
+
}),
|
|
331
|
+
init: {}
|
|
307
332
|
})
|
|
308
333
|
|
|
309
334
|
await psA.start()
|
|
@@ -354,7 +379,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
354
379
|
const subscribedPeers = psB.getSubscribers(topic)
|
|
355
380
|
return subscribedPeers.map(p => p.toString()).includes(peerA.toString())
|
|
356
381
|
})
|
|
357
|
-
void psB.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
382
|
+
void psB.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: data }))
|
|
358
383
|
|
|
359
384
|
await defer1.promise
|
|
360
385
|
|
|
@@ -387,7 +412,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
387
412
|
return subscribedPeers.toString().includes(peerA.toString())
|
|
388
413
|
})
|
|
389
414
|
|
|
390
|
-
void psB.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
415
|
+
void psB.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: data }))
|
|
391
416
|
|
|
392
417
|
await defer2.promise
|
|
393
418
|
})
|
|
@@ -451,8 +476,8 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
451
476
|
})
|
|
452
477
|
|
|
453
478
|
// Verify messages go both ways
|
|
454
|
-
void psA.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('message-from-a-1') }))
|
|
455
|
-
void psB.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('message-from-b-1') }))
|
|
479
|
+
void psA.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('message-from-a-1') }))
|
|
480
|
+
void psB.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('message-from-b-1') }))
|
|
456
481
|
await pWaitFor(() => {
|
|
457
482
|
return aReceivedFirstMessageFromB && bReceivedFirstMessageFromA
|
|
458
483
|
})
|
|
@@ -465,8 +490,8 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
465
490
|
await pWaitFor(() => psAConnUpdateSpy.callCount === 1)
|
|
466
491
|
|
|
467
492
|
// Verify messages go both ways after the disconnect
|
|
468
|
-
void psA.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('message-from-a-2') }))
|
|
469
|
-
void psB.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('message-from-b-2') }))
|
|
493
|
+
void psA.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('message-from-a-2') }))
|
|
494
|
+
void psB.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('message-from-b-2') }))
|
|
470
495
|
await pWaitFor(() => {
|
|
471
496
|
return aReceivedSecondMessageFromB && bReceivedSecondMessageFromA
|
|
472
497
|
})
|
package/src/pubsub/emit-self.ts
CHANGED
|
@@ -5,24 +5,28 @@ import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
|
5
5
|
import { mockRegistrar } from '../mocks/registrar.js'
|
|
6
6
|
import { CustomEvent } from '@libp2p/interfaces'
|
|
7
7
|
import type { TestSetup } from '../index.js'
|
|
8
|
-
import type {
|
|
9
|
-
import type {
|
|
10
|
-
import
|
|
8
|
+
import type { EventMap, PubSubArgs } from './index.js'
|
|
9
|
+
import type { PubSubBaseProtocol } from '@libp2p/pubsub'
|
|
10
|
+
import { Components } from '@libp2p/interfaces/components'
|
|
11
11
|
|
|
12
12
|
const topic = 'foo'
|
|
13
13
|
const data = uint8ArrayFromString('bar')
|
|
14
14
|
const shouldNotHappen = () => expect.fail()
|
|
15
15
|
|
|
16
|
-
export default (common: TestSetup<
|
|
16
|
+
export default (common: TestSetup<PubSubBaseProtocol<EventMap>, PubSubArgs>) => {
|
|
17
17
|
describe('emit self', () => {
|
|
18
|
-
let pubsub:
|
|
18
|
+
let pubsub: PubSubBaseProtocol<EventMap>
|
|
19
19
|
|
|
20
20
|
describe('enabled', () => {
|
|
21
21
|
before(async () => {
|
|
22
22
|
pubsub = await common.setup({
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
components: new Components({
|
|
24
|
+
peerId: await createEd25519PeerId(),
|
|
25
|
+
registrar: mockRegistrar()
|
|
26
|
+
}),
|
|
27
|
+
init: {
|
|
28
|
+
emitSelf: true
|
|
29
|
+
}
|
|
26
30
|
})
|
|
27
31
|
})
|
|
28
32
|
|
|
@@ -42,7 +46,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
42
46
|
once: true
|
|
43
47
|
}))
|
|
44
48
|
|
|
45
|
-
void pubsub.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
49
|
+
void pubsub.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: data }))
|
|
46
50
|
|
|
47
51
|
return await promise
|
|
48
52
|
})
|
|
@@ -51,9 +55,13 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
51
55
|
describe('disabled', () => {
|
|
52
56
|
before(async () => {
|
|
53
57
|
pubsub = await common.setup({
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
components: new Components({
|
|
59
|
+
peerId: await createEd25519PeerId(),
|
|
60
|
+
registrar: mockRegistrar()
|
|
61
|
+
}),
|
|
62
|
+
init: {
|
|
63
|
+
emitSelf: false
|
|
64
|
+
}
|
|
57
65
|
})
|
|
58
66
|
})
|
|
59
67
|
|
|
@@ -73,7 +81,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
73
81
|
once: true
|
|
74
82
|
})
|
|
75
83
|
|
|
76
|
-
void pubsub.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
84
|
+
void pubsub.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: data }))
|
|
77
85
|
|
|
78
86
|
// Wait 1 second to guarantee that self is not noticed
|
|
79
87
|
return await new Promise((resolve) => setTimeout(resolve, 1000))
|
package/src/pubsub/index.ts
CHANGED
|
@@ -5,8 +5,9 @@ import connectionHandlersTest from './connection-handlers.js'
|
|
|
5
5
|
import twoNodesTest from './two-nodes.js'
|
|
6
6
|
import multipleNodesTest from './multiple-nodes.js'
|
|
7
7
|
import type { TestSetup } from '../index.js'
|
|
8
|
-
import type { Message, PubSubEvents,
|
|
9
|
-
import type {
|
|
8
|
+
import type { Message, PubSubEvents, PubSubInit } from '@libp2p/interfaces/pubsub'
|
|
9
|
+
import type { PubSubBaseProtocol } from '@libp2p/pubsub'
|
|
10
|
+
import type { Components } from '@libp2p/interfaces/components'
|
|
10
11
|
|
|
11
12
|
export interface EventMap extends PubSubEvents {
|
|
12
13
|
'topic': CustomEvent<Message>
|
|
@@ -18,7 +19,12 @@ export interface EventMap extends PubSubEvents {
|
|
|
18
19
|
'Zb': CustomEvent<Message>
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
export
|
|
22
|
+
export interface PubSubArgs {
|
|
23
|
+
components: Components
|
|
24
|
+
init: PubSubInit
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default (common: TestSetup<PubSubBaseProtocol<EventMap>, PubSubArgs>) => {
|
|
22
28
|
describe('interface-pubsub compliance tests', () => {
|
|
23
29
|
apiTest(common)
|
|
24
30
|
emitSelfTest(common)
|
package/src/pubsub/messages.ts
CHANGED
|
@@ -10,23 +10,32 @@ import delay from 'delay'
|
|
|
10
10
|
import pWaitFor from 'p-wait-for'
|
|
11
11
|
import { CustomEvent } from '@libp2p/interfaces'
|
|
12
12
|
import type { TestSetup } from '../index.js'
|
|
13
|
-
import type {
|
|
14
|
-
import type { EventMap } from './index.js'
|
|
15
|
-
import type {
|
|
13
|
+
import type { PubSubRPC } from '@libp2p/interfaces/pubsub'
|
|
14
|
+
import type { EventMap, PubSubArgs } from './index.js'
|
|
15
|
+
import type { PubSubBaseProtocol } from '@libp2p/pubsub'
|
|
16
|
+
import { Components } from '@libp2p/interfaces/components'
|
|
17
|
+
import type { PeerId } from '@libp2p/interfaces/peer-id'
|
|
16
18
|
|
|
17
19
|
const topic = 'foo'
|
|
18
20
|
const data = uint8ArrayFromString('bar')
|
|
19
21
|
|
|
20
|
-
export default (common: TestSetup<
|
|
22
|
+
export default (common: TestSetup<PubSubBaseProtocol<EventMap>, PubSubArgs>) => {
|
|
21
23
|
describe('messages', () => {
|
|
22
|
-
let
|
|
24
|
+
let peerId: PeerId
|
|
25
|
+
let pubsub: PubSubBaseProtocol<EventMap>
|
|
23
26
|
|
|
24
27
|
// Create pubsub router
|
|
25
28
|
beforeEach(async () => {
|
|
29
|
+
peerId = await createEd25519PeerId()
|
|
30
|
+
|
|
26
31
|
pubsub = await common.setup({
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
components: new Components({
|
|
33
|
+
peerId,
|
|
34
|
+
registrar: mockRegistrar()
|
|
35
|
+
}),
|
|
36
|
+
init: {
|
|
37
|
+
emitSelf: true
|
|
38
|
+
}
|
|
30
39
|
})
|
|
31
40
|
await pubsub.start()
|
|
32
41
|
})
|
|
@@ -42,7 +51,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
42
51
|
|
|
43
52
|
const spy = sinon.spy(pubsub, 'publishMessage')
|
|
44
53
|
|
|
45
|
-
await pubsub.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
54
|
+
await pubsub.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: data }))
|
|
46
55
|
|
|
47
56
|
await pWaitFor(async () => {
|
|
48
57
|
return spy.callCount === 1
|
|
@@ -52,8 +61,8 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
52
61
|
|
|
53
62
|
const [from, messageToEmit] = spy.getCall(0).args
|
|
54
63
|
|
|
55
|
-
expect(from.toString()).to.equal(
|
|
56
|
-
expect(messageToEmit.
|
|
64
|
+
expect(from.toString()).to.equal(peerId.toString())
|
|
65
|
+
expect(messageToEmit.sequenceNumber).to.not.eql(undefined)
|
|
57
66
|
expect(messageToEmit.key).to.not.eql(undefined)
|
|
58
67
|
expect(messageToEmit.signature).to.not.eql(undefined)
|
|
59
68
|
})
|
|
@@ -66,12 +75,12 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
66
75
|
id: await createEd25519PeerId(),
|
|
67
76
|
protocol: 'test'
|
|
68
77
|
})
|
|
69
|
-
const rpc:
|
|
78
|
+
const rpc: PubSubRPC = {
|
|
70
79
|
subscriptions: [],
|
|
71
80
|
messages: [{
|
|
72
81
|
from: peerStream.id.toBytes(),
|
|
73
82
|
data,
|
|
74
|
-
|
|
83
|
+
sequenceNumber: await noSignMsgId(data),
|
|
75
84
|
topic: topic
|
|
76
85
|
}]
|
|
77
86
|
}
|
|
@@ -97,7 +106,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
97
106
|
protocol: 'test'
|
|
98
107
|
})
|
|
99
108
|
|
|
100
|
-
const rpc:
|
|
109
|
+
const rpc: PubSubRPC = {
|
|
101
110
|
subscriptions: [],
|
|
102
111
|
messages: [{
|
|
103
112
|
from: peerStream.id.toBytes(),
|
|
@@ -10,22 +10,23 @@ import { connectPeers, mockRegistrar } from '../mocks/registrar.js'
|
|
|
10
10
|
import { CustomEvent } from '@libp2p/interfaces'
|
|
11
11
|
import { waitForSubscriptionUpdate } from './utils.js'
|
|
12
12
|
import type { TestSetup } from '../index.js'
|
|
13
|
-
import type { Message
|
|
14
|
-
import type { EventMap } from './index.js'
|
|
15
|
-
import type { PeerId } from '@libp2p/interfaces/
|
|
16
|
-
import type { Registrar } from '@libp2p/interfaces/
|
|
17
|
-
import type {
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
import type { Message } from '@libp2p/interfaces/pubsub'
|
|
14
|
+
import type { EventMap, PubSubArgs } from './index.js'
|
|
15
|
+
import type { PeerId } from '@libp2p/interfaces/peer-id'
|
|
16
|
+
import type { Registrar } from '@libp2p/interfaces/registrar'
|
|
17
|
+
import type { PubSubBaseProtocol } from '@libp2p/pubsub'
|
|
18
|
+
import { Components } from '@libp2p/interfaces/components'
|
|
19
|
+
|
|
20
|
+
export default (common: TestSetup<PubSubBaseProtocol<EventMap>, PubSubArgs>) => {
|
|
20
21
|
describe('pubsub with multiple nodes', function () {
|
|
21
22
|
describe('every peer subscribes to the topic', () => {
|
|
22
23
|
describe('line', () => {
|
|
23
24
|
// line
|
|
24
25
|
// ◉────◉────◉
|
|
25
26
|
// a b c
|
|
26
|
-
let psA:
|
|
27
|
-
let psB:
|
|
28
|
-
let psC:
|
|
27
|
+
let psA: PubSubBaseProtocol<EventMap>
|
|
28
|
+
let psB: PubSubBaseProtocol<EventMap>
|
|
29
|
+
let psC: PubSubBaseProtocol<EventMap>
|
|
29
30
|
let peerIdA: PeerId
|
|
30
31
|
let peerIdB: PeerId
|
|
31
32
|
let peerIdC: PeerId
|
|
@@ -44,19 +45,31 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
44
45
|
registrarC = mockRegistrar()
|
|
45
46
|
|
|
46
47
|
psA = await common.setup({
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
components: new Components({
|
|
49
|
+
peerId: peerIdA,
|
|
50
|
+
registrar: registrarA
|
|
51
|
+
}),
|
|
52
|
+
init: {
|
|
53
|
+
emitSelf: true
|
|
54
|
+
}
|
|
50
55
|
})
|
|
51
56
|
psB = await common.setup({
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
components: new Components({
|
|
58
|
+
peerId: peerIdB,
|
|
59
|
+
registrar: registrarB
|
|
60
|
+
}),
|
|
61
|
+
init: {
|
|
62
|
+
emitSelf: true
|
|
63
|
+
}
|
|
55
64
|
})
|
|
56
65
|
psC = await common.setup({
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
66
|
+
components: new Components({
|
|
67
|
+
peerId: peerIdC,
|
|
68
|
+
registrar: registrarC
|
|
69
|
+
}),
|
|
70
|
+
init: {
|
|
71
|
+
emitSelf: true
|
|
72
|
+
}
|
|
60
73
|
})
|
|
61
74
|
|
|
62
75
|
// Start pubsub modes
|
|
@@ -172,7 +185,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
172
185
|
waitForSubscriptionUpdate(psC, psB)
|
|
173
186
|
])
|
|
174
187
|
|
|
175
|
-
void psA.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('hey') }))
|
|
188
|
+
void psA.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('hey') }))
|
|
176
189
|
|
|
177
190
|
function incMsg (evt: CustomEvent<Message>) {
|
|
178
191
|
const msg = evt.detail
|
|
@@ -233,7 +246,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
233
246
|
waitForSubscriptionUpdate(psC, psB)
|
|
234
247
|
])
|
|
235
248
|
|
|
236
|
-
void psB.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('hey') }))
|
|
249
|
+
void psB.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('hey') }))
|
|
237
250
|
|
|
238
251
|
function incMsg (evt: CustomEvent<Message>) {
|
|
239
252
|
const msg = evt.detail
|
|
@@ -263,11 +276,11 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
263
276
|
// │b d│
|
|
264
277
|
// ◉─┘ └─◉
|
|
265
278
|
// a
|
|
266
|
-
let psA:
|
|
267
|
-
let psB:
|
|
268
|
-
let psC:
|
|
269
|
-
let psD:
|
|
270
|
-
let psE:
|
|
279
|
+
let psA: PubSubBaseProtocol<EventMap>
|
|
280
|
+
let psB: PubSubBaseProtocol<EventMap>
|
|
281
|
+
let psC: PubSubBaseProtocol<EventMap>
|
|
282
|
+
let psD: PubSubBaseProtocol<EventMap>
|
|
283
|
+
let psE: PubSubBaseProtocol<EventMap>
|
|
271
284
|
let peerIdA: PeerId
|
|
272
285
|
let peerIdB: PeerId
|
|
273
286
|
let peerIdC: PeerId
|
|
@@ -294,29 +307,49 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
294
307
|
registrarE = mockRegistrar()
|
|
295
308
|
|
|
296
309
|
psA = await common.setup({
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
310
|
+
components: new Components({
|
|
311
|
+
peerId: peerIdA,
|
|
312
|
+
registrar: registrarA
|
|
313
|
+
}),
|
|
314
|
+
init: {
|
|
315
|
+
emitSelf: true
|
|
316
|
+
}
|
|
300
317
|
})
|
|
301
318
|
psB = await common.setup({
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
319
|
+
components: new Components({
|
|
320
|
+
peerId: peerIdB,
|
|
321
|
+
registrar: registrarB
|
|
322
|
+
}),
|
|
323
|
+
init: {
|
|
324
|
+
emitSelf: true
|
|
325
|
+
}
|
|
305
326
|
})
|
|
306
327
|
psC = await common.setup({
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
328
|
+
components: new Components({
|
|
329
|
+
peerId: peerIdC,
|
|
330
|
+
registrar: registrarC
|
|
331
|
+
}),
|
|
332
|
+
init: {
|
|
333
|
+
emitSelf: true
|
|
334
|
+
}
|
|
310
335
|
})
|
|
311
336
|
psD = await common.setup({
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
337
|
+
components: new Components({
|
|
338
|
+
peerId: peerIdD,
|
|
339
|
+
registrar: registrarD
|
|
340
|
+
}),
|
|
341
|
+
init: {
|
|
342
|
+
emitSelf: true
|
|
343
|
+
}
|
|
315
344
|
})
|
|
316
345
|
psE = await common.setup({
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
346
|
+
components: new Components({
|
|
347
|
+
peerId: peerIdE,
|
|
348
|
+
registrar: registrarE
|
|
349
|
+
}),
|
|
350
|
+
init: {
|
|
351
|
+
emitSelf: true
|
|
352
|
+
}
|
|
320
353
|
})
|
|
321
354
|
|
|
322
355
|
// Start pubsub nodes
|
|
@@ -409,7 +442,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
409
442
|
waitForSubscriptionUpdate(psE, psD)
|
|
410
443
|
])
|
|
411
444
|
|
|
412
|
-
void psC.dispatchEvent(new CustomEvent('Z', { detail: uint8ArrayFromString('hey from c') }))
|
|
445
|
+
void psC.dispatchEvent(new CustomEvent<Uint8Array>('Z', { detail: uint8ArrayFromString('hey from c') }))
|
|
413
446
|
|
|
414
447
|
function incMsg (evt: CustomEvent<Message>) {
|
|
415
448
|
const msg = evt.detail
|