@libp2p/interop 11.0.0 → 12.0.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/README.md +15 -0
- package/dist/src/connect/index.d.ts +3 -0
- package/dist/src/connect/index.d.ts.map +1 -0
- package/dist/src/{connect.js → connect/index.js} +12 -5
- package/dist/src/connect/index.js.map +1 -0
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/typedoc-urls.json +2 -0
- package/package.json +1 -1
- package/src/{connect.ts → connect/index.ts} +18 -5
- package/src/index.ts +3 -1
- package/dist/src/connect.d.ts +0 -3
- package/dist/src/connect.d.ts.map +0 -1
- package/dist/src/connect.js.map +0 -1
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 @@
|
|
|
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
|
-
|
|
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=
|
|
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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"}
|
package/dist/src/index.d.ts
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';
|
|
@@ -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>;
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
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';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
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"}
|
package/dist/typedoc-urls.json
CHANGED
|
@@ -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,13 +1,26 @@
|
|
|
1
1
|
import { expect } from 'aegir/chai'
|
|
2
|
-
import {
|
|
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
|
-
|
|
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()
|
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 {
|
package/dist/src/connect.d.ts
DELETED
|
@@ -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"}
|
package/dist/src/connect.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"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"}
|