@libp2p/interface-compliance-tests 1.0.5 → 1.1.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 (63) hide show
  1. package/dist/src/connection/connection.d.ts.map +1 -1
  2. package/dist/src/connection/connection.js +0 -2
  3. package/dist/src/connection/connection.js.map +1 -1
  4. package/dist/src/crypto/utils/index.d.ts.map +1 -1
  5. package/dist/src/crypto/utils/index.js +0 -1
  6. package/dist/src/crypto/utils/index.js.map +1 -1
  7. package/dist/src/stream-muxer/base-test.d.ts.map +1 -1
  8. package/dist/src/stream-muxer/base-test.js +23 -17
  9. package/dist/src/stream-muxer/base-test.js.map +1 -1
  10. package/dist/src/stream-muxer/close-test.d.ts.map +1 -1
  11. package/dist/src/stream-muxer/close-test.js +14 -26
  12. package/dist/src/stream-muxer/close-test.js.map +1 -1
  13. package/dist/src/stream-muxer/index.d.ts +2 -2
  14. package/dist/src/stream-muxer/index.d.ts.map +1 -1
  15. package/dist/src/stream-muxer/index.js.map +1 -1
  16. package/dist/src/stream-muxer/mega-stress-test.js +1 -1
  17. package/dist/src/stream-muxer/mega-stress-test.js.map +1 -1
  18. package/dist/src/stream-muxer/spawner.js +2 -2
  19. package/dist/src/stream-muxer/spawner.js.map +1 -1
  20. package/dist/src/stream-muxer/stress-test.js +1 -1
  21. package/dist/src/stream-muxer/stress-test.js.map +1 -1
  22. package/dist/src/transport/dial-test.js +1 -1
  23. package/dist/src/transport/dial-test.js.map +1 -1
  24. package/dist/src/transport/utils/index.d.ts +9 -2
  25. package/dist/src/transport/utils/index.d.ts.map +1 -1
  26. package/dist/src/transport/utils/index.js +61 -26
  27. package/dist/src/transport/utils/index.js.map +1 -1
  28. package/dist/src/utils/mock-connection-gater.d.ts +12 -0
  29. package/dist/src/utils/mock-connection-gater.d.ts.map +1 -0
  30. package/dist/src/utils/mock-connection-gater.js +14 -0
  31. package/dist/src/utils/mock-connection-gater.js.map +1 -0
  32. package/dist/src/utils/mock-connection.d.ts +5 -0
  33. package/dist/src/utils/mock-connection.d.ts.map +1 -0
  34. package/dist/src/utils/mock-connection.js +52 -0
  35. package/dist/src/utils/mock-connection.js.map +1 -0
  36. package/dist/src/utils/mock-multiaddr-connection.d.ts +4 -0
  37. package/dist/src/utils/mock-multiaddr-connection.d.ts.map +1 -0
  38. package/dist/src/utils/mock-multiaddr-connection.js +14 -0
  39. package/dist/src/utils/mock-multiaddr-connection.js.map +1 -0
  40. package/dist/src/utils/mock-muxer.d.ts +3 -0
  41. package/dist/src/utils/mock-muxer.d.ts.map +1 -0
  42. package/dist/src/utils/mock-muxer.js +37 -0
  43. package/dist/src/utils/mock-muxer.js.map +1 -0
  44. package/dist/src/utils/mock-upgrader.d.ts +7 -0
  45. package/dist/src/utils/mock-upgrader.d.ts.map +1 -0
  46. package/dist/src/utils/mock-upgrader.js +24 -0
  47. package/dist/src/utils/mock-upgrader.js.map +1 -0
  48. package/package.json +34 -7
  49. package/src/connection/connection.ts +0 -2
  50. package/src/crypto/utils/index.ts +0 -1
  51. package/src/stream-muxer/base-test.ts +37 -26
  52. package/src/stream-muxer/close-test.ts +14 -28
  53. package/src/stream-muxer/index.ts +2 -2
  54. package/src/stream-muxer/mega-stress-test.ts +1 -1
  55. package/src/stream-muxer/spawner.ts +2 -2
  56. package/src/stream-muxer/stress-test.ts +1 -1
  57. package/src/transport/dial-test.ts +1 -1
  58. package/src/transport/utils/index.ts +86 -35
  59. package/src/utils/mock-connection-gater.ts +14 -0
  60. package/src/utils/mock-connection.ts +66 -0
  61. package/src/utils/mock-multiaddr-connection.ts +18 -0
  62. package/src/utils/mock-muxer.ts +43 -0
  63. package/src/utils/mock-upgrader.ts +33 -0
@@ -0,0 +1,12 @@
1
+ export declare function mockConnectionGater(): {
2
+ denyDialPeer: () => Promise<boolean>;
3
+ denyDialMultiaddr: () => Promise<boolean>;
4
+ denyInboundConnection: () => Promise<boolean>;
5
+ denyOutboundConnection: () => Promise<boolean>;
6
+ denyInboundEncryptedConnection: () => Promise<boolean>;
7
+ denyOutboundEncryptedConnection: () => Promise<boolean>;
8
+ denyInboundUpgradedConnection: () => Promise<boolean>;
9
+ denyOutboundUpgradedConnection: () => Promise<boolean>;
10
+ filterMultiaddrForPeer: () => Promise<boolean>;
11
+ };
12
+ //# sourceMappingURL=mock-connection-gater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-connection-gater.d.ts","sourceRoot":"","sources":["../../../src/utils/mock-connection-gater.ts"],"names":[],"mappings":"AACA,wBAAgB,mBAAmB;;;;;;;;;;EAYlC"}
@@ -0,0 +1,14 @@
1
+ export function mockConnectionGater() {
2
+ return {
3
+ denyDialPeer: async () => await Promise.resolve(false),
4
+ denyDialMultiaddr: async () => await Promise.resolve(false),
5
+ denyInboundConnection: async () => await Promise.resolve(false),
6
+ denyOutboundConnection: async () => await Promise.resolve(false),
7
+ denyInboundEncryptedConnection: async () => await Promise.resolve(false),
8
+ denyOutboundEncryptedConnection: async () => await Promise.resolve(false),
9
+ denyInboundUpgradedConnection: async () => await Promise.resolve(false),
10
+ denyOutboundUpgradedConnection: async () => await Promise.resolve(false),
11
+ filterMultiaddrForPeer: async () => await Promise.resolve(true)
12
+ };
13
+ }
14
+ //# sourceMappingURL=mock-connection-gater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-connection-gater.js","sourceRoot":"","sources":["../../../src/utils/mock-connection-gater.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACtD,iBAAiB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3D,qBAAqB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/D,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,8BAA8B,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACxE,+BAA+B,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACzE,6BAA6B,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACvE,8BAA8B,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QACxE,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;KAChE,CAAA;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { MultiaddrConnection } from '@libp2p/interfaces/transport';
2
+ import type { Connection } from '@libp2p/interfaces/connection';
3
+ import type { Muxer } from '@libp2p/interfaces/stream-muxer';
4
+ export declare function mockConnection(maConn: MultiaddrConnection, direction: 'inbound' | 'outbound', muxer: Muxer): Promise<Connection>;
5
+ //# sourceMappingURL=mock-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-connection.d.ts","sourceRoot":"","sources":["../../../src/utils/mock-connection.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,KAAK,EAAE,UAAU,EAAoC,MAAM,+BAA+B,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAE5D,wBAAsB,cAAc,CAAE,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,GAAG,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CA0DvI"}
@@ -0,0 +1,52 @@
1
+ import { PeerId } from '@libp2p/peer-id';
2
+ import { createEd25519PeerId } from '@libp2p/peer-id-factory';
3
+ import { pipe } from 'it-pipe';
4
+ export async function mockConnection(maConn, direction, muxer) {
5
+ const remoteAddr = maConn.remoteAddr;
6
+ const remotePeerIdStr = remoteAddr.getPeerId();
7
+ const remotePeer = remotePeerIdStr != null ? PeerId.fromString(remotePeerIdStr) : await createEd25519PeerId();
8
+ const streams = [];
9
+ let streamId = 0;
10
+ const registry = new Map();
11
+ void pipe(maConn, muxer, maConn);
12
+ return {
13
+ id: 'mock-connection',
14
+ remoteAddr,
15
+ remotePeer,
16
+ stat: {
17
+ status: 'OPEN',
18
+ direction,
19
+ timeline: maConn.timeline,
20
+ multiplexer: 'test-multiplexer',
21
+ encryption: 'yes-yes-very-secure'
22
+ },
23
+ registry,
24
+ tags: [],
25
+ streams,
26
+ newStream: async (protocols) => {
27
+ if (!Array.isArray(protocols)) {
28
+ protocols = [protocols];
29
+ }
30
+ if (protocols.length === 0) {
31
+ throw new Error('protocols must have a length');
32
+ }
33
+ const id = `${streamId++}`;
34
+ const stream = muxer.newStream(id);
35
+ const streamData = {
36
+ protocol: protocols[0],
37
+ stream
38
+ };
39
+ registry.set(id, streamData);
40
+ return streamData;
41
+ },
42
+ addStream: (stream, metadata) => {
43
+ },
44
+ removeStream: (id) => {
45
+ registry.delete(id);
46
+ },
47
+ close: async () => {
48
+ await maConn.close();
49
+ }
50
+ };
51
+ }
52
+ //# sourceMappingURL=mock-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-connection.js","sourceRoot":"","sources":["../../../src/utils/mock-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAK9B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAE,MAA2B,EAAE,SAAiC,EAAE,KAAY;IAChH,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;IACpC,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,EAAE,CAAA;IAC9C,MAAM,UAAU,GAAG,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,mBAAmB,EAAE,CAAA;IAE7G,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,IAAI,QAAQ,GAAG,CAAC,CAAA;IAEhB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;IAE1B,KAAK,IAAI,CACP,MAAM,EAAE,KAAK,EAAE,MAAM,CACtB,CAAA;IAED,OAAO;QACL,EAAE,EAAE,iBAAiB;QACrB,UAAU;QACV,UAAU;QACV,IAAI,EAAE;YACJ,MAAM,EAAE,MAAM;YACd,SAAS;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,kBAAkB;YAC/B,UAAU,EAAE,qBAAqB;SAClC;QACD,QAAQ;QACR,IAAI,EAAE,EAAE;QACR,OAAO;QACP,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBAC7B,SAAS,GAAG,CAAC,SAAS,CAAC,CAAA;aACxB;YAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;aAChD;YAED,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAW,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;YAC1C,MAAM,UAAU,GAAmB;gBACjC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;gBACtB,MAAM;aACP,CAAA;YAED,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;YAE5B,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,SAAS,EAAE,CAAC,MAAc,EAAE,QAAkB,EAAE,EAAE;QAElD,CAAC;QACD,YAAY,EAAE,CAAC,EAAU,EAAE,EAAE;YAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrB,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QACtB,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { MultiaddrConnection } from '@libp2p/interfaces/transport';
2
+ import type { Duplex } from 'it-stream-types';
3
+ export declare function mockMultiaddrConnection(source: Duplex<Uint8Array>): MultiaddrConnection;
4
+ //# sourceMappingURL=mock-multiaddr-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-multiaddr-connection.d.ts","sourceRoot":"","sources":["../../../src/utils/mock-multiaddr-connection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAE7C,wBAAgB,uBAAuB,CAAE,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,mBAAmB,CAaxF"}
@@ -0,0 +1,14 @@
1
+ import { Multiaddr } from '@multiformats/multiaddr';
2
+ export function mockMultiaddrConnection(source) {
3
+ const maConn = {
4
+ ...source,
5
+ async close() {
6
+ },
7
+ timeline: {
8
+ open: Date.now()
9
+ },
10
+ remoteAddr: new Multiaddr('/ip4/127.0.0.1/tcp/4001')
11
+ };
12
+ return maConn;
13
+ }
14
+ //# sourceMappingURL=mock-multiaddr-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-multiaddr-connection.js","sourceRoot":"","sources":["../../../src/utils/mock-multiaddr-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAInD,MAAM,UAAU,uBAAuB,CAAE,MAA0B;IACjE,MAAM,MAAM,GAAwB;QAClC,GAAG,MAAM;QACT,KAAK,CAAC,KAAK;QAEX,CAAC;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;SACjB;QACD,UAAU,EAAE,IAAI,SAAS,CAAC,yBAAyB,CAAC;KACrD,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Muxer } from '@libp2p/interfaces/stream-muxer';
2
+ export declare function mockMuxer(): Muxer;
3
+ //# sourceMappingURL=mock-muxer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-muxer.d.ts","sourceRoot":"","sources":["../../../src/utils/mock-muxer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAE5D,wBAAgB,SAAS,IAAK,KAAK,CAoClC"}
@@ -0,0 +1,37 @@
1
+ import { pair } from 'it-pair';
2
+ import { pushable } from 'it-pushable';
3
+ import drain from 'it-drain';
4
+ export function mockMuxer() {
5
+ let streamId = 0;
6
+ let streams = [];
7
+ const p = pushable();
8
+ const muxer = {
9
+ source: p,
10
+ sink: async (source) => {
11
+ await drain(source);
12
+ },
13
+ get streams() {
14
+ return streams;
15
+ },
16
+ newStream: (name) => {
17
+ const echo = pair();
18
+ const id = `${streamId++}`;
19
+ const stream = {
20
+ id,
21
+ sink: echo.sink,
22
+ source: echo.source,
23
+ close: () => {
24
+ streams = streams.filter(s => s !== stream);
25
+ },
26
+ abort: () => { },
27
+ reset: () => { },
28
+ timeline: {
29
+ open: 0
30
+ }
31
+ };
32
+ return stream;
33
+ }
34
+ };
35
+ return muxer;
36
+ }
37
+ //# sourceMappingURL=mock-muxer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-muxer.js","sourceRoot":"","sources":["../../../src/utils/mock-muxer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAAK,MAAM,UAAU,CAAA;AAI5B,MAAM,UAAU,SAAS;IACvB,IAAI,QAAQ,GAAG,CAAC,CAAA;IAChB,IAAI,OAAO,GAAa,EAAE,CAAA;IAC1B,MAAM,CAAC,GAAG,QAAQ,EAAc,CAAA;IAEhC,MAAM,KAAK,GAAU;QACnB,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACrB,MAAM,KAAK,CAAC,MAAM,CAAC,CAAA;QACrB,CAAC;QACD,IAAI,OAAO;YACT,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE;YAC3B,MAAM,IAAI,GAAG,IAAI,EAAc,CAAA;YAE/B,MAAM,EAAE,GAAG,GAAG,QAAQ,EAAE,EAAE,CAAA;YAC1B,MAAM,MAAM,GAAW;gBACrB,EAAE;gBACF,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,GAAG,EAAE;oBACV,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAA;gBAC7C,CAAC;gBACD,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;gBACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;gBACf,QAAQ,EAAE;oBACR,IAAI,EAAE,CAAC;iBACR;aACF,CAAA;YAED,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAA;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Upgrader } from '@libp2p/interfaces/transport';
2
+ import type { Muxer } from '@libp2p/interfaces/stream-muxer';
3
+ export interface MockUpgraderOptions {
4
+ muxer?: Muxer;
5
+ }
6
+ export declare function mockUpgrader(options?: MockUpgraderOptions): Upgrader;
7
+ //# sourceMappingURL=mock-upgrader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-upgrader.d.ts","sourceRoot":"","sources":["../../../src/utils/mock-upgrader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAuB,MAAM,8BAA8B,CAAA;AACjF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAA;AAE5D,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,wBAAgB,YAAY,CAAE,OAAO,GAAE,mBAAwB,YAsB9D"}
@@ -0,0 +1,24 @@
1
+ import { expect } from 'aegir/utils/chai.js';
2
+ import { mockMuxer } from './mock-muxer.js';
3
+ import { mockConnection } from './mock-connection.js';
4
+ export function mockUpgrader(options = {}) {
5
+ const ensureProps = (multiaddrConnection) => {
6
+ ['sink', 'source', 'remoteAddr', 'timeline', 'close'].forEach(prop => {
7
+ expect(multiaddrConnection).to.have.property(prop);
8
+ });
9
+ return multiaddrConnection;
10
+ };
11
+ const muxer = options.muxer ?? mockMuxer();
12
+ const upgrader = {
13
+ async upgradeOutbound(multiaddrConnection) {
14
+ ensureProps(multiaddrConnection);
15
+ return await mockConnection(multiaddrConnection, 'outbound', muxer);
16
+ },
17
+ async upgradeInbound(multiaddrConnection) {
18
+ ensureProps(multiaddrConnection);
19
+ return await mockConnection(multiaddrConnection, 'inbound', muxer);
20
+ }
21
+ };
22
+ return upgrader;
23
+ }
24
+ //# sourceMappingURL=mock-upgrader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-upgrader.js","sourceRoot":"","sources":["../../../src/utils/mock-upgrader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAQrD,MAAM,UAAU,YAAY,CAAE,UAA+B,EAAE;IAC7D,MAAM,WAAW,GAAG,CAAC,mBAAwC,EAAE,EAAE;QAC/D,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnE,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;QACF,OAAO,mBAAmB,CAAA;IAC5B,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE,CAAA;IAE1C,MAAM,QAAQ,GAAa;QACzB,KAAK,CAAC,eAAe,CAAE,mBAAmB;YACxC,WAAW,CAAC,mBAAmB,CAAC,CAAA;YAChC,OAAO,MAAM,cAAc,CAAC,mBAAmB,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;QACrE,CAAC;QACD,KAAK,CAAC,cAAc,CAAE,mBAAmB;YACvC,WAAW,CAAC,mBAAmB,CAAC,CAAA;YAChC,OAAO,MAAM,cAAc,CAAC,mBAAmB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;QACpE,CAAC;KACF,CAAA;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/interface-compliance-tests",
3
- "version": "1.0.5",
3
+ "version": "1.1.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-interfaces/tree/master/packages/libp2p-interface-compliance-tests#readme",
@@ -73,8 +73,12 @@
73
73
  "types": "./dist/src/stream-muxer/index.d.ts"
74
74
  },
75
75
  "./topology": {
76
- "import": "./dist/src/topology/index.js",
77
- "types": "./dist/src/topology/index.d.ts"
76
+ "import": "./dist/src/topology/topology.js",
77
+ "types": "./dist/src/topology/topology.d.ts"
78
+ },
79
+ "./topology/multicodec-toplogy": {
80
+ "import": "./dist/src/topology/multicodec-toplogy.js",
81
+ "types": "./dist/src/topology/multicodec-toplogy.d.ts"
78
82
  },
79
83
  "./transport": {
80
84
  "import": "./dist/src/transport/index.js",
@@ -84,6 +88,30 @@
84
88
  "import": "./dist/src/transport/utils/index.js",
85
89
  "types": "./dist/src/transport/utils/index.d.ts"
86
90
  },
91
+ "./utils/mock-connection": {
92
+ "import": "./dist/src/utils/mock-connection.js",
93
+ "types": "./dist/src/utils/mock-connection.d.ts"
94
+ },
95
+ "./utils/mock-connection-gater": {
96
+ "import": "./dist/src/utils/mock-connection-gater.js",
97
+ "types": "./dist/src/utils/mock-connection-gater.d.ts"
98
+ },
99
+ "./utils/mock-multiaddr-connection": {
100
+ "import": "./dist/src/utils/mock-multiaddr-connection.js",
101
+ "types": "./dist/src/utils/mock-multiaddr-connection.d.ts"
102
+ },
103
+ "./utils/mock-muxer": {
104
+ "import": "./dist/src/utils/mock-muxer.js",
105
+ "types": "./dist/src/utils/mock-muxer.d.ts"
106
+ },
107
+ "./utils/mock-peer-store": {
108
+ "import": "./dist/src/utils/mock-peer-store.js",
109
+ "types": "./dist/src/utils/mock-peer-store.d.ts"
110
+ },
111
+ "./utils/mock-upgrader": {
112
+ "import": "./dist/src/utils/mock-upgrader.js",
113
+ "types": "./dist/src/utils/mock-upgrader.d.ts"
114
+ },
87
115
  "./utils/peers": {
88
116
  "import": "./dist/src/utils/peers.js",
89
117
  "types": "./dist/src/utils/peers.d.ts"
@@ -190,13 +218,11 @@
190
218
  "test:electron-main": "npm run test -- -t electron-main"
191
219
  },
192
220
  "dependencies": {
193
- "@libp2p/connection": "^1.0.0",
194
221
  "@libp2p/crypto": "^0.22.2",
195
222
  "@libp2p/interfaces": "^1.0.0",
196
223
  "@libp2p/peer-id": "^1.0.0",
197
224
  "@libp2p/peer-id-factory": "^1.0.0",
198
- "@libp2p/pubsub": "^1.0.0",
199
- "@libp2p/topology": "^1.0.0",
225
+ "@libp2p/pubsub": "^1.1.0",
200
226
  "@multiformats/multiaddr": "^10.1.1",
201
227
  "abortable-iterator": "^4.0.0",
202
228
  "aegir": "^36.1.3",
@@ -207,11 +233,12 @@
207
233
  "it-map": "^1.0.6",
208
234
  "it-pair": "^2.0.0",
209
235
  "it-pipe": "^2.0.2",
236
+ "it-pushable": "^2.0.1",
210
237
  "multiformats": "^9.4.10",
211
238
  "p-defer": "^4.0.0",
212
239
  "p-limit": "^4.0.0",
213
240
  "p-wait-for": "^4.1.0",
214
- "sinon": "^12.0.1",
241
+ "sinon": "^13.0.0",
215
242
  "uint8arrays": "^3.0.0",
216
243
  "util": "^0.12.4"
217
244
  },
@@ -19,9 +19,7 @@ export default (test: TestSetup<Connection>) => {
19
19
 
20
20
  it('should have properties set', () => {
21
21
  expect(connection.id).to.exist()
22
- expect(connection.localPeer).to.exist()
23
22
  expect(connection.remotePeer).to.exist()
24
- expect(connection.localAddr).to.exist()
25
23
  expect(connection.remoteAddr).to.exist()
26
24
  expect(connection.stat.status).to.equal('OPEN')
27
25
  expect(connection.stat.timeline.open).to.exist()
@@ -10,7 +10,6 @@ export function createMaConnPair (): [MultiaddrConnection, MultiaddrConnection]
10
10
  const output: MultiaddrConnection = {
11
11
  ...duplex,
12
12
  close: async () => {},
13
- conn: {},
14
13
  remoteAddr: new Multiaddr('/ip4/127.0.0.1/tcp/4001'),
15
14
  timeline: {
16
15
  open: Date.now()
@@ -10,10 +10,11 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
10
10
  import { isValidTick } from '../transport/utils/index.js'
11
11
  import type { DeferredPromise } from 'p-defer'
12
12
  import type { TestSetup } from '../index.js'
13
- import type { Muxer, MuxerOptions, MuxedStream } from '@libp2p/interfaces/stream-muxer'
14
- import type { Source } from 'it-stream-types'
13
+ import type { Stream } from '@libp2p/interfaces/connection'
14
+ import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer'
15
+ import type { Source, Duplex } from 'it-stream-types'
15
16
 
16
- async function close (stream: MuxedStream) {
17
+ async function drainAndClose (stream: Duplex<Uint8Array>) {
17
18
  return await pipe([], stream, drain)
18
19
  }
19
20
 
@@ -22,8 +23,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
22
23
  it('Open a stream from the dialer', async () => {
23
24
  const p = duplexPair<Uint8Array>()
24
25
  const dialer = await common.setup()
25
- const onStreamPromise: DeferredPromise<MuxedStream> = defer()
26
- const onStreamEndPromise: DeferredPromise<MuxedStream> = defer()
26
+ const onStreamPromise: DeferredPromise<Stream> = defer()
27
+ const onStreamEndPromise: DeferredPromise<Stream> = defer()
27
28
 
28
29
  const listener = await common.setup({
29
30
  onStream: stream => {
@@ -34,18 +35,21 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
34
35
  }
35
36
  })
36
37
 
37
- void pipe(p[0], dialer.newStream('/test/stream'), p[0])
38
- void pipe(p[1], listener.newStream('/test/stream'), p[1])
38
+ void pipe(p[0], dialer, p[0])
39
+ void pipe(p[1], listener, p[1])
39
40
 
40
41
  const conn = dialer.newStream()
41
42
  expect(dialer.streams).to.include(conn)
42
43
  expect(isValidTick(conn.timeline.open)).to.equal(true)
43
44
 
45
+ void drainAndClose(conn)
46
+
44
47
  const stream = await onStreamPromise.promise
45
48
  expect(isValidTick(stream.timeline.open)).to.equal(true)
46
49
  // Make sure the stream is being tracked
47
50
  expect(listener.streams).to.include(stream)
48
- void close(stream)
51
+
52
+ void drainAndClose(stream)
49
53
 
50
54
  // Make sure stream is closed properly
51
55
  const endedStream = await onStreamEndPromise.promise
@@ -58,7 +62,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
58
62
  // Make sure the stream is removed from tracking
59
63
  expect(isValidTick(endedStream.timeline.close)).to.equal(true)
60
64
 
61
- await close(conn)
65
+ await drainAndClose(dialer)
66
+ await drainAndClose(listener)
62
67
 
63
68
  // ensure we have no streams left
64
69
  expect(dialer.streams).to.have.length(0)
@@ -67,7 +72,7 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
67
72
 
68
73
  it('Open a stream from the listener', async () => {
69
74
  const p = duplexPair<Uint8Array>()
70
- const onStreamPromise: DeferredPromise<MuxedStream> = defer()
75
+ const onStreamPromise: DeferredPromise<Stream> = defer()
71
76
  const dialer = await common.setup({
72
77
  onStream: stream => {
73
78
  onStreamPromise.resolve(stream)
@@ -76,24 +81,27 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
76
81
 
77
82
  const listener = await common.setup()
78
83
 
79
- void pipe(p[0], dialer.newStream('/test/stream'), p[0])
80
- void pipe(p[1], listener.newStream('/test/stream'), p[1])
84
+ void pipe(p[0], dialer, p[0])
85
+ void pipe(p[1], listener, p[1])
81
86
 
82
87
  const conn = listener.newStream()
83
88
 
89
+ void drainAndClose(conn)
90
+
84
91
  const stream = await onStreamPromise.promise
85
92
  expect(isValidTick(stream.timeline.open)).to.equal(true)
86
93
  expect(listener.streams).to.include(conn)
87
94
  expect(isValidTick(conn.timeline.open)).to.equal(true)
88
- await close(stream)
95
+ void drainAndClose(stream)
89
96
 
90
- await close(conn)
97
+ await drainAndClose(dialer)
98
+ await drainAndClose(listener)
91
99
  })
92
100
 
93
101
  it('Open a stream on both sides', async () => {
94
102
  const p = duplexPair<Uint8Array>()
95
- const onDialerStreamPromise: DeferredPromise<MuxedStream> = defer()
96
- const onListenerStreamPromise: DeferredPromise<MuxedStream> = defer()
103
+ const onDialerStreamPromise: DeferredPromise<Stream> = defer()
104
+ const onListenerStreamPromise: DeferredPromise<Stream> = defer()
97
105
  const dialer = await common.setup({
98
106
  onStream: stream => {
99
107
  onDialerStreamPromise.resolve(stream)
@@ -105,27 +113,30 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
105
113
  }
106
114
  })
107
115
 
108
- void pipe(p[0], dialer.newStream('/test/stream'), p[0])
109
- void pipe(p[1], listener.newStream('/test/stream'), p[1])
116
+ void pipe(p[0], dialer, p[0])
117
+ void pipe(p[1], listener, p[1])
110
118
 
111
119
  const listenerConn = listener.newStream()
112
120
  const dialerConn = dialer.newStream()
113
121
 
122
+ void drainAndClose(dialerConn)
123
+ void drainAndClose(listenerConn)
124
+
114
125
  const dialerStream = await onDialerStreamPromise.promise
115
126
  const listenerStream = await onListenerStreamPromise.promise
116
127
 
117
- await close(dialerStream)
118
- await close(listenerStream)
128
+ await drainAndClose(dialerStream)
129
+ await drainAndClose(listenerStream)
119
130
 
120
- await close(dialerConn)
121
- await close(listenerConn)
131
+ await drainAndClose(dialer)
132
+ await drainAndClose(listener)
122
133
  })
123
134
 
124
135
  it('Open a stream on one side, write, open a stream on the other side', async () => {
125
136
  const toString = (source: Source<Uint8Array>) => map(source, (u) => uint8ArrayToString(u))
126
137
  const p = duplexPair<Uint8Array>()
127
- const onDialerStreamPromise: DeferredPromise<MuxedStream> = defer()
128
- const onListenerStreamPromise: DeferredPromise<MuxedStream> = defer()
138
+ const onDialerStreamPromise: DeferredPromise<Stream> = defer()
139
+ const onListenerStreamPromise: DeferredPromise<Stream> = defer()
129
140
  const dialer = await common.setup({
130
141
  onStream: stream => {
131
142
  onDialerStreamPromise.resolve(stream)
@@ -137,8 +148,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
137
148
  }
138
149
  })
139
150
 
140
- void pipe(p[0], dialer.newStream('/test/stream'), p[0])
141
- void pipe(p[1], listener.newStream('/test/stream'), p[1])
151
+ void pipe(p[0], dialer, p[0])
152
+ void pipe(p[1], listener, p[1])
142
153
 
143
154
  const dialerConn = dialer.newStream()
144
155
  const listenerConn = listener.newStream()
@@ -4,9 +4,10 @@ import { duplexPair } from 'it-pair/duplex'
4
4
  import { abortableSource, abortableDuplex } from 'abortable-iterator'
5
5
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
6
6
  import drain from 'it-drain'
7
+ import { mockUpgrader, mockMultiaddrConnection } from '../transport/utils/index.js'
7
8
  import type { TestSetup } from '../index.js'
8
9
  import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer'
9
- import type { Connection } from '@libp2p/interfaces/connection'
10
+ import { expect } from 'aegir/utils/chai.js'
10
11
 
11
12
  async function pause (ms: number) {
12
13
  return await new Promise(resolve => setTimeout(resolve, ms))
@@ -27,30 +28,13 @@ const infiniteRandom = {
27
28
 
28
29
  export default (common: TestSetup<Muxer, MuxerOptions>) => {
29
30
  describe('close', () => {
30
- it('closing underlying socket closes streams (tcp)', async () => {
31
- const mockConn = (muxer: Muxer): Connection => {
32
- // @ts-expect-error not all Connection methods are implemented
33
- const connection: Connection = {
34
- newStream: async (multicodecs) => {
35
- return {
36
- protocol: multicodecs[0],
37
- stream: muxer.newStream(`${multicodecs[0]}`)
38
- }
39
- }
31
+ it('closing underlying socket closes streams', async () => {
32
+ const muxer = await common.setup({
33
+ onStream: (stream) => {
34
+ void pipe(stream, stream)
40
35
  }
41
-
42
- return connection
43
- }
44
-
45
- const mockUpgrade = async (maConn: any) => {
46
- const muxer = await common.setup({
47
- onStream: (stream) => {
48
- void pipe(stream, stream)
49
- }
50
- })
51
- pipe(maConn, muxer.newStream('/test/stream'), maConn)
52
- return mockConn(muxer)
53
- }
36
+ })
37
+ const upgrader = mockUpgrader({ muxer })
54
38
 
55
39
  const [local, remote] = duplexPair<Uint8Array>()
56
40
  const controller = new AbortController()
@@ -58,8 +42,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
58
42
  returnOnAbort: true
59
43
  })
60
44
 
61
- await mockUpgrade(abortableRemote)
62
- const dialerConn = await mockUpgrade(local)
45
+ await upgrader.upgradeInbound(mockMultiaddrConnection(abortableRemote))
46
+ const dialerConn = await upgrader.upgradeOutbound(mockMultiaddrConnection(local))
63
47
 
64
48
  const s1 = await dialerConn.newStream([''])
65
49
  const s2 = await dialerConn.newStream([''])
@@ -73,6 +57,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
73
57
  // test is complete when all muxed streams have closed
74
58
  await s1Result
75
59
  await s2Result
60
+
61
+ expect(muxer.streams).to.be.empty()
76
62
  })
77
63
 
78
64
  it('closing one of the muxed streams doesn\'t close others', async () => {
@@ -84,8 +70,8 @@ export default (common: TestSetup<Muxer, MuxerOptions>) => {
84
70
  onStream: async (stream) => await pipe(stream, stream)
85
71
  })
86
72
 
87
- void pipe(p[0], dialer.newStream('/test/stream'), p[0])
88
- void pipe(p[1], listener.newStream('/test/stream'), p[1])
73
+ void pipe(p[0], dialer, p[0])
74
+ void pipe(p[1], listener, p[1])
89
75
 
90
76
  const stream = dialer.newStream()
91
77
  const streams = Array.from(Array(5), () => dialer.newStream())
@@ -3,9 +3,9 @@ import closeTest from './close-test.js'
3
3
  import stressTest from './stress-test.js'
4
4
  import megaStressTest from './mega-stress-test.js'
5
5
  import type { TestSetup } from '../index.js'
6
- import type { Muxer } from '@libp2p/interfaces/stream-muxer'
6
+ import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer'
7
7
 
8
- export default (common: TestSetup<Muxer>) => {
8
+ export default (common: TestSetup<Muxer, MuxerOptions>) => {
9
9
  describe('interface-stream-muxer', () => {
10
10
  baseTest(common)
11
11
  closeTest(common)
@@ -1,4 +1,4 @@
1
- import spawn from './spawner'
1
+ import spawn from './spawner.js'
2
2
  import type { TestSetup } from '../index.js'
3
3
  import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer'
4
4
 
@@ -25,8 +25,8 @@ export default async (createMuxer: (options?: MuxerOptions) => Promise<Muxer>, n
25
25
 
26
26
  const dialer = await createMuxer()
27
27
 
28
- void pipe(listenerSocket, listener.newStream('/test/stream'), listenerSocket)
29
- void pipe(dialerSocket, dialer.newStream('/test/stream'), dialerSocket)
28
+ void pipe(listenerSocket, listener, listenerSocket)
29
+ void pipe(dialerSocket, dialer, dialerSocket)
30
30
 
31
31
  const spawnStream = async () => {
32
32
  const stream = dialer.newStream()
@@ -1,4 +1,4 @@
1
- import spawn from './spawner'
1
+ import spawn from './spawner.js'
2
2
  import type { TestSetup } from '../index.js'
3
3
  import type { Muxer, MuxerOptions } from '@libp2p/interfaces/stream-muxer'
4
4
 
@@ -49,7 +49,7 @@ export default (common: TestSetup<TransportTestFixtures, SetupArgs>) => {
49
49
  expect(upgradeSpy.callCount).to.equal(1)
50
50
  await expect(upgradeSpy.getCall(0).returnValue).to.eventually.equal(conn)
51
51
  expect(result.length).to.equal(1)
52
- expect(result[0].toString()).to.equal('hey')
52
+ expect(result[0]).to.equalBytes(uint8ArrayFromString('hey'))
53
53
  await conn.close()
54
54
  })
55
55