@libp2p/interop 0.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/LICENSE +4 -0
- package/README.md +60 -0
- package/dist/src/connect.d.ts +3 -0
- package/dist/src/connect.d.ts.map +1 -0
- package/dist/src/connect.js +54 -0
- package/dist/src/connect.js.map +1 -0
- package/dist/src/dht/content-fetching.d.ts +3 -0
- package/dist/src/dht/content-fetching.d.ts.map +1 -0
- package/dist/src/dht/content-fetching.js +50 -0
- package/dist/src/dht/content-fetching.js.map +1 -0
- package/dist/src/dht/content-routing.d.ts +3 -0
- package/dist/src/dht/content-routing.d.ts.map +1 -0
- package/dist/src/dht/content-routing.js +50 -0
- package/dist/src/dht/content-routing.js.map +1 -0
- package/dist/src/dht/index.d.ts +3 -0
- package/dist/src/dht/index.d.ts.map +1 -0
- package/dist/src/dht/index.js +9 -0
- package/dist/src/dht/index.js.map +1 -0
- package/dist/src/dht/peer-routing.d.ts +3 -0
- package/dist/src/dht/peer-routing.d.ts.map +1 -0
- package/dist/src/dht/peer-routing.js +44 -0
- package/dist/src/dht/peer-routing.js.map +1 -0
- package/dist/src/index.d.ts +20 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/pubsub/floodsub.d.ts +3 -0
- package/dist/src/pubsub/floodsub.d.ts.map +1 -0
- package/dist/src/pubsub/floodsub.js +52 -0
- package/dist/src/pubsub/floodsub.js.map +1 -0
- package/dist/src/pubsub/gossipsub.d.ts +3 -0
- package/dist/src/pubsub/gossipsub.d.ts.map +1 -0
- package/dist/src/pubsub/gossipsub.js +52 -0
- package/dist/src/pubsub/gossipsub.js.map +1 -0
- package/dist/src/pubsub/hybrid.d.ts +3 -0
- package/dist/src/pubsub/hybrid.d.ts.map +1 -0
- package/dist/src/pubsub/hybrid.js +52 -0
- package/dist/src/pubsub/hybrid.js.map +1 -0
- package/dist/src/pubsub/index.d.ts +3 -0
- package/dist/src/pubsub/index.d.ts.map +1 -0
- package/dist/src/pubsub/index.js +9 -0
- package/dist/src/pubsub/index.js.map +1 -0
- package/dist/src/resources/keys/go.ed25519.key +1 -0
- package/dist/src/resources/keys/go.rsa.key +0 -0
- package/dist/src/resources/keys/go.secp256k1.key +1 -0
- package/dist/src/resources/keys/index.d.ts +5 -0
- package/dist/src/resources/keys/index.d.ts.map +1 -0
- package/dist/src/resources/keys/index.js +18 -0
- package/dist/src/resources/keys/index.js.map +1 -0
- package/dist/src/resources/keys/js.ed25519.key +1 -0
- package/dist/src/resources/keys/js.rsa.key +0 -0
- package/dist/src/resources/keys/js.secp256k1.key +1 -0
- package/dist/src/utils/dht-record.d.ts +6 -0
- package/dist/src/utils/dht-record.d.ts.map +1 -0
- package/dist/src/utils/dht-record.js +10 -0
- package/dist/src/utils/dht-record.js.map +1 -0
- package/package.json +151 -0
- package/src/connect.ts +75 -0
- package/src/dht/content-fetching.ts +70 -0
- package/src/dht/content-routing.ts +74 -0
- package/src/dht/index.ts +10 -0
- package/src/dht/peer-routing.ts +63 -0
- package/src/index.ts +31 -0
- package/src/pubsub/floodsub.ts +70 -0
- package/src/pubsub/gossipsub.ts +70 -0
- package/src/pubsub/hybrid.ts +70 -0
- package/src/pubsub/index.ts +10 -0
- package/src/resources/keys/go.ed25519.key +1 -0
- package/src/resources/keys/go.rsa.key +0 -0
- package/src/resources/keys/go.secp256k1.key +1 -0
- package/src/resources/keys/index.ts +24 -0
- package/src/resources/keys/js.ed25519.key +1 -0
- package/src/resources/keys/js.rsa.key +0 -0
- package/src/resources/keys/js.secp256k1.key +1 -0
- package/src/utils/dht-record.ts +10 -0
package/LICENSE
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Interoperability Tests for libp2p
|
|
2
|
+
|
|
3
|
+
[](https://protocol.ai/)
|
|
4
|
+
[](http://libp2p.io/)
|
|
5
|
+
[](http://webchat.freenode.net/?channels=%23libp2p)
|
|
6
|
+
[](https://discuss.libp2p.io)
|
|
7
|
+
|
|
8
|
+
> Interoperability tests for libp2p Implementations
|
|
9
|
+
|
|
10
|
+
This repository will be used for interop tests.
|
|
11
|
+
|
|
12
|
+
## Lead Maintainer
|
|
13
|
+
|
|
14
|
+
[Vasco Santos](https://github.com/vasco-santos)
|
|
15
|
+
|
|
16
|
+
## Usage
|
|
17
|
+
|
|
18
|
+
### Install
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
> git clone git@github.com:libp2p/interop.git
|
|
22
|
+
> cd interop
|
|
23
|
+
> npm install
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Run the tests
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
> npm test
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
#### Testing local daemons
|
|
33
|
+
|
|
34
|
+
It is possible to test local versions of the go and js daemons exporting the respective path before running the tests.
|
|
35
|
+
|
|
36
|
+
**Specifying the go-libp2p daemon**
|
|
37
|
+
See the go-libp2p-daemon [install instructions](https://github.com/libp2p/go-libp2p-daemon#install) for building the local binary.
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
$ LIBP2P_GO_BIN=$GOPATH/bin/p2pd npm run test
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Specifying the js-libp2p daemon**
|
|
44
|
+
From the js-libp2p-daemon local repo checkout you can perform an `npm link` to create a binary, `jsp2pd` in the global npm space.
|
|
45
|
+
|
|
46
|
+
```sh
|
|
47
|
+
$ LIBP2P_JS_BIN=$(which jsp2pd) npm run test
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Contribute
|
|
51
|
+
|
|
52
|
+
Feel free to join in. All welcome. Open an [issue](https://github.com/ipfs/ipfs-interop/issues)!
|
|
53
|
+
|
|
54
|
+
This repository falls under the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).
|
|
55
|
+
|
|
56
|
+
[](https://github.com/ipfs/community/blob/master/contributing.md)
|
|
57
|
+
|
|
58
|
+
## License
|
|
59
|
+
|
|
60
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkC,aAAa,EAAc,MAAM,YAAY,CAAA;AAG3F,wBAAgB,YAAY,CAAE,OAAO,EAAE,aAAa,QAgBnD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { expect } from 'aegir/utils/chai.js';
|
|
2
|
+
import { keys } from './resources/keys/index.js';
|
|
3
|
+
export function connectTests(factory) {
|
|
4
|
+
const keyTypes = ['ed25519', 'rsa', 'secp256k1'];
|
|
5
|
+
const impls = ['js', 'go'];
|
|
6
|
+
for (const keyType of keyTypes) {
|
|
7
|
+
for (const implA of impls) {
|
|
8
|
+
for (const implB of impls) {
|
|
9
|
+
runConnectTests(`noise/${keyType}`, factory, { type: implA, noise: true, key: keys.go[keyType] }, { type: implB, noise: true, key: keys.js[keyType] });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function runConnectTests(name, factory, optionsA, optionsB) {
|
|
15
|
+
describe(`connect using ${name}`, () => {
|
|
16
|
+
let daemons;
|
|
17
|
+
// Start Daemons
|
|
18
|
+
before(async function () {
|
|
19
|
+
this.timeout(20 * 1000);
|
|
20
|
+
daemons = await Promise.all([
|
|
21
|
+
factory.spawn(optionsA),
|
|
22
|
+
factory.spawn(optionsB)
|
|
23
|
+
]);
|
|
24
|
+
});
|
|
25
|
+
// Stop daemons
|
|
26
|
+
after(async function () {
|
|
27
|
+
if (daemons != null) {
|
|
28
|
+
await Promise.all(daemons.map(async (daemon) => await daemon.stop()));
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
|
|
32
|
+
this.timeout(10 * 1000);
|
|
33
|
+
const identify1 = await daemons[0].client.identify();
|
|
34
|
+
const identify2 = await daemons[1].client.identify();
|
|
35
|
+
// verify connected peers
|
|
36
|
+
const knownPeersBeforeConnect1 = await daemons[0].client.listPeers();
|
|
37
|
+
expect(knownPeersBeforeConnect1).to.have.lengthOf(0);
|
|
38
|
+
const knownPeersBeforeConnect2 = await daemons[1].client.listPeers();
|
|
39
|
+
expect(knownPeersBeforeConnect2).to.have.lengthOf(0);
|
|
40
|
+
// connect peers
|
|
41
|
+
await daemons[0].client.connect(identify2.peerId, identify2.addrs);
|
|
42
|
+
// daemons[0] will take some time to get the peers
|
|
43
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
44
|
+
// verify connected peers
|
|
45
|
+
const knownPeersAfterConnect1 = await daemons[0].client.listPeers();
|
|
46
|
+
expect(knownPeersAfterConnect1).to.have.lengthOf(1);
|
|
47
|
+
expect(knownPeersAfterConnect1[0].toString()).to.equal(identify2.peerId.toString());
|
|
48
|
+
const knownPeersAfterConnect2 = await daemons[1].client.listPeers();
|
|
49
|
+
expect(knownPeersAfterConnect2).to.have.lengthOf(1);
|
|
50
|
+
expect(knownPeersAfterConnect2[0].toString()).to.equal(identify1.peerId.toString());
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAA;AAEhD,MAAM,UAAU,YAAY,CAAE,OAAsB;IAClD,MAAM,QAAQ,GAAiB,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;IAC9D,MAAM,KAAK,GAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAEtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;YACzB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE;gBACzB,eAAe,CACb,SAAS,OAAO,EAAE,EAClB,OAAO,EACP,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EACnD,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CACpD,CAAA;aACF;SACF;KACF;AACH,CAAC;AAED,SAAS,eAAe,CAAE,IAAY,EAAE,OAAsB,EAAE,QAAsB,EAAE,QAAsB;IAC5G,QAAQ,CAAC,iBAAiB,IAAI,EAAE,EAAE,GAAG,EAAE;QACrC,IAAI,OAAiB,CAAA;QAErB,gBAAgB;QAChB,MAAM,CAAC,KAAK;YACV,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;YAEvB,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;aACxB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,eAAe;QACf,KAAK,CAAC,KAAK;YACT,IAAI,OAAO,IAAI,IAAI,EAAE;gBACnB,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CACnD,CAAA;aACF;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,SAAS,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YACpD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YAEpD,yBAAyB;YACzB,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;YACpE,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAEpD,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;YACpE,MAAM,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAEpD,gBAAgB;YAChB,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;YAElE,kDAAkD;YAClD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;YAEvD,yBAAyB;YACzB,MAAM,uBAAuB,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;YACnE,MAAM,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;YAEnF,MAAM,uBAAuB,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;YACnE,MAAM,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-fetching.d.ts","sourceRoot":"","sources":["../../../src/dht/content-fetching.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAYhF,wBAAgB,oBAAoB,CAAE,OAAO,EAAE,aAAa,QAY3D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* eslint-env mocha */
|
|
2
|
+
import { expect } from 'aegir/utils/chai.js';
|
|
3
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
4
|
+
import { concat as uint8ArrayConcat } from 'uint8arrays/concat';
|
|
5
|
+
const record = {
|
|
6
|
+
key: uint8ArrayConcat([
|
|
7
|
+
uint8ArrayFromString('/pk/'),
|
|
8
|
+
uint8ArrayFromString('muft89xjpybos8eas1vaq2xrbsx2vkll7is4ocy7pia5fsjlt3c2', 'base36')
|
|
9
|
+
]),
|
|
10
|
+
value: uint8ArrayFromString('080012a60230820122300d06092a864886f70d01010105000382010f003082010a0282010100c2588f998971dac9e3eef76a311bf9159505aff69ea3b664c55a36aa28ee08de1127228a4d431bb9c0840240c75f6e98a0843a78d945491a3ea5e1f7cee2bc71383510db5290702383975b7bffae9fb40c84cc1220fb4a7db862fffb0de42f8fd8fb33a17deb20f30e2d0f194791fe69355a392f77df35f101e08a2fc95b2c018768938814fcb52482f899f5e90a1905e8abbcdbb1647ad80a5b0417e1ce8320d64197a6ba3848926375c63adebabdf6eb82109bcadfee13b62bf922bbb6f74c1a26c9bc6122d1436787e0e6de3c152b1959701092abef84599f73eaedb2fcef9f87293e1bbe8e0fef3f1a7fd2e8b94c7e633f88473644a63cb948e4d25c54490203010001', 'hex')
|
|
11
|
+
};
|
|
12
|
+
export function contentFetchingTests(factory) {
|
|
13
|
+
const nodeTypes = ['js', 'go'];
|
|
14
|
+
for (const typeA of nodeTypes) {
|
|
15
|
+
for (const typeB of nodeTypes) {
|
|
16
|
+
runContentFetchingTests(factory, { type: typeA, dht: true }, { type: typeB, dht: true });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function runContentFetchingTests(factory, optionsA, optionsB) {
|
|
21
|
+
describe('dht.contentFetching', () => {
|
|
22
|
+
let daemons;
|
|
23
|
+
// Start Daemons
|
|
24
|
+
before(async function () {
|
|
25
|
+
this.timeout(20 * 1000);
|
|
26
|
+
daemons = await Promise.all([
|
|
27
|
+
factory.spawn(optionsA),
|
|
28
|
+
factory.spawn(optionsB)
|
|
29
|
+
]);
|
|
30
|
+
// connect them
|
|
31
|
+
const identify0 = await daemons[0].client.identify();
|
|
32
|
+
await daemons[1].client.connect(identify0.peerId, identify0.addrs);
|
|
33
|
+
// jsDaemon1 will take some time to get the peers
|
|
34
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
35
|
+
});
|
|
36
|
+
// Stop daemons
|
|
37
|
+
after(async function () {
|
|
38
|
+
if (daemons != null) {
|
|
39
|
+
await Promise.all(daemons.map(async (daemon) => await daemon.stop()));
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
|
|
43
|
+
this.timeout(10 * 1000);
|
|
44
|
+
await daemons[0].client.dht.put(record.key, record.value);
|
|
45
|
+
const data = await daemons[1].client.dht.get(record.key);
|
|
46
|
+
expect(data).to.equalBytes(record.value);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=content-fetching.js.map
|
|
@@ -0,0 +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,qBAAqB,CAAA;AAE5C,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE/D,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;QAC7B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;YAC7B,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;SACF;KACF;AACH,CAAC;AAED,SAAS,uBAAuB,CAAE,OAAsB,EAAE,QAAsB,EAAE,QAAsB;IACtG,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,IAAI,OAAiB,CAAA;QAErB,gBAAgB;QAChB,MAAM,CAAC,KAAK;YACV,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;YAEvB,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;aACxB,CAAC,CAAA;YAEF,eAAe;YACf,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YAEpD,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;YAElE,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,IAAI,OAAO,IAAI,IAAI,EAAE;gBACnB,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CACnD,CAAA;aACF;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,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;YAEzD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACxD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-routing.d.ts","sourceRoot":"","sources":["../../../src/dht/content-routing.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAGhF,wBAAgB,mBAAmB,CAAE,OAAO,EAAE,aAAa,QAiB1D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* eslint-env mocha */
|
|
2
|
+
import { expect } from 'aegir/utils/chai.js';
|
|
3
|
+
import { CID } from 'multiformats/cid';
|
|
4
|
+
import all from 'it-all';
|
|
5
|
+
export function contentRoutingTests(factory) {
|
|
6
|
+
const nodeTypes = ['js', 'go'];
|
|
7
|
+
for (const typeA of nodeTypes) {
|
|
8
|
+
for (const typeB of nodeTypes) {
|
|
9
|
+
if (typeA === 'go' && typeB === 'go') {
|
|
10
|
+
// skip go<->go as it never seems to populate the routing tables
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
runContentRoutingTests(factory, { type: typeA, dht: true }, { type: typeB, dht: true });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function runContentRoutingTests(factory, optionsA, optionsB) {
|
|
18
|
+
describe('dht.contentRouting', () => {
|
|
19
|
+
let daemons;
|
|
20
|
+
let identify;
|
|
21
|
+
// Start Daemons
|
|
22
|
+
before(async function () {
|
|
23
|
+
this.timeout(20 * 1000);
|
|
24
|
+
daemons = await Promise.all([
|
|
25
|
+
factory.spawn(optionsA),
|
|
26
|
+
factory.spawn(optionsB),
|
|
27
|
+
factory.spawn(optionsB)
|
|
28
|
+
]);
|
|
29
|
+
identify = await Promise.all(daemons.map(async (d) => await d.client.identify()));
|
|
30
|
+
await daemons[0].client.connect(identify[1].peerId, identify[1].addrs);
|
|
31
|
+
await daemons[0].client.connect(identify[2].peerId, identify[2].addrs);
|
|
32
|
+
// get the peers in the table
|
|
33
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
34
|
+
});
|
|
35
|
+
// Stop daemons
|
|
36
|
+
after(async function () {
|
|
37
|
+
if (daemons != null) {
|
|
38
|
+
await Promise.all(daemons.map(async (daemon) => await daemon.stop()));
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
|
|
42
|
+
const cid = CID.parse('QmVzw6MPsF96TyXBSRs1ptLoVMWRv5FCYJZZGJSVB2Hp39');
|
|
43
|
+
await daemons[0].client.dht.provide(cid);
|
|
44
|
+
const providers = await all(daemons[1].client.dht.findProviders(cid, 1));
|
|
45
|
+
expect(providers).to.exist();
|
|
46
|
+
expect(providers.length).to.be.greaterThan(0);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=content-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-routing.js","sourceRoot":"","sources":["../../../src/dht/content-routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/dht/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAKhD,wBAAsB,QAAQ,CAAE,OAAO,EAAE,aAAa,iBAIrD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { contentFetchingTests } from './content-fetching.js';
|
|
2
|
+
import { contentRoutingTests } from './content-routing.js';
|
|
3
|
+
import { peerRoutingTests } from './peer-routing.js';
|
|
4
|
+
export async function dhtTests(factory) {
|
|
5
|
+
await contentFetchingTests(factory);
|
|
6
|
+
await contentRoutingTests(factory);
|
|
7
|
+
await peerRoutingTests(factory);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/dht/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAE,OAAsB;IACpD,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAClC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-routing.d.ts","sourceRoot":"","sources":["../../../src/dht/peer-routing.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAIhF,wBAAgB,gBAAgB,CAAE,OAAO,EAAE,aAAa,QAYvD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* eslint-env mocha */
|
|
2
|
+
import { expect } from 'aegir/utils/chai.js';
|
|
3
|
+
import pRetry from 'p-retry';
|
|
4
|
+
export function peerRoutingTests(factory) {
|
|
5
|
+
const nodeTypes = ['js', 'go'];
|
|
6
|
+
for (const typeA of nodeTypes) {
|
|
7
|
+
for (const typeB of nodeTypes) {
|
|
8
|
+
runPeerRoutingTests(factory, { type: typeA, dht: true }, { type: typeB, dht: true });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function runPeerRoutingTests(factory, optionsA, optionsB) {
|
|
13
|
+
describe('dht.peerRouting', () => {
|
|
14
|
+
let daemons;
|
|
15
|
+
// Start Daemons
|
|
16
|
+
before(async function () {
|
|
17
|
+
this.timeout(20 * 1000);
|
|
18
|
+
daemons = await Promise.all([
|
|
19
|
+
factory.spawn(optionsA),
|
|
20
|
+
factory.spawn(optionsB),
|
|
21
|
+
factory.spawn(optionsB)
|
|
22
|
+
]);
|
|
23
|
+
});
|
|
24
|
+
// Stop daemons
|
|
25
|
+
after(async function () {
|
|
26
|
+
if (daemons != null) {
|
|
27
|
+
await Promise.all(daemons.map(async (daemon) => await daemon.stop()));
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
|
|
31
|
+
const identify1 = await daemons[1].client.identify();
|
|
32
|
+
const identify2 = await daemons[2].client.identify();
|
|
33
|
+
// peers need at least one peer in their routing table or they fail with:
|
|
34
|
+
// connect 0 => 1
|
|
35
|
+
await daemons[0].client.connect(identify1.peerId, identify1.addrs);
|
|
36
|
+
// connect 0 => 2
|
|
37
|
+
await daemons[0].client.connect(identify2.peerId, identify2.addrs);
|
|
38
|
+
// peer 1 find peer 2, retry up to 10 times to allow the routing table to refresh
|
|
39
|
+
const peerData = await pRetry(async () => await daemons[1].client.dht.findPeer(identify2.peerId), { retries: 10 });
|
|
40
|
+
expect(identify2.addrs.map(ma => ma.toString())).to.include.deep.members(peerData.multiaddrs.map(ma => ma.toString()));
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=peer-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-routing.js","sourceRoot":"","sources":["../../../src/dht/peer-routing.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,MAAM,MAAM,SAAS,CAAA;AAG5B,MAAM,UAAU,gBAAgB,CAAE,OAAsB;IACtD,MAAM,SAAS,GAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAE1C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;QAC7B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;YAC7B,mBAAmB,CACjB,OAAO,EACP,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAC1B,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAC3B,CAAA;SACF;KACF;AACH,CAAC;AAED,SAAS,mBAAmB,CAAE,OAAsB,EAAE,QAAsB,EAAE,QAAsB;IAClG,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,IAAI,OAAiB,CAAA;QAErB,gBAAgB;QAChB,MAAM,CAAC,KAAK;YACV,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;YAEvB,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;aACxB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,eAAe;QACf,KAAK,CAAC,KAAK;YACT,IAAI,OAAO,IAAI,IAAI,EAAE;gBACnB,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CACnD,CAAA;aACF;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,YAAY,QAAQ,CAAC,IAAI,OAAO,EAAE,KAAK;YACxD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YACpD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;YAEpD,yEAAyE;YACzE,iBAAiB;YACjB,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;YAElE,iBAAiB;YACjB,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;YAElE,iFAAiF;YACjF,MAAM,QAAQ,GAAa,MAAM,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;YAE5H,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACxH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DaemonClient } from '@libp2p/daemon-client';
|
|
2
|
+
export interface Daemon {
|
|
3
|
+
stop: () => Promise<void>;
|
|
4
|
+
client: DaemonClient;
|
|
5
|
+
}
|
|
6
|
+
export declare type NodeType = 'js' | 'go';
|
|
7
|
+
export declare type PeerIdType = 'rsa' | 'ed25519' | 'secp256k1';
|
|
8
|
+
export interface SpawnOptions {
|
|
9
|
+
type: NodeType;
|
|
10
|
+
key?: string;
|
|
11
|
+
noise?: true;
|
|
12
|
+
dht?: boolean;
|
|
13
|
+
pubsub?: boolean;
|
|
14
|
+
pubsubRouter?: 'gossipsub' | 'floodsub';
|
|
15
|
+
}
|
|
16
|
+
export interface DaemonFactory {
|
|
17
|
+
spawn: (options: SpawnOptions) => Promise<Daemon>;
|
|
18
|
+
}
|
|
19
|
+
export default function interopTests(factory: DaemonFactory): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,MAAM,EAAE,YAAY,CAAA;CACrB;AAED,oBAAY,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAA;AAClC,oBAAY,UAAU,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CAAA;AAExD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAA;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,IAAI,CAAA;IACZ,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,WAAW,GAAG,UAAU,CAAA;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;CAClD;AAED,wBAA8B,YAAY,CAAE,OAAO,EAAE,aAAa,iBAIjE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { connectTests } from './connect.js';
|
|
2
|
+
import { dhtTests } from './dht/index.js';
|
|
3
|
+
import { pubsubTests } from './pubsub/index.js';
|
|
4
|
+
export default async function interopTests(factory) {
|
|
5
|
+
await connectTests(factory);
|
|
6
|
+
await dhtTests(factory);
|
|
7
|
+
await pubsubTests(factory);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAwB/C,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,YAAY,CAAE,OAAsB;IAChE,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;IAC3B,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;IACvB,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floodsub.d.ts","sourceRoot":"","sources":["../../../src/pubsub/floodsub.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAIhF,wBAAgB,aAAa,CAAE,OAAO,EAAE,aAAa,QAYpD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/* eslint-env mocha */
|
|
2
|
+
import { expect } from 'aegir/utils/chai.js';
|
|
3
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
4
|
+
import first from 'it-first';
|
|
5
|
+
export function floodsubTests(factory) {
|
|
6
|
+
const nodeTypes = ['js', 'go'];
|
|
7
|
+
for (const typeA of nodeTypes) {
|
|
8
|
+
for (const typeB of nodeTypes) {
|
|
9
|
+
runFloodsubTests(factory, { type: typeA, pubsub: true, pubsubRouter: 'floodsub' }, { type: typeB, pubsub: true, pubsubRouter: 'floodsub' });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function runFloodsubTests(factory, optionsA, optionsB) {
|
|
14
|
+
describe('pubsub.floodSub', () => {
|
|
15
|
+
let daemons;
|
|
16
|
+
// Start Daemons
|
|
17
|
+
before(async function () {
|
|
18
|
+
this.timeout(20 * 1000);
|
|
19
|
+
daemons = await Promise.all([
|
|
20
|
+
factory.spawn(optionsA),
|
|
21
|
+
factory.spawn(optionsB),
|
|
22
|
+
factory.spawn(optionsB)
|
|
23
|
+
]);
|
|
24
|
+
});
|
|
25
|
+
// Stop daemons
|
|
26
|
+
after(async function () {
|
|
27
|
+
if (daemons != null) {
|
|
28
|
+
await Promise.all(daemons.map(async (daemon) => await daemon.stop()));
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
|
|
32
|
+
const topic = 'test-topic';
|
|
33
|
+
const data = uint8ArrayFromString('test-data');
|
|
34
|
+
const subscribeIterator = await daemons[1].client.pubsub.subscribe(topic);
|
|
35
|
+
const subscriber = async () => {
|
|
36
|
+
const message = await first(subscribeIterator);
|
|
37
|
+
expect(message).to.exist();
|
|
38
|
+
expect(message).to.have.property('data').that.equalBytes(data);
|
|
39
|
+
};
|
|
40
|
+
const publisher = async () => {
|
|
41
|
+
// wait for subscription stream
|
|
42
|
+
await new Promise(resolve => setTimeout(resolve, 800));
|
|
43
|
+
await daemons[0].client.pubsub.publish(topic, data);
|
|
44
|
+
};
|
|
45
|
+
return await Promise.all([
|
|
46
|
+
subscriber(),
|
|
47
|
+
publisher()
|
|
48
|
+
]);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=floodsub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floodsub.js","sourceRoot":"","sources":["../../../src/pubsub/floodsub.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;AAE5B,MAAM,UAAU,aAAa,CAAE,OAAsB;IACnD,MAAM,SAAS,GAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAE1C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;QAC7B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;YAC7B,gBAAgB,CACd,OAAO,EACP,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EACvD,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CACxD,CAAA;SACF;KACF;AACH,CAAC;AAED,SAAS,gBAAgB,CAAE,OAAsB,EAAE,QAAsB,EAAE,QAAsB;IAC/F,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,IAAI,OAAiB,CAAA;QAErB,gBAAgB;QAChB,MAAM,CAAC,KAAK;YACV,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;YAEvB,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;aACxB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,eAAe;QACf,KAAK,CAAC,KAAK;YACT,IAAI,OAAO,IAAI,IAAI,EAAE;gBACnB,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CACnD,CAAA;aACF;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,YAAY,QAAQ,CAAC,IAAI,OAAO,EAAE,KAAK;YACxD,MAAM,KAAK,GAAG,YAAY,CAAA;YAC1B,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAA;YAE9C,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACzE,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;gBAC5B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAA;gBAE9C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;gBAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAChE,CAAC,CAAA;YAED,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;gBAC3B,+BAA+B;gBAC/B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;gBACtD,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YACrD,CAAC,CAAA;YAED,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvB,UAAU,EAAE;gBACZ,SAAS,EAAE;aACZ,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gossipsub.d.ts","sourceRoot":"","sources":["../../../src/pubsub/gossipsub.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAIhF,wBAAgB,cAAc,CAAE,OAAO,EAAE,aAAa,QAYrD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/* eslint-env mocha */
|
|
2
|
+
import { expect } from 'aegir/utils/chai.js';
|
|
3
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
4
|
+
import first from 'it-first';
|
|
5
|
+
export function gossipsubTests(factory) {
|
|
6
|
+
const nodeTypes = ['js', 'go'];
|
|
7
|
+
for (const typeA of nodeTypes) {
|
|
8
|
+
for (const typeB of nodeTypes) {
|
|
9
|
+
runGossipsubTests(factory, { type: typeA, pubsub: true, pubsubRouter: 'gossipsub' }, { type: typeB, pubsub: true, pubsubRouter: 'gossipsub' });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function runGossipsubTests(factory, optionsA, optionsB) {
|
|
14
|
+
describe('pubsub.gossipsub', () => {
|
|
15
|
+
let daemons;
|
|
16
|
+
// Start Daemons
|
|
17
|
+
before(async function () {
|
|
18
|
+
this.timeout(20 * 1000);
|
|
19
|
+
daemons = await Promise.all([
|
|
20
|
+
factory.spawn(optionsA),
|
|
21
|
+
factory.spawn(optionsB),
|
|
22
|
+
factory.spawn(optionsB)
|
|
23
|
+
]);
|
|
24
|
+
});
|
|
25
|
+
// Stop daemons
|
|
26
|
+
after(async function () {
|
|
27
|
+
if (daemons != null) {
|
|
28
|
+
await Promise.all(daemons.map(async (daemon) => await daemon.stop()));
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
|
|
32
|
+
const topic = 'test-topic';
|
|
33
|
+
const data = uint8ArrayFromString('test-data');
|
|
34
|
+
const subscribeIterator = await daemons[1].client.pubsub.subscribe(topic);
|
|
35
|
+
const subscriber = async () => {
|
|
36
|
+
const message = await first(subscribeIterator);
|
|
37
|
+
expect(message).to.exist();
|
|
38
|
+
expect(message).to.have.property('data').that.equalBytes(data);
|
|
39
|
+
};
|
|
40
|
+
const publisher = async () => {
|
|
41
|
+
// wait for subscription stream
|
|
42
|
+
await new Promise(resolve => setTimeout(resolve, 800));
|
|
43
|
+
await daemons[0].client.pubsub.publish(topic, data);
|
|
44
|
+
};
|
|
45
|
+
return await Promise.all([
|
|
46
|
+
subscriber(),
|
|
47
|
+
publisher()
|
|
48
|
+
]);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=gossipsub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gossipsub.js","sourceRoot":"","sources":["../../../src/pubsub/gossipsub.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;AAE5B,MAAM,UAAU,cAAc,CAAE,OAAsB;IACpD,MAAM,SAAS,GAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAE1C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;QAC7B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;YAC7B,iBAAiB,CACf,OAAO,EACP,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,EACxD,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CACzD,CAAA;SACF;KACF;AACH,CAAC;AAED,SAAS,iBAAiB,CAAE,OAAsB,EAAE,QAAsB,EAAE,QAAsB;IAChG,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,IAAI,OAAiB,CAAA;QAErB,gBAAgB;QAChB,MAAM,CAAC,KAAK;YACV,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;YAEvB,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;aACxB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,eAAe;QACf,KAAK,CAAC,KAAK;YACT,IAAI,OAAO,IAAI,IAAI,EAAE;gBACnB,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CACnD,CAAA;aACF;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,YAAY,QAAQ,CAAC,IAAI,OAAO,EAAE,KAAK;YACxD,MAAM,KAAK,GAAG,YAAY,CAAA;YAC1B,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAA;YAE9C,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACzE,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;gBAC5B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAA;gBAE9C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;gBAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAChE,CAAC,CAAA;YAED,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;gBAC3B,+BAA+B;gBAC/B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;gBACtD,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YACrD,CAAC,CAAA;YAED,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvB,UAAU,EAAE;gBACZ,SAAS,EAAE;aACZ,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../../src/pubsub/hybrid.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAU,aAAa,EAA0B,MAAM,aAAa,CAAA;AAIhF,wBAAgB,WAAW,CAAE,OAAO,EAAE,aAAa,QAYlD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/* eslint-env mocha */
|
|
2
|
+
import { expect } from 'aegir/utils/chai.js';
|
|
3
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
4
|
+
import first from 'it-first';
|
|
5
|
+
export function hybridTests(factory) {
|
|
6
|
+
const nodeTypes = ['js', 'go'];
|
|
7
|
+
for (const typeA of nodeTypes) {
|
|
8
|
+
for (const typeB of nodeTypes) {
|
|
9
|
+
runHybridTests(factory, { type: typeA, pubsub: true, pubsubRouter: 'floodsub' }, { type: typeB, pubsub: true, pubsubRouter: 'gossipsub' });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function runHybridTests(factory, optionsA, optionsB) {
|
|
14
|
+
describe('pubsub.hybrid', () => {
|
|
15
|
+
let daemons;
|
|
16
|
+
// Start Daemons
|
|
17
|
+
before(async function () {
|
|
18
|
+
this.timeout(20 * 1000);
|
|
19
|
+
daemons = await Promise.all([
|
|
20
|
+
factory.spawn(optionsA),
|
|
21
|
+
factory.spawn(optionsB),
|
|
22
|
+
factory.spawn(optionsB)
|
|
23
|
+
]);
|
|
24
|
+
});
|
|
25
|
+
// Stop daemons
|
|
26
|
+
after(async function () {
|
|
27
|
+
if (daemons != null) {
|
|
28
|
+
await Promise.all(daemons.map(async (daemon) => await daemon.stop()));
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
it(`${optionsA.type} peer to ${optionsB.type} peer`, async function () {
|
|
32
|
+
const topic = 'test-topic';
|
|
33
|
+
const data = uint8ArrayFromString('test-data');
|
|
34
|
+
const subscribeIterator = await daemons[1].client.pubsub.subscribe(topic);
|
|
35
|
+
const subscriber = async () => {
|
|
36
|
+
const message = await first(subscribeIterator);
|
|
37
|
+
expect(message).to.exist();
|
|
38
|
+
expect(message).to.have.property('data').that.equalBytes(data);
|
|
39
|
+
};
|
|
40
|
+
const publisher = async () => {
|
|
41
|
+
// wait for subscription stream
|
|
42
|
+
await new Promise(resolve => setTimeout(resolve, 800));
|
|
43
|
+
await daemons[0].client.pubsub.publish(topic, data);
|
|
44
|
+
};
|
|
45
|
+
return await Promise.all([
|
|
46
|
+
subscriber(),
|
|
47
|
+
publisher()
|
|
48
|
+
]);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=hybrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid.js","sourceRoot":"","sources":["../../../src/pubsub/hybrid.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,KAAK,MAAM,UAAU,CAAA;AAE5B,MAAM,UAAU,WAAW,CAAE,OAAsB;IACjD,MAAM,SAAS,GAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAE1C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;QAC7B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;YAC7B,cAAc,CACZ,OAAO,EACP,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,EACvD,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CACzD,CAAA;SACF;KACF;AACH,CAAC;AAED,SAAS,cAAc,CAAE,OAAsB,EAAE,QAAsB,EAAE,QAAsB;IAC7F,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,IAAI,OAAiB,CAAA;QAErB,gBAAgB;QAChB,MAAM,CAAC,KAAK;YACV,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;YAEvB,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACvB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;aACxB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,eAAe;QACf,KAAK,CAAC,KAAK;YACT,IAAI,OAAO,IAAI,IAAI,EAAE;gBACnB,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CACnD,CAAA;aACF;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,YAAY,QAAQ,CAAC,IAAI,OAAO,EAAE,KAAK;YACxD,MAAM,KAAK,GAAG,YAAY,CAAA;YAC1B,MAAM,IAAI,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAA;YAE9C,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACzE,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;gBAC5B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAA;gBAE9C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;gBAC1B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAChE,CAAC,CAAA;YAED,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;gBAC3B,+BAA+B;gBAC/B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;gBACtD,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YACrD,CAAC,CAAA;YAED,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvB,UAAU,EAAE;gBACZ,SAAS,EAAE;aACZ,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pubsub/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAKhD,wBAAsB,WAAW,CAAE,OAAO,EAAE,aAAa,iBAIxD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { floodsubTests } from './floodsub.js';
|
|
2
|
+
import { gossipsubTests } from './gossipsub.js';
|
|
3
|
+
import { hybridTests } from './hybrid.js';
|
|
4
|
+
export async function pubsubTests(factory) {
|
|
5
|
+
await floodsubTests(factory);
|
|
6
|
+
await gossipsubTests(factory);
|
|
7
|
+
await hybridTests(factory);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pubsub/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAE,OAAsB;IACvD,MAAM,aAAa,CAAC,OAAO,CAAC,CAAA;IAC5B,MAAM,cAAc,CAAC,OAAO,CAAC,CAAA;IAC7B,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
`���W��ע���Fv=�E�O*bb��eJK"��Pk�a��W��bs��|��������8*�y+���Pk�a��W��bs��|��������8*�y+�
|