@libp2p/interop 11.0.0 → 12.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -7,6 +7,21 @@
7
7
 
8
8
  # About
9
9
 
10
+ <!--
11
+
12
+ !IMPORTANT!
13
+
14
+ Everything in this README between "# About" and "# Install" is automatically
15
+ generated and will be overwritten the next time the doc generator is run.
16
+
17
+ To make changes to this section, please update the @packageDocumentation section
18
+ of src/index.js or src/index.ts
19
+
20
+ To experiment with formatting, please run "npm run docs" from the root of this
21
+ repo and examine the changes made.
22
+
23
+ -->
24
+
10
25
  This repository holds interop tests for testing compatibility between different libp2p implementations.
11
26
 
12
27
  ## Example - How to run the tests
@@ -0,0 +1,3 @@
1
+ import type { DaemonFactory } from '../index.js';
2
+ export declare function connectTests(factory: DaemonFactory): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connect/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,aAAa,EAAyC,MAAM,aAAa,CAAA;AAE/F,wBAAgB,YAAY,CAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAgB1D"}
@@ -1,10 +1,17 @@
1
1
  import { expect } from 'aegir/chai';
2
- import { runTests } from './utils/test-matrix.js';
3
2
  export function connectTests(factory) {
4
- runTests('connect', runConnectTests, factory);
3
+ const nodeTypes = ['js', 'go'];
4
+ const transportTypes = ['tcp', 'webtransport'];
5
+ for (const typeA of nodeTypes) {
6
+ for (const typeB of nodeTypes) {
7
+ transportTypes.forEach(transport => {
8
+ runConnectTests(transport, factory, { type: typeA, transport }, { type: typeB, transport });
9
+ });
10
+ }
11
+ }
5
12
  }
6
13
  function runConnectTests(name, factory, optionsA, optionsB) {
7
- describe(name, () => {
14
+ describe(`connection.${name}`, () => {
8
15
  let daemonA;
9
16
  let daemonB;
10
17
  // Start Daemons
@@ -19,7 +26,7 @@ function runConnectTests(name, factory, optionsA, optionsB) {
19
26
  .filter(Boolean)
20
27
  .map(async (d) => { await d.stop(); }));
21
28
  });
22
- it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
29
+ it(`${optionsA.type} peer to ${optionsB.type} peer over ${name}`, async function () {
23
30
  this.timeout(10 * 1000);
24
31
  const identify1 = await daemonA.client.identify();
25
32
  const identify2 = await daemonB.client.identify();
@@ -42,4 +49,4 @@ function runConnectTests(name, factory, optionsA, optionsB) {
42
49
  });
43
50
  });
44
51
  }
45
- //# sourceMappingURL=connect.js.map
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connect/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"content-fetching.d.ts","sourceRoot":"","sources":["../../../src/dht/content-fetching.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAUhF,wBAAgB,oBAAoB,CAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAYlE"}
1
+ {"version":3,"file":"content-fetching.d.ts","sourceRoot":"","sources":["../../../src/dht/content-fetching.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAUhF,wBAAgB,oBAAoB,CAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAYlE"}
@@ -1,5 +1,6 @@
1
1
  /* eslint-env mocha */
2
2
  import { expect } from 'aegir/chai';
3
+ import delay from 'delay';
3
4
  import { concat as uint8ArrayConcat } from 'uint8arrays/concat';
4
5
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
5
6
  const record = {
@@ -21,27 +22,39 @@ function runContentFetchingTests(factory, optionsA, optionsB) {
21
22
  describe('dht.contentFetching', () => {
22
23
  let daemonA;
23
24
  let daemonB;
25
+ let daemonC;
26
+ let daemonD;
24
27
  // Start Daemons
25
28
  before(async function () {
26
29
  this.timeout(20 * 1000);
27
30
  daemonA = await factory.spawn(optionsA);
28
- daemonB = await factory.spawn(optionsB);
29
- // connect them
30
- const identify0 = await daemonA.client.identify();
31
- await daemonB.client.connect(identify0.peerId, identify0.addrs);
32
- // jsDaemon1 will take some time to get the peers
33
- await new Promise(resolve => setTimeout(resolve, 1000));
31
+ daemonB = await factory.spawn(optionsA);
32
+ daemonC = await factory.spawn(optionsB);
33
+ daemonD = await factory.spawn(optionsB);
34
+ const identifyA = await daemonA.client.identify();
35
+ const identifyB = await daemonB.client.identify();
36
+ const identifyC = await daemonC.client.identify();
37
+ const identifyD = await daemonD.client.identify();
38
+ // connect them A -> B -> C -> D
39
+ await daemonA.client.connect(identifyB.peerId, identifyB.addrs);
40
+ await daemonB.client.connect(identifyC.peerId, identifyC.addrs);
41
+ await daemonC.client.connect(identifyD.peerId, identifyD.addrs);
42
+ // wait for identify
43
+ await delay(1000);
44
+ // B can find D and C can find A, so their routing tables are not empty
45
+ await expect(daemonB.client.dht.findPeer(identifyD.peerId)).to.eventually.be.ok();
46
+ await expect(daemonC.client.dht.findPeer(identifyA.peerId)).to.eventually.be.ok();
34
47
  });
35
48
  // Stop daemons
36
49
  after(async function () {
37
- await Promise.all([daemonA, daemonB]
50
+ await Promise.all([daemonA, daemonB, daemonC, daemonD]
38
51
  .filter(Boolean)
39
52
  .map(async (d) => { await d.stop(); }));
40
53
  });
41
54
  it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
42
55
  this.timeout(10 * 1000);
43
- await daemonA.client.dht.put(record.key, record.value);
44
- const data = await daemonB.client.dht.get(record.key);
56
+ await daemonB.client.dht.put(record.key, record.value);
57
+ const data = await daemonC.client.dht.get(record.key);
45
58
  expect(data).to.equalBytes(record.value);
46
59
  });
47
60
  });
@@ -1 +1 @@
1
- {"version":3,"file":"content-fetching.js","sourceRoot":"","sources":["../../../src/dht/content-fetching.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAG5E,MAAM,MAAM,GAAG;IACb,GAAG,EAAE,gBAAgB,CAAC;QACpB,oBAAoB,CAAC,MAAM,CAAC;QAC5B,oBAAoB,CAAC,sDAAsD,EAAE,QAAQ,CAAC;KACvF,CAAC;IACF,KAAK,EAAE,oBAAoB,CAAC,wlBAAwlB,EAAE,KAAK,CAAC;CAC7nB,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAE,OAAsB;IAC1D,MAAM,SAAS,GAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAE1C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,uBAAuB,CACrB,OAAO,EACP,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1B,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAC3B,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAE,OAAsB,EAAE,QAAsB,EAAE,QAAsB;IACtG,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,IAAI,OAAe,CAAA;QACnB,IAAI,OAAe,CAAA;QAEnB,gBAAgB;QAChB,MAAM,CAAC,KAAK;YACV,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;YAEvB,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACvC,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YAEvC,eAAe;YACf,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YAEjD,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;YAE/D,iDAAiD;YACjD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QAEF,eAAe;QACf,KAAK,CAAC,KAAK;YACT,MAAM,OAAO,CAAC,GAAG,CACf,CAAC,OAAO,EAAE,OAAO,CAAC;iBACf,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA,CAAC,CAAC,CAAC,CACtC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,YAAY,QAAQ,CAAC,IAAI,OAAO,EAAE,KAAK;YACxD,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;YAEvB,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YAEtD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"content-fetching.js","sourceRoot":"","sources":["../../../src/dht/content-fetching.ts"],"names":[],"mappings":"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"}
@@ -41,7 +41,7 @@
41
41
  *
42
42
  * For an example, see the js-libp2p interop test runner.
43
43
  */
44
- import { connectTests } from './connect.js';
44
+ import { connectTests } from './connect/index.js';
45
45
  import { dhtTests } from './dht/index.js';
46
46
  import { pubsubTests } from './pubsub/index.js';
47
47
  import { relayTests } from './relay/index.js';
@@ -56,6 +56,7 @@ export type PeerIdType = 'rsa' | 'ed25519' | 'secp256k1';
56
56
  export type PubSubRouter = 'gossipsub' | 'floodsub';
57
57
  export type Muxer = 'mplex' | 'yamux';
58
58
  export type Encryption = 'noise' | 'tls';
59
+ export type TransportType = 'tcp' | 'webtransport';
59
60
  export interface SpawnOptions {
60
61
  type: NodeType;
61
62
  key?: string;
@@ -66,6 +67,7 @@ export interface SpawnOptions {
66
67
  muxer?: Muxer;
67
68
  relay?: boolean;
68
69
  noListen?: boolean;
70
+ transport?: TransportType;
69
71
  }
70
72
  export interface DaemonFactory {
71
73
  spawn(options: SpawnOptions): Promise<Daemon>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,MAAM;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,MAAM,EAAE,YAAY,CAAA;CACrB;AAED,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAA;AAClC,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CAAA;AACxD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,CAAA;AACnD,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,CAAA;AACrC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,KAAK,CAAA;AAExC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IAGf,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC9C;AAED,wBAAsB,YAAY,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;AAED,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,QAAQ,IAAI,eAAe,EAC3B,WAAW,IAAI,kBAAkB,EACjC,WAAW,IAAI,kBAAkB,EACjC,UAAU,IAAI,iBAAiB,EAChC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,MAAM;IACrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,MAAM,EAAE,YAAY,CAAA;CACrB;AAED,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAA;AAClC,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CAAA;AACxD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,CAAA;AACnD,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,CAAA;AACrC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,KAAK,CAAA;AACxC,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,cAAc,CAAA;AAElD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IAGf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,aAAa,CAAA;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC9C;AAED,wBAAsB,YAAY,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;AAED,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,QAAQ,IAAI,eAAe,EAC3B,WAAW,IAAI,kBAAkB,EACjC,WAAW,IAAI,kBAAkB,EACjC,UAAU,IAAI,iBAAiB,EAChC,CAAA"}
package/dist/src/index.js CHANGED
@@ -41,7 +41,7 @@
41
41
  *
42
42
  * For an example, see the js-libp2p interop test runner.
43
43
  */
44
- import { connectTests } from './connect.js';
44
+ import { connectTests } from './connect/index.js';
45
45
  import { dhtTests } from './dht/index.js';
46
46
  import { pubsubTests } from './pubsub/index.js';
47
47
  import { relayTests } from './relay/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAgChD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,OAAsB;IACxD,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,UAAU,CAAC,OAAO,CAAC,CAAA;IACnB,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;IACvB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;IAC1B,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AAED,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,QAAQ,IAAI,eAAe,EAC3B,WAAW,IAAI,kBAAkB,EACjC,WAAW,IAAI,kBAAkB,EACjC,UAAU,IAAI,iBAAiB,EAChC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAkChD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAE,OAAsB;IACxD,YAAY,CAAC,OAAO,CAAC,CAAA;IACrB,UAAU,CAAC,OAAO,CAAC,CAAA;IACnB,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;IACvB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;IAC1B,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC;AAED,OAAO,EACL,YAAY,IAAI,mBAAmB,EACnC,QAAQ,IAAI,eAAe,EAC3B,WAAW,IAAI,kBAAkB,EACjC,WAAW,IAAI,kBAAkB,EACjC,UAAU,IAAI,iBAAiB,EAChC,CAAA"}
@@ -15,6 +15,8 @@
15
15
  ".:PeerIdType": "https://libp2p.github.io/interop/types/PeerIdType.html",
16
16
  "PubSubRouter": "https://libp2p.github.io/interop/types/PubSubRouter.html",
17
17
  ".:PubSubRouter": "https://libp2p.github.io/interop/types/PubSubRouter.html",
18
+ "TransportType": "https://libp2p.github.io/interop/types/TransportType.html",
19
+ ".:TransportType": "https://libp2p.github.io/interop/types/TransportType.html",
18
20
  "connectInteropTests": "https://libp2p.github.io/interop/functions/connectInteropTests.html",
19
21
  "dhtInteropTests": "https://libp2p.github.io/interop/functions/dhtInteropTests.html",
20
22
  "interopTests": "https://libp2p.github.io/interop/functions/interopTests.html",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/interop",
3
- "version": "11.0.0",
3
+ "version": "12.0.1",
4
4
  "description": "Interoperability Tests for libp2p",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/interop#readme",
@@ -1,13 +1,26 @@
1
1
  import { expect } from 'aegir/chai'
2
- import { runTests } from './utils/test-matrix.js'
3
- import type { Daemon, SpawnOptions, DaemonFactory } from './index.js'
2
+ import type { Daemon, DaemonFactory, NodeType, SpawnOptions, TransportType } from '../index.js'
4
3
 
5
4
  export function connectTests (factory: DaemonFactory): void {
6
- runTests('connect', runConnectTests, factory)
5
+ const nodeTypes: NodeType[] = ['js', 'go']
6
+ const transportTypes: TransportType[] = ['tcp', 'webtransport']
7
+
8
+ for (const typeA of nodeTypes) {
9
+ for (const typeB of nodeTypes) {
10
+ transportTypes.forEach(transport => {
11
+ runConnectTests(
12
+ transport,
13
+ factory,
14
+ { type: typeA, transport },
15
+ { type: typeB, transport }
16
+ )
17
+ })
18
+ }
19
+ }
7
20
  }
8
21
 
9
22
  function runConnectTests (name: string, factory: DaemonFactory, optionsA: SpawnOptions, optionsB: SpawnOptions): void {
10
- describe(name, () => {
23
+ describe(`connection.${name}`, () => {
11
24
  let daemonA: Daemon
12
25
  let daemonB: Daemon
13
26
 
@@ -28,7 +41,7 @@ function runConnectTests (name: string, factory: DaemonFactory, optionsA: SpawnO
28
41
  )
29
42
  })
30
43
 
31
- it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
44
+ it(`${optionsA.type} peer to ${optionsB.type} peer over ${name}`, async function () {
32
45
  this.timeout(10 * 1000)
33
46
 
34
47
  const identify1 = await daemonA.client.identify()
@@ -1,6 +1,7 @@
1
1
  /* eslint-env mocha */
2
2
 
3
3
  import { expect } from 'aegir/chai'
4
+ import delay from 'delay'
4
5
  import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
5
6
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
6
7
  import type { Daemon, DaemonFactory, NodeType, SpawnOptions } from '../index.js'
@@ -31,27 +32,40 @@ function runContentFetchingTests (factory: DaemonFactory, optionsA: SpawnOptions
31
32
  describe('dht.contentFetching', () => {
32
33
  let daemonA: Daemon
33
34
  let daemonB: Daemon
35
+ let daemonC: Daemon
36
+ let daemonD: Daemon
34
37
 
35
38
  // Start Daemons
36
39
  before(async function () {
37
40
  this.timeout(20 * 1000)
38
41
 
39
42
  daemonA = await factory.spawn(optionsA)
40
- daemonB = await factory.spawn(optionsB)
43
+ daemonB = await factory.spawn(optionsA)
44
+ daemonC = await factory.spawn(optionsB)
45
+ daemonD = await factory.spawn(optionsB)
41
46
 
42
- // connect them
43
- const identify0 = await daemonA.client.identify()
47
+ const identifyA = await daemonA.client.identify()
48
+ const identifyB = await daemonB.client.identify()
49
+ const identifyC = await daemonC.client.identify()
50
+ const identifyD = await daemonD.client.identify()
44
51
 
45
- await daemonB.client.connect(identify0.peerId, identify0.addrs)
52
+ // connect them A -> B -> C -> D
53
+ await daemonA.client.connect(identifyB.peerId, identifyB.addrs)
54
+ await daemonB.client.connect(identifyC.peerId, identifyC.addrs)
55
+ await daemonC.client.connect(identifyD.peerId, identifyD.addrs)
46
56
 
47
- // jsDaemon1 will take some time to get the peers
48
- await new Promise(resolve => setTimeout(resolve, 1000))
57
+ // wait for identify
58
+ await delay(1000)
59
+
60
+ // B can find D and C can find A, so their routing tables are not empty
61
+ await expect(daemonB.client.dht.findPeer(identifyD.peerId)).to.eventually.be.ok()
62
+ await expect(daemonC.client.dht.findPeer(identifyA.peerId)).to.eventually.be.ok()
49
63
  })
50
64
 
51
65
  // Stop daemons
52
66
  after(async function () {
53
67
  await Promise.all(
54
- [daemonA, daemonB]
68
+ [daemonA, daemonB, daemonC, daemonD]
55
69
  .filter(Boolean)
56
70
  .map(async d => { await d.stop() })
57
71
  )
@@ -60,9 +74,9 @@ function runContentFetchingTests (factory: DaemonFactory, optionsA: SpawnOptions
60
74
  it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
61
75
  this.timeout(10 * 1000)
62
76
 
63
- await daemonA.client.dht.put(record.key, record.value)
77
+ await daemonB.client.dht.put(record.key, record.value)
64
78
 
65
- const data = await daemonB.client.dht.get(record.key)
79
+ const data = await daemonC.client.dht.get(record.key)
66
80
  expect(data).to.equalBytes(record.value)
67
81
  })
68
82
  })
package/src/index.ts CHANGED
@@ -42,7 +42,7 @@
42
42
  * For an example, see the js-libp2p interop test runner.
43
43
  */
44
44
 
45
- import { connectTests } from './connect.js'
45
+ import { connectTests } from './connect/index.js'
46
46
  import { dhtTests } from './dht/index.js'
47
47
  import { pubsubTests } from './pubsub/index.js'
48
48
  import { relayTests } from './relay/index.js'
@@ -59,6 +59,7 @@ export type PeerIdType = 'rsa' | 'ed25519' | 'secp256k1'
59
59
  export type PubSubRouter = 'gossipsub' | 'floodsub'
60
60
  export type Muxer = 'mplex' | 'yamux'
61
61
  export type Encryption = 'noise' | 'tls'
62
+ export type TransportType = 'tcp' | 'webtransport'
62
63
 
63
64
  export interface SpawnOptions {
64
65
  type: NodeType
@@ -72,6 +73,7 @@ export interface SpawnOptions {
72
73
  // the node will not listen on any
73
74
  // addresses if true
74
75
  noListen?: boolean
76
+ transport?: TransportType
75
77
  }
76
78
 
77
79
  export interface DaemonFactory {
@@ -1,3 +0,0 @@
1
- import type { DaemonFactory } from './index.js';
2
- export declare function connectTests(factory: DaemonFactory): void;
3
- //# sourceMappingURL=connect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwB,aAAa,EAAE,MAAM,YAAY,CAAA;AAErE,wBAAgB,YAAY,CAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAE1D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"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"}