@libp2p/interface-compliance-tests 0.0.0 → 0.2.0

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 (177) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +25 -0
  3. package/dist/src/connection/connection.d.ts +5 -0
  4. package/dist/src/connection/connection.d.ts.map +1 -0
  5. package/dist/src/connection/connection.js +148 -0
  6. package/dist/src/connection/connection.js.map +1 -0
  7. package/dist/src/connection/index.d.ts +5 -0
  8. package/dist/src/connection/index.d.ts.map +1 -0
  9. package/dist/src/connection/index.js +5 -0
  10. package/dist/src/connection/index.js.map +1 -0
  11. package/dist/src/crypto/index.d.ts +5 -0
  12. package/dist/src/crypto/index.d.ts.map +1 -0
  13. package/dist/src/crypto/index.js +78 -0
  14. package/dist/src/crypto/index.js.map +1 -0
  15. package/dist/src/index.d.ts +5 -0
  16. package/dist/src/index.d.ts.map +1 -0
  17. package/dist/src/index.js +2 -0
  18. package/dist/src/index.js.map +1 -0
  19. package/dist/src/peer-discovery/index.d.ts +6 -0
  20. package/dist/src/peer-discovery/index.d.ts.map +1 -0
  21. package/dist/src/peer-discovery/index.js +63 -0
  22. package/dist/src/peer-discovery/index.js.map +1 -0
  23. package/dist/src/pubsub/api.d.ts +6 -0
  24. package/dist/src/pubsub/api.d.ts.map +1 -0
  25. package/dist/src/pubsub/api.js +65 -0
  26. package/dist/src/pubsub/api.js.map +1 -0
  27. package/dist/src/pubsub/connection-handlers.d.ts +6 -0
  28. package/dist/src/pubsub/connection-handlers.d.ts.map +1 -0
  29. package/dist/src/pubsub/connection-handlers.js +279 -0
  30. package/dist/src/pubsub/connection-handlers.js.map +1 -0
  31. package/dist/src/pubsub/emit-self.d.ts +6 -0
  32. package/dist/src/pubsub/emit-self.d.ts.map +1 -0
  33. package/dist/src/pubsub/emit-self.js +51 -0
  34. package/dist/src/pubsub/emit-self.js.map +1 -0
  35. package/dist/src/pubsub/index.d.ts +6 -0
  36. package/dist/src/pubsub/index.d.ts.map +1 -0
  37. package/dist/src/pubsub/index.js +17 -0
  38. package/dist/src/pubsub/index.js.map +1 -0
  39. package/dist/src/pubsub/messages.d.ts +6 -0
  40. package/dist/src/pubsub/messages.d.ts.map +1 -0
  41. package/dist/src/pubsub/messages.js +93 -0
  42. package/dist/src/pubsub/messages.js.map +1 -0
  43. package/dist/src/pubsub/multiple-nodes.d.ts +6 -0
  44. package/dist/src/pubsub/multiple-nodes.d.ts.map +1 -0
  45. package/dist/src/pubsub/multiple-nodes.js +283 -0
  46. package/dist/src/pubsub/multiple-nodes.js.map +1 -0
  47. package/dist/src/pubsub/two-nodes.d.ts +6 -0
  48. package/dist/src/pubsub/two-nodes.d.ts.map +1 -0
  49. package/dist/src/pubsub/two-nodes.js +127 -0
  50. package/dist/src/pubsub/two-nodes.js.map +1 -0
  51. package/dist/src/pubsub/utils.d.ts +3 -0
  52. package/dist/src/pubsub/utils.d.ts.map +1 -0
  53. package/dist/src/pubsub/utils.js +11 -0
  54. package/dist/src/pubsub/utils.js.map +1 -0
  55. package/dist/src/record/index.d.ts +5 -0
  56. package/dist/src/record/index.d.ts.map +1 -0
  57. package/dist/src/record/index.js +25 -0
  58. package/dist/src/record/index.js.map +1 -0
  59. package/dist/src/stream-muxer/base-test.d.ts +5 -0
  60. package/dist/src/stream-muxer/base-test.d.ts.map +1 -0
  61. package/dist/src/stream-muxer/base-test.js +123 -0
  62. package/dist/src/stream-muxer/base-test.js.map +1 -0
  63. package/dist/src/stream-muxer/close-test.d.ts +5 -0
  64. package/dist/src/stream-muxer/close-test.d.ts.map +1 -0
  65. package/dist/src/stream-muxer/close-test.js +103 -0
  66. package/dist/src/stream-muxer/close-test.js.map +1 -0
  67. package/dist/src/stream-muxer/index.d.ts +5 -0
  68. package/dist/src/stream-muxer/index.d.ts.map +1 -0
  69. package/dist/src/stream-muxer/index.js +13 -0
  70. package/dist/src/stream-muxer/index.js.map +1 -0
  71. package/dist/src/stream-muxer/mega-stress-test.d.ts +5 -0
  72. package/dist/src/stream-muxer/mega-stress-test.d.ts.map +1 -0
  73. package/dist/src/stream-muxer/mega-stress-test.js +8 -0
  74. package/dist/src/stream-muxer/mega-stress-test.js.map +1 -0
  75. package/dist/src/stream-muxer/spawner.d.ts +4 -0
  76. package/dist/src/stream-muxer/spawner.d.ts.map +1 -0
  77. package/dist/src/stream-muxer/spawner.js +32 -0
  78. package/dist/src/stream-muxer/spawner.js.map +1 -0
  79. package/dist/src/stream-muxer/stress-test.d.ts +5 -0
  80. package/dist/src/stream-muxer/stress-test.d.ts.map +1 -0
  81. package/dist/src/stream-muxer/stress-test.js +21 -0
  82. package/dist/src/stream-muxer/stress-test.js.map +1 -0
  83. package/dist/src/topology/multicodec-topology.d.ts +5 -0
  84. package/dist/src/topology/multicodec-topology.d.ts.map +1 -0
  85. package/dist/src/topology/multicodec-topology.js +109 -0
  86. package/dist/src/topology/multicodec-topology.js.map +1 -0
  87. package/dist/src/topology/topology.d.ts +5 -0
  88. package/dist/src/topology/topology.d.ts.map +1 -0
  89. package/dist/src/topology/topology.js +29 -0
  90. package/dist/src/topology/topology.js.map +1 -0
  91. package/dist/src/transport/dial-test.d.ts +5 -0
  92. package/dist/src/transport/dial-test.d.ts.map +1 -0
  93. package/dist/src/transport/dial-test.js +78 -0
  94. package/dist/src/transport/dial-test.js.map +1 -0
  95. package/dist/src/transport/filter-test.d.ts +5 -0
  96. package/dist/src/transport/filter-test.d.ts.map +1 -0
  97. package/dist/src/transport/filter-test.js +19 -0
  98. package/dist/src/transport/filter-test.js.map +1 -0
  99. package/dist/src/transport/index.d.ts +18 -0
  100. package/dist/src/transport/index.d.ts.map +1 -0
  101. package/dist/src/transport/index.js +11 -0
  102. package/dist/src/transport/index.js.map +1 -0
  103. package/dist/src/transport/listen-test.d.ts +5 -0
  104. package/dist/src/transport/listen-test.d.ts.map +1 -0
  105. package/dist/src/transport/listen-test.js +116 -0
  106. package/dist/src/transport/listen-test.js.map +1 -0
  107. package/dist/src/transport/utils/index.d.ts +8 -0
  108. package/dist/src/transport/utils/index.d.ts.map +1 -0
  109. package/dist/src/transport/utils/index.js +104 -0
  110. package/dist/src/transport/utils/index.js.map +1 -0
  111. package/dist/src/utils/peers.d.ts +7 -0
  112. package/dist/src/utils/peers.d.ts.map +1 -0
  113. package/dist/src/utils/peers.js +26 -0
  114. package/dist/src/utils/peers.js.map +1 -0
  115. package/dist/test/connection/index.spec.d.ts +2 -0
  116. package/dist/test/connection/index.spec.d.ts.map +1 -0
  117. package/dist/test/connection/index.spec.js +71 -0
  118. package/dist/test/connection/index.spec.js.map +1 -0
  119. package/dist/test/crypto/index.spec.d.ts +2 -0
  120. package/dist/test/crypto/index.spec.d.ts.map +1 -0
  121. package/dist/test/crypto/index.spec.js +11 -0
  122. package/dist/test/crypto/index.spec.js.map +1 -0
  123. package/dist/test/crypto/mock-crypto.d.ts +4 -0
  124. package/dist/test/crypto/mock-crypto.d.ts.map +1 -0
  125. package/dist/test/crypto/mock-crypto.js +93 -0
  126. package/dist/test/crypto/mock-crypto.js.map +1 -0
  127. package/dist/test/peer-discovery/index.spec.d.ts +2 -0
  128. package/dist/test/peer-discovery/index.spec.d.ts.map +1 -0
  129. package/dist/test/peer-discovery/index.spec.js +18 -0
  130. package/dist/test/peer-discovery/index.spec.js.map +1 -0
  131. package/dist/test/peer-discovery/mock-discovery.d.ts +20 -0
  132. package/dist/test/peer-discovery/mock-discovery.d.ts.map +1 -0
  133. package/dist/test/peer-discovery/mock-discovery.js +39 -0
  134. package/dist/test/peer-discovery/mock-discovery.js.map +1 -0
  135. package/dist/test/topology/mock-peer-store.d.ts +12 -0
  136. package/dist/test/topology/mock-peer-store.d.ts.map +1 -0
  137. package/dist/test/topology/mock-peer-store.js +18 -0
  138. package/dist/test/topology/mock-peer-store.js.map +1 -0
  139. package/dist/test/topology/multicodec-topology.spec.d.ts +2 -0
  140. package/dist/test/topology/multicodec-topology.spec.d.ts.map +1 -0
  141. package/dist/test/topology/multicodec-topology.spec.js +45 -0
  142. package/dist/test/topology/multicodec-topology.spec.js.map +1 -0
  143. package/dist/test/topology/topology.spec.d.ts +2 -0
  144. package/dist/test/topology/topology.spec.d.ts.map +1 -0
  145. package/dist/test/topology/topology.spec.js +21 -0
  146. package/dist/test/topology/topology.spec.js.map +1 -0
  147. package/dist/tsconfig.tsbuildinfo +1 -0
  148. package/package.json +120 -4
  149. package/src/connection/README.md +256 -0
  150. package/src/connection/connection.ts +178 -0
  151. package/src/connection/index.ts +7 -0
  152. package/src/crypto/index.ts +104 -0
  153. package/src/index.ts +5 -0
  154. package/src/peer-discovery/index.ts +87 -0
  155. package/src/pubsub/api.ts +89 -0
  156. package/src/pubsub/connection-handlers.ts +356 -0
  157. package/src/pubsub/emit-self.ts +67 -0
  158. package/src/pubsub/index.ts +20 -0
  159. package/src/pubsub/messages.ts +111 -0
  160. package/src/pubsub/multiple-nodes.ts +353 -0
  161. package/src/pubsub/two-nodes.ts +175 -0
  162. package/src/pubsub/utils.ts +13 -0
  163. package/src/record/index.ts +32 -0
  164. package/src/stream-muxer/base-test.ts +154 -0
  165. package/src/stream-muxer/close-test.ts +124 -0
  166. package/src/stream-muxer/index.ts +15 -0
  167. package/src/stream-muxer/mega-stress-test.ts +11 -0
  168. package/src/stream-muxer/spawner.ts +52 -0
  169. package/src/stream-muxer/stress-test.ts +24 -0
  170. package/src/topology/multicodec-topology.ts +136 -0
  171. package/src/topology/topology.ts +38 -0
  172. package/src/transport/dial-test.ts +98 -0
  173. package/src/transport/filter-test.ts +26 -0
  174. package/src/transport/index.ts +29 -0
  175. package/src/transport/listen-test.ts +152 -0
  176. package/src/transport/utils/index.ts +123 -0
  177. package/src/utils/peers.ts +25 -0
@@ -0,0 +1,283 @@
1
+ /* eslint max-nested-callbacks: ["error", 6] */
2
+ import { expect } from 'aegir/utils/chai.js';
3
+ import sinon from 'sinon';
4
+ import delay from 'delay';
5
+ import pDefer from 'p-defer';
6
+ import pWaitFor from 'p-wait-for';
7
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
8
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
9
+ import { expectSet } from './utils.js';
10
+ export default (common) => {
11
+ describe('pubsub with multiple nodes', function () {
12
+ describe('every peer subscribes to the topic', () => {
13
+ describe('line', () => {
14
+ // line
15
+ // ◉────◉────◉
16
+ // a b c
17
+ let psA;
18
+ let psB;
19
+ let psC;
20
+ // Create and start pubsub nodes
21
+ beforeEach(async () => {
22
+ psA = await common.setup();
23
+ psB = await common.setup();
24
+ psC = await common.setup();
25
+ [psA, psB, psC].map((p) => p.start());
26
+ });
27
+ // Connect nodes
28
+ beforeEach(async () => {
29
+ // @ts-expect-error protected field
30
+ await psA._libp2p.dial(psB.peerId);
31
+ // @ts-expect-error protected field
32
+ await psB._libp2p.dial(psC.peerId);
33
+ // Wait for peers to be ready in pubsub
34
+ await pWaitFor(() => psA.peers.size === 1 &&
35
+ psC.peers.size === 1 &&
36
+ psA.peers.size === 1);
37
+ });
38
+ afterEach(async () => {
39
+ sinon.restore();
40
+ [psA, psB, psC].map((p) => p.stop());
41
+ await common.teardown();
42
+ });
43
+ it('subscribe to the topic on node a', async () => {
44
+ const topic = 'Z';
45
+ psA.subscribe(topic);
46
+ expectSet(psA.subscriptions, [topic]);
47
+ await new Promise((resolve) => psB.once('pubsub:subscription-change', resolve));
48
+ expect(psB.peers.size).to.equal(2);
49
+ const aPeerId = psA.peerId.toString();
50
+ expectSet(psB.topics.get(topic), [aPeerId]);
51
+ expect(psC.peers.size).to.equal(1);
52
+ expect(psC.topics.get(topic)).to.eql(undefined);
53
+ });
54
+ it('subscribe to the topic on node b', async () => {
55
+ const topic = 'Z';
56
+ psB.subscribe(topic);
57
+ expectSet(psB.subscriptions, [topic]);
58
+ await Promise.all([
59
+ new Promise((resolve) => psA.once('pubsub:subscription-change', resolve)),
60
+ new Promise((resolve) => psC.once('pubsub:subscription-change', resolve))
61
+ ]);
62
+ expect(psA.peers.size).to.equal(1);
63
+ expectSet(psA.topics.get(topic), [psB.peerId.toString()]);
64
+ expect(psC.peers.size).to.equal(1);
65
+ expectSet(psC.topics.get(topic), [psB.peerId.toString()]);
66
+ });
67
+ it('subscribe to the topic on node c', async () => {
68
+ const topic = 'Z';
69
+ const defer = pDefer();
70
+ psC.subscribe(topic);
71
+ expectSet(psC.subscriptions, [topic]);
72
+ psB.once('pubsub:subscription-change', () => {
73
+ expect(psA.peers.size).to.equal(1);
74
+ expect(psB.peers.size).to.equal(2);
75
+ expectSet(psB.topics.get(topic), [psC.peerId.toString()]);
76
+ defer.resolve();
77
+ });
78
+ return await defer.promise;
79
+ });
80
+ it('publish on node a', async () => {
81
+ const topic = 'Z';
82
+ const defer = pDefer();
83
+ psA.subscribe(topic);
84
+ psB.subscribe(topic);
85
+ psC.subscribe(topic);
86
+ // await subscription change
87
+ await Promise.all([
88
+ new Promise(resolve => psA.once('pubsub:subscription-change', () => resolve(null))),
89
+ new Promise(resolve => psB.once('pubsub:subscription-change', () => resolve(null))),
90
+ new Promise(resolve => psC.once('pubsub:subscription-change', () => resolve(null)))
91
+ ]);
92
+ // await a cycle
93
+ await delay(1000);
94
+ let counter = 0;
95
+ psA.on(topic, incMsg);
96
+ psB.on(topic, incMsg);
97
+ psC.on(topic, incMsg);
98
+ void psA.publish(topic, uint8ArrayFromString('hey'));
99
+ function incMsg(msg) {
100
+ expect(uint8ArrayToString(msg.data)).to.equal('hey');
101
+ check();
102
+ }
103
+ function check() {
104
+ if (++counter === 3) {
105
+ psA.removeListener(topic, incMsg);
106
+ psB.removeListener(topic, incMsg);
107
+ psC.removeListener(topic, incMsg);
108
+ defer.resolve();
109
+ }
110
+ }
111
+ return await defer.promise;
112
+ });
113
+ // since the topology is the same, just the publish
114
+ // gets sent by other peer, we reused the same peers
115
+ describe('1 level tree', () => {
116
+ // 1 level tree
117
+ // ┌◉┐
118
+ // │b│
119
+ // ◉─┘ └─◉
120
+ // a c
121
+ it('publish on node b', async () => {
122
+ const topic = 'Z';
123
+ const defer = pDefer();
124
+ let counter = 0;
125
+ psA.subscribe(topic);
126
+ psB.subscribe(topic);
127
+ psC.subscribe(topic);
128
+ // await subscription change
129
+ await Promise.all([
130
+ new Promise(resolve => psA.once('pubsub:subscription-change', () => resolve(null))),
131
+ new Promise(resolve => psB.once('pubsub:subscription-change', () => resolve(null))),
132
+ new Promise(resolve => psC.once('pubsub:subscription-change', () => resolve(null)))
133
+ ]);
134
+ psA.on(topic, incMsg);
135
+ psB.on(topic, incMsg);
136
+ psC.on(topic, incMsg);
137
+ // await a cycle
138
+ await delay(1000);
139
+ void psB.publish(topic, uint8ArrayFromString('hey'));
140
+ function incMsg(msg) {
141
+ expect(uint8ArrayToString(msg.data)).to.equal('hey');
142
+ check();
143
+ }
144
+ function check() {
145
+ if (++counter === 3) {
146
+ psA.removeListener(topic, incMsg);
147
+ psB.removeListener(topic, incMsg);
148
+ psC.removeListener(topic, incMsg);
149
+ defer.resolve();
150
+ }
151
+ }
152
+ return await defer.promise;
153
+ });
154
+ });
155
+ });
156
+ describe('2 level tree', () => {
157
+ // 2 levels tree
158
+ // ┌◉┐
159
+ // │c│
160
+ // ┌◉─┘ └─◉┐
161
+ // │b d│
162
+ // ◉─┘ └─◉
163
+ // a
164
+ let psA;
165
+ let psB;
166
+ let psC;
167
+ let psD;
168
+ let psE;
169
+ // Create and start pubsub nodes
170
+ beforeEach(async () => {
171
+ psA = await common.setup();
172
+ psB = await common.setup();
173
+ psC = await common.setup();
174
+ psD = await common.setup();
175
+ psE = await common.setup();
176
+ [psA, psB, psC, psD, psE].map((p) => p.start());
177
+ });
178
+ // connect nodes
179
+ beforeEach(async () => {
180
+ // @ts-expect-error protected field
181
+ await psA._libp2p.dial(psB.peerId);
182
+ // @ts-expect-error protected field
183
+ await psB._libp2p.dial(psC.peerId);
184
+ // @ts-expect-error protected field
185
+ await psC._libp2p.dial(psD.peerId);
186
+ // @ts-expect-error protected field
187
+ await psD._libp2p.dial(psE.peerId);
188
+ // Wait for peers to be ready in pubsub
189
+ await pWaitFor(() => psA.peers.size === 1 &&
190
+ psB.peers.size === 2 &&
191
+ psC.peers.size === 2 &&
192
+ psD.peers.size === 2 &&
193
+ psE.peers.size === 1);
194
+ });
195
+ afterEach(async () => {
196
+ [psA, psB, psC, psD, psE].map((p) => p.stop());
197
+ await common.teardown();
198
+ });
199
+ it('subscribes', () => {
200
+ psA.subscribe('Z');
201
+ expectSet(psA.subscriptions, ['Z']);
202
+ psB.subscribe('Z');
203
+ expectSet(psB.subscriptions, ['Z']);
204
+ psC.subscribe('Z');
205
+ expectSet(psC.subscriptions, ['Z']);
206
+ psD.subscribe('Z');
207
+ expectSet(psD.subscriptions, ['Z']);
208
+ psE.subscribe('Z');
209
+ expectSet(psE.subscriptions, ['Z']);
210
+ });
211
+ it('publishes from c', async function () {
212
+ const defer = pDefer();
213
+ let counter = 0;
214
+ psA.subscribe('Z');
215
+ psA.on('Z', incMsg);
216
+ psB.subscribe('Z');
217
+ psB.on('Z', incMsg);
218
+ psC.subscribe('Z');
219
+ psC.on('Z', incMsg);
220
+ psD.subscribe('Z');
221
+ psD.on('Z', incMsg);
222
+ psE.subscribe('Z');
223
+ psE.on('Z', incMsg);
224
+ await Promise.all([
225
+ new Promise((resolve) => psA.once('pubsub:subscription-change', resolve)),
226
+ new Promise((resolve) => psB.once('pubsub:subscription-change', resolve)),
227
+ new Promise((resolve) => psC.once('pubsub:subscription-change', resolve)),
228
+ new Promise((resolve) => psD.once('pubsub:subscription-change', resolve)),
229
+ new Promise((resolve) => psE.once('pubsub:subscription-change', resolve))
230
+ ]);
231
+ // await a cycle
232
+ await delay(1000);
233
+ void psC.publish('Z', uint8ArrayFromString('hey from c'));
234
+ function incMsg(msg) {
235
+ expect(uint8ArrayToString(msg.data)).to.equal('hey from c');
236
+ check();
237
+ }
238
+ function check() {
239
+ if (++counter === 5) {
240
+ psA.unsubscribe('Z');
241
+ psB.unsubscribe('Z');
242
+ psC.unsubscribe('Z');
243
+ psD.unsubscribe('Z');
244
+ psE.unsubscribe('Z');
245
+ defer.resolve();
246
+ }
247
+ }
248
+ return await defer.promise;
249
+ });
250
+ });
251
+ });
252
+ describe('only some nodes subscribe the networks', () => {
253
+ describe('line', () => {
254
+ // line
255
+ // ◉────◎────◉
256
+ // a b c
257
+ before(() => { });
258
+ after(() => { });
259
+ });
260
+ describe('1 level tree', () => {
261
+ // 1 level tree
262
+ // ┌◉┐
263
+ // │b│
264
+ // ◎─┘ └─◉
265
+ // a c
266
+ before(() => { });
267
+ after(() => { });
268
+ });
269
+ describe('2 level tree', () => {
270
+ // 2 levels tree
271
+ // ┌◉┐
272
+ // │c│
273
+ // ┌◎─┘ └─◉┐
274
+ // │b d│
275
+ // ◉─┘ └─◎
276
+ // a e
277
+ before(() => { });
278
+ after(() => { });
279
+ });
280
+ });
281
+ });
282
+ };
283
+ //# sourceMappingURL=multiple-nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiple-nodes.js","sourceRoot":"","sources":["../../../src/pubsub/multiple-nodes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { PubSub } from '@libp2p/interfaces/pubsub';
3
+ import type { Startable } from '@libp2p/interfaces';
4
+ declare const _default: (common: TestSetup<PubSub & Startable>) => void;
5
+ export default _default;
6
+ //# sourceMappingURL=two-nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"two-nodes.d.ts","sourceRoot":"","sources":["../../../src/pubsub/two-nodes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,2BAA2B,CAAA;AAKhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;iCAQ3B,UAAU,MAAM,GAAG,SAAS,CAAC;AAArD,wBAyJC"}
@@ -0,0 +1,127 @@
1
+ /* eslint max-nested-callbacks: ["error", 6] */
2
+ import { expect } from 'aegir/utils/chai.js';
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 { first, expectSet } from './utils.js';
9
+ const topic = 'foo';
10
+ function shouldNotHappen() {
11
+ expect.fail();
12
+ }
13
+ export default (common) => {
14
+ describe('pubsub with two nodes', () => {
15
+ let psA;
16
+ let psB;
17
+ // Create pubsub nodes and connect them
18
+ before(async () => {
19
+ psA = await common.setup();
20
+ psB = await common.setup();
21
+ expect(psA.peers.size).to.be.eql(0);
22
+ expect(psB.peers.size).to.be.eql(0);
23
+ // Start pubsub and connect nodes
24
+ await psA.start();
25
+ await psB.start();
26
+ // @ts-expect-error protected property
27
+ await psA._libp2p.dial(psB.peerId);
28
+ // Wait for peers to be ready in pubsub
29
+ await pWaitFor(() => psA.peers.size === 1 && psB.peers.size === 1);
30
+ });
31
+ after(async () => {
32
+ sinon.restore();
33
+ await psA.stop();
34
+ await psB.stop();
35
+ await common.teardown();
36
+ });
37
+ it('Subscribe to a topic in nodeA', async () => {
38
+ const defer = pDefer();
39
+ psB.once('pubsub:subscription-change', ({ peerId: changedPeerId, subscriptions: changedSubs }) => {
40
+ expectSet(psA.subscriptions, [topic]);
41
+ expect(psB.peers.size).to.equal(1);
42
+ expectSet(psB.topics.get(topic), [psA.peerId.toString()]);
43
+ expect(changedPeerId.toString()).to.equal(first(psB.peers).id.toString());
44
+ expect(changedSubs).to.have.lengthOf(1);
45
+ expect(changedSubs[0].topicID).to.equal(topic);
46
+ expect(changedSubs[0].subscribe).to.equal(true);
47
+ defer.resolve();
48
+ });
49
+ psA.subscribe(topic);
50
+ return await defer.promise;
51
+ });
52
+ it('Publish to a topic in nodeA', async () => {
53
+ const defer = pDefer();
54
+ psA.once(topic, (msg) => {
55
+ expect(uint8ArrayToString(msg.data)).to.equal('hey');
56
+ psB.removeListener(topic, shouldNotHappen);
57
+ defer.resolve();
58
+ });
59
+ psB.once(topic, shouldNotHappen);
60
+ void psA.publish(topic, uint8ArrayFromString('hey'));
61
+ return await defer.promise;
62
+ });
63
+ it('Publish to a topic in nodeB', async () => {
64
+ const defer = pDefer();
65
+ psA.once(topic, (msg) => {
66
+ psA.once(topic, shouldNotHappen);
67
+ expect(uint8ArrayToString(msg.data)).to.equal('banana');
68
+ setTimeout(() => {
69
+ psA.removeListener(topic, shouldNotHappen);
70
+ psB.removeListener(topic, shouldNotHappen);
71
+ defer.resolve();
72
+ }, 100);
73
+ });
74
+ psB.once(topic, shouldNotHappen);
75
+ void psB.publish(topic, uint8ArrayFromString('banana'));
76
+ return await defer.promise;
77
+ });
78
+ it('Publish 10 msg to a topic in nodeB', async () => {
79
+ const defer = pDefer();
80
+ let counter = 0;
81
+ psB.once(topic, shouldNotHappen);
82
+ psA.on(topic, receivedMsg);
83
+ function receivedMsg(msg) {
84
+ expect(uint8ArrayToString(msg.data)).to.equal('banana');
85
+ expect(msg.from).to.be.eql(psB.peerId.toString());
86
+ expect(msg.seqno).to.be.a('Uint8Array');
87
+ expect(msg.topicIDs).to.be.eql([topic]);
88
+ if (++counter === 10) {
89
+ psA.removeListener(topic, receivedMsg);
90
+ psB.removeListener(topic, shouldNotHappen);
91
+ defer.resolve();
92
+ }
93
+ }
94
+ Array.from({ length: 10 }, async (_, i) => await psB.publish(topic, uint8ArrayFromString('banana')));
95
+ return await defer.promise;
96
+ });
97
+ it('Unsubscribe from topic in nodeA', async () => {
98
+ const defer = pDefer();
99
+ psA.unsubscribe(topic);
100
+ expect(psA.subscriptions.size).to.equal(0);
101
+ psB.once('pubsub:subscription-change', ({ peerId: changedPeerId, subscriptions: changedSubs }) => {
102
+ expect(psB.peers.size).to.equal(1);
103
+ expectSet(psB.topics.get(topic), []);
104
+ expect(changedPeerId.toString()).to.equal(first(psB.peers).id.toString());
105
+ expect(changedSubs).to.have.lengthOf(1);
106
+ expect(changedSubs[0].topicID).to.equal(topic);
107
+ expect(changedSubs[0].subscribe).to.equal(false);
108
+ defer.resolve();
109
+ });
110
+ return await defer.promise;
111
+ });
112
+ it('Publish to a topic:Z in nodeA nodeB', async () => {
113
+ const defer = pDefer();
114
+ psA.once('Z', shouldNotHappen);
115
+ psB.once('Z', shouldNotHappen);
116
+ setTimeout(() => {
117
+ psA.removeListener('Z', shouldNotHappen);
118
+ psB.removeListener('Z', shouldNotHappen);
119
+ defer.resolve();
120
+ }, 100);
121
+ void psB.publish('Z', uint8ArrayFromString('banana'));
122
+ void psA.publish('Z', uint8ArrayFromString('banana'));
123
+ return await defer.promise;
124
+ });
125
+ });
126
+ };
127
+ //# sourceMappingURL=two-nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"two-nodes.js","sourceRoot":"","sources":["../../../src/pubsub/two-nodes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function first<V>(map: Map<any, V>): V;
2
+ export declare function expectSet<T>(set?: Set<T>, subs?: T[]): void;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/pubsub/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,KAAK,CAAE,CAAC,EAAG,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAE9C;AAED,wBAAgB,SAAS,CAAE,CAAC,EAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,QAMtD"}
@@ -0,0 +1,11 @@
1
+ import { expect } from 'aegir/utils/chai.js';
2
+ export function first(map) {
3
+ return map.values().next().value;
4
+ }
5
+ export function expectSet(set, subs) {
6
+ if ((set == null) || (subs == null)) {
7
+ throw new Error('No set or subs passed');
8
+ }
9
+ expect(Array.from(set.values())).to.eql(subs);
10
+ }
11
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/pubsub/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,MAAM,UAAU,KAAK,CAAM,GAAgB;IACzC,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,SAAS,CAAM,GAAY,EAAE,IAAU;IACrD,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;KACzC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC/C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { Record } from '@libp2p/interfaces/record';
3
+ declare const _default: (test: TestSetup<Record>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/record/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;+BAEjC,UAAU,MAAM,CAAC;AAAvC,wBA2BC"}
@@ -0,0 +1,25 @@
1
+ import { expect } from 'aegir/utils/chai.js';
2
+ export default (test) => {
3
+ describe('record', () => {
4
+ let record;
5
+ beforeEach(async () => {
6
+ record = await test.setup();
7
+ });
8
+ afterEach(async () => {
9
+ await test.teardown();
10
+ });
11
+ it('has domain and codec', () => {
12
+ expect(record.domain).to.exist();
13
+ expect(record.codec).to.exist();
14
+ });
15
+ it('is able to marshal', () => {
16
+ const rawData = record.marshal();
17
+ expect(rawData).to.be.an.instanceof(Uint8Array);
18
+ });
19
+ it('is able to compare two records', () => {
20
+ const equals = record.equals(record);
21
+ expect(equals).to.eql(true);
22
+ });
23
+ });
24
+ };
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/record/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAI5C,eAAe,CAAC,IAAuB,EAAE,EAAE;IACzC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,IAAI,MAAc,CAAA;QAElB,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACvB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YAChC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAA;YAChC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACpC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { TestSetup } from '../index.js';
2
+ import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer';
3
+ declare const _default: (common: TestSetup<Muxer, MuxerOptions>) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=base-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/base-test.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAe,MAAM,iCAAiC,CAAA;iCAO/D,UAAU,KAAK,EAAE,YAAY,CAAC;AAAtD,wBA2IC"}