@libp2p/interface-compliance-tests 1.1.8 → 1.1.12
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/mocks/connection.d.ts +5 -3
- package/dist/src/mocks/connection.d.ts.map +1 -1
- package/dist/src/mocks/connection.js +21 -13
- package/dist/src/mocks/connection.js.map +1 -1
- package/dist/src/mocks/muxer.d.ts.map +1 -1
- package/dist/src/mocks/muxer.js +201 -131
- package/dist/src/mocks/muxer.js.map +1 -1
- package/dist/src/mocks/registrar.d.ts +5 -1
- package/dist/src/mocks/registrar.d.ts.map +1 -1
- package/dist/src/mocks/registrar.js +8 -10
- package/dist/src/mocks/registrar.js.map +1 -1
- package/dist/src/mocks/upgrader.d.ts +2 -2
- package/dist/src/mocks/upgrader.d.ts.map +1 -1
- package/dist/src/mocks/upgrader.js +2 -2
- package/dist/src/mocks/upgrader.js.map +1 -1
- package/dist/src/pubsub/api.d.ts +3 -2
- package/dist/src/pubsub/api.d.ts.map +1 -1
- package/dist/src/pubsub/api.js +8 -6
- package/dist/src/pubsub/api.js.map +1 -1
- package/dist/src/pubsub/connection-handlers.d.ts +3 -2
- package/dist/src/pubsub/connection-handlers.d.ts.map +1 -1
- package/dist/src/pubsub/connection-handlers.js +128 -34
- package/dist/src/pubsub/connection-handlers.js.map +1 -1
- package/dist/src/pubsub/emit-self.d.ts +3 -2
- package/dist/src/pubsub/emit-self.d.ts.map +1 -1
- package/dist/src/pubsub/emit-self.js +3 -2
- package/dist/src/pubsub/emit-self.js.map +1 -1
- package/dist/src/pubsub/index.d.ts +5 -2
- 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 -2
- package/dist/src/pubsub/messages.d.ts.map +1 -1
- package/dist/src/pubsub/messages.js +16 -17
- package/dist/src/pubsub/messages.js.map +1 -1
- package/dist/src/pubsub/multiple-nodes.d.ts +3 -2
- package/dist/src/pubsub/multiple-nodes.d.ts.map +1 -1
- package/dist/src/pubsub/multiple-nodes.js +89 -58
- package/dist/src/pubsub/multiple-nodes.js.map +1 -1
- package/dist/src/pubsub/two-nodes.d.ts +3 -2
- package/dist/src/pubsub/two-nodes.d.ts.map +1 -1
- package/dist/src/pubsub/two-nodes.js +74 -32
- package/dist/src/pubsub/two-nodes.js.map +1 -1
- package/dist/src/pubsub/utils.d.ts +3 -0
- package/dist/src/pubsub/utils.d.ts.map +1 -0
- package/dist/src/pubsub/utils.js +9 -0
- package/dist/src/pubsub/utils.js.map +1 -0
- package/dist/src/stream-muxer/base-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/base-test.js +27 -21
- package/dist/src/stream-muxer/base-test.js.map +1 -1
- package/dist/src/stream-muxer/close-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/close-test.js +25 -28
- package/dist/src/stream-muxer/close-test.js.map +1 -1
- package/dist/src/stream-muxer/spawner.d.ts.map +1 -1
- package/dist/src/stream-muxer/spawner.js +2 -3
- package/dist/src/stream-muxer/spawner.js.map +1 -1
- package/dist/src/transport/dial-test.d.ts.map +1 -1
- package/dist/src/transport/dial-test.js +16 -5
- package/dist/src/transport/dial-test.js.map +1 -1
- package/dist/src/transport/listen-test.d.ts.map +1 -1
- package/dist/src/transport/listen-test.js +13 -2
- package/dist/src/transport/listen-test.js.map +1 -1
- package/package.json +6 -2
- package/src/mocks/connection.ts +27 -15
- package/src/mocks/muxer.ts +271 -147
- package/src/mocks/registrar.ts +12 -10
- package/src/mocks/upgrader.ts +4 -4
- package/src/pubsub/api.ts +13 -9
- package/src/pubsub/connection-handlers.ts +148 -43
- package/src/pubsub/emit-self.ts +9 -7
- package/src/pubsub/index.ts +5 -2
- package/src/pubsub/messages.ts +24 -23
- package/src/pubsub/multiple-nodes.ts +104 -74
- package/src/pubsub/two-nodes.ts +87 -39
- package/src/pubsub/utils.ts +12 -0
- package/src/stream-muxer/base-test.ts +35 -24
- package/src/stream-muxer/close-test.ts +32 -29
- package/src/stream-muxer/spawner.ts +3 -6
- package/src/transport/dial-test.ts +23 -6
- package/src/transport/listen-test.ts +16 -2
|
@@ -27,10 +27,10 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
27
27
|
const onStreamEndPromise: DeferredPromise<Stream> = defer()
|
|
28
28
|
|
|
29
29
|
const listener = await common.setup({
|
|
30
|
-
|
|
30
|
+
onIncomingStream: (stream) => {
|
|
31
31
|
onStreamPromise.resolve(stream)
|
|
32
32
|
},
|
|
33
|
-
onStreamEnd: stream => {
|
|
33
|
+
onStreamEnd: (stream) => {
|
|
34
34
|
onStreamEndPromise.resolve(stream)
|
|
35
35
|
}
|
|
36
36
|
})
|
|
@@ -74,7 +74,7 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
74
74
|
const p = duplexPair<Uint8Array>()
|
|
75
75
|
const onStreamPromise: DeferredPromise<Stream> = defer()
|
|
76
76
|
const dialer = await common.setup({
|
|
77
|
-
|
|
77
|
+
onIncomingStream: (stream: Stream) => {
|
|
78
78
|
onStreamPromise.resolve(stream)
|
|
79
79
|
}
|
|
80
80
|
})
|
|
@@ -103,12 +103,13 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
103
103
|
const onDialerStreamPromise: DeferredPromise<Stream> = defer()
|
|
104
104
|
const onListenerStreamPromise: DeferredPromise<Stream> = defer()
|
|
105
105
|
const dialer = await common.setup({
|
|
106
|
-
|
|
106
|
+
onIncomingStream: (stream) => {
|
|
107
107
|
onDialerStreamPromise.resolve(stream)
|
|
108
108
|
}
|
|
109
109
|
})
|
|
110
|
+
|
|
110
111
|
const listener = await common.setup({
|
|
111
|
-
|
|
112
|
+
onIncomingStream: (stream) => {
|
|
112
113
|
onListenerStreamPromise.resolve(stream)
|
|
113
114
|
}
|
|
114
115
|
})
|
|
@@ -116,20 +117,20 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
116
117
|
void pipe(p[0], dialer, p[0])
|
|
117
118
|
void pipe(p[1], listener, p[1])
|
|
118
119
|
|
|
119
|
-
const
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
void drainAndClose(dialerConn)
|
|
123
|
-
void drainAndClose(listenerConn)
|
|
120
|
+
const dialerInitiatorStream = dialer.newStream()
|
|
121
|
+
const listenerInitiatorStream = listener.newStream()
|
|
124
122
|
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
await Promise.all([
|
|
124
|
+
drainAndClose(dialerInitiatorStream),
|
|
125
|
+
drainAndClose(listenerInitiatorStream),
|
|
126
|
+
onDialerStreamPromise.promise.then(async stream => await drainAndClose(stream)),
|
|
127
|
+
onListenerStreamPromise.promise.then(async stream => await drainAndClose(stream))
|
|
128
|
+
])
|
|
127
129
|
|
|
128
|
-
await
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
await drainAndClose(listener)
|
|
130
|
+
await Promise.all([
|
|
131
|
+
drainAndClose(dialer),
|
|
132
|
+
drainAndClose(listener)
|
|
133
|
+
])
|
|
133
134
|
})
|
|
134
135
|
|
|
135
136
|
it('Open a stream on one side, write, open a stream on the other side', async () => {
|
|
@@ -138,12 +139,12 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
138
139
|
const onDialerStreamPromise: DeferredPromise<Stream> = defer()
|
|
139
140
|
const onListenerStreamPromise: DeferredPromise<Stream> = defer()
|
|
140
141
|
const dialer = await common.setup({
|
|
141
|
-
|
|
142
|
+
onIncomingStream: (stream) => {
|
|
142
143
|
onDialerStreamPromise.resolve(stream)
|
|
143
144
|
}
|
|
144
145
|
})
|
|
145
146
|
const listener = await common.setup({
|
|
146
|
-
|
|
147
|
+
onIncomingStream: (stream) => {
|
|
147
148
|
onListenerStreamPromise.resolve(stream)
|
|
148
149
|
}
|
|
149
150
|
})
|
|
@@ -157,13 +158,23 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
157
158
|
void pipe([uint8ArrayFromString('hey')], dialerConn)
|
|
158
159
|
void pipe([uint8ArrayFromString('hello')], listenerConn)
|
|
159
160
|
|
|
160
|
-
const
|
|
161
|
-
|
|
161
|
+
const [
|
|
162
|
+
dialerStream,
|
|
163
|
+
listenerStream
|
|
164
|
+
] = await Promise.all([
|
|
165
|
+
onDialerStreamPromise.promise,
|
|
166
|
+
onListenerStreamPromise.promise
|
|
167
|
+
])
|
|
168
|
+
|
|
169
|
+
const [
|
|
170
|
+
listenerChunks,
|
|
171
|
+
dialerChunks
|
|
172
|
+
] = await Promise.all([
|
|
173
|
+
pipe(listenerStream, toString, async (source) => await all(source)),
|
|
174
|
+
pipe(dialerStream, toString, async (source) => await all(source))
|
|
175
|
+
])
|
|
162
176
|
|
|
163
|
-
const listenerChunks = await pipe(listenerStream, toString, async (source) => await all(source))
|
|
164
177
|
expect(listenerChunks).to.be.eql(['hey'])
|
|
165
|
-
|
|
166
|
-
const dialerChunks = await pipe(dialerStream, toString, async (source) => await all(source))
|
|
167
178
|
expect(dialerChunks).to.be.eql(['hello'])
|
|
168
179
|
})
|
|
169
180
|
})
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
/* eslint max-nested-callbacks: ["error", 8] */
|
|
2
2
|
import { pipe } from 'it-pipe'
|
|
3
3
|
import { duplexPair } from 'it-pair/duplex'
|
|
4
|
-
import { abortableSource
|
|
4
|
+
import { abortableSource } from 'abortable-iterator'
|
|
5
5
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
6
6
|
import drain from 'it-drain'
|
|
7
|
-
import { mockUpgrader } from '../mocks/upgrader.js'
|
|
8
|
-
import { mockMultiaddrConnection } from '../mocks/multiaddr-connection.js'
|
|
9
7
|
import { expect } from 'aegir/utils/chai.js'
|
|
10
8
|
import delay from 'delay'
|
|
11
9
|
import type { TestSetup } from '../index.js'
|
|
12
10
|
import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer'
|
|
13
|
-
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
14
11
|
|
|
15
12
|
function randomBuffer () {
|
|
16
13
|
return uint8ArrayFromString(Math.random().toString())
|
|
@@ -28,38 +25,42 @@ const infiniteRandom = {
|
|
|
28
25
|
export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
29
26
|
describe('close', () => {
|
|
30
27
|
it('closing underlying socket closes streams', async () => {
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
onStream: (stream) => {
|
|
35
|
-
void pipe(stream, drain)
|
|
36
|
-
}
|
|
37
|
-
})
|
|
38
|
-
const upgrader = mockUpgrader({ muxer })
|
|
28
|
+
let openedStreams = 0
|
|
29
|
+
const expectedStreams = 5
|
|
30
|
+
const dialer = await common.setup()
|
|
39
31
|
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
// Listener is echo server :)
|
|
33
|
+
const listener = await common.setup({
|
|
34
|
+
onIncomingStream: (stream) => {
|
|
35
|
+
openedStreams++
|
|
36
|
+
void pipe(stream, stream)
|
|
37
|
+
}
|
|
44
38
|
})
|
|
45
39
|
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
const p = duplexPair<Uint8Array>()
|
|
41
|
+
void pipe(p[0], dialer, p[0])
|
|
42
|
+
void pipe(p[1], listener, p[1])
|
|
48
43
|
|
|
49
|
-
const
|
|
50
|
-
const s2 = await dialerConn.newStream([''])
|
|
44
|
+
const streams = Array(expectedStreams).fill(0).map(() => dialer.newStream())
|
|
51
45
|
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
void Promise.all(
|
|
47
|
+
streams.map(async stream => {
|
|
48
|
+
return await pipe(
|
|
49
|
+
infiniteRandom,
|
|
50
|
+
stream,
|
|
51
|
+
drain
|
|
52
|
+
)
|
|
53
|
+
})
|
|
54
|
+
)
|
|
54
55
|
|
|
55
|
-
|
|
56
|
-
const s2Result = pipe(infiniteRandom, s2.stream, drain)
|
|
56
|
+
expect(dialer.streams).to.have.lengthOf(expectedStreams)
|
|
57
57
|
|
|
58
|
-
//
|
|
59
|
-
await
|
|
60
|
-
await
|
|
58
|
+
// Pause, and then send some data and close the dialer
|
|
59
|
+
await delay(50)
|
|
60
|
+
await pipe([randomBuffer()], dialer, drain)
|
|
61
61
|
|
|
62
|
-
expect(
|
|
62
|
+
expect(openedStreams).to.have.equal(expectedStreams)
|
|
63
|
+
expect(dialer.streams).to.have.lengthOf(0)
|
|
63
64
|
})
|
|
64
65
|
|
|
65
66
|
it('closing one of the muxed streams doesn\'t close others', async () => {
|
|
@@ -68,7 +69,9 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
68
69
|
|
|
69
70
|
// Listener is echo server :)
|
|
70
71
|
const listener = await common.setup({
|
|
71
|
-
|
|
72
|
+
onIncomingStream: (stream) => {
|
|
73
|
+
void pipe(stream, stream)
|
|
74
|
+
}
|
|
72
75
|
})
|
|
73
76
|
|
|
74
77
|
void pipe(p[0], dialer, p[0])
|
|
@@ -13,16 +13,13 @@ export default async (createMuxer: (options?: MuxerOptions) => Promise<Muxer>, n
|
|
|
13
13
|
const msg = uint8ArrayFromString('simple msg')
|
|
14
14
|
|
|
15
15
|
const listener = await createMuxer({
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
onIncomingStream: (stream) => {
|
|
17
|
+
void pipe(
|
|
18
18
|
stream,
|
|
19
19
|
drain
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
void pipe([], stream)
|
|
20
|
+
).then(async () => await pipe([], stream))
|
|
23
21
|
}
|
|
24
22
|
})
|
|
25
|
-
|
|
26
23
|
const dialer = await createMuxer()
|
|
27
24
|
|
|
28
25
|
void pipe(listenerSocket, listener, listenerSocket)
|
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
import { expect } from 'aegir/utils/chai.js'
|
|
2
2
|
import { isValidTick } from '../utils/is-valid-tick.js'
|
|
3
3
|
import { mockUpgrader } from '../mocks/upgrader.js'
|
|
4
|
-
import {
|
|
4
|
+
import { mockRegistrar } from '../mocks/registrar.js'
|
|
5
5
|
import all from 'it-all'
|
|
6
6
|
import { pipe } from 'it-pipe'
|
|
7
7
|
import { AbortError } from '@libp2p/interfaces/errors'
|
|
8
8
|
import sinon from 'sinon'
|
|
9
9
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
10
|
+
import drain from 'it-drain'
|
|
10
11
|
import type { TestSetup } from '../index.js'
|
|
11
|
-
import type { Transport, Listener } from '@libp2p/interfaces/transport'
|
|
12
|
+
import type { Transport, Listener, Upgrader } from '@libp2p/interfaces/transport'
|
|
12
13
|
import type { TransportTestFixtures, SetupArgs, Connector } from './index.js'
|
|
13
14
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
15
|
+
import type { Registrar } from '@libp2p/interfaces/src/registrar'
|
|
14
16
|
|
|
15
17
|
export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
16
18
|
describe('dial', () => {
|
|
17
|
-
|
|
19
|
+
let upgrader: Upgrader
|
|
20
|
+
let registrar: Registrar
|
|
18
21
|
let addrs: Multiaddr[]
|
|
19
22
|
let transport: Transport<any, any>
|
|
20
23
|
let connector: Connector
|
|
21
24
|
let listener: Listener
|
|
22
25
|
|
|
23
26
|
before(async () => {
|
|
27
|
+
registrar = mockRegistrar()
|
|
28
|
+
upgrader = mockUpgrader({
|
|
29
|
+
registrar
|
|
30
|
+
});
|
|
31
|
+
|
|
24
32
|
({ addrs, transport, connector } = await common.setup({ upgrader }))
|
|
25
33
|
})
|
|
26
34
|
|
|
@@ -40,12 +48,21 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
40
48
|
})
|
|
41
49
|
|
|
42
50
|
it('simple', async () => {
|
|
51
|
+
const protocol = '/hello/1.0.0'
|
|
52
|
+
void registrar.handle(protocol, (evt) => {
|
|
53
|
+
void pipe([
|
|
54
|
+
uint8ArrayFromString('hey')
|
|
55
|
+
],
|
|
56
|
+
evt.detail.stream,
|
|
57
|
+
drain
|
|
58
|
+
)
|
|
59
|
+
})
|
|
60
|
+
|
|
43
61
|
const upgradeSpy = sinon.spy(upgrader, 'upgradeOutbound')
|
|
44
62
|
const conn = await transport.dial(addrs[0])
|
|
45
|
-
const { stream } = await conn.newStream(['/hello'])
|
|
46
|
-
const s = goodbye({ source: [uint8ArrayFromString('hey')], sink: async (source) => await all(source) })
|
|
47
63
|
|
|
48
|
-
const
|
|
64
|
+
const { stream } = await conn.newStream([protocol])
|
|
65
|
+
const result = await all(stream.source)
|
|
49
66
|
|
|
50
67
|
expect(upgradeSpy.callCount).to.equal(1)
|
|
51
68
|
await expect(upgradeSpy.getCall(0).returnValue).to.eventually.equal(conn)
|
|
@@ -13,14 +13,23 @@ import type { Transport } from '@libp2p/interfaces/transport'
|
|
|
13
13
|
import type { TransportTestFixtures, SetupArgs } from './index.js'
|
|
14
14
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
15
15
|
import type { Connection } from '@libp2p/interfaces/connection'
|
|
16
|
+
import type { Registrar } from '@libp2p/interfaces/src/registrar'
|
|
17
|
+
import { mockRegistrar } from '../mocks/registrar.js'
|
|
18
|
+
import drain from 'it-drain'
|
|
16
19
|
|
|
17
20
|
export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
18
21
|
describe('listen', () => {
|
|
19
|
-
|
|
22
|
+
let upgrader = mockUpgrader()
|
|
20
23
|
let addrs: Multiaddr[]
|
|
21
24
|
let transport: Transport
|
|
25
|
+
let registrar: Registrar
|
|
22
26
|
|
|
23
27
|
before(async () => {
|
|
28
|
+
registrar = mockRegistrar()
|
|
29
|
+
upgrader = mockUpgrader({
|
|
30
|
+
registrar
|
|
31
|
+
});
|
|
32
|
+
|
|
24
33
|
({ transport, addrs } = await common.setup({ upgrader }))
|
|
25
34
|
})
|
|
26
35
|
|
|
@@ -42,6 +51,11 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
42
51
|
const upgradeSpy = sinon.spy(upgrader, 'upgradeInbound')
|
|
43
52
|
const listenerConns: Connection[] = []
|
|
44
53
|
|
|
54
|
+
const protocol = '/test/protocol'
|
|
55
|
+
void registrar.handle(protocol, (evt) => {
|
|
56
|
+
void drain(evt.detail.stream.source)
|
|
57
|
+
})
|
|
58
|
+
|
|
45
59
|
const listener = transport.createListener({
|
|
46
60
|
handler: (conn) => {
|
|
47
61
|
listenerConns.push(conn)
|
|
@@ -60,7 +74,7 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
|
|
|
60
74
|
// Give the listener a chance to finish its upgrade
|
|
61
75
|
await pWaitFor(() => listenerConns.length === 2)
|
|
62
76
|
|
|
63
|
-
const { stream: stream1 } = await conn1.newStream([
|
|
77
|
+
const { stream: stream1 } = await conn1.newStream([protocol])
|
|
64
78
|
|
|
65
79
|
// Wait for the data send and close to finish
|
|
66
80
|
await Promise.all([
|