@libp2p/interface-compliance-tests 1.1.9 → 1.1.10
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/mocks/connection.d.ts +5 -1
- package/dist/src/mocks/connection.d.ts.map +1 -1
- package/dist/src/mocks/connection.js +16 -8
- package/dist/src/mocks/connection.js.map +1 -1
- package/dist/src/mocks/registrar.d.ts +5 -1
- package/dist/src/mocks/registrar.d.ts.map +1 -1
- package/dist/src/mocks/registrar.js +8 -10
- package/dist/src/mocks/registrar.js.map +1 -1
- package/dist/src/pubsub/api.d.ts +3 -2
- package/dist/src/pubsub/api.d.ts.map +1 -1
- package/dist/src/pubsub/api.js +8 -6
- package/dist/src/pubsub/api.js.map +1 -1
- package/dist/src/pubsub/connection-handlers.d.ts +3 -2
- package/dist/src/pubsub/connection-handlers.d.ts.map +1 -1
- package/dist/src/pubsub/connection-handlers.js +128 -34
- package/dist/src/pubsub/connection-handlers.js.map +1 -1
- package/dist/src/pubsub/emit-self.d.ts +3 -2
- package/dist/src/pubsub/emit-self.d.ts.map +1 -1
- package/dist/src/pubsub/emit-self.js +3 -2
- package/dist/src/pubsub/emit-self.js.map +1 -1
- package/dist/src/pubsub/index.d.ts +5 -2
- 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 +3 -2
- package/dist/src/pubsub/messages.d.ts.map +1 -1
- package/dist/src/pubsub/messages.js +16 -17
- package/dist/src/pubsub/messages.js.map +1 -1
- package/dist/src/pubsub/multiple-nodes.d.ts +3 -2
- package/dist/src/pubsub/multiple-nodes.d.ts.map +1 -1
- package/dist/src/pubsub/multiple-nodes.js +80 -34
- package/dist/src/pubsub/multiple-nodes.js.map +1 -1
- package/dist/src/pubsub/two-nodes.d.ts +3 -2
- package/dist/src/pubsub/two-nodes.d.ts.map +1 -1
- package/dist/src/pubsub/two-nodes.js +57 -29
- package/dist/src/pubsub/two-nodes.js.map +1 -1
- package/package.json +1 -1
- package/src/mocks/connection.ts +22 -8
- package/src/mocks/registrar.ts +12 -10
- package/src/pubsub/api.ts +13 -9
- package/src/pubsub/connection-handlers.ts +148 -43
- package/src/pubsub/emit-self.ts +9 -7
- package/src/pubsub/index.ts +5 -2
- package/src/pubsub/messages.ts +24 -23
- package/src/pubsub/multiple-nodes.ts +95 -47
- package/src/pubsub/two-nodes.ts +69 -36
|
@@ -7,6 +7,8 @@ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
|
7
7
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
8
8
|
import { connectPeers, mockRegistrar } from '../mocks/registrar.js';
|
|
9
9
|
import { createEd25519PeerId } from '@libp2p/peer-id-factory';
|
|
10
|
+
import { CustomEvent } from '@libp2p/interfaces';
|
|
11
|
+
import delay from 'delay';
|
|
10
12
|
const topic = 'foo';
|
|
11
13
|
function shouldNotHappen() {
|
|
12
14
|
expect.fail();
|
|
@@ -27,7 +29,8 @@ export default (common) => {
|
|
|
27
29
|
registrarB = mockRegistrar();
|
|
28
30
|
psA = await common.setup({
|
|
29
31
|
peerId: peerIdA,
|
|
30
|
-
registrar: registrarA
|
|
32
|
+
registrar: registrarA,
|
|
33
|
+
emitSelf: true
|
|
31
34
|
});
|
|
32
35
|
psB = await common.setup({
|
|
33
36
|
peerId: peerIdB,
|
|
@@ -38,7 +41,13 @@ export default (common) => {
|
|
|
38
41
|
await psB.start();
|
|
39
42
|
expect(psA.getPeers()).to.be.empty();
|
|
40
43
|
expect(psB.getPeers()).to.be.empty();
|
|
41
|
-
await connectPeers(psA.multicodecs[0],
|
|
44
|
+
await connectPeers(psA.multicodecs[0], {
|
|
45
|
+
peerId: peerIdA,
|
|
46
|
+
registrar: registrarA
|
|
47
|
+
}, {
|
|
48
|
+
peerId: peerIdB,
|
|
49
|
+
registrar: registrarB
|
|
50
|
+
});
|
|
42
51
|
// Wait for peers to be ready in pubsub
|
|
43
52
|
await pWaitFor(() => psA.getPeers().length === 1 && psB.getPeers().length === 1);
|
|
44
53
|
});
|
|
@@ -54,10 +63,10 @@ export default (common) => {
|
|
|
54
63
|
const { peerId: changedPeerId, subscriptions: changedSubs } = evt.detail;
|
|
55
64
|
expect(psA.getTopics()).to.deep.equal([topic]);
|
|
56
65
|
expect(psB.getPeers()).to.have.lengthOf(1);
|
|
57
|
-
expect(psB.getSubscribers(topic)).to.deep.equal([peerIdA]);
|
|
66
|
+
expect(psB.getSubscribers(topic).map(p => p.toString())).to.deep.equal([peerIdA.toString()]);
|
|
58
67
|
expect(changedPeerId).to.deep.equal(psB.getPeers()[0]);
|
|
59
68
|
expect(changedSubs).to.have.lengthOf(1);
|
|
60
|
-
expect(changedSubs[0].
|
|
69
|
+
expect(changedSubs[0].topic).to.equal(topic);
|
|
61
70
|
expect(changedSubs[0].subscribe).to.equal(true);
|
|
62
71
|
defer.resolve();
|
|
63
72
|
}, {
|
|
@@ -79,7 +88,8 @@ export default (common) => {
|
|
|
79
88
|
psB.addEventListener(topic, shouldNotHappen, {
|
|
80
89
|
once: true
|
|
81
90
|
});
|
|
82
|
-
|
|
91
|
+
await delay(100);
|
|
92
|
+
void psA.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('hey') }));
|
|
83
93
|
return await defer.promise;
|
|
84
94
|
});
|
|
85
95
|
it('Publish to a topic in nodeB', async () => {
|
|
@@ -101,7 +111,8 @@ export default (common) => {
|
|
|
101
111
|
psB.addEventListener(topic, shouldNotHappen, {
|
|
102
112
|
once: true
|
|
103
113
|
});
|
|
104
|
-
|
|
114
|
+
await delay(100);
|
|
115
|
+
void psB.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('banana') }));
|
|
105
116
|
return await defer.promise;
|
|
106
117
|
});
|
|
107
118
|
it('Publish 10 msg to a topic in nodeB', async () => {
|
|
@@ -114,51 +125,68 @@ export default (common) => {
|
|
|
114
125
|
function receivedMsg(evt) {
|
|
115
126
|
const msg = evt.detail;
|
|
116
127
|
expect(uint8ArrayToString(msg.data)).to.equal('banana');
|
|
117
|
-
expect(msg.from).to.
|
|
118
|
-
expect(msg.seqno).to.be.a('
|
|
119
|
-
expect(msg.
|
|
128
|
+
expect(msg.from.toString()).to.equal(peerIdB.toString());
|
|
129
|
+
expect(msg.seqno).to.be.a('BigInt');
|
|
130
|
+
expect(msg.topic).to.be.equal(topic);
|
|
120
131
|
if (++counter === 10) {
|
|
121
132
|
psA.removeEventListener(topic, receivedMsg);
|
|
122
133
|
psB.removeEventListener(topic, shouldNotHappen);
|
|
123
134
|
defer.resolve();
|
|
124
135
|
}
|
|
125
136
|
}
|
|
126
|
-
|
|
137
|
+
await delay(100);
|
|
138
|
+
Array.from({ length: 10 }, (_, i) => psB.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('banana') })));
|
|
127
139
|
return await defer.promise;
|
|
128
140
|
});
|
|
129
141
|
it('Unsubscribe from topic in nodeA', async () => {
|
|
130
142
|
const defer = pDefer();
|
|
131
|
-
|
|
132
|
-
expect(psA.getTopics()).to.be.empty();
|
|
143
|
+
let callCount = 0;
|
|
133
144
|
psB.addEventListener('pubsub:subscription-change', (evt) => {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
145
|
+
callCount++;
|
|
146
|
+
if (callCount === 1) {
|
|
147
|
+
// notice subscribe
|
|
148
|
+
const { peerId: changedPeerId, subscriptions: changedSubs } = evt.detail;
|
|
149
|
+
expect(psB.getPeers()).to.have.lengthOf(1);
|
|
150
|
+
expect(psB.getTopics()).to.be.empty();
|
|
151
|
+
expect(changedPeerId).to.deep.equal(psB.getPeers()[0]);
|
|
152
|
+
expect(changedSubs).to.have.lengthOf(1);
|
|
153
|
+
expect(changedSubs[0].topic).to.equal(topic);
|
|
154
|
+
expect(changedSubs[0].subscribe).to.equal(true);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
// notice unsubscribe
|
|
158
|
+
const { peerId: changedPeerId, subscriptions: changedSubs } = evt.detail;
|
|
159
|
+
expect(psB.getPeers()).to.have.lengthOf(1);
|
|
160
|
+
expect(psB.getTopics()).to.be.empty();
|
|
161
|
+
expect(changedPeerId).to.deep.equal(psB.getPeers()[0]);
|
|
162
|
+
expect(changedSubs).to.have.lengthOf(1);
|
|
163
|
+
expect(changedSubs[0].topic).to.equal(topic);
|
|
164
|
+
expect(changedSubs[0].subscribe).to.equal(false);
|
|
165
|
+
defer.resolve();
|
|
166
|
+
}
|
|
144
167
|
});
|
|
168
|
+
psA.subscribe(topic);
|
|
169
|
+
expect(psA.getTopics()).to.not.be.empty();
|
|
170
|
+
psA.unsubscribe(topic);
|
|
171
|
+
expect(psA.getTopics()).to.be.empty();
|
|
145
172
|
return await defer.promise;
|
|
146
173
|
});
|
|
147
|
-
it('Publish to a topic:Z in nodeA nodeB', async () => {
|
|
174
|
+
it.skip('Publish to a topic:Z in nodeA nodeB', async () => {
|
|
148
175
|
const defer = pDefer();
|
|
149
|
-
|
|
176
|
+
const topic = 'Z';
|
|
177
|
+
psA.addEventListener(topic, shouldNotHappen, {
|
|
150
178
|
once: true
|
|
151
179
|
});
|
|
152
|
-
psB.addEventListener(
|
|
180
|
+
psB.addEventListener(topic, shouldNotHappen, {
|
|
153
181
|
once: true
|
|
154
182
|
});
|
|
155
183
|
setTimeout(() => {
|
|
156
|
-
psA.removeEventListener(
|
|
157
|
-
psB.removeEventListener(
|
|
184
|
+
psA.removeEventListener(topic, shouldNotHappen);
|
|
185
|
+
psB.removeEventListener(topic, shouldNotHappen);
|
|
158
186
|
defer.resolve();
|
|
159
187
|
}, 100);
|
|
160
|
-
void psB.
|
|
161
|
-
void psA.
|
|
188
|
+
void psB.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('banana') }));
|
|
189
|
+
void psA.dispatchEvent(new CustomEvent(topic, { detail: uint8ArrayFromString('banana') }));
|
|
162
190
|
return await defer.promise;
|
|
163
191
|
});
|
|
164
192
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-nodes.js","sourceRoot":"","sources":["../../../src/pubsub/two-nodes.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"two-nodes.js","sourceRoot":"","sources":["../../../src/pubsub/two-nodes.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.10",
|
|
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",
|
package/src/mocks/connection.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type { PeerId } from '@libp2p/interfaces/src/peer-id'
|
|
|
10
10
|
import { mockMultiaddrConnection } from './multiaddr-connection.js'
|
|
11
11
|
import type { Registrar } from '@libp2p/interfaces/registrar'
|
|
12
12
|
import { mockRegistrar } from './registrar.js'
|
|
13
|
-
import { Listener } from '@libp2p/multistream-select'
|
|
13
|
+
import { Dialer, Listener } from '@libp2p/multistream-select'
|
|
14
14
|
import { logger } from '@libp2p/logger'
|
|
15
15
|
import { CustomEvent } from '@libp2p/interfaces'
|
|
16
16
|
|
|
@@ -33,7 +33,6 @@ export function mockConnection (maConn: MultiaddrConnection, opts: MockConnectio
|
|
|
33
33
|
const remotePeer = peerIdFromString(remotePeerIdStr)
|
|
34
34
|
const registry = new Map()
|
|
35
35
|
const streams: Stream[] = []
|
|
36
|
-
let streamId = 0
|
|
37
36
|
const direction = opts.direction ?? 'inbound'
|
|
38
37
|
const registrar = opts.registrar ?? mockRegistrar()
|
|
39
38
|
|
|
@@ -91,11 +90,17 @@ export function mockConnection (maConn: MultiaddrConnection, opts: MockConnectio
|
|
|
91
90
|
throw new Error('protocols must have a length')
|
|
92
91
|
}
|
|
93
92
|
|
|
94
|
-
const id = `${
|
|
93
|
+
const id = `${Math.random()}`
|
|
95
94
|
const stream: Stream = muxer.newStream(id)
|
|
95
|
+
const mss = new Dialer(stream)
|
|
96
|
+
const result = await mss.select(protocols)
|
|
97
|
+
|
|
96
98
|
const streamData: ProtocolStream = {
|
|
97
|
-
protocol:
|
|
98
|
-
stream
|
|
99
|
+
protocol: result.protocol,
|
|
100
|
+
stream: {
|
|
101
|
+
...stream,
|
|
102
|
+
...result.stream
|
|
103
|
+
}
|
|
99
104
|
}
|
|
100
105
|
|
|
101
106
|
registry.set(id, streamData)
|
|
@@ -129,15 +134,24 @@ export function mockStream (stream: Duplex<Uint8Array>): Stream {
|
|
|
129
134
|
}
|
|
130
135
|
}
|
|
131
136
|
|
|
132
|
-
export
|
|
137
|
+
export interface Peer {
|
|
138
|
+
peerId: PeerId
|
|
139
|
+
registrar: Registrar
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function connectionPair (a: Peer, b: Peer): [ Connection, Connection ] {
|
|
133
143
|
const [peerBtoPeerA, peerAtoPeerB] = duplexPair<Uint8Array>()
|
|
134
144
|
|
|
135
145
|
return [
|
|
136
146
|
mockConnection(
|
|
137
|
-
mockMultiaddrConnection(
|
|
147
|
+
mockMultiaddrConnection(peerAtoPeerB, b.peerId), {
|
|
148
|
+
registrar: a.registrar
|
|
149
|
+
}
|
|
138
150
|
),
|
|
139
151
|
mockConnection(
|
|
140
|
-
mockMultiaddrConnection(
|
|
152
|
+
mockMultiaddrConnection(peerBtoPeerA, a.peerId), {
|
|
153
|
+
registrar: b.registrar
|
|
154
|
+
}
|
|
141
155
|
)
|
|
142
156
|
]
|
|
143
157
|
}
|
package/src/mocks/registrar.ts
CHANGED
|
@@ -116,18 +116,20 @@ export async function mockIncomingStreamEvent (protocol: string, conn: Connectio
|
|
|
116
116
|
})
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
export
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
// const handlerB = registrarB.getHandler(protocol)
|
|
119
|
+
export interface Peer {
|
|
120
|
+
peerId: PeerId
|
|
121
|
+
registrar: Registrar
|
|
122
|
+
}
|
|
124
123
|
|
|
124
|
+
export async function connectPeers (protocol: string, a: Peer, b: Peer) {
|
|
125
125
|
// Notify peers of connection
|
|
126
|
-
const [
|
|
126
|
+
const [aToB, bToA] = connectionPair(a, b)
|
|
127
127
|
|
|
128
|
-
|
|
129
|
-
|
|
128
|
+
for (const topology of a.registrar.getTopologies(protocol)) {
|
|
129
|
+
await topology.onConnect(b.peerId, aToB)
|
|
130
|
+
}
|
|
130
131
|
|
|
131
|
-
|
|
132
|
-
|
|
132
|
+
for (const topology of b.registrar.getTopologies(protocol)) {
|
|
133
|
+
await topology.onConnect(a.peerId, bToA)
|
|
134
|
+
}
|
|
133
135
|
}
|
package/src/pubsub/api.ts
CHANGED
|
@@ -3,17 +3,20 @@ import sinon from 'sinon'
|
|
|
3
3
|
import pDefer from 'p-defer'
|
|
4
4
|
import pWaitFor from 'p-wait-for'
|
|
5
5
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
6
|
+
import { mockRegistrar } from '../mocks/registrar.js'
|
|
7
|
+
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
8
|
+
import delay from 'delay'
|
|
9
|
+
import { CustomEvent } from '@libp2p/interfaces'
|
|
6
10
|
import type { TestSetup } from '../index.js'
|
|
7
11
|
import type { PubSub, PubSubOptions } from '@libp2p/interfaces/pubsub'
|
|
8
12
|
import type { EventMap } from './index.js'
|
|
9
13
|
import type { Registrar } from '@libp2p/interfaces/src/registrar'
|
|
10
|
-
import {
|
|
11
|
-
import { createEd25519PeerId } from '@libp2p/peer-id-factory'
|
|
14
|
+
import type { PubsubBaseProtocol } from '@libp2p/pubsub'
|
|
12
15
|
|
|
13
16
|
const topic = 'foo'
|
|
14
17
|
const data = uint8ArrayFromString('bar')
|
|
15
18
|
|
|
16
|
-
export default (common: TestSetup<
|
|
19
|
+
export default (common: TestSetup<PubsubBaseProtocol<EventMap>, PubSubOptions>) => {
|
|
17
20
|
describe('pubsub api', () => {
|
|
18
21
|
let pubsub: PubSub<EventMap>
|
|
19
22
|
let registrar: Registrar
|
|
@@ -60,20 +63,22 @@ export default (common: TestSetup<PubSub<EventMap>, PubSubOptions>) => {
|
|
|
60
63
|
}
|
|
61
64
|
|
|
62
65
|
await pubsub.start()
|
|
63
|
-
pubsub.
|
|
64
|
-
pubsub.addEventListener('topic', handler)
|
|
66
|
+
pubsub.addEventListener(topic, handler)
|
|
65
67
|
|
|
66
68
|
await pWaitFor(() => {
|
|
67
69
|
const topics = pubsub.getTopics()
|
|
68
70
|
return topics.length === 1 && topics[0] === topic
|
|
69
71
|
})
|
|
70
72
|
|
|
71
|
-
pubsub.
|
|
73
|
+
pubsub.removeEventListener(topic, handler)
|
|
72
74
|
|
|
73
75
|
await pWaitFor(() => pubsub.getTopics().length === 0)
|
|
74
76
|
|
|
75
77
|
// Publish to guarantee the handler is not called
|
|
76
|
-
|
|
78
|
+
pubsub.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
79
|
+
|
|
80
|
+
// handlers are called async
|
|
81
|
+
await delay(100)
|
|
77
82
|
|
|
78
83
|
await pubsub.stop()
|
|
79
84
|
})
|
|
@@ -83,13 +88,12 @@ export default (common: TestSetup<PubSub<EventMap>, PubSubOptions>) => {
|
|
|
83
88
|
|
|
84
89
|
await pubsub.start()
|
|
85
90
|
|
|
86
|
-
pubsub.subscribe(topic)
|
|
87
91
|
pubsub.addEventListener(topic, (evt) => {
|
|
88
92
|
const msg = evt.detail
|
|
89
93
|
expect(msg).to.not.eql(undefined)
|
|
90
94
|
defer.resolve()
|
|
91
95
|
})
|
|
92
|
-
|
|
96
|
+
pubsub.dispatchEvent(new CustomEvent(topic, { detail: data }))
|
|
93
97
|
await defer.promise
|
|
94
98
|
|
|
95
99
|
await pubsub.stop()
|