@libp2p/interface-compliance-tests 1.1.11 → 1.1.14
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-manager.d.ts +2 -2
- package/dist/src/mocks/connection-manager.d.ts.map +1 -1
- package/dist/src/mocks/connection-manager.js.map +1 -1
- package/dist/src/mocks/connection.d.ts +0 -2
- package/dist/src/mocks/connection.d.ts.map +1 -1
- package/dist/src/mocks/connection.js +5 -5
- 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/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/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/stream-muxer/stress-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/stress-test.js +2 -1
- package/dist/src/stream-muxer/stress-test.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 +12 -9
- package/src/mocks/connection-manager.ts +2 -2
- package/src/mocks/connection.ts +5 -7
- package/src/mocks/muxer.ts +271 -147
- package/src/mocks/upgrader.ts +4 -4
- 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/stream-muxer/stress-test.ts +2 -1
- package/src/transport/dial-test.ts +23 -6
- package/src/transport/listen-test.ts +16 -2
|
@@ -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)
|
|
@@ -18,7 +18,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
|
|
|
18
18
|
it('1000 streams with 1 msg', async () => await spawn(createMuxer, 1000, 1))
|
|
19
19
|
it('1000 streams with 10 msg', async () => await spawn(createMuxer, 1000, 10))
|
|
20
20
|
it('1000 streams with 100 msg', async function () {
|
|
21
|
-
|
|
21
|
+
this.timeout(120000)
|
|
22
|
+
await spawn(createMuxer, 1000, 100)
|
|
22
23
|
})
|
|
23
24
|
})
|
|
24
25
|
}
|
|
@@ -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([
|