@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/two-nodes.ts
CHANGED
|
@@ -10,11 +10,12 @@ import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
|
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 {
|
|
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'
|
|
18
19
|
|
|
19
20
|
const topic = 'foo'
|
|
20
21
|
|
|
@@ -22,10 +23,10 @@ function shouldNotHappen () {
|
|
|
22
23
|
expect.fail()
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
export default (common: TestSetup<
|
|
26
|
+
export default (common: TestSetup<PubSubBaseProtocol<EventMap>, PubSubArgs>) => {
|
|
26
27
|
describe('pubsub with two nodes', () => {
|
|
27
|
-
let psA:
|
|
28
|
-
let psB:
|
|
28
|
+
let psA: PubSubBaseProtocol<EventMap>
|
|
29
|
+
let psB: PubSubBaseProtocol<EventMap>
|
|
29
30
|
let peerIdA: PeerId
|
|
30
31
|
let peerIdB: PeerId
|
|
31
32
|
let registrarA: Registrar
|
|
@@ -40,14 +41,22 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
40
41
|
registrarB = mockRegistrar()
|
|
41
42
|
|
|
42
43
|
psA = await common.setup({
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
components: new Components({
|
|
45
|
+
peerId: peerIdA,
|
|
46
|
+
registrar: registrarA
|
|
47
|
+
}),
|
|
48
|
+
init: {
|
|
49
|
+
emitSelf: true
|
|
50
|
+
}
|
|
46
51
|
})
|
|
47
52
|
psB = await common.setup({
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
53
|
+
components: new Components({
|
|
54
|
+
peerId: peerIdB,
|
|
55
|
+
registrar: registrarB
|
|
56
|
+
}),
|
|
57
|
+
init: {
|
|
58
|
+
emitSelf: false
|
|
59
|
+
}
|
|
51
60
|
})
|
|
52
61
|
|
|
53
62
|
// Start pubsub and connect nodes
|
|
@@ -120,7 +129,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
120
129
|
waitForSubscriptionUpdate(psB, psA)
|
|
121
130
|
])
|
|
122
131
|
|
|
123
|
-
void psA.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('hey') }))
|
|
132
|
+
void psA.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('hey') }))
|
|
124
133
|
|
|
125
134
|
return await defer.promise
|
|
126
135
|
})
|
|
@@ -154,7 +163,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
154
163
|
waitForSubscriptionUpdate(psB, psA)
|
|
155
164
|
])
|
|
156
165
|
|
|
157
|
-
void psB.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('banana') }))
|
|
166
|
+
void psB.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('banana') }))
|
|
158
167
|
|
|
159
168
|
return await defer.promise
|
|
160
169
|
})
|
|
@@ -172,7 +181,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
172
181
|
const msg = evt.detail
|
|
173
182
|
expect(uint8ArrayToString(msg.data)).to.equal('banana')
|
|
174
183
|
expect(msg.from.toString()).to.equal(peerIdB.toString())
|
|
175
|
-
expect(msg.
|
|
184
|
+
expect(msg.sequenceNumber).to.be.a('BigInt')
|
|
176
185
|
expect(msg.topic).to.be.equal(topic)
|
|
177
186
|
|
|
178
187
|
if (++counter === 10) {
|
|
@@ -188,7 +197,7 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
188
197
|
waitForSubscriptionUpdate(psB, psA)
|
|
189
198
|
])
|
|
190
199
|
|
|
191
|
-
Array.from({ length: 10 }, (_, i) => psB.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('banana') })))
|
|
200
|
+
Array.from({ length: 10 }, (_, i) => psB.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('banana') })))
|
|
192
201
|
|
|
193
202
|
return await defer.promise
|
|
194
203
|
})
|
|
@@ -254,8 +263,8 @@ export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>)
|
|
|
254
263
|
defer.resolve()
|
|
255
264
|
}, 100)
|
|
256
265
|
|
|
257
|
-
void psB.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('banana') }))
|
|
258
|
-
void psA.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('banana') }))
|
|
266
|
+
void psB.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('banana') }))
|
|
267
|
+
void psA.dispatchEvent(new CustomEvent<Uint8Array>(topic, { detail: uint8ArrayFromString('banana') }))
|
|
259
268
|
|
|
260
269
|
return await defer.promise
|
|
261
270
|
})
|
package/src/pubsub/utils.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { pEvent } from 'p-event'
|
|
2
2
|
import pWaitFor from 'p-wait-for'
|
|
3
|
-
import type { SubscriptionChangeData } from '@libp2p/interfaces/
|
|
4
|
-
import type {
|
|
3
|
+
import type { SubscriptionChangeData } from '@libp2p/interfaces/pubsub'
|
|
4
|
+
import type { PubSubBaseProtocol } from '@libp2p/pubsub'
|
|
5
5
|
|
|
6
|
-
export async function waitForSubscriptionUpdate (a:
|
|
6
|
+
export async function waitForSubscriptionUpdate (a: PubSubBaseProtocol, b: PubSubBaseProtocol) {
|
|
7
7
|
await pWaitFor(async () => {
|
|
8
8
|
const event = await pEvent<'pubsub:subscription-change', CustomEvent<SubscriptionChangeData>>(a, 'pubsub:subscription-change')
|
|
9
9
|
|
|
10
|
-
return event.detail.peerId.equals(b.
|
|
10
|
+
return event.detail.peerId.equals(b.components.getPeerId())
|
|
11
11
|
})
|
|
12
12
|
}
|
|
@@ -11,22 +11,25 @@ import { isValidTick } from '../utils/is-valid-tick.js'
|
|
|
11
11
|
import type { DeferredPromise } from 'p-defer'
|
|
12
12
|
import type { TestSetup } from '../index.js'
|
|
13
13
|
import type { Stream } from '@libp2p/interfaces/connection'
|
|
14
|
-
import type {
|
|
14
|
+
import type { StreamMuxerFactory } from '@libp2p/interfaces/stream-muxer'
|
|
15
15
|
import type { Source, Duplex } from 'it-stream-types'
|
|
16
|
+
import { Components } from '@libp2p/interfaces/components'
|
|
16
17
|
|
|
17
18
|
async function drainAndClose (stream: Duplex<Uint8Array>) {
|
|
18
19
|
return await pipe([], stream, drain)
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
export default (common: TestSetup<
|
|
22
|
+
export default (common: TestSetup<StreamMuxerFactory>) => {
|
|
22
23
|
describe('base', () => {
|
|
23
24
|
it('Open a stream from the dialer', async () => {
|
|
24
25
|
const p = duplexPair<Uint8Array>()
|
|
25
|
-
const
|
|
26
|
+
const dialerFactory = await common.setup()
|
|
27
|
+
const dialer = dialerFactory.createStreamMuxer(new Components())
|
|
26
28
|
const onStreamPromise: DeferredPromise<Stream> = defer()
|
|
27
29
|
const onStreamEndPromise: DeferredPromise<Stream> = defer()
|
|
28
30
|
|
|
29
|
-
const
|
|
31
|
+
const listenerFactory = await common.setup()
|
|
32
|
+
const listener = listenerFactory.createStreamMuxer(new Components(), {
|
|
30
33
|
onIncomingStream: (stream) => {
|
|
31
34
|
onStreamPromise.resolve(stream)
|
|
32
35
|
},
|
|
@@ -73,13 +76,15 @@ export default (common: TestSetup<Muxer, MuxerInit>) => {
|
|
|
73
76
|
it('Open a stream from the listener', async () => {
|
|
74
77
|
const p = duplexPair<Uint8Array>()
|
|
75
78
|
const onStreamPromise: DeferredPromise<Stream> = defer()
|
|
76
|
-
const
|
|
79
|
+
const dialerFactory = await common.setup()
|
|
80
|
+
const dialer = dialerFactory.createStreamMuxer(new Components(), {
|
|
77
81
|
onIncomingStream: (stream: Stream) => {
|
|
78
82
|
onStreamPromise.resolve(stream)
|
|
79
83
|
}
|
|
80
84
|
})
|
|
81
85
|
|
|
82
|
-
const
|
|
86
|
+
const listenerFactory = await common.setup()
|
|
87
|
+
const listener = listenerFactory.createStreamMuxer(new Components())
|
|
83
88
|
|
|
84
89
|
void pipe(p[0], dialer, p[0])
|
|
85
90
|
void pipe(p[1], listener, p[1])
|
|
@@ -102,13 +107,15 @@ export default (common: TestSetup<Muxer, MuxerInit>) => {
|
|
|
102
107
|
const p = duplexPair<Uint8Array>()
|
|
103
108
|
const onDialerStreamPromise: DeferredPromise<Stream> = defer()
|
|
104
109
|
const onListenerStreamPromise: DeferredPromise<Stream> = defer()
|
|
105
|
-
const
|
|
110
|
+
const dialerFactory = await common.setup()
|
|
111
|
+
const dialer = dialerFactory.createStreamMuxer(new Components(), {
|
|
106
112
|
onIncomingStream: (stream) => {
|
|
107
113
|
onDialerStreamPromise.resolve(stream)
|
|
108
114
|
}
|
|
109
115
|
})
|
|
110
116
|
|
|
111
|
-
const
|
|
117
|
+
const listenerFactory = await common.setup()
|
|
118
|
+
const listener = listenerFactory.createStreamMuxer(new Components(), {
|
|
112
119
|
onIncomingStream: (stream) => {
|
|
113
120
|
onListenerStreamPromise.resolve(stream)
|
|
114
121
|
}
|
|
@@ -138,12 +145,14 @@ export default (common: TestSetup<Muxer, MuxerInit>) => {
|
|
|
138
145
|
const p = duplexPair<Uint8Array>()
|
|
139
146
|
const onDialerStreamPromise: DeferredPromise<Stream> = defer()
|
|
140
147
|
const onListenerStreamPromise: DeferredPromise<Stream> = defer()
|
|
141
|
-
const
|
|
148
|
+
const dialerFactory = await common.setup()
|
|
149
|
+
const dialer = dialerFactory.createStreamMuxer(new Components(), {
|
|
142
150
|
onIncomingStream: (stream) => {
|
|
143
151
|
onDialerStreamPromise.resolve(stream)
|
|
144
152
|
}
|
|
145
153
|
})
|
|
146
|
-
const
|
|
154
|
+
const listenerFactory = await common.setup()
|
|
155
|
+
const listener = listenerFactory.createStreamMuxer(new Components(), {
|
|
147
156
|
onIncomingStream: (stream) => {
|
|
148
157
|
onListenerStreamPromise.resolve(stream)
|
|
149
158
|
}
|
|
@@ -7,7 +7,8 @@ import drain from 'it-drain'
|
|
|
7
7
|
import { expect } from 'aegir/utils/chai.js'
|
|
8
8
|
import delay from 'delay'
|
|
9
9
|
import type { TestSetup } from '../index.js'
|
|
10
|
-
import type {
|
|
10
|
+
import type { StreamMuxerFactory } from '@libp2p/interfaces/stream-muxer'
|
|
11
|
+
import { Components } from '@libp2p/interfaces/components'
|
|
11
12
|
|
|
12
13
|
function randomBuffer () {
|
|
13
14
|
return uint8ArrayFromString(Math.random().toString())
|
|
@@ -22,15 +23,17 @@ const infiniteRandom = {
|
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
export default (common: TestSetup<
|
|
26
|
+
export default (common: TestSetup<StreamMuxerFactory>) => {
|
|
26
27
|
describe('close', () => {
|
|
27
28
|
it('closing underlying socket closes streams', async () => {
|
|
28
29
|
let openedStreams = 0
|
|
29
30
|
const expectedStreams = 5
|
|
30
|
-
const
|
|
31
|
+
const dialerFactory = await common.setup()
|
|
32
|
+
const dialer = dialerFactory.createStreamMuxer(new Components())
|
|
31
33
|
|
|
32
34
|
// Listener is echo server :)
|
|
33
|
-
const
|
|
35
|
+
const listenerFactory = await common.setup()
|
|
36
|
+
const listener = listenerFactory.createStreamMuxer(new Components(), {
|
|
34
37
|
onIncomingStream: (stream) => {
|
|
35
38
|
openedStreams++
|
|
36
39
|
void pipe(stream, stream)
|
|
@@ -65,10 +68,12 @@ export default (common: TestSetup<Muxer, MuxerInit>) => {
|
|
|
65
68
|
|
|
66
69
|
it('closing one of the muxed streams doesn\'t close others', async () => {
|
|
67
70
|
const p = duplexPair<Uint8Array>()
|
|
68
|
-
const
|
|
71
|
+
const dialerFactory = await common.setup()
|
|
72
|
+
const dialer = dialerFactory.createStreamMuxer(new Components())
|
|
69
73
|
|
|
70
74
|
// Listener is echo server :)
|
|
71
|
-
const
|
|
75
|
+
const listenerFactory = await common.setup()
|
|
76
|
+
const listener = listenerFactory.createStreamMuxer(new Components(), {
|
|
72
77
|
onIncomingStream: (stream) => {
|
|
73
78
|
void pipe(stream, stream)
|
|
74
79
|
}
|
|
@@ -3,9 +3,9 @@ import closeTest from './close-test.js'
|
|
|
3
3
|
import stressTest from './stress-test.js'
|
|
4
4
|
import megaStressTest from './mega-stress-test.js'
|
|
5
5
|
import type { TestSetup } from '../index.js'
|
|
6
|
-
import type {
|
|
6
|
+
import type { StreamMuxerFactory } from '@libp2p/interfaces/stream-muxer'
|
|
7
7
|
|
|
8
|
-
export default (common: TestSetup<
|
|
8
|
+
export default (common: TestSetup<StreamMuxerFactory>) => {
|
|
9
9
|
describe('interface-stream-muxer', () => {
|
|
10
10
|
baseTest(common)
|
|
11
11
|
closeTest(common)
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import spawn from './spawner.js'
|
|
2
2
|
import type { TestSetup } from '../index.js'
|
|
3
|
-
import type {
|
|
3
|
+
import type { StreamMuxer, StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interfaces/stream-muxer'
|
|
4
|
+
import { Components } from '@libp2p/interfaces/components'
|
|
4
5
|
|
|
5
|
-
export default (common: TestSetup<
|
|
6
|
-
const createMuxer = async (init?:
|
|
6
|
+
export default (common: TestSetup<StreamMuxerFactory>) => {
|
|
7
|
+
const createMuxer = async (init?: StreamMuxerInit): Promise<StreamMuxer> => {
|
|
8
|
+
const factory = await common.setup()
|
|
9
|
+
return factory.createStreamMuxer(new Components(), init)
|
|
10
|
+
}
|
|
7
11
|
|
|
8
12
|
describe.skip('mega stress test', function () {
|
|
9
13
|
it('10,000 streams with 10,000 msg', async () => await spawn(createMuxer, 10000, 10000, 5000))
|
|
@@ -5,9 +5,9 @@ import pLimit from 'p-limit'
|
|
|
5
5
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
6
6
|
import drain from 'it-drain'
|
|
7
7
|
import all from 'it-all'
|
|
8
|
-
import type {
|
|
8
|
+
import type { StreamMuxer, StreamMuxerInit } from '@libp2p/interfaces/stream-muxer'
|
|
9
9
|
|
|
10
|
-
export default async (createMuxer: (init?:
|
|
10
|
+
export default async (createMuxer: (init?: StreamMuxerInit) => Promise<StreamMuxer>, nStreams: number, nMsg: number, limit?: number) => {
|
|
11
11
|
const [dialerSocket, listenerSocket] = duplexPair<Uint8Array>()
|
|
12
12
|
|
|
13
13
|
const msg = uint8ArrayFromString('simple msg')
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import spawn from './spawner.js'
|
|
2
2
|
import type { TestSetup } from '../index.js'
|
|
3
|
-
import type {
|
|
3
|
+
import type { StreamMuxerFactory, StreamMuxerInit, StreamMuxer } from '@libp2p/interfaces/stream-muxer'
|
|
4
|
+
import { Components } from '@libp2p/interfaces/components'
|
|
4
5
|
|
|
5
|
-
export default (common: TestSetup<
|
|
6
|
-
const createMuxer = async (init?:
|
|
6
|
+
export default (common: TestSetup<StreamMuxerFactory>) => {
|
|
7
|
+
const createMuxer = async (init?: StreamMuxerInit): Promise<StreamMuxer> => {
|
|
8
|
+
const factory = await common.setup()
|
|
9
|
+
return factory.createStreamMuxer(new Components(), init)
|
|
10
|
+
}
|
|
7
11
|
|
|
8
12
|
describe('stress test', () => {
|
|
9
13
|
it('1 stream with 1 msg', async () => await spawn(createMuxer, 1, 1))
|
|
@@ -10,16 +10,16 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
|
10
10
|
import drain from 'it-drain'
|
|
11
11
|
import type { TestSetup } from '../index.js'
|
|
12
12
|
import type { Transport, Listener, Upgrader } from '@libp2p/interfaces/transport'
|
|
13
|
-
import type { TransportTestFixtures,
|
|
13
|
+
import type { TransportTestFixtures, Connector } from './index.js'
|
|
14
14
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
15
|
-
import type { Registrar } from '@libp2p/interfaces/
|
|
15
|
+
import type { Registrar } from '@libp2p/interfaces/registrar'
|
|
16
16
|
|
|
17
|
-
export default (common: TestSetup<TransportTestFixtures
|
|
17
|
+
export default (common: TestSetup<TransportTestFixtures>) => {
|
|
18
18
|
describe('dial', () => {
|
|
19
19
|
let upgrader: Upgrader
|
|
20
20
|
let registrar: Registrar
|
|
21
21
|
let addrs: Multiaddr[]
|
|
22
|
-
let transport: Transport
|
|
22
|
+
let transport: Transport
|
|
23
23
|
let connector: Connector
|
|
24
24
|
let listener: Listener
|
|
25
25
|
|
|
@@ -29,7 +29,7 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
29
29
|
registrar
|
|
30
30
|
});
|
|
31
31
|
|
|
32
|
-
({ addrs, transport, connector } = await common.setup(
|
|
32
|
+
({ addrs, transport, connector } = await common.setup())
|
|
33
33
|
})
|
|
34
34
|
|
|
35
35
|
after(async () => {
|
|
@@ -37,7 +37,9 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
37
37
|
})
|
|
38
38
|
|
|
39
39
|
beforeEach(async () => {
|
|
40
|
-
listener = transport.createListener({
|
|
40
|
+
listener = transport.createListener({
|
|
41
|
+
upgrader
|
|
42
|
+
})
|
|
41
43
|
return await listener.listen(addrs[0])
|
|
42
44
|
})
|
|
43
45
|
|
|
@@ -49,17 +51,19 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
49
51
|
|
|
50
52
|
it('simple', async () => {
|
|
51
53
|
const protocol = '/hello/1.0.0'
|
|
52
|
-
void registrar.handle(protocol, (
|
|
54
|
+
void registrar.handle(protocol, (data) => {
|
|
53
55
|
void pipe([
|
|
54
56
|
uint8ArrayFromString('hey')
|
|
55
57
|
],
|
|
56
|
-
|
|
58
|
+
data.stream,
|
|
57
59
|
drain
|
|
58
60
|
)
|
|
59
61
|
})
|
|
60
62
|
|
|
61
63
|
const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound')
|
|
62
|
-
const conn = await transport.dial(addrs[0]
|
|
64
|
+
const conn = await transport.dial(addrs[0], {
|
|
65
|
+
upgrader
|
|
66
|
+
})
|
|
63
67
|
|
|
64
68
|
const { stream } = await conn.newStream([protocol])
|
|
65
69
|
const result = await all(stream.source)
|
|
@@ -73,7 +77,9 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
73
77
|
|
|
74
78
|
it('can close connections', async () => {
|
|
75
79
|
const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound')
|
|
76
|
-
const conn = await transport.dial(addrs[0]
|
|
80
|
+
const conn = await transport.dial(addrs[0], {
|
|
81
|
+
upgrader
|
|
82
|
+
})
|
|
77
83
|
|
|
78
84
|
expect(upgradeSpy.callCount).to.equal(1)
|
|
79
85
|
await expect(upgradeSpy.getCall(0).returnValue).to.eventually.equal(conn)
|
|
@@ -84,7 +90,9 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
84
90
|
it('to non existent listener', async () => {
|
|
85
91
|
const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound')
|
|
86
92
|
|
|
87
|
-
await expect(transport.dial(addrs[1]
|
|
93
|
+
await expect(transport.dial(addrs[1], {
|
|
94
|
+
upgrader
|
|
95
|
+
})).to.eventually.be.rejected()
|
|
88
96
|
expect(upgradeSpy.callCount).to.equal(0)
|
|
89
97
|
})
|
|
90
98
|
|
|
@@ -92,7 +100,7 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
92
100
|
const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound')
|
|
93
101
|
const controller = new AbortController()
|
|
94
102
|
controller.abort()
|
|
95
|
-
const conn = transport.dial(addrs[0], { signal: controller.signal })
|
|
103
|
+
const conn = transport.dial(addrs[0], { signal: controller.signal, upgrader })
|
|
96
104
|
|
|
97
105
|
await expect(conn).to.eventually.be.rejected().with.property('code', AbortError.code)
|
|
98
106
|
expect(upgradeSpy.callCount).to.equal(0)
|
|
@@ -105,7 +113,7 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
105
113
|
connector.delay(100)
|
|
106
114
|
|
|
107
115
|
const controller = new AbortController()
|
|
108
|
-
const conn = transport.dial(addrs[0], { signal: controller.signal })
|
|
116
|
+
const conn = transport.dial(addrs[0], { signal: controller.signal, upgrader })
|
|
109
117
|
setTimeout(() => controller.abort(), 50)
|
|
110
118
|
|
|
111
119
|
await expect(conn).to.eventually.be.rejected().with.property('code', AbortError.code)
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { expect } from 'aegir/utils/chai.js'
|
|
2
|
-
import { mockUpgrader } from '../mocks/upgrader.js'
|
|
3
2
|
import type { TestSetup } from '../index.js'
|
|
4
3
|
import type { Transport } from '@libp2p/interfaces/transport'
|
|
5
|
-
import type { TransportTestFixtures
|
|
4
|
+
import type { TransportTestFixtures } from './index.js'
|
|
6
5
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
7
6
|
|
|
8
|
-
export default (common: TestSetup<TransportTestFixtures
|
|
7
|
+
export default (common: TestSetup<TransportTestFixtures>) => {
|
|
9
8
|
describe('filter', () => {
|
|
10
9
|
let addrs: Multiaddr[]
|
|
11
|
-
let transport: Transport
|
|
10
|
+
let transport: Transport
|
|
12
11
|
|
|
13
12
|
before(async () => {
|
|
14
|
-
({ addrs, transport } = await common.setup(
|
|
13
|
+
({ addrs, transport } = await common.setup())
|
|
15
14
|
})
|
|
16
15
|
|
|
17
16
|
after(async () => {
|
package/src/transport/index.ts
CHANGED
|
@@ -2,7 +2,7 @@ import dial from './dial-test.js'
|
|
|
2
2
|
import listen from './listen-test.js'
|
|
3
3
|
import filter from './filter-test.js'
|
|
4
4
|
import type { TestSetup } from '../index.js'
|
|
5
|
-
import type { Transport
|
|
5
|
+
import type { Transport } from '@libp2p/interfaces/transport'
|
|
6
6
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
7
7
|
|
|
8
8
|
export interface Connector {
|
|
@@ -12,15 +12,11 @@ export interface Connector {
|
|
|
12
12
|
|
|
13
13
|
export interface TransportTestFixtures {
|
|
14
14
|
addrs: Multiaddr[]
|
|
15
|
-
transport: Transport
|
|
15
|
+
transport: Transport
|
|
16
16
|
connector: Connector
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export
|
|
20
|
-
upgrader: Upgrader
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
19
|
+
export default (common: TestSetup<TransportTestFixtures>) => {
|
|
24
20
|
describe('interface-transport', () => {
|
|
25
21
|
dial(common)
|
|
26
22
|
listen(common)
|
|
@@ -7,19 +7,18 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
|
7
7
|
import { isValidTick } from '../utils/is-valid-tick.js'
|
|
8
8
|
import { mockUpgrader } from '../mocks/upgrader.js'
|
|
9
9
|
import defer from 'p-defer'
|
|
10
|
-
import {
|
|
10
|
+
import { mockRegistrar } from '../mocks/registrar.js'
|
|
11
|
+
import drain from 'it-drain'
|
|
11
12
|
import type { TestSetup } from '../index.js'
|
|
12
|
-
import type { Transport } from '@libp2p/interfaces/transport'
|
|
13
|
-
import type { TransportTestFixtures
|
|
13
|
+
import type { Transport, Upgrader } from '@libp2p/interfaces/transport'
|
|
14
|
+
import type { TransportTestFixtures } from './index.js'
|
|
14
15
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
15
16
|
import type { Connection } from '@libp2p/interfaces/connection'
|
|
16
|
-
import type { Registrar } from '@libp2p/interfaces/
|
|
17
|
-
import { mockRegistrar } from '../mocks/registrar.js'
|
|
18
|
-
import drain from 'it-drain'
|
|
17
|
+
import type { Registrar } from '@libp2p/interfaces/registrar'
|
|
19
18
|
|
|
20
|
-
export default (common: TestSetup<TransportTestFixtures
|
|
19
|
+
export default (common: TestSetup<TransportTestFixtures>) => {
|
|
21
20
|
describe('listen', () => {
|
|
22
|
-
let upgrader
|
|
21
|
+
let upgrader: Upgrader
|
|
23
22
|
let addrs: Multiaddr[]
|
|
24
23
|
let transport: Transport
|
|
25
24
|
let registrar: Registrar
|
|
@@ -30,7 +29,7 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
30
29
|
registrar
|
|
31
30
|
});
|
|
32
31
|
|
|
33
|
-
({ transport, addrs } = await common.setup(
|
|
32
|
+
({ transport, addrs } = await common.setup())
|
|
34
33
|
})
|
|
35
34
|
|
|
36
35
|
after(async () => {
|
|
@@ -42,7 +41,9 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
42
41
|
})
|
|
43
42
|
|
|
44
43
|
it('simple', async () => {
|
|
45
|
-
const listener = transport.createListener(
|
|
44
|
+
const listener = transport.createListener({
|
|
45
|
+
upgrader
|
|
46
|
+
})
|
|
46
47
|
await listener.listen(addrs[0])
|
|
47
48
|
await listener.close()
|
|
48
49
|
})
|
|
@@ -52,11 +53,12 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
52
53
|
const listenerConns: Connection[] = []
|
|
53
54
|
|
|
54
55
|
const protocol = '/test/protocol'
|
|
55
|
-
void registrar.handle(protocol, (
|
|
56
|
-
void drain(
|
|
56
|
+
void registrar.handle(protocol, (data) => {
|
|
57
|
+
void drain(data.stream.source)
|
|
57
58
|
})
|
|
58
59
|
|
|
59
60
|
const listener = transport.createListener({
|
|
61
|
+
upgrader,
|
|
60
62
|
handler: (conn) => {
|
|
61
63
|
listenerConns.push(conn)
|
|
62
64
|
}
|
|
@@ -67,8 +69,12 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
67
69
|
|
|
68
70
|
// Create two connections to the listener
|
|
69
71
|
const [conn1] = await Promise.all([
|
|
70
|
-
transport.dial(addrs[0]
|
|
71
|
-
|
|
72
|
+
transport.dial(addrs[0], {
|
|
73
|
+
upgrader
|
|
74
|
+
}),
|
|
75
|
+
transport.dial(addrs[0], {
|
|
76
|
+
upgrader
|
|
77
|
+
})
|
|
72
78
|
])
|
|
73
79
|
|
|
74
80
|
// Give the listener a chance to finish its upgrade
|
|
@@ -102,16 +108,16 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
102
108
|
sinon.stub(upgrader, 'upgradeInbound').throws()
|
|
103
109
|
|
|
104
110
|
const listener = transport.createListener({
|
|
105
|
-
|
|
106
|
-
throw new Error('should not handle the connection if upgradeInbound throws')
|
|
107
|
-
}
|
|
111
|
+
upgrader
|
|
108
112
|
})
|
|
109
113
|
|
|
110
114
|
// Listen
|
|
111
115
|
await listener.listen(addrs[0])
|
|
112
116
|
|
|
113
117
|
// Create a connection to the listener
|
|
114
|
-
const conn = await transport.dial(addrs[0]
|
|
118
|
+
const conn = await transport.dial(addrs[0], {
|
|
119
|
+
upgrader
|
|
120
|
+
})
|
|
115
121
|
|
|
116
122
|
await pWaitFor(() => typeof conn.stat.timeline.close === 'number')
|
|
117
123
|
await listener.close()
|
|
@@ -120,7 +126,9 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
120
126
|
describe('events', () => {
|
|
121
127
|
it('connection', async () => {
|
|
122
128
|
const upgradeSpy = sinon.spy(upgrader, 'upgradeInbound')
|
|
123
|
-
const listener = transport.createListener(
|
|
129
|
+
const listener = transport.createListener({
|
|
130
|
+
upgrader
|
|
131
|
+
})
|
|
124
132
|
const deferred = defer()
|
|
125
133
|
let conn
|
|
126
134
|
|
|
@@ -131,7 +139,9 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
131
139
|
|
|
132
140
|
void (async () => {
|
|
133
141
|
await listener.listen(addrs[0])
|
|
134
|
-
await transport.dial(addrs[0]
|
|
142
|
+
await transport.dial(addrs[0], {
|
|
143
|
+
upgrader
|
|
144
|
+
})
|
|
135
145
|
})()
|
|
136
146
|
|
|
137
147
|
await deferred.promise
|
|
@@ -142,7 +152,9 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
142
152
|
})
|
|
143
153
|
|
|
144
154
|
it('listening', (done) => {
|
|
145
|
-
const listener = transport.createListener(
|
|
155
|
+
const listener = transport.createListener({
|
|
156
|
+
upgrader
|
|
157
|
+
})
|
|
146
158
|
listener.addEventListener('listening', () => {
|
|
147
159
|
listener.close().then(done, done)
|
|
148
160
|
})
|
|
@@ -150,18 +162,22 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
150
162
|
})
|
|
151
163
|
|
|
152
164
|
it('error', (done) => {
|
|
153
|
-
const listener = transport.createListener(
|
|
165
|
+
const listener = transport.createListener({
|
|
166
|
+
upgrader
|
|
167
|
+
})
|
|
154
168
|
listener.addEventListener('error', (evt) => {
|
|
155
169
|
expect(evt.detail).to.be.an.instanceOf(Error)
|
|
156
170
|
listener.close().then(done, done)
|
|
157
171
|
})
|
|
158
|
-
listener.dispatchEvent(new
|
|
159
|
-
|
|
172
|
+
listener.dispatchEvent(new ErrorEvent('error', {
|
|
173
|
+
error: new Error('my err')
|
|
160
174
|
}))
|
|
161
175
|
})
|
|
162
176
|
|
|
163
177
|
it('close', (done) => {
|
|
164
|
-
const listener = transport.createListener(
|
|
178
|
+
const listener = transport.createListener({
|
|
179
|
+
upgrader
|
|
180
|
+
})
|
|
165
181
|
listener.addEventListener('close', () => done())
|
|
166
182
|
|
|
167
183
|
void (async () => {
|