@libp2p/interface-compliance-tests 1.1.11 → 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.
Files changed (35) hide show
  1. package/dist/src/mocks/connection.d.ts +0 -2
  2. package/dist/src/mocks/connection.d.ts.map +1 -1
  3. package/dist/src/mocks/connection.js +5 -5
  4. package/dist/src/mocks/connection.js.map +1 -1
  5. package/dist/src/mocks/muxer.d.ts.map +1 -1
  6. package/dist/src/mocks/muxer.js +201 -131
  7. package/dist/src/mocks/muxer.js.map +1 -1
  8. package/dist/src/mocks/upgrader.d.ts +2 -2
  9. package/dist/src/mocks/upgrader.d.ts.map +1 -1
  10. package/dist/src/mocks/upgrader.js +2 -2
  11. package/dist/src/mocks/upgrader.js.map +1 -1
  12. package/dist/src/stream-muxer/base-test.d.ts.map +1 -1
  13. package/dist/src/stream-muxer/base-test.js +27 -21
  14. package/dist/src/stream-muxer/base-test.js.map +1 -1
  15. package/dist/src/stream-muxer/close-test.d.ts.map +1 -1
  16. package/dist/src/stream-muxer/close-test.js +25 -28
  17. package/dist/src/stream-muxer/close-test.js.map +1 -1
  18. package/dist/src/stream-muxer/spawner.d.ts.map +1 -1
  19. package/dist/src/stream-muxer/spawner.js +2 -3
  20. package/dist/src/stream-muxer/spawner.js.map +1 -1
  21. package/dist/src/transport/dial-test.d.ts.map +1 -1
  22. package/dist/src/transport/dial-test.js +16 -5
  23. package/dist/src/transport/dial-test.js.map +1 -1
  24. package/dist/src/transport/listen-test.d.ts.map +1 -1
  25. package/dist/src/transport/listen-test.js +13 -2
  26. package/dist/src/transport/listen-test.js.map +1 -1
  27. package/package.json +5 -2
  28. package/src/mocks/connection.ts +5 -7
  29. package/src/mocks/muxer.ts +271 -147
  30. package/src/mocks/upgrader.ts +4 -4
  31. package/src/stream-muxer/base-test.ts +35 -24
  32. package/src/stream-muxer/close-test.ts +32 -29
  33. package/src/stream-muxer/spawner.ts +3 -6
  34. package/src/transport/dial-test.ts +23 -6
  35. 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, abortableDuplex } from 'abortable-iterator'
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
- const localPeer = await createEd25519PeerId()
32
- const remotePeer = await createEd25519PeerId()
33
- const muxer = await common.setup({
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
- const [local, remote] = duplexPair<Uint8Array>()
41
- const controller = new AbortController()
42
- const abortableRemote = abortableDuplex(remote, controller.signal, {
43
- returnOnAbort: true
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
- await upgrader.upgradeInbound(mockMultiaddrConnection(abortableRemote, localPeer))
47
- const dialerConn = await upgrader.upgradeOutbound(mockMultiaddrConnection(local, remotePeer))
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 s1 = await dialerConn.newStream([''])
50
- const s2 = await dialerConn.newStream([''])
44
+ const streams = Array(expectedStreams).fill(0).map(() => dialer.newStream())
51
45
 
52
- // close the remote in a bit
53
- setTimeout(() => controller.abort(), 50)
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
- const s1Result = pipe(infiniteRandom, s1.stream, drain)
56
- const s2Result = pipe(infiniteRandom, s2.stream, drain)
56
+ expect(dialer.streams).to.have.lengthOf(expectedStreams)
57
57
 
58
- // test is complete when all muxed streams have closed
59
- await s1Result
60
- await s2Result
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(muxer.streams).to.be.empty()
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
- onStream: async (stream) => await pipe(stream, stream)
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
- onStream: async (stream) => {
17
- await pipe(
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 { goodbye } from 'it-goodbye'
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
- const upgrader = mockUpgrader()
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 result = await pipe(s, stream, s)
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
- const upgrader = mockUpgrader()
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(['/test/protocol'])
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([