@libp2p/interface-compliance-tests 2.0.2 → 3.0.1

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 (192) hide show
  1. package/README.md +23 -11
  2. package/dist/src/{utils/is-valid-tick.d.ts → is-valid-tick.d.ts} +0 -0
  3. package/dist/src/is-valid-tick.d.ts.map +1 -0
  4. package/dist/src/{utils/is-valid-tick.js → is-valid-tick.js} +0 -0
  5. package/dist/src/is-valid-tick.js.map +1 -0
  6. package/dist/src/{utils/peers.d.ts → peers.d.ts} +0 -0
  7. package/dist/src/peers.d.ts.map +1 -0
  8. package/dist/src/{utils/peers.js → peers.js} +0 -0
  9. package/dist/src/peers.js.map +1 -0
  10. package/package.json +11 -89
  11. package/src/{utils/is-valid-tick.ts → is-valid-tick.ts} +0 -0
  12. package/src/{utils/peers.ts → peers.ts} +0 -0
  13. package/dist/src/connection/connection.d.ts +0 -5
  14. package/dist/src/connection/connection.d.ts.map +0 -1
  15. package/dist/src/connection/connection.js +0 -146
  16. package/dist/src/connection/connection.js.map +0 -1
  17. package/dist/src/connection/index.d.ts +0 -5
  18. package/dist/src/connection/index.d.ts.map +0 -1
  19. package/dist/src/connection/index.js +0 -5
  20. package/dist/src/connection/index.js.map +0 -1
  21. package/dist/src/connection-encrypter/index.d.ts +0 -5
  22. package/dist/src/connection-encrypter/index.d.ts.map +0 -1
  23. package/dist/src/connection-encrypter/index.js +0 -77
  24. package/dist/src/connection-encrypter/index.js.map +0 -1
  25. package/dist/src/connection-encrypter/utils/index.d.ts +0 -3
  26. package/dist/src/connection-encrypter/utils/index.d.ts.map +0 -1
  27. package/dist/src/connection-encrypter/utils/index.js +0 -18
  28. package/dist/src/connection-encrypter/utils/index.js.map +0 -1
  29. package/dist/src/mocks/connection-encrypter.d.ts +0 -3
  30. package/dist/src/mocks/connection-encrypter.d.ts.map +0 -1
  31. package/dist/src/mocks/connection-encrypter.js +0 -93
  32. package/dist/src/mocks/connection-encrypter.js.map +0 -1
  33. package/dist/src/mocks/connection-gater.d.ts +0 -12
  34. package/dist/src/mocks/connection-gater.d.ts.map +0 -1
  35. package/dist/src/mocks/connection-gater.js +0 -14
  36. package/dist/src/mocks/connection-gater.js.map +0 -1
  37. package/dist/src/mocks/connection-manager.d.ts +0 -28
  38. package/dist/src/mocks/connection-manager.d.ts.map +0 -1
  39. package/dist/src/mocks/connection-manager.js +0 -107
  40. package/dist/src/mocks/connection-manager.js.map +0 -1
  41. package/dist/src/mocks/connection.d.ts +0 -18
  42. package/dist/src/mocks/connection.d.ts.map +0 -1
  43. package/dist/src/mocks/connection.js +0 -138
  44. package/dist/src/mocks/connection.js.map +0 -1
  45. package/dist/src/mocks/duplex.d.ts +0 -3
  46. package/dist/src/mocks/duplex.d.ts.map +0 -1
  47. package/dist/src/mocks/duplex.js +0 -7
  48. package/dist/src/mocks/duplex.js.map +0 -1
  49. package/dist/src/mocks/index.d.ts +0 -10
  50. package/dist/src/mocks/index.d.ts.map +0 -1
  51. package/dist/src/mocks/index.js +0 -9
  52. package/dist/src/mocks/index.js.map +0 -1
  53. package/dist/src/mocks/multiaddr-connection.d.ts +0 -17
  54. package/dist/src/mocks/multiaddr-connection.d.ts.map +0 -1
  55. package/dist/src/mocks/multiaddr-connection.js +0 -51
  56. package/dist/src/mocks/multiaddr-connection.js.map +0 -1
  57. package/dist/src/mocks/muxer.d.ts +0 -9
  58. package/dist/src/mocks/muxer.d.ts.map +0 -1
  59. package/dist/src/mocks/muxer.js +0 -302
  60. package/dist/src/mocks/muxer.js.map +0 -1
  61. package/dist/src/mocks/registrar.d.ts +0 -18
  62. package/dist/src/mocks/registrar.d.ts.map +0 -1
  63. package/dist/src/mocks/registrar.js +0 -73
  64. package/dist/src/mocks/registrar.js.map +0 -1
  65. package/dist/src/mocks/upgrader.d.ts +0 -15
  66. package/dist/src/mocks/upgrader.d.ts.map +0 -1
  67. package/dist/src/mocks/upgrader.js +0 -33
  68. package/dist/src/mocks/upgrader.js.map +0 -1
  69. package/dist/src/peer-discovery/index.d.ts +0 -6
  70. package/dist/src/peer-discovery/index.d.ts.map +0 -1
  71. package/dist/src/peer-discovery/index.js +0 -64
  72. package/dist/src/peer-discovery/index.js.map +0 -1
  73. package/dist/src/pubsub/api.d.ts +0 -6
  74. package/dist/src/pubsub/api.d.ts.map +0 -1
  75. package/dist/src/pubsub/api.js +0 -87
  76. package/dist/src/pubsub/api.js.map +0 -1
  77. package/dist/src/pubsub/connection-handlers.d.ts +0 -6
  78. package/dist/src/pubsub/connection-handlers.d.ts.map +0 -1
  79. package/dist/src/pubsub/connection-handlers.js +0 -329
  80. package/dist/src/pubsub/connection-handlers.js.map +0 -1
  81. package/dist/src/pubsub/emit-self.d.ts +0 -6
  82. package/dist/src/pubsub/emit-self.d.ts.map +0 -1
  83. package/dist/src/pubsub/emit-self.js +0 -86
  84. package/dist/src/pubsub/emit-self.js.map +0 -1
  85. package/dist/src/pubsub/index.d.ts +0 -10
  86. package/dist/src/pubsub/index.d.ts.map +0 -1
  87. package/dist/src/pubsub/index.js +0 -17
  88. package/dist/src/pubsub/index.js.map +0 -1
  89. package/dist/src/pubsub/messages.d.ts +0 -6
  90. package/dist/src/pubsub/messages.d.ts.map +0 -1
  91. package/dist/src/pubsub/messages.js +0 -46
  92. package/dist/src/pubsub/messages.js.map +0 -1
  93. package/dist/src/pubsub/multiple-nodes.d.ts +0 -6
  94. package/dist/src/pubsub/multiple-nodes.d.ts.map +0 -1
  95. package/dist/src/pubsub/multiple-nodes.js +0 -350
  96. package/dist/src/pubsub/multiple-nodes.js.map +0 -1
  97. package/dist/src/pubsub/two-nodes.d.ts +0 -6
  98. package/dist/src/pubsub/two-nodes.d.ts.map +0 -1
  99. package/dist/src/pubsub/two-nodes.js +0 -185
  100. package/dist/src/pubsub/two-nodes.js.map +0 -1
  101. package/dist/src/pubsub/utils.d.ts +0 -6
  102. package/dist/src/pubsub/utils.d.ts.map +0 -1
  103. package/dist/src/pubsub/utils.js +0 -22
  104. package/dist/src/pubsub/utils.js.map +0 -1
  105. package/dist/src/record/index.d.ts +0 -5
  106. package/dist/src/record/index.d.ts.map +0 -1
  107. package/dist/src/record/index.js +0 -25
  108. package/dist/src/record/index.js.map +0 -1
  109. package/dist/src/stream-muxer/base-test.d.ts +0 -5
  110. package/dist/src/stream-muxer/base-test.d.ts.map +0 -1
  111. package/dist/src/stream-muxer/base-test.js +0 -147
  112. package/dist/src/stream-muxer/base-test.js.map +0 -1
  113. package/dist/src/stream-muxer/close-test.d.ts +0 -5
  114. package/dist/src/stream-muxer/close-test.d.ts.map +0 -1
  115. package/dist/src/stream-muxer/close-test.js +0 -180
  116. package/dist/src/stream-muxer/close-test.js.map +0 -1
  117. package/dist/src/stream-muxer/index.d.ts +0 -5
  118. package/dist/src/stream-muxer/index.d.ts.map +0 -1
  119. package/dist/src/stream-muxer/index.js +0 -13
  120. package/dist/src/stream-muxer/index.js.map +0 -1
  121. package/dist/src/stream-muxer/mega-stress-test.d.ts +0 -5
  122. package/dist/src/stream-muxer/mega-stress-test.d.ts.map +0 -1
  123. package/dist/src/stream-muxer/mega-stress-test.js +0 -12
  124. package/dist/src/stream-muxer/mega-stress-test.js.map +0 -1
  125. package/dist/src/stream-muxer/spawner.d.ts +0 -4
  126. package/dist/src/stream-muxer/spawner.d.ts.map +0 -1
  127. package/dist/src/stream-muxer/spawner.js +0 -32
  128. package/dist/src/stream-muxer/spawner.js.map +0 -1
  129. package/dist/src/stream-muxer/stress-test.d.ts +0 -5
  130. package/dist/src/stream-muxer/stress-test.d.ts.map +0 -1
  131. package/dist/src/stream-muxer/stress-test.js +0 -26
  132. package/dist/src/stream-muxer/stress-test.js.map +0 -1
  133. package/dist/src/topology/topology.d.ts +0 -5
  134. package/dist/src/topology/topology.d.ts.map +0 -1
  135. package/dist/src/topology/topology.js +0 -20
  136. package/dist/src/topology/topology.js.map +0 -1
  137. package/dist/src/transport/dial-test.d.ts +0 -5
  138. package/dist/src/transport/dial-test.d.ts.map +0 -1
  139. package/dist/src/transport/dial-test.js +0 -97
  140. package/dist/src/transport/dial-test.js.map +0 -1
  141. package/dist/src/transport/filter-test.d.ts +0 -5
  142. package/dist/src/transport/filter-test.d.ts.map +0 -1
  143. package/dist/src/transport/filter-test.js +0 -18
  144. package/dist/src/transport/filter-test.js.map +0 -1
  145. package/dist/src/transport/index.d.ts +0 -15
  146. package/dist/src/transport/index.d.ts.map +0 -1
  147. package/dist/src/transport/index.js +0 -11
  148. package/dist/src/transport/index.js.map +0 -1
  149. package/dist/src/transport/listen-test.d.ts +0 -5
  150. package/dist/src/transport/listen-test.d.ts.map +0 -1
  151. package/dist/src/transport/listen-test.js +0 -152
  152. package/dist/src/transport/listen-test.js.map +0 -1
  153. package/dist/src/utils/is-valid-tick.d.ts.map +0 -1
  154. package/dist/src/utils/is-valid-tick.js.map +0 -1
  155. package/dist/src/utils/peers.d.ts.map +0 -1
  156. package/dist/src/utils/peers.js.map +0 -1
  157. package/src/connection/README.md +0 -256
  158. package/src/connection/connection.ts +0 -176
  159. package/src/connection/index.ts +0 -7
  160. package/src/connection-encrypter/index.ts +0 -104
  161. package/src/connection-encrypter/utils/index.ts +0 -23
  162. package/src/mocks/connection-encrypter.ts +0 -110
  163. package/src/mocks/connection-gater.ts +0 -14
  164. package/src/mocks/connection-manager.ts +0 -141
  165. package/src/mocks/connection.ts +0 -205
  166. package/src/mocks/duplex.ts +0 -8
  167. package/src/mocks/index.ts +0 -10
  168. package/src/mocks/multiaddr-connection.ts +0 -66
  169. package/src/mocks/muxer.ts +0 -424
  170. package/src/mocks/registrar.ts +0 -96
  171. package/src/mocks/upgrader.ts +0 -46
  172. package/src/peer-discovery/index.ts +0 -89
  173. package/src/pubsub/api.ts +0 -115
  174. package/src/pubsub/connection-handlers.ts +0 -413
  175. package/src/pubsub/emit-self.ts +0 -105
  176. package/src/pubsub/index.ts +0 -25
  177. package/src/pubsub/messages.ts +0 -58
  178. package/src/pubsub/multiple-nodes.ts +0 -429
  179. package/src/pubsub/two-nodes.ts +0 -235
  180. package/src/pubsub/utils.ts +0 -28
  181. package/src/record/index.ts +0 -32
  182. package/src/stream-muxer/base-test.ts +0 -190
  183. package/src/stream-muxer/close-test.ts +0 -227
  184. package/src/stream-muxer/index.ts +0 -15
  185. package/src/stream-muxer/mega-stress-test.ts +0 -15
  186. package/src/stream-muxer/spawner.ts +0 -50
  187. package/src/stream-muxer/stress-test.ts +0 -29
  188. package/src/topology/topology.ts +0 -25
  189. package/src/transport/dial-test.ts +0 -123
  190. package/src/transport/filter-test.ts +0 -25
  191. package/src/transport/index.ts +0 -25
  192. package/src/transport/listen-test.ts +0 -191
@@ -1,46 +0,0 @@
1
- import { expect } from 'aegir/chai';
2
- import sinon from 'sinon';
3
- import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
4
- import { start, stop } from '@libp2p/interfaces/startable';
5
- import { pEvent } from 'p-event';
6
- import { createComponents } from './utils.js';
7
- import { mockNetwork } from '../mocks/connection-manager.js';
8
- const topic = 'foo';
9
- const data = uint8ArrayFromString('bar');
10
- export default (common) => {
11
- describe('messages', () => {
12
- let pubsub;
13
- let components;
14
- // Create pubsub router
15
- beforeEach(async () => {
16
- mockNetwork.reset();
17
- components = await createComponents();
18
- pubsub = components.setPubSub(await common.setup({
19
- components,
20
- init: {
21
- emitSelf: true
22
- }
23
- }));
24
- await start(components);
25
- });
26
- afterEach(async () => {
27
- sinon.restore();
28
- await stop(components);
29
- await common.teardown();
30
- mockNetwork.reset();
31
- });
32
- it('should emit normalized signed messages on publish', async () => {
33
- const eventPromise = pEvent(pubsub, 'message');
34
- pubsub.globalSignaturePolicy = 'StrictSign';
35
- pubsub.subscribe(topic);
36
- await pubsub.publish(topic, data);
37
- const event = await eventPromise;
38
- const message = event.detail;
39
- expect(message.from.toString()).to.equal(components.getPeerId().toString());
40
- expect(message.sequenceNumber).to.not.eql(undefined);
41
- expect(message.key).to.not.eql(undefined);
42
- expect(message.signature).to.not.eql(undefined);
43
- });
44
- });
45
- };
46
- //# sourceMappingURL=messages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/pubsub/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAK5E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAE5D,MAAM,KAAK,GAAG,KAAK,CAAA;AACnB,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;AAExC,eAAe,CAAC,MAAqC,EAAE,EAAE;IACvD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,IAAI,MAAc,CAAA;QAClB,IAAI,UAAsB,CAAA;QAE1B,uBAAuB;QACvB,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,WAAW,CAAC,KAAK,EAAE,CAAA;YACnB,UAAU,GAAG,MAAM,gBAAgB,EAAE,CAAA;YAErC,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC;gBAC/C,UAAU;gBACV,IAAI,EAAE;oBACJ,QAAQ,EAAE,IAAI;iBACf;aACF,CAAC,CAAC,CAAA;YACH,MAAM,KAAK,CAAC,UAAU,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,KAAK,CAAC,OAAO,EAAE,CAAA;YACf,MAAM,IAAI,CAAC,UAAU,CAAC,CAAA;YACtB,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAA;YACvB,WAAW,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,YAAY,GAAG,MAAM,CAAkC,MAAM,EAAE,SAAS,CAAC,CAAA;YAE/E,MAAM,CAAC,qBAAqB,GAAG,YAAY,CAAA;YAC3C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACvB,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAEjC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAA;YAChC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAA;YAE5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC3E,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACpD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YACzC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1,6 +0,0 @@
1
- import type { TestSetup } from '../index.js';
2
- import type { PubSub } from '@libp2p/interfaces/pubsub';
3
- import type { PubSubArgs } from './index.js';
4
- declare const _default: (common: TestSetup<PubSub, PubSubArgs>) => void;
5
- export default _default;
6
- //# sourceMappingURL=multiple-nodes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multiple-nodes.d.ts","sourceRoot":"","sources":["../../../src/pubsub/multiple-nodes.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAW,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;iCAMpB,UAAU,MAAM,EAAE,UAAU,CAAC;AAArD,wBA4ZC"}
@@ -1,350 +0,0 @@
1
- /* eslint max-nested-callbacks: ["error", 6] */
2
- import { expect } from 'aegir/chai';
3
- import sinon from 'sinon';
4
- import pDefer from 'p-defer';
5
- import pWaitFor from 'p-wait-for';
6
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
7
- import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
8
- import { createComponents, waitForSubscriptionUpdate } from './utils.js';
9
- import { start, stop } from '@libp2p/interfaces/startable';
10
- import delay from 'delay';
11
- import { mockNetwork } from '../mocks/connection-manager.js';
12
- export default (common) => {
13
- describe('pubsub with multiple nodes', function () {
14
- describe('every peer subscribes to the topic', () => {
15
- describe('line', () => {
16
- // line
17
- // ◉────◉────◉
18
- // a b c
19
- let psA;
20
- let psB;
21
- let psC;
22
- let componentsA;
23
- let componentsB;
24
- let componentsC;
25
- // Create and start pubsub nodes
26
- beforeEach(async () => {
27
- mockNetwork.reset();
28
- componentsA = await createComponents();
29
- componentsB = await createComponents();
30
- componentsC = await createComponents();
31
- psA = componentsA.setPubSub(await common.setup({
32
- components: componentsA,
33
- init: {
34
- emitSelf: true
35
- }
36
- }));
37
- psB = componentsB.setPubSub(await common.setup({
38
- components: componentsB,
39
- init: {
40
- emitSelf: true
41
- }
42
- }));
43
- psC = componentsC.setPubSub(await common.setup({
44
- components: componentsC,
45
- init: {
46
- emitSelf: true
47
- }
48
- }));
49
- // Start pubsub modes
50
- await start(componentsA, componentsB, componentsC);
51
- // Connect nodes
52
- await componentsA.getConnectionManager().openConnection(componentsB.getPeerId());
53
- await componentsB.getConnectionManager().openConnection(componentsC.getPeerId());
54
- // Wait for peers to be ready in pubsub
55
- await pWaitFor(() => psA.getPeers().length === 1 &&
56
- psC.getPeers().length === 1 &&
57
- psA.getPeers().length === 1);
58
- });
59
- afterEach(async () => {
60
- sinon.restore();
61
- await stop(componentsA, componentsB, componentsC);
62
- await common.teardown();
63
- mockNetwork.reset();
64
- });
65
- it('subscribe to the topic on node a', async () => {
66
- const topic = 'Z';
67
- psA.subscribe(topic);
68
- expect(psA.getTopics()).to.deep.equal([topic]);
69
- await waitForSubscriptionUpdate(psB, componentsA.getPeerId());
70
- expect(psB.getPeers().length).to.equal(2);
71
- expect(psB.getSubscribers(topic).map(p => p.toString())).to.deep.equal([componentsA.getPeerId().toString()]);
72
- expect(psC.getPeers().length).to.equal(1);
73
- expect(psC.getSubscribers(topic)).to.be.empty();
74
- });
75
- it('subscribe to the topic on node b', async () => {
76
- const topic = 'Z';
77
- psB.subscribe(topic);
78
- expect(psB.getTopics()).to.deep.equal([topic]);
79
- await Promise.all([
80
- waitForSubscriptionUpdate(psA, componentsB.getPeerId()),
81
- waitForSubscriptionUpdate(psC, componentsB.getPeerId())
82
- ]);
83
- expect(psA.getPeers().length).to.equal(1);
84
- expect(psA.getSubscribers(topic).map(p => p.toString())).to.deep.equal([componentsB.getPeerId().toString()]);
85
- expect(psC.getPeers().length).to.equal(1);
86
- expect(psC.getSubscribers(topic).map(p => p.toString())).to.deep.equal([componentsB.getPeerId().toString()]);
87
- });
88
- it('subscribe to the topic on node c', async () => {
89
- const topic = 'Z';
90
- const defer = pDefer();
91
- psC.subscribe(topic);
92
- expect(psC.getTopics()).to.deep.equal([topic]);
93
- psB.addEventListener('subscription-change', () => {
94
- expect(psA.getPeers().length).to.equal(1);
95
- expect(psB.getPeers().length).to.equal(2);
96
- expect(psB.getSubscribers(topic).map(p => p.toString())).to.deep.equal([componentsC.getPeerId().toString()]);
97
- defer.resolve();
98
- }, {
99
- once: true
100
- });
101
- return await defer.promise;
102
- });
103
- it('publish on node a', async () => {
104
- const topic = 'Z';
105
- const defer = pDefer();
106
- psA.subscribe(topic);
107
- psB.subscribe(topic);
108
- psC.subscribe(topic);
109
- await Promise.all([
110
- waitForSubscriptionUpdate(psA, componentsB.getPeerId()),
111
- waitForSubscriptionUpdate(psB, componentsA.getPeerId()),
112
- waitForSubscriptionUpdate(psC, componentsB.getPeerId())
113
- ]);
114
- // GossipSub needs time to build the mesh overlay
115
- await delay(1000);
116
- let counter = 0;
117
- psA.addEventListener('message', incMsg);
118
- psB.addEventListener('message', incMsg);
119
- psC.addEventListener('message', incMsg);
120
- const result = await psA.publish(topic, uint8ArrayFromString('hey'));
121
- expect(result).to.have.property('recipients').with.property('length').greaterThanOrEqual(1);
122
- function incMsg(evt) {
123
- const msg = evt.detail;
124
- if (msg.topic !== topic) {
125
- return;
126
- }
127
- expect(uint8ArrayToString(msg.data)).to.equal('hey');
128
- check();
129
- }
130
- function check() {
131
- if (++counter === 3) {
132
- psA.removeEventListener('message', incMsg);
133
- psB.removeEventListener('message', incMsg);
134
- psC.removeEventListener('message', incMsg);
135
- defer.resolve();
136
- }
137
- }
138
- return await defer.promise;
139
- });
140
- // since the topology is the same, just the publish
141
- // gets sent by other peer, we reused the same peers
142
- describe('1 level tree', () => {
143
- // 1 level tree
144
- // ┌◉┐
145
- // │b│
146
- // ◉─┘ └─◉
147
- // a c
148
- it('publish on node b', async () => {
149
- const topic = 'Z';
150
- const defer = pDefer();
151
- let counter = 0;
152
- psA.subscribe(topic);
153
- psB.subscribe(topic);
154
- psC.subscribe(topic);
155
- await Promise.all([
156
- waitForSubscriptionUpdate(psA, componentsB.getPeerId()),
157
- waitForSubscriptionUpdate(psB, componentsA.getPeerId()),
158
- waitForSubscriptionUpdate(psC, componentsB.getPeerId())
159
- ]);
160
- // GossipSub needs time to build the mesh overlay
161
- await delay(1000);
162
- psA.addEventListener('message', incMsg);
163
- psB.addEventListener('message', incMsg);
164
- psC.addEventListener('message', incMsg);
165
- await psB.publish(topic, uint8ArrayFromString('hey'));
166
- function incMsg(evt) {
167
- const msg = evt.detail;
168
- if (msg.topic !== topic) {
169
- return;
170
- }
171
- expect(uint8ArrayToString(msg.data)).to.equal('hey');
172
- check();
173
- }
174
- function check() {
175
- if (++counter === 3) {
176
- psA.removeEventListener('message', incMsg);
177
- psB.removeEventListener('message', incMsg);
178
- psC.removeEventListener('message', incMsg);
179
- defer.resolve();
180
- }
181
- }
182
- return await defer.promise;
183
- });
184
- });
185
- });
186
- describe('2 level tree', () => {
187
- // 2 levels tree
188
- // ┌◉┐
189
- // │c│
190
- // ┌◉─┘ └─◉┐
191
- // │b d│
192
- // ◉─┘ └─◉
193
- // a
194
- let psA;
195
- let psB;
196
- let psC;
197
- let psD;
198
- let psE;
199
- let componentsA;
200
- let componentsB;
201
- let componentsC;
202
- let componentsD;
203
- let componentsE;
204
- // Create and start pubsub nodes
205
- beforeEach(async () => {
206
- mockNetwork.reset();
207
- componentsA = await createComponents();
208
- componentsB = await createComponents();
209
- componentsC = await createComponents();
210
- componentsD = await createComponents();
211
- componentsE = await createComponents();
212
- psA = componentsA.setPubSub(await common.setup({
213
- components: componentsA,
214
- init: {
215
- emitSelf: true
216
- }
217
- }));
218
- psB = componentsB.setPubSub(await common.setup({
219
- components: componentsB,
220
- init: {
221
- emitSelf: true
222
- }
223
- }));
224
- psC = componentsC.setPubSub(await common.setup({
225
- components: componentsC,
226
- init: {
227
- emitSelf: true
228
- }
229
- }));
230
- psD = componentsD.setPubSub(await common.setup({
231
- components: componentsD,
232
- init: {
233
- emitSelf: true
234
- }
235
- }));
236
- psE = componentsE.setPubSub(await common.setup({
237
- components: componentsE,
238
- init: {
239
- emitSelf: true
240
- }
241
- }));
242
- // Start pubsub nodes
243
- await start(componentsA, componentsB, componentsC, componentsD, componentsE);
244
- // connect nodes
245
- await componentsA.getConnectionManager().openConnection(componentsB.getPeerId());
246
- await componentsB.getConnectionManager().openConnection(componentsC.getPeerId());
247
- await componentsC.getConnectionManager().openConnection(componentsD.getPeerId());
248
- await componentsD.getConnectionManager().openConnection(componentsE.getPeerId());
249
- // Wait for peers to be ready in pubsub
250
- await pWaitFor(() => psA.getPeers().length === 1 &&
251
- psB.getPeers().length === 2 &&
252
- psC.getPeers().length === 2 &&
253
- psD.getPeers().length === 2 &&
254
- psE.getPeers().length === 1);
255
- });
256
- afterEach(async () => {
257
- await stop(componentsA, componentsB, componentsC, componentsD, componentsE);
258
- await common.teardown();
259
- mockNetwork.reset();
260
- });
261
- it('subscribes', () => {
262
- psA.subscribe('Z');
263
- expect(psA.getTopics()).to.deep.equal(['Z']);
264
- psB.subscribe('Z');
265
- expect(psB.getTopics()).to.deep.equal(['Z']);
266
- psC.subscribe('Z');
267
- expect(psC.getTopics()).to.deep.equal(['Z']);
268
- psD.subscribe('Z');
269
- expect(psD.getTopics()).to.deep.equal(['Z']);
270
- psE.subscribe('Z');
271
- expect(psE.getTopics()).to.deep.equal(['Z']);
272
- });
273
- it('publishes from c', async function () {
274
- const defer = pDefer();
275
- let counter = 0;
276
- const topic = 'Z';
277
- psA.subscribe(topic);
278
- psA.addEventListener('message', incMsg);
279
- psB.subscribe(topic);
280
- psB.addEventListener('message', incMsg);
281
- psC.subscribe(topic);
282
- psC.addEventListener('message', incMsg);
283
- psD.subscribe(topic);
284
- psD.addEventListener('message', incMsg);
285
- psE.subscribe(topic);
286
- psE.addEventListener('message', incMsg);
287
- await Promise.all([
288
- waitForSubscriptionUpdate(psA, componentsB.getPeerId()),
289
- waitForSubscriptionUpdate(psB, componentsA.getPeerId()),
290
- waitForSubscriptionUpdate(psC, componentsB.getPeerId()),
291
- waitForSubscriptionUpdate(psD, componentsC.getPeerId()),
292
- waitForSubscriptionUpdate(psE, componentsD.getPeerId())
293
- ]);
294
- // GossipSub needs time to build the mesh overlay
295
- await delay(1000);
296
- await psC.publish('Z', uint8ArrayFromString('hey from c'));
297
- function incMsg(evt) {
298
- const msg = evt.detail;
299
- if (msg.topic !== topic) {
300
- return;
301
- }
302
- expect(uint8ArrayToString(msg.data)).to.equal('hey from c');
303
- check();
304
- }
305
- function check() {
306
- if (++counter === 5) {
307
- psA.unsubscribe('Z');
308
- psB.unsubscribe('Z');
309
- psC.unsubscribe('Z');
310
- psD.unsubscribe('Z');
311
- psE.unsubscribe('Z');
312
- defer.resolve();
313
- }
314
- }
315
- return await defer.promise;
316
- });
317
- });
318
- });
319
- describe('only some nodes subscribe the networks', () => {
320
- describe('line', () => {
321
- // line
322
- // ◉────◎────◉
323
- // a b c
324
- before(() => { });
325
- after(() => { });
326
- });
327
- describe('1 level tree', () => {
328
- // 1 level tree
329
- // ┌◉┐
330
- // │b│
331
- // ◎─┘ └─◉
332
- // a c
333
- before(() => { });
334
- after(() => { });
335
- });
336
- describe('2 level tree', () => {
337
- // 2 levels tree
338
- // ┌◉┐
339
- // │c│
340
- // ┌◎─┘ └─◉┐
341
- // │b d│
342
- // ◉─┘ └─◎
343
- // a e
344
- before(() => { });
345
- after(() => { });
346
- });
347
- });
348
- });
349
- };
350
- //# sourceMappingURL=multiple-nodes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multiple-nodes.js","sourceRoot":"","sources":["../../../src/pubsub/multiple-nodes.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { TestSetup } from '../index.js';
2
- import type { PubSub } from '@libp2p/interfaces/pubsub';
3
- import type { PubSubArgs } from './index.js';
4
- declare const _default: (common: TestSetup<PubSub, PubSubArgs>) => void;
5
- export default _default;
6
- //# sourceMappingURL=two-nodes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"two-nodes.d.ts","sourceRoot":"","sources":["../../../src/pubsub/two-nodes.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAW,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;iCAWpB,UAAU,MAAM,EAAE,UAAU,CAAC;AAArD,wBAqNC"}
@@ -1,185 +0,0 @@
1
- /* eslint max-nested-callbacks: ["error", 6] */
2
- import { expect } from 'aegir/chai';
3
- import sinon from 'sinon';
4
- import pDefer from 'p-defer';
5
- import pWaitFor from 'p-wait-for';
6
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
7
- import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
8
- import { createComponents, waitForSubscriptionUpdate } from './utils.js';
9
- import { start, stop } from '@libp2p/interfaces/startable';
10
- import { mockNetwork } from '../mocks/connection-manager.js';
11
- const topic = 'foo';
12
- function shouldNotHappen() {
13
- expect.fail();
14
- }
15
- export default (common) => {
16
- describe('pubsub with two nodes', () => {
17
- let psA;
18
- let psB;
19
- let componentsA;
20
- let componentsB;
21
- // Create pubsub nodes and connect them
22
- beforeEach(async () => {
23
- mockNetwork.reset();
24
- componentsA = await createComponents();
25
- componentsB = await createComponents();
26
- psA = componentsA.setPubSub(await common.setup({
27
- components: componentsA,
28
- init: {
29
- emitSelf: true
30
- }
31
- }));
32
- psB = componentsB.setPubSub(await common.setup({
33
- components: componentsB,
34
- init: {
35
- emitSelf: false
36
- }
37
- }));
38
- // Start pubsub and connect nodes
39
- await start(componentsA, componentsB);
40
- expect(psA.getPeers()).to.be.empty();
41
- expect(psB.getPeers()).to.be.empty();
42
- await componentsA.getConnectionManager().openConnection(componentsB.getPeerId());
43
- // Wait for peers to be ready in pubsub
44
- await pWaitFor(() => psA.getPeers().length === 1 && psB.getPeers().length === 1);
45
- });
46
- afterEach(async () => {
47
- sinon.restore();
48
- await stop(componentsA, componentsB);
49
- await common.teardown();
50
- mockNetwork.reset();
51
- });
52
- it('Subscribe to a topic in nodeA', async () => {
53
- const defer = pDefer();
54
- psB.addEventListener('subscription-change', (evt) => {
55
- const { peerId: changedPeerId, subscriptions: changedSubs } = evt.detail;
56
- expect(psA.getTopics()).to.deep.equal([topic]);
57
- expect(psB.getPeers()).to.have.lengthOf(1);
58
- expect(psB.getSubscribers(topic).map(p => p.toString())).to.deep.equal([componentsA.getPeerId().toString()]);
59
- expect(changedPeerId).to.deep.equal(psB.getPeers()[0]);
60
- expect(changedSubs).to.have.lengthOf(1);
61
- expect(changedSubs[0].topic).to.equal(topic);
62
- expect(changedSubs[0].subscribe).to.equal(true);
63
- defer.resolve();
64
- }, {
65
- once: true
66
- });
67
- psA.subscribe(topic);
68
- return await defer.promise;
69
- });
70
- it('Publish to a topic in nodeA', async () => {
71
- const defer = pDefer();
72
- psA.addEventListener('message', (evt) => {
73
- if (evt.detail.topic === topic) {
74
- const msg = evt.detail;
75
- expect(uint8ArrayToString(msg.data)).to.equal('hey');
76
- psB.removeEventListener('message', shouldNotHappen);
77
- defer.resolve();
78
- }
79
- }, {
80
- once: true
81
- });
82
- psA.subscribe(topic);
83
- psB.subscribe(topic);
84
- await Promise.all([
85
- waitForSubscriptionUpdate(psA, componentsB.getPeerId()),
86
- waitForSubscriptionUpdate(psB, componentsA.getPeerId())
87
- ]);
88
- await psA.publish(topic, uint8ArrayFromString('hey'));
89
- return await defer.promise;
90
- });
91
- it('Publish to a topic in nodeB', async () => {
92
- const defer = pDefer();
93
- psA.addEventListener('message', (evt) => {
94
- if (evt.detail.topic !== topic) {
95
- return;
96
- }
97
- const msg = evt.detail;
98
- psA.addEventListener('message', (evt) => {
99
- if (evt.detail.topic === topic) {
100
- shouldNotHappen();
101
- }
102
- }, {
103
- once: true
104
- });
105
- expect(uint8ArrayToString(msg.data)).to.equal('banana');
106
- setTimeout(() => {
107
- psA.removeEventListener('message');
108
- psB.removeEventListener('message');
109
- defer.resolve();
110
- }, 100);
111
- }, {
112
- once: true
113
- });
114
- psB.addEventListener('message', shouldNotHappen);
115
- psA.subscribe(topic);
116
- psB.subscribe(topic);
117
- await Promise.all([
118
- waitForSubscriptionUpdate(psA, componentsB.getPeerId()),
119
- waitForSubscriptionUpdate(psB, componentsA.getPeerId())
120
- ]);
121
- await psB.publish(topic, uint8ArrayFromString('banana'));
122
- return await defer.promise;
123
- });
124
- it('Publish 10 msg to a topic in nodeB', async () => {
125
- const defer = pDefer();
126
- let counter = 0;
127
- psB.addEventListener('message', shouldNotHappen);
128
- psA.addEventListener('message', receivedMsg);
129
- function receivedMsg(evt) {
130
- const msg = evt.detail;
131
- expect(uint8ArrayToString(msg.data)).to.equal('banana');
132
- expect(msg.from.toString()).to.equal(componentsB.getPeerId().toString());
133
- expect(msg.sequenceNumber).to.be.a('BigInt');
134
- expect(msg.topic).to.be.equal(topic);
135
- if (++counter === 10) {
136
- psA.removeEventListener('message', receivedMsg);
137
- psB.removeEventListener('message', shouldNotHappen);
138
- defer.resolve();
139
- }
140
- }
141
- psA.subscribe(topic);
142
- psB.subscribe(topic);
143
- await Promise.all([
144
- waitForSubscriptionUpdate(psA, componentsB.getPeerId()),
145
- waitForSubscriptionUpdate(psB, componentsA.getPeerId())
146
- ]);
147
- await Promise.all(Array.from({ length: 10 }, async (_, i) => await psB.publish(topic, uint8ArrayFromString('banana'))));
148
- return await defer.promise;
149
- });
150
- it('Unsubscribe from topic in nodeA', async () => {
151
- const defer = pDefer();
152
- let callCount = 0;
153
- psB.addEventListener('subscription-change', (evt) => {
154
- callCount++;
155
- if (callCount === 1) {
156
- // notice subscribe
157
- const { peerId: changedPeerId, subscriptions: changedSubs } = evt.detail;
158
- expect(psB.getPeers()).to.have.lengthOf(1);
159
- expect(psB.getTopics()).to.be.empty();
160
- expect(changedPeerId).to.deep.equal(psB.getPeers()[0]);
161
- expect(changedSubs).to.have.lengthOf(1);
162
- expect(changedSubs[0].topic).to.equal(topic);
163
- expect(changedSubs[0].subscribe).to.equal(true);
164
- }
165
- else {
166
- // notice unsubscribe
167
- const { peerId: changedPeerId, subscriptions: changedSubs } = evt.detail;
168
- expect(psB.getPeers()).to.have.lengthOf(1);
169
- expect(psB.getTopics()).to.be.empty();
170
- expect(changedPeerId).to.deep.equal(psB.getPeers()[0]);
171
- expect(changedSubs).to.have.lengthOf(1);
172
- expect(changedSubs[0].topic).to.equal(topic);
173
- expect(changedSubs[0].subscribe).to.equal(false);
174
- defer.resolve();
175
- }
176
- });
177
- psA.subscribe(topic);
178
- expect(psA.getTopics()).to.not.be.empty();
179
- psA.unsubscribe(topic);
180
- expect(psA.getTopics()).to.be.empty();
181
- return await defer.promise;
182
- });
183
- });
184
- };
185
- //# sourceMappingURL=two-nodes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"two-nodes.js","sourceRoot":"","sources":["../../../src/pubsub/two-nodes.ts"],"names":[],"mappings":"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"}