@libp2p/interface-compliance-tests 1.1.0 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/{utils/mock-connection-gater.d.ts → mocks/connection-gater.d.ts} +1 -1
- package/dist/src/mocks/connection-gater.d.ts.map +1 -0
- package/dist/src/{utils/mock-connection-gater.js → mocks/connection-gater.js} +1 -1
- package/dist/src/mocks/connection-gater.js.map +1 -0
- package/dist/src/mocks/connection-manager.d.ts +18 -0
- package/dist/src/mocks/connection-manager.d.ts.map +1 -0
- package/dist/src/mocks/connection-manager.js +22 -0
- package/dist/src/mocks/connection-manager.js.map +1 -0
- package/dist/src/mocks/connection.d.ts +8 -0
- package/dist/src/mocks/connection.d.ts.map +1 -0
- package/dist/src/{utils/mock-connection.js → mocks/connection.js} +36 -3
- package/dist/src/mocks/connection.js.map +1 -0
- package/dist/src/mocks/index.d.ts +9 -0
- package/dist/src/mocks/index.d.ts.map +1 -0
- package/dist/src/mocks/index.js +8 -0
- package/dist/src/mocks/index.js.map +1 -0
- package/dist/src/{utils/mock-multiaddr-connection.d.ts → mocks/multiaddr-connection.d.ts} +2 -2
- package/dist/src/mocks/multiaddr-connection.d.ts.map +1 -0
- package/dist/src/{utils/mock-multiaddr-connection.js → mocks/multiaddr-connection.js} +3 -3
- package/dist/src/mocks/multiaddr-connection.js.map +1 -0
- package/dist/src/{utils/mock-muxer.d.ts → mocks/muxer.d.ts} +1 -1
- package/dist/src/mocks/muxer.d.ts.map +1 -0
- package/dist/src/{utils/mock-muxer.js → mocks/muxer.js} +1 -1
- package/dist/src/mocks/muxer.js.map +1 -0
- package/dist/src/mocks/registrar.d.ts +14 -0
- package/dist/src/mocks/registrar.d.ts.map +1 -0
- package/dist/src/mocks/registrar.js +54 -0
- package/dist/src/mocks/registrar.js.map +1 -0
- package/dist/src/{utils/mock-upgrader.d.ts → mocks/upgrader.d.ts} +1 -1
- package/dist/src/mocks/upgrader.d.ts.map +1 -0
- package/dist/src/{utils/mock-upgrader.js → mocks/upgrader.js} +3 -3
- package/dist/src/mocks/upgrader.js.map +1 -0
- package/dist/src/peer-discovery/index.d.ts.map +1 -1
- package/dist/src/peer-discovery/index.js +5 -5
- package/dist/src/peer-discovery/index.js.map +1 -1
- package/dist/src/pubsub/api.d.ts +2 -2
- package/dist/src/pubsub/api.d.ts.map +1 -1
- package/dist/src/pubsub/api.js +6 -6
- package/dist/src/pubsub/api.js.map +1 -1
- package/dist/src/pubsub/connection-handlers.d.ts +2 -2
- package/dist/src/pubsub/connection-handlers.d.ts.map +1 -1
- package/dist/src/pubsub/connection-handlers.js +18 -9
- package/dist/src/pubsub/connection-handlers.js.map +1 -1
- package/dist/src/pubsub/emit-self.d.ts +2 -2
- package/dist/src/pubsub/emit-self.d.ts.map +1 -1
- package/dist/src/pubsub/emit-self.js +6 -2
- package/dist/src/pubsub/emit-self.js.map +1 -1
- package/dist/src/pubsub/index.d.ts +9 -3
- package/dist/src/pubsub/index.d.ts.map +1 -1
- package/dist/src/pubsub/index.js.map +1 -1
- package/dist/src/pubsub/messages.d.ts +2 -2
- package/dist/src/pubsub/messages.d.ts.map +1 -1
- package/dist/src/pubsub/messages.js.map +1 -1
- package/dist/src/pubsub/multiple-nodes.d.ts +2 -2
- package/dist/src/pubsub/multiple-nodes.d.ts.map +1 -1
- package/dist/src/pubsub/multiple-nodes.js +58 -35
- package/dist/src/pubsub/multiple-nodes.js.map +1 -1
- package/dist/src/pubsub/two-nodes.d.ts +2 -2
- package/dist/src/pubsub/two-nodes.d.ts.map +1 -1
- package/dist/src/pubsub/two-nodes.js +44 -19
- package/dist/src/pubsub/two-nodes.js.map +1 -1
- package/dist/src/topology/topology.d.ts.map +1 -1
- package/dist/src/topology/topology.js +1 -10
- package/dist/src/topology/topology.js.map +1 -1
- package/dist/src/transport/listen-test.d.ts.map +1 -1
- package/dist/src/transport/listen-test.js +10 -7
- package/dist/src/transport/listen-test.js.map +1 -1
- package/package.json +7 -26
- package/src/{utils/mock-connection-gater.ts → mocks/connection-gater.ts} +0 -0
- package/src/mocks/connection-manager.ts +30 -0
- package/src/{utils/mock-connection.ts → mocks/connection.ts} +39 -4
- package/src/mocks/index.ts +9 -0
- package/src/{utils/mock-multiaddr-connection.ts → mocks/multiaddr-connection.ts} +3 -3
- package/src/{utils/mock-muxer.ts → mocks/muxer.ts} +0 -0
- package/src/mocks/registrar.ts +71 -0
- package/src/{utils/mock-upgrader.ts → mocks/upgrader.ts} +2 -2
- package/src/peer-discovery/index.ts +5 -7
- package/src/pubsub/api.ts +10 -11
- package/src/pubsub/connection-handlers.ts +22 -13
- package/src/pubsub/emit-self.ts +9 -5
- package/src/pubsub/index.ts +10 -3
- package/src/pubsub/messages.ts +3 -3
- package/src/pubsub/multiple-nodes.ts +68 -45
- package/src/pubsub/two-nodes.ts +48 -23
- package/src/topology/topology.ts +1 -14
- package/src/transport/listen-test.ts +10 -7
- package/dist/src/topology/multicodec-topology.d.ts +0 -5
- package/dist/src/topology/multicodec-topology.d.ts.map +0 -1
- package/dist/src/topology/multicodec-topology.js +0 -109
- package/dist/src/topology/multicodec-topology.js.map +0 -1
- package/dist/src/utils/mock-connection-gater.d.ts.map +0 -1
- package/dist/src/utils/mock-connection-gater.js.map +0 -1
- package/dist/src/utils/mock-connection.d.ts +0 -5
- package/dist/src/utils/mock-connection.d.ts.map +0 -1
- package/dist/src/utils/mock-connection.js.map +0 -1
- package/dist/src/utils/mock-multiaddr-connection.d.ts.map +0 -1
- package/dist/src/utils/mock-multiaddr-connection.js.map +0 -1
- package/dist/src/utils/mock-muxer.d.ts.map +0 -1
- package/dist/src/utils/mock-muxer.js.map +0 -1
- package/dist/src/utils/mock-upgrader.d.ts.map +0 -1
- package/dist/src/utils/mock-upgrader.js.map +0 -1
- package/src/topology/multicodec-topology.ts +0 -136
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { expect } from 'aegir/utils/chai.js';
|
|
2
2
|
import sinon from 'sinon';
|
|
3
|
-
import * as PeerIdFactory from '@libp2p/peer-id-factory';
|
|
4
|
-
import peers from '../utils/peers.js';
|
|
5
3
|
export default (test) => {
|
|
6
4
|
describe('topology', () => {
|
|
7
|
-
let topology
|
|
5
|
+
let topology;
|
|
8
6
|
beforeEach(async () => {
|
|
9
7
|
topology = await test.setup();
|
|
10
|
-
id = await PeerIdFactory.createFromJSON(peers[0]);
|
|
11
8
|
});
|
|
12
9
|
afterEach(async () => {
|
|
13
10
|
sinon.restore();
|
|
@@ -18,12 +15,6 @@ export default (test) => {
|
|
|
18
15
|
expect(topology.max).to.exist();
|
|
19
16
|
expect(topology.peers).to.exist();
|
|
20
17
|
});
|
|
21
|
-
it('should trigger "onDisconnect" on peer disconnected', () => {
|
|
22
|
-
// @ts-expect-error protected property
|
|
23
|
-
sinon.spy(topology, '_onDisconnect');
|
|
24
|
-
topology.disconnect(id);
|
|
25
|
-
expect(topology).to.have.nested.property('_onDisconnect.callCount', 1);
|
|
26
|
-
});
|
|
27
18
|
});
|
|
28
19
|
};
|
|
29
20
|
//# sourceMappingURL=topology.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"topology.js","sourceRoot":"","sources":["../../../src/topology/topology.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"topology.js","sourceRoot":"","sources":["../../../src/topology/topology.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,eAAe,CAAC,IAAyB,EAAE,EAAE;IAC3C,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,IAAI,QAAkB,CAAA;QAEtB,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAC/B,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,KAAK,CAAC,OAAO,EAAE,CAAA;YACf,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACvB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YAC/B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YAC/B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;QACnC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listen-test.d.ts","sourceRoot":"","sources":["../../../src/transport/listen-test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"listen-test.d.ts","sourceRoot":"","sources":["../../../src/transport/listen-test.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;iCAI1C,UAAU,qBAAqB,EAAE,SAAS,CAAC;AAAnE,wBA+IC"}
|
|
@@ -6,6 +6,7 @@ import { pipe } from 'it-pipe';
|
|
|
6
6
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
7
7
|
import { isValidTick, mockUpgrader } from './utils/index.js';
|
|
8
8
|
import defer from 'p-defer';
|
|
9
|
+
import { CustomEvent } from '@libp2p/interfaces';
|
|
9
10
|
export default (common) => {
|
|
10
11
|
describe('listen', () => {
|
|
11
12
|
const upgrader = mockUpgrader();
|
|
@@ -78,8 +79,8 @@ export default (common) => {
|
|
|
78
79
|
const listener = transport.createListener();
|
|
79
80
|
const deferred = defer();
|
|
80
81
|
let conn;
|
|
81
|
-
listener.
|
|
82
|
-
conn =
|
|
82
|
+
listener.addEventListener('connection', (evt) => {
|
|
83
|
+
conn = evt.detail;
|
|
83
84
|
deferred.resolve();
|
|
84
85
|
});
|
|
85
86
|
void (async () => {
|
|
@@ -93,22 +94,24 @@ export default (common) => {
|
|
|
93
94
|
});
|
|
94
95
|
it('listening', (done) => {
|
|
95
96
|
const listener = transport.createListener();
|
|
96
|
-
listener.
|
|
97
|
+
listener.addEventListener('listening', () => {
|
|
97
98
|
listener.close().then(done, done);
|
|
98
99
|
});
|
|
99
100
|
void listener.listen(addrs[0]);
|
|
100
101
|
});
|
|
101
102
|
it('error', (done) => {
|
|
102
103
|
const listener = transport.createListener();
|
|
103
|
-
listener.
|
|
104
|
-
expect(
|
|
104
|
+
listener.addEventListener('error', (evt) => {
|
|
105
|
+
expect(evt.detail).to.be.an.instanceOf(Error);
|
|
105
106
|
listener.close().then(done, done);
|
|
106
107
|
});
|
|
107
|
-
listener.
|
|
108
|
+
listener.dispatchEvent(new CustomEvent('error', {
|
|
109
|
+
detail: new Error('my err')
|
|
110
|
+
}));
|
|
108
111
|
});
|
|
109
112
|
it('close', (done) => {
|
|
110
113
|
const listener = transport.createListener();
|
|
111
|
-
listener.
|
|
114
|
+
listener.addEventListener('close', () => done());
|
|
112
115
|
void (async () => {
|
|
113
116
|
await listener.listen(addrs[0]);
|
|
114
117
|
await listener.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listen-test.js","sourceRoot":"","sources":["../../../src/transport/listen-test.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"listen-test.js","sourceRoot":"","sources":["../../../src/transport/listen-test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/interface-compliance-tests",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
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",
|
|
@@ -88,29 +88,9 @@
|
|
|
88
88
|
"import": "./dist/src/transport/utils/index.js",
|
|
89
89
|
"types": "./dist/src/transport/utils/index.d.ts"
|
|
90
90
|
},
|
|
91
|
-
"./
|
|
92
|
-
"import": "./dist/src/
|
|
93
|
-
"types": "./dist/src/
|
|
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"
|
|
91
|
+
"./mocks": {
|
|
92
|
+
"import": "./dist/src/mocks/index.js",
|
|
93
|
+
"types": "./dist/src/mocks/index.d.ts"
|
|
114
94
|
},
|
|
115
95
|
"./utils/peers": {
|
|
116
96
|
"import": "./dist/src/utils/peers.js",
|
|
@@ -206,10 +186,10 @@
|
|
|
206
186
|
},
|
|
207
187
|
"scripts": {
|
|
208
188
|
"lint": "aegir lint",
|
|
209
|
-
"dep-check": "aegir dep-check dist/src/**/*.js",
|
|
189
|
+
"dep-check": "aegir dep-check dist/src/**/*.js dist/test/**/*.js",
|
|
210
190
|
"build": "tsc",
|
|
211
191
|
"pretest": "npm run build",
|
|
212
|
-
"test": "aegir test -f ./dist/test/**/*.js",
|
|
192
|
+
"test": "aegir test -f ./dist/test/*.js -f ./dist/test/**/*.js",
|
|
213
193
|
"test:chrome": "npm run test -- -t browser",
|
|
214
194
|
"test:chrome-webworker": "npm run test -- -t webworker",
|
|
215
195
|
"test:firefox": "npm run test -- -t browser -- --browser firefox",
|
|
@@ -234,6 +214,7 @@
|
|
|
234
214
|
"it-pair": "^2.0.0",
|
|
235
215
|
"it-pipe": "^2.0.2",
|
|
236
216
|
"it-pushable": "^2.0.1",
|
|
217
|
+
"it-stream-types": "^1.0.4",
|
|
237
218
|
"multiformats": "^9.4.10",
|
|
238
219
|
"p-defer": "^4.0.0",
|
|
239
220
|
"p-limit": "^4.0.0",
|
|
File without changes
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EventEmitter } from '@libp2p/interfaces'
|
|
2
|
+
import type { Connection } from '@libp2p/interfaces/src/connection'
|
|
3
|
+
import type { PeerId } from '@libp2p/interfaces/src/peer-id'
|
|
4
|
+
import type { ConnectionManager, ConnectionManagerEvents } from '@libp2p/interfaces/src/registrar'
|
|
5
|
+
|
|
6
|
+
class MockConnectionManager extends EventEmitter<ConnectionManagerEvents> implements ConnectionManager {
|
|
7
|
+
getConnection (peerId: PeerId): Connection | undefined {
|
|
8
|
+
throw new Error('Method not implemented.')
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
listenerCount (type: string): number {
|
|
12
|
+
throw new Error('Method not implemented.')
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
addEventListener<U extends 'peer:connect'>(type: U, callback: ((evt: ConnectionManagerEvents[U]) => void) | { handleEvent: (evt: ConnectionManagerEvents[U]) => void } | null, options?: boolean | AddEventListenerOptions): void {
|
|
16
|
+
throw new Error('Method not implemented.')
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
removeEventListener<U extends 'peer:connect'>(type: U, callback: (((evt: ConnectionManagerEvents[U]) => void) | { handleEvent: (evt: ConnectionManagerEvents[U]) => void } | null) | undefined, options?: boolean | EventListenerOptions): void {
|
|
20
|
+
throw new Error('Method not implemented.')
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
dispatchEvent (event: Event): boolean {
|
|
24
|
+
throw new Error('Method not implemented.')
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function mockConnectionManager () {
|
|
29
|
+
return new MockConnectionManager()
|
|
30
|
+
}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import { PeerId } from '@libp2p/peer-id'
|
|
2
2
|
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
3
3
|
import { pipe } from 'it-pipe'
|
|
4
|
+
import { duplexPair } from 'it-pair/duplex'
|
|
4
5
|
import type { MultiaddrConnection } from '@libp2p/interfaces/transport'
|
|
5
6
|
import type { Connection, Stream, Metadata, ProtocolStream } from '@libp2p/interfaces/connection'
|
|
6
7
|
import type { Muxer } from '@libp2p/interfaces/stream-muxer'
|
|
8
|
+
import type { Duplex } from 'it-stream-types'
|
|
9
|
+
import { mockMuxer } from './muxer.js'
|
|
7
10
|
|
|
8
|
-
export async function mockConnection (maConn: MultiaddrConnection, direction: 'inbound' | 'outbound', muxer: Muxer): Promise<Connection> {
|
|
11
|
+
export async function mockConnection (maConn: MultiaddrConnection, direction: 'inbound' | 'outbound' = 'inbound', muxer: Muxer = mockMuxer()): Promise<Connection> {
|
|
9
12
|
const remoteAddr = maConn.remoteAddr
|
|
10
13
|
const remotePeerIdStr = remoteAddr.getPeerId()
|
|
11
14
|
const remotePeer = remotePeerIdStr != null ? PeerId.fromString(remotePeerIdStr) : await createEd25519PeerId()
|
|
12
|
-
|
|
15
|
+
const registry = new Map()
|
|
13
16
|
const streams: Stream[] = []
|
|
14
17
|
let streamId = 0
|
|
15
18
|
|
|
16
|
-
const registry = new Map()
|
|
17
|
-
|
|
18
19
|
void pipe(
|
|
19
20
|
maConn, muxer, maConn
|
|
20
21
|
)
|
|
@@ -64,3 +65,37 @@ export async function mockConnection (maConn: MultiaddrConnection, direction: 'i
|
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
}
|
|
68
|
+
|
|
69
|
+
export function mockStream (stream: Duplex<Uint8Array>): Stream {
|
|
70
|
+
return {
|
|
71
|
+
...stream,
|
|
72
|
+
close: () => {},
|
|
73
|
+
abort: () => {},
|
|
74
|
+
reset: () => {},
|
|
75
|
+
timeline: {
|
|
76
|
+
open: Date.now()
|
|
77
|
+
},
|
|
78
|
+
id: `stream-${Date.now()}`
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export function connectionPair (): [ Connection, Connection ] {
|
|
83
|
+
const [d0, d1] = duplexPair<Uint8Array>()
|
|
84
|
+
|
|
85
|
+
return [
|
|
86
|
+
// @ts-expect-error not a complete implementation
|
|
87
|
+
{
|
|
88
|
+
newStream: async (multicodecs: string[]) => await Promise.resolve({
|
|
89
|
+
stream: mockStream(d0),
|
|
90
|
+
protocol: multicodecs[0]
|
|
91
|
+
})
|
|
92
|
+
},
|
|
93
|
+
// @ts-expect-error not a complete implementation
|
|
94
|
+
{
|
|
95
|
+
newStream: async (multicodecs: string[]) => await Promise.resolve({
|
|
96
|
+
stream: mockStream(d1),
|
|
97
|
+
protocol: multicodecs[0]
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
|
|
2
|
+
export { mockConnectionGater } from './connection-gater.js'
|
|
3
|
+
export { mockConnectionManager } from './connection-manager.js'
|
|
4
|
+
export { mockConnection, mockStream, connectionPair } from './connection.js'
|
|
5
|
+
export { mockMultiaddrConnection } from './multiaddr-connection.js'
|
|
6
|
+
export { mockMuxer } from './muxer.js'
|
|
7
|
+
export { mockRegistrar } from './registrar.js'
|
|
8
|
+
export { mockUpgrader } from './upgrader.js'
|
|
9
|
+
export type { MockUpgraderOptions } from './upgrader.js'
|
|
@@ -2,16 +2,16 @@ import { Multiaddr } from '@multiformats/multiaddr'
|
|
|
2
2
|
import type { MultiaddrConnection } from '@libp2p/interfaces/transport'
|
|
3
3
|
import type { Duplex } from 'it-stream-types'
|
|
4
4
|
|
|
5
|
-
export function mockMultiaddrConnection (source: Duplex<Uint8Array>): MultiaddrConnection {
|
|
5
|
+
export function mockMultiaddrConnection (source: Duplex<Uint8Array> & Partial<MultiaddrConnection>): MultiaddrConnection {
|
|
6
6
|
const maConn: MultiaddrConnection = {
|
|
7
|
-
...source,
|
|
8
7
|
async close () {
|
|
9
8
|
|
|
10
9
|
},
|
|
11
10
|
timeline: {
|
|
12
11
|
open: Date.now()
|
|
13
12
|
},
|
|
14
|
-
remoteAddr: new Multiaddr('/ip4/127.0.0.1/tcp/4001')
|
|
13
|
+
remoteAddr: new Multiaddr('/ip4/127.0.0.1/tcp/4001'),
|
|
14
|
+
...source
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
return maConn
|
|
File without changes
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Registrar, StreamHandler } from '@libp2p/interfaces/registrar'
|
|
2
|
+
import type { Topology } from '@libp2p/interfaces/topology'
|
|
3
|
+
|
|
4
|
+
export class MockRegistrar implements Registrar {
|
|
5
|
+
private readonly topologies: Map<string, { topology: Topology, protocols: string[] }> = new Map()
|
|
6
|
+
private readonly handlers: Map<string, { handler: StreamHandler, protocols: string[] }> = new Map()
|
|
7
|
+
|
|
8
|
+
async handle (protocols: string | string[], handler: StreamHandler) {
|
|
9
|
+
if (!Array.isArray(protocols)) {
|
|
10
|
+
protocols = [protocols]
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const id = `handler-id-${Math.random()}`
|
|
14
|
+
|
|
15
|
+
this.handlers.set(id, {
|
|
16
|
+
handler,
|
|
17
|
+
protocols
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
return id
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async unhandle (id: string) {
|
|
24
|
+
this.handlers.delete(id)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
getHandlers (protocol: string) {
|
|
28
|
+
const output: StreamHandler[] = []
|
|
29
|
+
|
|
30
|
+
for (const { handler, protocols } of this.handlers.values()) {
|
|
31
|
+
if (protocols.includes(protocol)) {
|
|
32
|
+
output.push(handler)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return output
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
register (protocols: string | string[], topology: Topology) {
|
|
40
|
+
if (!Array.isArray(protocols)) {
|
|
41
|
+
protocols = [protocols]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const id = `topology-id-${Math.random()}`
|
|
45
|
+
|
|
46
|
+
this.topologies.set(id, {
|
|
47
|
+
topology,
|
|
48
|
+
protocols
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
return id
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
unregister (id: string | string[]) {
|
|
55
|
+
if (!Array.isArray(id)) {
|
|
56
|
+
id = [id]
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
id.forEach(id => this.topologies.delete(id))
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
getTopologies (protocol: string) {
|
|
63
|
+
const output: Topology[] = []
|
|
64
|
+
|
|
65
|
+
return output
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function mockRegistrar () {
|
|
70
|
+
return new MockRegistrar()
|
|
71
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { expect } from 'aegir/utils/chai.js'
|
|
2
|
-
import { mockMuxer } from './
|
|
3
|
-
import { mockConnection } from './
|
|
2
|
+
import { mockMuxer } from './muxer.js'
|
|
3
|
+
import { mockConnection } from './connection.js'
|
|
4
4
|
import type { Upgrader, MultiaddrConnection } from '@libp2p/interfaces/transport'
|
|
5
5
|
import type { Muxer } from '@libp2p/interfaces/stream-muxer'
|
|
6
6
|
|
|
@@ -16,9 +16,6 @@ export default (common: TestSetup<PeerDiscovery & Startable>) => {
|
|
|
16
16
|
|
|
17
17
|
afterEach('ensure discovery was stopped', async () => {
|
|
18
18
|
await discovery.stop()
|
|
19
|
-
|
|
20
|
-
discovery.removeAllListeners()
|
|
21
|
-
|
|
22
19
|
await common.teardown()
|
|
23
20
|
})
|
|
24
21
|
|
|
@@ -44,7 +41,8 @@ export default (common: TestSetup<PeerDiscovery & Startable>) => {
|
|
|
44
41
|
const defer = pDefer()
|
|
45
42
|
await discovery.start()
|
|
46
43
|
|
|
47
|
-
discovery.
|
|
44
|
+
discovery.addEventListener('peer', (evt) => {
|
|
45
|
+
const { id, multiaddrs } = evt.detail
|
|
48
46
|
expect(id).to.exist()
|
|
49
47
|
expect(id).to.have.property('type').that.is.oneOf(['RSA', 'Ed25519', 'secp256k1'])
|
|
50
48
|
expect(multiaddrs).to.exist()
|
|
@@ -58,7 +56,7 @@ export default (common: TestSetup<PeerDiscovery & Startable>) => {
|
|
|
58
56
|
})
|
|
59
57
|
|
|
60
58
|
it('should not receive a peer event before start', async () => {
|
|
61
|
-
discovery.
|
|
59
|
+
discovery.addEventListener('peer', () => {
|
|
62
60
|
throw new Error('should not receive a peer event before start')
|
|
63
61
|
})
|
|
64
62
|
|
|
@@ -70,14 +68,14 @@ export default (common: TestSetup<PeerDiscovery & Startable>) => {
|
|
|
70
68
|
|
|
71
69
|
await discovery.start()
|
|
72
70
|
|
|
73
|
-
discovery.
|
|
71
|
+
discovery.addEventListener('peer', () => {
|
|
74
72
|
deferStart.resolve()
|
|
75
73
|
})
|
|
76
74
|
|
|
77
75
|
await deferStart.promise
|
|
78
76
|
await discovery.stop()
|
|
79
77
|
|
|
80
|
-
discovery.
|
|
78
|
+
discovery.addEventListener('peer', () => {
|
|
81
79
|
throw new Error('should not receive a peer event after stop')
|
|
82
80
|
})
|
|
83
81
|
|
package/src/pubsub/api.ts
CHANGED
|
@@ -4,15 +4,15 @@ import pDefer from 'p-defer'
|
|
|
4
4
|
import pWaitFor from 'p-wait-for'
|
|
5
5
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
6
6
|
import type { TestSetup } from '../index.js'
|
|
7
|
-
import type { PubSub
|
|
8
|
-
import type {
|
|
7
|
+
import type { PubSub } from '@libp2p/interfaces/pubsub'
|
|
8
|
+
import type { EventMap } from './index.js'
|
|
9
9
|
|
|
10
10
|
const topic = 'foo'
|
|
11
11
|
const data = uint8ArrayFromString('bar')
|
|
12
12
|
|
|
13
|
-
export default (common: TestSetup<PubSub
|
|
13
|
+
export default (common: TestSetup<PubSub<EventMap>>) => {
|
|
14
14
|
describe('pubsub api', () => {
|
|
15
|
-
let pubsub: PubSub
|
|
15
|
+
let pubsub: PubSub<EventMap>
|
|
16
16
|
|
|
17
17
|
// Create pubsub router
|
|
18
18
|
beforeEach(async () => {
|
|
@@ -51,7 +51,7 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
51
51
|
|
|
52
52
|
await pubsub.start()
|
|
53
53
|
pubsub.subscribe(topic)
|
|
54
|
-
pubsub.
|
|
54
|
+
pubsub.addEventListener('topic', handler)
|
|
55
55
|
|
|
56
56
|
await pWaitFor(() => {
|
|
57
57
|
const topics = pubsub.getTopics()
|
|
@@ -71,15 +71,14 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
71
71
|
it('can subscribe and publish correctly', async () => {
|
|
72
72
|
const defer = pDefer()
|
|
73
73
|
|
|
74
|
-
const handler = (msg: Message) => {
|
|
75
|
-
expect(msg).to.not.eql(undefined)
|
|
76
|
-
defer.resolve()
|
|
77
|
-
}
|
|
78
|
-
|
|
79
74
|
await pubsub.start()
|
|
80
75
|
|
|
81
76
|
pubsub.subscribe(topic)
|
|
82
|
-
pubsub.
|
|
77
|
+
pubsub.addEventListener(topic, (evt) => {
|
|
78
|
+
const msg = evt.detail
|
|
79
|
+
expect(msg).to.not.eql(undefined)
|
|
80
|
+
defer.resolve()
|
|
81
|
+
})
|
|
83
82
|
await pubsub.publish(topic, data)
|
|
84
83
|
await defer.promise
|
|
85
84
|
|
|
@@ -7,12 +7,12 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
|
7
7
|
import { expectSet } from './utils.js'
|
|
8
8
|
import type { TestSetup } from '../index.js'
|
|
9
9
|
import type { PubSub, Message } from '@libp2p/interfaces/pubsub'
|
|
10
|
-
import type {
|
|
10
|
+
import type { EventMap } from './index.js'
|
|
11
11
|
|
|
12
|
-
export default (common: TestSetup<PubSub
|
|
12
|
+
export default (common: TestSetup<PubSub<EventMap>>) => {
|
|
13
13
|
describe('pubsub connection handlers', () => {
|
|
14
|
-
let psA: PubSub
|
|
15
|
-
let psB: PubSub
|
|
14
|
+
let psA: PubSub<EventMap>
|
|
15
|
+
let psB: PubSub<EventMap>
|
|
16
16
|
|
|
17
17
|
describe('nodes send state on connection', () => {
|
|
18
18
|
// Create pubsub nodes and connect them
|
|
@@ -48,8 +48,12 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
48
48
|
await Promise.all([
|
|
49
49
|
// @ts-expect-error protected fields
|
|
50
50
|
psA._libp2p.dial(psB.peerId),
|
|
51
|
-
new Promise((resolve) => psA.
|
|
52
|
-
|
|
51
|
+
new Promise((resolve) => psA.addEventListener('pubsub:subscription-change', resolve, {
|
|
52
|
+
once: true
|
|
53
|
+
})),
|
|
54
|
+
new Promise((resolve) => psB.addEventListener('pubsub:subscription-change', resolve, {
|
|
55
|
+
once: true
|
|
56
|
+
}))
|
|
53
57
|
])
|
|
54
58
|
|
|
55
59
|
expect(psA.peers.size).to.equal(1)
|
|
@@ -103,7 +107,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
103
107
|
let subscribedTopics = psA.getTopics()
|
|
104
108
|
expect(subscribedTopics).to.not.include(topic)
|
|
105
109
|
|
|
106
|
-
psA.
|
|
110
|
+
psA.addEventListener(topic, (evt) => {
|
|
111
|
+
const msg = evt.detail
|
|
107
112
|
expect(msg.data).to.equalBytes(data)
|
|
108
113
|
defer.resolve()
|
|
109
114
|
})
|
|
@@ -174,7 +179,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
174
179
|
let subscribedTopics = psA.getTopics()
|
|
175
180
|
expect(subscribedTopics).to.not.include(topic)
|
|
176
181
|
|
|
177
|
-
psA.
|
|
182
|
+
psA.addEventListener(topic, (evt) => {
|
|
183
|
+
const msg = evt.detail
|
|
178
184
|
expect(msg.data).to.equalBytes(data)
|
|
179
185
|
defer.resolve()
|
|
180
186
|
})
|
|
@@ -228,7 +234,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
228
234
|
let subscribedTopics = psA.getTopics()
|
|
229
235
|
expect(subscribedTopics).to.not.include(topic)
|
|
230
236
|
|
|
231
|
-
psA.
|
|
237
|
+
psA.addEventListener(topic, (evt) => {
|
|
238
|
+
const msg = evt.detail
|
|
232
239
|
expect(msg.data).to.equalBytes(data)
|
|
233
240
|
counter++
|
|
234
241
|
counter === 1 ? defer1.resolve() : defer2.resolve()
|
|
@@ -285,7 +292,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
285
292
|
let bReceivedFirstMessageFromA = false
|
|
286
293
|
let bReceivedSecondMessageFromA = false
|
|
287
294
|
|
|
288
|
-
const handlerSpyA = (
|
|
295
|
+
const handlerSpyA = (evt: CustomEvent<Message>) => {
|
|
296
|
+
const message = evt.detail
|
|
289
297
|
const data = uint8ArrayToString(message.data)
|
|
290
298
|
|
|
291
299
|
if (data === 'message-from-b-1') {
|
|
@@ -296,7 +304,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
296
304
|
aReceivedSecondMessageFromB = true
|
|
297
305
|
}
|
|
298
306
|
}
|
|
299
|
-
const handlerSpyB = (
|
|
307
|
+
const handlerSpyB = (evt: CustomEvent<Message>) => {
|
|
308
|
+
const message = evt.detail
|
|
300
309
|
const data = uint8ArrayToString(message.data)
|
|
301
310
|
|
|
302
311
|
if (data === 'message-from-a-1') {
|
|
@@ -310,8 +319,8 @@ export default (common: TestSetup<PubSub & Startable>) => {
|
|
|
310
319
|
|
|
311
320
|
const topic = 'reconnect-channel'
|
|
312
321
|
|
|
313
|
-
psA.
|
|
314
|
-
psB.
|
|
322
|
+
psA.addEventListener(topic, handlerSpyA)
|
|
323
|
+
psB.addEventListener(topic, handlerSpyB)
|
|
315
324
|
psA.subscribe(topic)
|
|
316
325
|
psB.subscribe(topic)
|
|
317
326
|
|
package/src/pubsub/emit-self.ts
CHANGED
|
@@ -3,15 +3,15 @@ import sinon from 'sinon'
|
|
|
3
3
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
4
4
|
import type { TestSetup } from '../index.js'
|
|
5
5
|
import type { PubSub, PubsubOptions } from '@libp2p/interfaces/pubsub'
|
|
6
|
-
import type {
|
|
6
|
+
import type { EventMap } from './index.js'
|
|
7
7
|
|
|
8
8
|
const topic = 'foo'
|
|
9
9
|
const data = uint8ArrayFromString('bar')
|
|
10
10
|
const shouldNotHappen = () => expect.fail()
|
|
11
11
|
|
|
12
|
-
export default (common: TestSetup<PubSub
|
|
12
|
+
export default (common: TestSetup<PubSub<EventMap>, Partial<PubsubOptions>>) => {
|
|
13
13
|
describe('emit self', () => {
|
|
14
|
-
let pubsub: PubSub
|
|
14
|
+
let pubsub: PubSub<EventMap>
|
|
15
15
|
|
|
16
16
|
describe('enabled', () => {
|
|
17
17
|
before(async () => {
|
|
@@ -30,7 +30,9 @@ export default (common: TestSetup<PubSub & Startable, Partial<PubsubOptions>>) =
|
|
|
30
30
|
})
|
|
31
31
|
|
|
32
32
|
it('should emit to self on publish', async () => {
|
|
33
|
-
const promise = new Promise((resolve) => pubsub.
|
|
33
|
+
const promise = new Promise((resolve) => pubsub.addEventListener(topic, resolve, {
|
|
34
|
+
once: true
|
|
35
|
+
}))
|
|
34
36
|
|
|
35
37
|
void pubsub.publish(topic, data)
|
|
36
38
|
|
|
@@ -55,7 +57,9 @@ export default (common: TestSetup<PubSub & Startable, Partial<PubsubOptions>>) =
|
|
|
55
57
|
})
|
|
56
58
|
|
|
57
59
|
it('should not emit to self on publish', async () => {
|
|
58
|
-
pubsub.
|
|
60
|
+
pubsub.addEventListener(topic, () => shouldNotHappen, {
|
|
61
|
+
once: true
|
|
62
|
+
})
|
|
59
63
|
|
|
60
64
|
void pubsub.publish(topic, data)
|
|
61
65
|
|
package/src/pubsub/index.ts
CHANGED
|
@@ -5,10 +5,17 @@ import connectionHandlersTest from './connection-handlers.js'
|
|
|
5
5
|
import twoNodesTest from './two-nodes.js'
|
|
6
6
|
import multipleNodesTest from './multiple-nodes.js'
|
|
7
7
|
import type { TestSetup } from '../index.js'
|
|
8
|
-
import type { PubSub } from '@libp2p/interfaces/pubsub'
|
|
9
|
-
import type { Startable } from '@libp2p/interfaces'
|
|
8
|
+
import type { PubSub, Message, PubsubEvents } from '@libp2p/interfaces/pubsub'
|
|
10
9
|
|
|
11
|
-
export
|
|
10
|
+
export interface EventMap extends PubsubEvents {
|
|
11
|
+
'topic': CustomEvent<Message>
|
|
12
|
+
'foo': CustomEvent<Message>
|
|
13
|
+
'test-topic': CustomEvent<Message>
|
|
14
|
+
'reconnect-channel': CustomEvent<Message>
|
|
15
|
+
'Z': CustomEvent<Message>
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export default (common: TestSetup<PubSub<EventMap>>) => {
|
|
12
19
|
describe('interface-pubsub compliance tests', () => {
|
|
13
20
|
apiTest(common)
|
|
14
21
|
emitSelfTest(common)
|