@libp2p/interface-compliance-tests 5.2.0-e1db332a4 → 5.3.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.
- package/dist/src/connection-encryption/index.d.ts.map +1 -1
- package/dist/src/connection-encryption/index.js +6 -3
- package/dist/src/connection-encryption/index.js.map +1 -1
- package/dist/src/stream-muxer/base-test.d.ts.map +1 -1
- package/dist/src/stream-muxer/base-test.js +195 -0
- package/dist/src/stream-muxer/base-test.js.map +1 -1
- package/dist/typedoc-urls.json +42 -0
- package/package.json +23 -22
- package/src/connection-encryption/index.ts +7 -3
- package/src/stream-muxer/base-test.ts +243 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-encryption/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connection-encryption/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAU,MAAM,mBAAmB,CAAA;iCAE5C,UAAU,mBAAmB,CAAC,KAAG,IAAI;AAA7D,wBAyFC"}
|
|
@@ -3,6 +3,7 @@ import * as PeerIdFactory from '@libp2p/peer-id-factory';
|
|
|
3
3
|
import { expect } from 'aegir/chai';
|
|
4
4
|
import all from 'it-all';
|
|
5
5
|
import { pipe } from 'it-pipe';
|
|
6
|
+
import toBuffer from 'it-to-buffer';
|
|
6
7
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
7
8
|
import peers from '../peers.js';
|
|
8
9
|
import { createMaConnPair } from './utils/index.js';
|
|
@@ -40,12 +41,14 @@ export default (common) => {
|
|
|
40
41
|
]);
|
|
41
42
|
// Echo server
|
|
42
43
|
void pipe(inboundResult.conn, inboundResult.conn);
|
|
44
|
+
const input = new Array(10000).fill(0).map((val, index) => {
|
|
45
|
+
return uint8ArrayFromString(`data to encrypt, chunk ${index}`);
|
|
46
|
+
});
|
|
43
47
|
// Send some data and collect the result
|
|
44
|
-
const input = uint8ArrayFromString('data to encrypt');
|
|
45
48
|
const result = await pipe(async function* () {
|
|
46
|
-
yield input;
|
|
49
|
+
yield* input;
|
|
47
50
|
}, outboundResult.conn, async (source) => all(source));
|
|
48
|
-
expect(result).to.
|
|
51
|
+
expect(toBuffer(result.map(b => b.subarray()))).to.equalBytes(toBuffer(input));
|
|
49
52
|
});
|
|
50
53
|
it('should return the remote peer id', async () => {
|
|
51
54
|
const [localConn, remoteConn] = createMaConnPair();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connection-encryption/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,aAAa,CAAA;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAInD,eAAe,CAAC,MAAsC,EAAQ,EAAE;IAC9D,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC/D,IAAI,MAA2B,CAAA;QAC/B,IAAI,SAAiB,CAAA;QACrB,IAAI,UAAkB,CAAA;QACtB,IAAI,QAAgB,CAAA;QAEpB,MAAM,CAAC,KAAK,IAAI,EAAE;YAChB;gBACE,MAAM;gBACN,SAAS;gBACT,UAAU;gBACV,QAAQ;aACT,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACpB,MAAM,CAAC,KAAK,EAAE;gBACd,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtC,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtC,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACvC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAA;QACzB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YAClC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,gBAAgB,EAAE,CAAA;YAElD,MAAM,CACJ,aAAa,EACb,cAAc,CACf,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACpB,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC;gBAC3C,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;aACzD,CAAC,CAAA;YAEF,cAAc;YACd,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;YAEjD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connection-encryption/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/base-test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-test.d.ts","sourceRoot":"","sources":["../../../src/stream-muxer/base-test.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAU,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;iCAQ3C,UAAU,kBAAkB,CAAC,KAAG,IAAI;AAA5D,wBAgaC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { expect } from 'aegir/chai';
|
|
2
2
|
import all from 'it-all';
|
|
3
|
+
import { byteStream } from 'it-byte-stream';
|
|
3
4
|
import drain from 'it-drain';
|
|
4
5
|
import map from 'it-map';
|
|
5
6
|
import { duplexPair } from 'it-pair/duplex';
|
|
@@ -148,6 +149,200 @@ export default (common) => {
|
|
|
148
149
|
expect(listenerChunks).to.be.eql(['hey']);
|
|
149
150
|
expect(dialerChunks).to.be.eql(['hello']);
|
|
150
151
|
});
|
|
152
|
+
it('should echo a small value via a pipe', async () => {
|
|
153
|
+
const p = duplexPair();
|
|
154
|
+
const onDialerStreamPromise = defer();
|
|
155
|
+
const onDataReceivedPromise = defer();
|
|
156
|
+
const dialerFactory = await common.setup();
|
|
157
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
158
|
+
direction: 'outbound',
|
|
159
|
+
onIncomingStream: (stream) => {
|
|
160
|
+
onDialerStreamPromise.resolve(stream);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
const listenerFactory = await common.setup();
|
|
164
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
165
|
+
direction: 'inbound',
|
|
166
|
+
onIncomingStream: (stream) => {
|
|
167
|
+
void Promise.resolve().then(async () => {
|
|
168
|
+
const output = new Uint8ArrayList();
|
|
169
|
+
for await (const buf of stream.source) {
|
|
170
|
+
output.append(buf);
|
|
171
|
+
}
|
|
172
|
+
onDataReceivedPromise.resolve(output.subarray());
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
void pipe(p[0], dialer, p[0]);
|
|
177
|
+
void pipe(p[1], listener, p[1]);
|
|
178
|
+
const stream = await dialer.newStream();
|
|
179
|
+
const input = Uint8Array.from([0, 1, 2, 3, 4]);
|
|
180
|
+
await pipe([input], stream);
|
|
181
|
+
await stream.close();
|
|
182
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input);
|
|
183
|
+
});
|
|
184
|
+
it('should echo a large value via a pipe', async () => {
|
|
185
|
+
const p = duplexPair();
|
|
186
|
+
const onDialerStreamPromise = defer();
|
|
187
|
+
const onDataReceivedPromise = defer();
|
|
188
|
+
const dialerFactory = await common.setup();
|
|
189
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
190
|
+
direction: 'outbound',
|
|
191
|
+
onIncomingStream: (stream) => {
|
|
192
|
+
onDialerStreamPromise.resolve(stream);
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
const listenerFactory = await common.setup();
|
|
196
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
197
|
+
direction: 'inbound',
|
|
198
|
+
onIncomingStream: (stream) => {
|
|
199
|
+
void Promise.resolve().then(async () => {
|
|
200
|
+
const output = new Uint8ArrayList();
|
|
201
|
+
for await (const buf of stream.source) {
|
|
202
|
+
output.append(buf);
|
|
203
|
+
}
|
|
204
|
+
onDataReceivedPromise.resolve(output.subarray());
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
void pipe(p[0], dialer, p[0]);
|
|
209
|
+
void pipe(p[1], listener, p[1]);
|
|
210
|
+
const stream = await dialer.newStream();
|
|
211
|
+
const input = Uint8Array.from(new Array(1024 * 1024 * 10).fill(0));
|
|
212
|
+
await pipe([input], stream);
|
|
213
|
+
await stream.close();
|
|
214
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input);
|
|
215
|
+
});
|
|
216
|
+
it('should echo a small value via sink', async () => {
|
|
217
|
+
const p = duplexPair();
|
|
218
|
+
const onDialerStreamPromise = defer();
|
|
219
|
+
const onDataReceivedPromise = defer();
|
|
220
|
+
const dialerFactory = await common.setup();
|
|
221
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
222
|
+
direction: 'outbound',
|
|
223
|
+
onIncomingStream: (stream) => {
|
|
224
|
+
onDialerStreamPromise.resolve(stream);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
const listenerFactory = await common.setup();
|
|
228
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
229
|
+
direction: 'inbound',
|
|
230
|
+
onIncomingStream: (stream) => {
|
|
231
|
+
void Promise.resolve().then(async () => {
|
|
232
|
+
const output = new Uint8ArrayList();
|
|
233
|
+
for await (const buf of stream.source) {
|
|
234
|
+
output.append(buf);
|
|
235
|
+
}
|
|
236
|
+
onDataReceivedPromise.resolve(output.subarray());
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
void pipe(p[0], dialer, p[0]);
|
|
241
|
+
void pipe(p[1], listener, p[1]);
|
|
242
|
+
const stream = await dialer.newStream();
|
|
243
|
+
const input = Uint8Array.from([0, 1, 2, 3, 4]);
|
|
244
|
+
await stream.sink([input]);
|
|
245
|
+
await stream.close();
|
|
246
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input);
|
|
247
|
+
});
|
|
248
|
+
it('should echo a large value via sink', async () => {
|
|
249
|
+
const p = duplexPair();
|
|
250
|
+
const onDialerStreamPromise = defer();
|
|
251
|
+
const onDataReceivedPromise = defer();
|
|
252
|
+
const dialerFactory = await common.setup();
|
|
253
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
254
|
+
direction: 'outbound',
|
|
255
|
+
onIncomingStream: (stream) => {
|
|
256
|
+
onDialerStreamPromise.resolve(stream);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
const listenerFactory = await common.setup();
|
|
260
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
261
|
+
direction: 'inbound',
|
|
262
|
+
onIncomingStream: (stream) => {
|
|
263
|
+
void Promise.resolve().then(async () => {
|
|
264
|
+
const output = new Uint8ArrayList();
|
|
265
|
+
for await (const buf of stream.source) {
|
|
266
|
+
output.append(buf);
|
|
267
|
+
}
|
|
268
|
+
onDataReceivedPromise.resolve(output.subarray());
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
void pipe(p[0], dialer, p[0]);
|
|
273
|
+
void pipe(p[1], listener, p[1]);
|
|
274
|
+
const stream = await dialer.newStream();
|
|
275
|
+
const input = Uint8Array.from(new Array(1024 * 1024 * 10).fill(0));
|
|
276
|
+
await stream.sink([input]);
|
|
277
|
+
await stream.close();
|
|
278
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input);
|
|
279
|
+
});
|
|
280
|
+
it('should echo a small value via a pushable', async () => {
|
|
281
|
+
const p = duplexPair();
|
|
282
|
+
const onDialerStreamPromise = defer();
|
|
283
|
+
const onDataReceivedPromise = defer();
|
|
284
|
+
const dialerFactory = await common.setup();
|
|
285
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
286
|
+
direction: 'outbound',
|
|
287
|
+
onIncomingStream: (stream) => {
|
|
288
|
+
onDialerStreamPromise.resolve(stream);
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
const listenerFactory = await common.setup();
|
|
292
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
293
|
+
direction: 'inbound',
|
|
294
|
+
onIncomingStream: (stream) => {
|
|
295
|
+
void Promise.resolve().then(async () => {
|
|
296
|
+
const output = new Uint8ArrayList();
|
|
297
|
+
for await (const buf of stream.source) {
|
|
298
|
+
output.append(buf);
|
|
299
|
+
}
|
|
300
|
+
onDataReceivedPromise.resolve(output.subarray());
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
void pipe(p[0], dialer, p[0]);
|
|
305
|
+
void pipe(p[1], listener, p[1]);
|
|
306
|
+
const stream = await dialer.newStream();
|
|
307
|
+
const input = Uint8Array.from([0, 1, 2, 3, 4]);
|
|
308
|
+
const pushable = byteStream(stream);
|
|
309
|
+
await pushable.write(input);
|
|
310
|
+
await pushable.unwrap().close();
|
|
311
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input);
|
|
312
|
+
});
|
|
313
|
+
it('should echo a large value via a pushable', async () => {
|
|
314
|
+
const p = duplexPair();
|
|
315
|
+
const onDialerStreamPromise = defer();
|
|
316
|
+
const onDataReceivedPromise = defer();
|
|
317
|
+
const dialerFactory = await common.setup();
|
|
318
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
319
|
+
direction: 'outbound',
|
|
320
|
+
onIncomingStream: (stream) => {
|
|
321
|
+
onDialerStreamPromise.resolve(stream);
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
const listenerFactory = await common.setup();
|
|
325
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
326
|
+
direction: 'inbound',
|
|
327
|
+
onIncomingStream: (stream) => {
|
|
328
|
+
void Promise.resolve().then(async () => {
|
|
329
|
+
const output = new Uint8ArrayList();
|
|
330
|
+
for await (const buf of stream.source) {
|
|
331
|
+
output.append(buf);
|
|
332
|
+
}
|
|
333
|
+
onDataReceivedPromise.resolve(output.subarray());
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
void pipe(p[0], dialer, p[0]);
|
|
338
|
+
void pipe(p[1], listener, p[1]);
|
|
339
|
+
const stream = await dialer.newStream();
|
|
340
|
+
const input = Uint8Array.from(new Array(1024 * 1024 * 10).fill(0));
|
|
341
|
+
const pushable = byteStream(stream);
|
|
342
|
+
await pushable.write(input);
|
|
343
|
+
await pushable.unwrap().close();
|
|
344
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input);
|
|
345
|
+
});
|
|
151
346
|
});
|
|
152
347
|
};
|
|
153
348
|
//# sourceMappingURL=base-test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/base-test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base-test.js","sourceRoot":"","sources":["../../../src/stream-muxer/base-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"default": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.connection.default.html",
|
|
3
|
+
"./connection:default": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.connection.default.html",
|
|
4
|
+
"./connection-encryption:default": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.connection_encryption.default.html",
|
|
5
|
+
"TestSetup": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.index.TestSetup.html",
|
|
6
|
+
".:TestSetup": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.index.TestSetup.html",
|
|
7
|
+
"isValidTick": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.is_valid_tick.isValidTick.html",
|
|
8
|
+
"./is-valid-tick:isValidTick": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.is_valid_tick.isValidTick.html",
|
|
9
|
+
"matchMultiaddr": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.matchers.matchMultiaddr.html",
|
|
10
|
+
"./matchers:matchMultiaddr": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.matchers.matchMultiaddr.html",
|
|
11
|
+
"matchPeerId": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.matchers.matchPeerId.html",
|
|
12
|
+
"./matchers:matchPeerId": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.matchers.matchPeerId.html",
|
|
13
|
+
"MockNetworkComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.mocks.MockNetworkComponents.html",
|
|
14
|
+
"MockUpgraderInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.mocks.MockUpgraderInit.html",
|
|
15
|
+
"mockNetwork": "https://libp2p.github.io/js-libp2p/variables/_libp2p_interface_compliance_tests.mocks.mockNetwork.html",
|
|
16
|
+
"connectionPair": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.connectionPair.html",
|
|
17
|
+
"mockConnection": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockConnection.html",
|
|
18
|
+
"mockConnectionGater": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockConnectionGater.html",
|
|
19
|
+
"mockConnectionManager": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockConnectionManager.html",
|
|
20
|
+
"mockDuplex": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockDuplex.html",
|
|
21
|
+
"mockMetrics": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockMetrics.html",
|
|
22
|
+
"mockMultiaddrConnPair": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockMultiaddrConnPair.html",
|
|
23
|
+
"mockMultiaddrConnection": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockMultiaddrConnection.html",
|
|
24
|
+
"mockMuxer": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockMuxer.html",
|
|
25
|
+
"mockRegistrar": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockRegistrar.html",
|
|
26
|
+
"mockStream": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockStream.html",
|
|
27
|
+
"mockUpgrader": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.mockUpgrader.html",
|
|
28
|
+
"streamPair": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.mocks.streamPair.html",
|
|
29
|
+
"./peer-discovery:default": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.peer_discovery.default.html",
|
|
30
|
+
"./peers:default": "https://libp2p.github.io/js-libp2p/variables/_libp2p_interface_compliance_tests.peers.default.html",
|
|
31
|
+
"PubSubArgs": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.pubsub.PubSubArgs.html",
|
|
32
|
+
"./pubsub:PubSubArgs": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.pubsub.PubSubArgs.html",
|
|
33
|
+
"PubSubComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.pubsub.PubSubComponents.html",
|
|
34
|
+
"./pubsub:PubSubComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.pubsub.PubSubComponents.html",
|
|
35
|
+
"./pubsub:default": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.pubsub.default.html",
|
|
36
|
+
"./stream-muxer:default": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.stream_muxer.default.html",
|
|
37
|
+
"Connector": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.transport.Connector.html",
|
|
38
|
+
"./transport:Connector": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.transport.Connector.html",
|
|
39
|
+
"TransportTestFixtures": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.transport.TransportTestFixtures.html",
|
|
40
|
+
"./transport:TransportTestFixtures": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_interface_compliance_tests.transport.TransportTestFixtures.html",
|
|
41
|
+
"./transport:default": "https://libp2p.github.io/js-libp2p/functions/_libp2p_interface_compliance_tests.transport.default.html"
|
|
42
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/interface-compliance-tests",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.0",
|
|
4
4
|
"description": "Compliance tests for JS libp2p interfaces",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/interface-compliance-tests#readme",
|
|
@@ -111,39 +111,40 @@
|
|
|
111
111
|
"test:electron-main": "aegir test -t electron-main"
|
|
112
112
|
},
|
|
113
113
|
"dependencies": {
|
|
114
|
-
"@libp2p/interface": "1.1.
|
|
115
|
-
"@libp2p/interface-internal": "1.0.
|
|
116
|
-
"@libp2p/logger": "4.0.
|
|
117
|
-
"@libp2p/multistream-select": "5.1.
|
|
118
|
-
"@libp2p/peer-collections": "5.1.
|
|
119
|
-
"@libp2p/peer-id": "4.0.
|
|
120
|
-
"@libp2p/peer-id-factory": "4.0.
|
|
121
|
-
"@libp2p/utils": "5.2.
|
|
122
|
-
"@multiformats/multiaddr": "^12.1.
|
|
114
|
+
"@libp2p/interface": "^1.1.3",
|
|
115
|
+
"@libp2p/interface-internal": "^1.0.8",
|
|
116
|
+
"@libp2p/logger": "^4.0.6",
|
|
117
|
+
"@libp2p/multistream-select": "^5.1.3",
|
|
118
|
+
"@libp2p/peer-collections": "^5.1.6",
|
|
119
|
+
"@libp2p/peer-id": "^4.0.6",
|
|
120
|
+
"@libp2p/peer-id-factory": "^4.0.6",
|
|
121
|
+
"@libp2p/utils": "^5.2.4",
|
|
122
|
+
"@multiformats/multiaddr": "^12.1.14",
|
|
123
123
|
"abortable-iterator": "^5.0.1",
|
|
124
|
-
"aegir": "^42.
|
|
124
|
+
"aegir": "^42.2.3",
|
|
125
125
|
"delay": "^6.0.0",
|
|
126
|
-
"it-all": "^3.0.
|
|
127
|
-
"it-
|
|
128
|
-
"it-
|
|
129
|
-
"it-
|
|
126
|
+
"it-all": "^3.0.4",
|
|
127
|
+
"it-byte-stream": "^1.0.8",
|
|
128
|
+
"it-drain": "^3.0.5",
|
|
129
|
+
"it-map": "^3.0.5",
|
|
130
|
+
"it-ndjson": "^1.0.5",
|
|
130
131
|
"it-pair": "^2.0.6",
|
|
131
132
|
"it-pipe": "^3.0.1",
|
|
132
|
-
"it-protobuf-stream": "^1.1.
|
|
133
|
+
"it-protobuf-stream": "^1.1.2",
|
|
133
134
|
"it-pushable": "^3.2.3",
|
|
134
135
|
"it-stream-types": "^2.0.1",
|
|
135
|
-
"it-to-buffer": "^4.0.
|
|
136
|
+
"it-to-buffer": "^4.0.5",
|
|
136
137
|
"merge-options": "^3.0.4",
|
|
137
138
|
"p-defer": "^4.0.0",
|
|
138
139
|
"p-event": "^6.0.0",
|
|
139
140
|
"p-limit": "^5.0.0",
|
|
140
141
|
"p-wait-for": "^5.0.2",
|
|
141
|
-
"protons-runtime": "^5.
|
|
142
|
-
"sinon": "^17.0.
|
|
143
|
-
"uint8arraylist": "^2.4.
|
|
144
|
-
"uint8arrays": "^5.0.
|
|
142
|
+
"protons-runtime": "^5.4.0",
|
|
143
|
+
"sinon": "^17.0.1",
|
|
144
|
+
"uint8arraylist": "^2.4.8",
|
|
145
|
+
"uint8arrays": "^5.0.1"
|
|
145
146
|
},
|
|
146
147
|
"devDependencies": {
|
|
147
|
-
"protons": "^7.
|
|
148
|
+
"protons": "^7.5.0"
|
|
148
149
|
}
|
|
149
150
|
}
|
|
@@ -3,6 +3,7 @@ import * as PeerIdFactory from '@libp2p/peer-id-factory'
|
|
|
3
3
|
import { expect } from 'aegir/chai'
|
|
4
4
|
import all from 'it-all'
|
|
5
5
|
import { pipe } from 'it-pipe'
|
|
6
|
+
import toBuffer from 'it-to-buffer'
|
|
6
7
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
7
8
|
import peers from '../peers.js'
|
|
8
9
|
import { createMaConnPair } from './utils/index.js'
|
|
@@ -53,17 +54,20 @@ export default (common: TestSetup<ConnectionEncrypter>): void => {
|
|
|
53
54
|
// Echo server
|
|
54
55
|
void pipe(inboundResult.conn, inboundResult.conn)
|
|
55
56
|
|
|
57
|
+
const input = new Array(10_000).fill(0).map((val, index) => {
|
|
58
|
+
return uint8ArrayFromString(`data to encrypt, chunk ${index}`)
|
|
59
|
+
})
|
|
60
|
+
|
|
56
61
|
// Send some data and collect the result
|
|
57
|
-
const input = uint8ArrayFromString('data to encrypt')
|
|
58
62
|
const result = await pipe(
|
|
59
63
|
async function * () {
|
|
60
|
-
yield input
|
|
64
|
+
yield * input
|
|
61
65
|
},
|
|
62
66
|
outboundResult.conn,
|
|
63
67
|
async (source) => all(source)
|
|
64
68
|
)
|
|
65
69
|
|
|
66
|
-
expect(result).to.
|
|
70
|
+
expect(toBuffer(result.map(b => b.subarray()))).to.equalBytes(toBuffer(input))
|
|
67
71
|
})
|
|
68
72
|
|
|
69
73
|
it('should return the remote peer id', async () => {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { expect } from 'aegir/chai'
|
|
2
2
|
import all from 'it-all'
|
|
3
|
+
import { byteStream } from 'it-byte-stream'
|
|
3
4
|
import drain from 'it-drain'
|
|
4
5
|
import map from 'it-map'
|
|
5
6
|
import { duplexPair } from 'it-pair/duplex'
|
|
@@ -191,5 +192,247 @@ export default (common: TestSetup<StreamMuxerFactory>): void => {
|
|
|
191
192
|
expect(listenerChunks).to.be.eql(['hey'])
|
|
192
193
|
expect(dialerChunks).to.be.eql(['hello'])
|
|
193
194
|
})
|
|
195
|
+
|
|
196
|
+
it('should echo a small value via a pipe', async () => {
|
|
197
|
+
const p = duplexPair<Uint8Array | Uint8ArrayList>()
|
|
198
|
+
const onDialerStreamPromise: DeferredPromise<Stream> = defer()
|
|
199
|
+
const onDataReceivedPromise: DeferredPromise<Uint8Array> = defer()
|
|
200
|
+
const dialerFactory = await common.setup()
|
|
201
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
202
|
+
direction: 'outbound',
|
|
203
|
+
onIncomingStream: (stream) => {
|
|
204
|
+
onDialerStreamPromise.resolve(stream)
|
|
205
|
+
}
|
|
206
|
+
})
|
|
207
|
+
const listenerFactory = await common.setup()
|
|
208
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
209
|
+
direction: 'inbound',
|
|
210
|
+
onIncomingStream: (stream) => {
|
|
211
|
+
void Promise.resolve().then(async () => {
|
|
212
|
+
const output = new Uint8ArrayList()
|
|
213
|
+
|
|
214
|
+
for await (const buf of stream.source) {
|
|
215
|
+
output.append(buf)
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
onDataReceivedPromise.resolve(output.subarray())
|
|
219
|
+
})
|
|
220
|
+
}
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
void pipe(p[0], dialer, p[0])
|
|
224
|
+
void pipe(p[1], listener, p[1])
|
|
225
|
+
|
|
226
|
+
const stream = await dialer.newStream()
|
|
227
|
+
const input = Uint8Array.from([0, 1, 2, 3, 4])
|
|
228
|
+
|
|
229
|
+
await pipe(
|
|
230
|
+
[input],
|
|
231
|
+
stream
|
|
232
|
+
)
|
|
233
|
+
await stream.close()
|
|
234
|
+
|
|
235
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input)
|
|
236
|
+
})
|
|
237
|
+
|
|
238
|
+
it('should echo a large value via a pipe', async () => {
|
|
239
|
+
const p = duplexPair<Uint8Array | Uint8ArrayList>()
|
|
240
|
+
const onDialerStreamPromise: DeferredPromise<Stream> = defer()
|
|
241
|
+
const onDataReceivedPromise: DeferredPromise<Uint8Array> = defer()
|
|
242
|
+
const dialerFactory = await common.setup()
|
|
243
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
244
|
+
direction: 'outbound',
|
|
245
|
+
onIncomingStream: (stream) => {
|
|
246
|
+
onDialerStreamPromise.resolve(stream)
|
|
247
|
+
}
|
|
248
|
+
})
|
|
249
|
+
const listenerFactory = await common.setup()
|
|
250
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
251
|
+
direction: 'inbound',
|
|
252
|
+
onIncomingStream: (stream) => {
|
|
253
|
+
void Promise.resolve().then(async () => {
|
|
254
|
+
const output = new Uint8ArrayList()
|
|
255
|
+
|
|
256
|
+
for await (const buf of stream.source) {
|
|
257
|
+
output.append(buf)
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
onDataReceivedPromise.resolve(output.subarray())
|
|
261
|
+
})
|
|
262
|
+
}
|
|
263
|
+
})
|
|
264
|
+
|
|
265
|
+
void pipe(p[0], dialer, p[0])
|
|
266
|
+
void pipe(p[1], listener, p[1])
|
|
267
|
+
|
|
268
|
+
const stream = await dialer.newStream()
|
|
269
|
+
const input = Uint8Array.from(new Array(1024 * 1024 * 10).fill(0))
|
|
270
|
+
|
|
271
|
+
await pipe(
|
|
272
|
+
[input],
|
|
273
|
+
stream
|
|
274
|
+
)
|
|
275
|
+
await stream.close()
|
|
276
|
+
|
|
277
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input)
|
|
278
|
+
})
|
|
279
|
+
|
|
280
|
+
it('should echo a small value via sink', async () => {
|
|
281
|
+
const p = duplexPair<Uint8Array | Uint8ArrayList>()
|
|
282
|
+
const onDialerStreamPromise: DeferredPromise<Stream> = defer()
|
|
283
|
+
const onDataReceivedPromise: DeferredPromise<Uint8Array> = defer()
|
|
284
|
+
const dialerFactory = await common.setup()
|
|
285
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
286
|
+
direction: 'outbound',
|
|
287
|
+
onIncomingStream: (stream) => {
|
|
288
|
+
onDialerStreamPromise.resolve(stream)
|
|
289
|
+
}
|
|
290
|
+
})
|
|
291
|
+
const listenerFactory = await common.setup()
|
|
292
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
293
|
+
direction: 'inbound',
|
|
294
|
+
onIncomingStream: (stream) => {
|
|
295
|
+
void Promise.resolve().then(async () => {
|
|
296
|
+
const output = new Uint8ArrayList()
|
|
297
|
+
|
|
298
|
+
for await (const buf of stream.source) {
|
|
299
|
+
output.append(buf)
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
onDataReceivedPromise.resolve(output.subarray())
|
|
303
|
+
})
|
|
304
|
+
}
|
|
305
|
+
})
|
|
306
|
+
|
|
307
|
+
void pipe(p[0], dialer, p[0])
|
|
308
|
+
void pipe(p[1], listener, p[1])
|
|
309
|
+
|
|
310
|
+
const stream = await dialer.newStream()
|
|
311
|
+
const input = Uint8Array.from([0, 1, 2, 3, 4])
|
|
312
|
+
|
|
313
|
+
await stream.sink([input])
|
|
314
|
+
await stream.close()
|
|
315
|
+
|
|
316
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input)
|
|
317
|
+
})
|
|
318
|
+
|
|
319
|
+
it('should echo a large value via sink', async () => {
|
|
320
|
+
const p = duplexPair<Uint8Array | Uint8ArrayList>()
|
|
321
|
+
const onDialerStreamPromise: DeferredPromise<Stream> = defer()
|
|
322
|
+
const onDataReceivedPromise: DeferredPromise<Uint8Array> = defer()
|
|
323
|
+
const dialerFactory = await common.setup()
|
|
324
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
325
|
+
direction: 'outbound',
|
|
326
|
+
onIncomingStream: (stream) => {
|
|
327
|
+
onDialerStreamPromise.resolve(stream)
|
|
328
|
+
}
|
|
329
|
+
})
|
|
330
|
+
const listenerFactory = await common.setup()
|
|
331
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
332
|
+
direction: 'inbound',
|
|
333
|
+
onIncomingStream: (stream) => {
|
|
334
|
+
void Promise.resolve().then(async () => {
|
|
335
|
+
const output = new Uint8ArrayList()
|
|
336
|
+
|
|
337
|
+
for await (const buf of stream.source) {
|
|
338
|
+
output.append(buf)
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
onDataReceivedPromise.resolve(output.subarray())
|
|
342
|
+
})
|
|
343
|
+
}
|
|
344
|
+
})
|
|
345
|
+
|
|
346
|
+
void pipe(p[0], dialer, p[0])
|
|
347
|
+
void pipe(p[1], listener, p[1])
|
|
348
|
+
|
|
349
|
+
const stream = await dialer.newStream()
|
|
350
|
+
const input = Uint8Array.from(new Array(1024 * 1024 * 10).fill(0))
|
|
351
|
+
|
|
352
|
+
await stream.sink([input])
|
|
353
|
+
await stream.close()
|
|
354
|
+
|
|
355
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input)
|
|
356
|
+
})
|
|
357
|
+
|
|
358
|
+
it('should echo a small value via a pushable', async () => {
|
|
359
|
+
const p = duplexPair<Uint8Array | Uint8ArrayList>()
|
|
360
|
+
const onDialerStreamPromise: DeferredPromise<Stream> = defer()
|
|
361
|
+
const onDataReceivedPromise: DeferredPromise<Uint8Array> = defer()
|
|
362
|
+
const dialerFactory = await common.setup()
|
|
363
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
364
|
+
direction: 'outbound',
|
|
365
|
+
onIncomingStream: (stream) => {
|
|
366
|
+
onDialerStreamPromise.resolve(stream)
|
|
367
|
+
}
|
|
368
|
+
})
|
|
369
|
+
const listenerFactory = await common.setup()
|
|
370
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
371
|
+
direction: 'inbound',
|
|
372
|
+
onIncomingStream: (stream) => {
|
|
373
|
+
void Promise.resolve().then(async () => {
|
|
374
|
+
const output = new Uint8ArrayList()
|
|
375
|
+
|
|
376
|
+
for await (const buf of stream.source) {
|
|
377
|
+
output.append(buf)
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
onDataReceivedPromise.resolve(output.subarray())
|
|
381
|
+
})
|
|
382
|
+
}
|
|
383
|
+
})
|
|
384
|
+
|
|
385
|
+
void pipe(p[0], dialer, p[0])
|
|
386
|
+
void pipe(p[1], listener, p[1])
|
|
387
|
+
|
|
388
|
+
const stream = await dialer.newStream()
|
|
389
|
+
const input = Uint8Array.from([0, 1, 2, 3, 4])
|
|
390
|
+
|
|
391
|
+
const pushable = byteStream(stream)
|
|
392
|
+
await pushable.write(input)
|
|
393
|
+
await pushable.unwrap().close()
|
|
394
|
+
|
|
395
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input)
|
|
396
|
+
})
|
|
397
|
+
|
|
398
|
+
it('should echo a large value via a pushable', async () => {
|
|
399
|
+
const p = duplexPair<Uint8Array | Uint8ArrayList>()
|
|
400
|
+
const onDialerStreamPromise: DeferredPromise<Stream> = defer()
|
|
401
|
+
const onDataReceivedPromise: DeferredPromise<Uint8Array> = defer()
|
|
402
|
+
const dialerFactory = await common.setup()
|
|
403
|
+
const dialer = dialerFactory.createStreamMuxer({
|
|
404
|
+
direction: 'outbound',
|
|
405
|
+
onIncomingStream: (stream) => {
|
|
406
|
+
onDialerStreamPromise.resolve(stream)
|
|
407
|
+
}
|
|
408
|
+
})
|
|
409
|
+
const listenerFactory = await common.setup()
|
|
410
|
+
const listener = listenerFactory.createStreamMuxer({
|
|
411
|
+
direction: 'inbound',
|
|
412
|
+
onIncomingStream: (stream) => {
|
|
413
|
+
void Promise.resolve().then(async () => {
|
|
414
|
+
const output = new Uint8ArrayList()
|
|
415
|
+
|
|
416
|
+
for await (const buf of stream.source) {
|
|
417
|
+
output.append(buf)
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
onDataReceivedPromise.resolve(output.subarray())
|
|
421
|
+
})
|
|
422
|
+
}
|
|
423
|
+
})
|
|
424
|
+
|
|
425
|
+
void pipe(p[0], dialer, p[0])
|
|
426
|
+
void pipe(p[1], listener, p[1])
|
|
427
|
+
|
|
428
|
+
const stream = await dialer.newStream()
|
|
429
|
+
const input = Uint8Array.from(new Array(1024 * 1024 * 10).fill(0))
|
|
430
|
+
|
|
431
|
+
const pushable = byteStream(stream)
|
|
432
|
+
await pushable.write(input)
|
|
433
|
+
await pushable.unwrap().close()
|
|
434
|
+
|
|
435
|
+
expect(await onDataReceivedPromise.promise).to.equalBytes(input)
|
|
436
|
+
})
|
|
194
437
|
})
|
|
195
438
|
}
|