@dxos/messaging 0.6.11 → 0.6.12-main.5a87ad5
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/lib/browser/index.mjs +16 -16
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +16 -16
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +2292 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/types/src/messenger.blueprint-test.d.ts.map +1 -1
- package/dist/types/src/messenger.d.ts.map +1 -1
- package/dist/types/src/messenger.node.test.d.ts +2 -0
- package/dist/types/src/messenger.node.test.d.ts.map +1 -0
- package/dist/types/src/signal-client/signal-client.node.test.d.ts +2 -0
- package/dist/types/src/signal-client/signal-client.node.test.d.ts.map +1 -0
- package/dist/types/src/signal-client/signal-rpc-client.node.test.d.ts +2 -0
- package/dist/types/src/signal-client/signal-rpc-client.node.test.d.ts.map +1 -0
- package/dist/types/src/signal-manager/edge-signal-manager.d.ts.map +1 -1
- package/dist/types/src/signal-manager/edge-signal-manager.node.test.d.ts +2 -0
- package/dist/types/src/signal-manager/edge-signal-manager.node.test.d.ts.map +1 -0
- package/dist/types/src/signal-manager/websocket-signal-manager.node.test.d.ts +2 -0
- package/dist/types/src/signal-manager/websocket-signal-manager.node.test.d.ts.map +1 -0
- package/package.json +18 -20
- package/src/messenger.blueprint-test.ts +23 -28
- package/src/{messenger.test.ts → messenger.node.test.ts} +6 -4
- package/src/messenger.ts +1 -1
- package/src/signal-client/{signal-client.test.ts → signal-client.node.test.ts} +9 -8
- package/src/signal-client/{signal-rpc-client.test.ts → signal-rpc-client.node.test.ts} +8 -13
- package/src/signal-manager/{edge-signal-manager.test.ts → edge-signal-manager.node.test.ts} +7 -4
- package/src/signal-manager/edge-signal-manager.ts +5 -6
- package/src/signal-manager/{websocket-signal-manager.test.ts → websocket-signal-manager.node.test.ts} +12 -30
- package/src/testing/test-peer.ts +1 -1
- package/dist/types/src/messenger.test.d.ts +0 -2
- package/dist/types/src/messenger.test.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-client.test.d.ts +0 -2
- package/dist/types/src/signal-client/signal-client.test.d.ts.map +0 -1
- package/dist/types/src/signal-client/signal-rpc-client.test.d.ts +0 -2
- package/dist/types/src/signal-client/signal-rpc-client.test.d.ts.map +0 -1
- package/dist/types/src/signal-manager/edge-signal-manager.test.d.ts +0 -2
- package/dist/types/src/signal-manager/edge-signal-manager.test.d.ts.map +0 -1
- package/dist/types/src/signal-manager/websocket-signal-manager.test.d.ts +0 -2
- package/dist/types/src/signal-manager/websocket-signal-manager.test.d.ts.map +0 -1
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { expect } from '
|
|
5
|
+
import { describe, expect, test, onTestFinished } from 'vitest';
|
|
6
6
|
|
|
7
7
|
import { asyncTimeout, latch, sleep } from '@dxos/async';
|
|
8
8
|
import { type PublicKey } from '@dxos/keys';
|
|
9
|
-
import { describe, test, afterTest } from '@dxos/test';
|
|
10
9
|
import { range } from '@dxos/util';
|
|
11
10
|
|
|
12
11
|
import { type SignalManager, WebsocketSignalManager } from './signal-manager';
|
|
@@ -20,7 +19,7 @@ export const messengerTests = (
|
|
|
20
19
|
const builder = new TestBuilder({
|
|
21
20
|
signalManagerFactory,
|
|
22
21
|
});
|
|
23
|
-
|
|
22
|
+
onTestFinished(() => builder.close());
|
|
24
23
|
const peer1 = await builder.createPeer();
|
|
25
24
|
const peer2 = await builder.createPeer();
|
|
26
25
|
|
|
@@ -39,11 +38,11 @@ export const messengerTests = (
|
|
|
39
38
|
await promise;
|
|
40
39
|
});
|
|
41
40
|
|
|
42
|
-
test('Message 3 peers', async () => {
|
|
41
|
+
test('Message 3 peers', { timeout: 1_000 }, async () => {
|
|
43
42
|
const builder = new TestBuilder({
|
|
44
43
|
signalManagerFactory,
|
|
45
44
|
});
|
|
46
|
-
|
|
45
|
+
onTestFinished(() => builder.close());
|
|
47
46
|
const peer1 = await builder.createPeer();
|
|
48
47
|
const peer2 = await builder.createPeer();
|
|
49
48
|
const peer3 = await builder.createPeer();
|
|
@@ -83,13 +82,13 @@ export const messengerTests = (
|
|
|
83
82
|
await peer2.messenger.sendMessage(message);
|
|
84
83
|
await asyncTimeout(promise, 1_000);
|
|
85
84
|
}
|
|
86
|
-
})
|
|
85
|
+
});
|
|
87
86
|
|
|
88
|
-
test('Message routing', async () => {
|
|
87
|
+
test('Message routing', { timeout: 4_000 }, async () => {
|
|
89
88
|
const builder = new TestBuilder({
|
|
90
89
|
signalManagerFactory,
|
|
91
90
|
});
|
|
92
|
-
|
|
91
|
+
onTestFinished(() => builder.close());
|
|
93
92
|
const peer1 = await builder.createPeer();
|
|
94
93
|
const peer2 = await builder.createPeer();
|
|
95
94
|
|
|
@@ -140,13 +139,13 @@ export const messengerTests = (
|
|
|
140
139
|
expect(messageEqual(message, onMessage2[0])).toEqual(true);
|
|
141
140
|
expect(onMessage3.length === 0);
|
|
142
141
|
}
|
|
143
|
-
})
|
|
142
|
+
});
|
|
144
143
|
|
|
145
|
-
test('Unsubscribe listener', async () => {
|
|
144
|
+
test.skip('Unsubscribe listener', { timeout: 1_000 }, async () => {
|
|
146
145
|
const builder = new TestBuilder({
|
|
147
146
|
signalManagerFactory,
|
|
148
147
|
});
|
|
149
|
-
|
|
148
|
+
onTestFinished(() => builder.close());
|
|
150
149
|
const peer1 = await builder.createPeer();
|
|
151
150
|
const peer2 = await builder.createPeer();
|
|
152
151
|
|
|
@@ -207,15 +206,13 @@ export const messengerTests = (
|
|
|
207
206
|
expect(messages1.length).toEqual(2);
|
|
208
207
|
expect(messages2.length).toEqual(1);
|
|
209
208
|
}
|
|
210
|
-
})
|
|
211
|
-
.tag('flaky')
|
|
212
|
-
.timeout(1_000);
|
|
209
|
+
});
|
|
213
210
|
|
|
214
|
-
test('re-entrant message', async () => {
|
|
211
|
+
test('re-entrant message', { timeout: 1_000 }, async () => {
|
|
215
212
|
const builder = new TestBuilder({
|
|
216
213
|
signalManagerFactory,
|
|
217
214
|
});
|
|
218
|
-
|
|
215
|
+
onTestFinished(() => builder.close());
|
|
219
216
|
const peer1 = await builder.createPeer();
|
|
220
217
|
const peer2 = await builder.createPeer();
|
|
221
218
|
|
|
@@ -245,9 +242,9 @@ export const messengerTests = (
|
|
|
245
242
|
await peer1.messenger.sendMessage(message);
|
|
246
243
|
await asyncTimeout(receivePromise, 1_000);
|
|
247
244
|
}
|
|
248
|
-
})
|
|
245
|
+
});
|
|
249
246
|
|
|
250
|
-
describe('Reliability', () => {
|
|
247
|
+
describe('Reliability', { timeout: 5_000 }, () => {
|
|
251
248
|
test('message with non reliable connection', async () => {
|
|
252
249
|
// Simulate unreliable connection.
|
|
253
250
|
// Only each 3rd message is sent.
|
|
@@ -264,7 +261,7 @@ export const messengerTests = (
|
|
|
264
261
|
signalManagerFactory,
|
|
265
262
|
messageDisruption: unreliableConnection,
|
|
266
263
|
});
|
|
267
|
-
|
|
264
|
+
onTestFinished(() => builder.close());
|
|
268
265
|
const peer1 = await builder.createPeer();
|
|
269
266
|
await peer1.open();
|
|
270
267
|
const peer2 = await builder.createPeer();
|
|
@@ -286,9 +283,9 @@ export const messengerTests = (
|
|
|
286
283
|
|
|
287
284
|
// expect to receive 3 messages.
|
|
288
285
|
await receivePromise;
|
|
289
|
-
})
|
|
286
|
+
});
|
|
290
287
|
|
|
291
|
-
test('ignoring doubled messages', async () => {
|
|
288
|
+
test('ignoring doubled messages', { timeout: 5_000 }, async () => {
|
|
292
289
|
// Message got doubled going through signal network.
|
|
293
290
|
const doublingMessage = (data: Message) => [data, data];
|
|
294
291
|
|
|
@@ -296,7 +293,7 @@ export const messengerTests = (
|
|
|
296
293
|
signalManagerFactory,
|
|
297
294
|
messageDisruption: doublingMessage,
|
|
298
295
|
});
|
|
299
|
-
|
|
296
|
+
onTestFinished(() => builder.close());
|
|
300
297
|
const peer1 = await builder.createPeer();
|
|
301
298
|
await peer1.open();
|
|
302
299
|
const peer2 = await builder.createPeer();
|
|
@@ -317,10 +314,10 @@ export const messengerTests = (
|
|
|
317
314
|
await asyncTimeout(promise(), 1000);
|
|
318
315
|
expect(count).toEqual(1);
|
|
319
316
|
});
|
|
320
|
-
})
|
|
317
|
+
});
|
|
321
318
|
|
|
322
|
-
describe('load', () => {
|
|
323
|
-
test('many connections to KUBE', async () => {
|
|
319
|
+
describe.skip('load', () => {
|
|
320
|
+
test('many connections to KUBE', { timeout: 5_000 }, async () => {
|
|
324
321
|
const builder = new TestBuilder({
|
|
325
322
|
signalManagerFactory: async () =>
|
|
326
323
|
new WebsocketSignalManager([{ server: 'wss://dev.kube.dxos.org/.well-known/dx/signal' }]),
|
|
@@ -339,8 +336,6 @@ export const messengerTests = (
|
|
|
339
336
|
});
|
|
340
337
|
|
|
341
338
|
await sleep(1000000);
|
|
342
|
-
})
|
|
343
|
-
.tag('stress')
|
|
344
|
-
.timeout(5_000);
|
|
339
|
+
});
|
|
345
340
|
});
|
|
346
341
|
};
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { afterAll, onTestFinished, beforeAll, test, describe } from 'vitest';
|
|
6
|
+
|
|
5
7
|
import { asyncTimeout } from '@dxos/async';
|
|
6
8
|
import { EdgeClient } from '@dxos/edge-client';
|
|
7
9
|
import { type PublicKey } from '@dxos/keys';
|
|
8
10
|
import { runTestSignalServer, type SignalServerRunner } from '@dxos/signal';
|
|
9
|
-
import {
|
|
11
|
+
import { openAndClose } from '@dxos/test-utils';
|
|
10
12
|
|
|
11
13
|
import { messengerTests } from './messenger.blueprint-test';
|
|
12
14
|
import { EdgeSignalManager, WebsocketSignalManager } from './signal-manager';
|
|
@@ -26,12 +28,12 @@ describe('Messenger with WebsocketSignalManager', () => {
|
|
|
26
28
|
|
|
27
29
|
messengerTests(async () => new WebsocketSignalManager([{ server: broker.url() }]));
|
|
28
30
|
|
|
29
|
-
test('Message with broken signal server', async () => {
|
|
31
|
+
test('Message with broken signal server', { timeout: 1000 }, async () => {
|
|
30
32
|
const builder = new TestBuilder({
|
|
31
33
|
signalManagerFactory: async () =>
|
|
32
34
|
new WebsocketSignalManager([{ server: 'ws://broken.kube.' }, { server: broker.url() }]),
|
|
33
35
|
});
|
|
34
|
-
|
|
36
|
+
onTestFinished(() => builder.close());
|
|
35
37
|
const peer1 = await builder.createPeer();
|
|
36
38
|
const peer2 = await builder.createPeer();
|
|
37
39
|
|
|
@@ -46,7 +48,7 @@ describe('Messenger with WebsocketSignalManager', () => {
|
|
|
46
48
|
await peer1.messenger.sendMessage(message);
|
|
47
49
|
await asyncTimeout(receivePromise, 1_000);
|
|
48
50
|
}
|
|
49
|
-
})
|
|
51
|
+
});
|
|
50
52
|
});
|
|
51
53
|
|
|
52
54
|
// TODO(mykola): Expects wrangler dev in edge repo to run. Skip to pass CI.
|
package/src/messenger.ts
CHANGED
|
@@ -57,7 +57,7 @@ export class Messenger {
|
|
|
57
57
|
private _closed = true;
|
|
58
58
|
private readonly _retryDelay: number;
|
|
59
59
|
|
|
60
|
-
constructor({ signalManager, retryDelay =
|
|
60
|
+
constructor({ signalManager, retryDelay = 1000 }: MessengerOptions) {
|
|
61
61
|
this._signalManager = signalManager;
|
|
62
62
|
this._retryDelay = retryDelay;
|
|
63
63
|
|
|
@@ -2,15 +2,14 @@
|
|
|
2
2
|
// Copyright 2020 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
import { expect } from 'earljs';
|
|
5
|
+
import { afterAll, beforeAll, describe, expect, test, onTestFinished } from 'vitest';
|
|
7
6
|
|
|
8
7
|
import { asyncTimeout, waitForCondition } from '@dxos/async';
|
|
9
8
|
import { type Any, type TaggedType } from '@dxos/codec-protobuf';
|
|
10
9
|
import { PublicKey } from '@dxos/keys';
|
|
10
|
+
import { log } from '@dxos/log';
|
|
11
11
|
import { type TYPES } from '@dxos/protocols/proto';
|
|
12
12
|
import { runTestSignalServer, type SignalServerRunner } from '@dxos/signal';
|
|
13
|
-
import { afterAll, beforeAll, describe, test, afterTest } from '@dxos/test';
|
|
14
13
|
import { ComplexSet, range } from '@dxos/util';
|
|
15
14
|
|
|
16
15
|
import { SignalClient } from './signal-client';
|
|
@@ -30,7 +29,9 @@ describe('SignalClient', () => {
|
|
|
30
29
|
});
|
|
31
30
|
|
|
32
31
|
afterAll(async () => {
|
|
32
|
+
log.info('begin stop');
|
|
33
33
|
await broker1.stop();
|
|
34
|
+
log.info('end stop');
|
|
34
35
|
});
|
|
35
36
|
|
|
36
37
|
test('message between 2 clients', async () => {
|
|
@@ -79,7 +80,7 @@ describe('SignalClient', () => {
|
|
|
79
80
|
const message = createMessage(peer2, peer1);
|
|
80
81
|
|
|
81
82
|
{
|
|
82
|
-
const receivedMessage = peer1.waitForNextMessage();
|
|
83
|
+
const receivedMessage = peer1.waitForNextMessage({ timeout: 1_000 });
|
|
83
84
|
await peer2.client.sendMessage(message);
|
|
84
85
|
expect(await receivedMessage).toEqual(message);
|
|
85
86
|
}
|
|
@@ -90,7 +91,7 @@ describe('SignalClient', () => {
|
|
|
90
91
|
{
|
|
91
92
|
const receivedMessage = peer1.waitForNextMessage({ timeout: 200 });
|
|
92
93
|
await peer2.client.sendMessage(message);
|
|
93
|
-
await expect(receivedMessage).
|
|
94
|
+
await expect(receivedMessage).rejects.toBeDefined();
|
|
94
95
|
}
|
|
95
96
|
});
|
|
96
97
|
|
|
@@ -138,7 +139,7 @@ describe('SignalClient', () => {
|
|
|
138
139
|
});
|
|
139
140
|
|
|
140
141
|
void client.open();
|
|
141
|
-
|
|
142
|
+
onTestFinished(async () => {
|
|
142
143
|
await client.close();
|
|
143
144
|
});
|
|
144
145
|
return {
|
|
@@ -146,10 +147,10 @@ describe('SignalClient', () => {
|
|
|
146
147
|
identityKey,
|
|
147
148
|
client,
|
|
148
149
|
peerInfo: { peerKey: peerKey.toHex(), identityKey: identityKey.toHex() },
|
|
149
|
-
waitForNextMessage: async () => {
|
|
150
|
+
waitForNextMessage: async ({ timeout = 5_000 } = {}) => {
|
|
150
151
|
return asyncTimeout(
|
|
151
152
|
client.onMessage.waitFor(() => true),
|
|
152
|
-
|
|
153
|
+
timeout,
|
|
153
154
|
);
|
|
154
155
|
},
|
|
155
156
|
waitForPeer: (peerId: PublicKey) => waitForCondition({ condition: () => peers.has(peerId) }),
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { expect } from '
|
|
5
|
+
import { afterAll, beforeAll, describe, expect, onTestFinished, test } from 'vitest';
|
|
6
6
|
|
|
7
7
|
import { type Any } from '@dxos/codec-protobuf';
|
|
8
8
|
import { PublicKey } from '@dxos/keys';
|
|
@@ -10,7 +10,6 @@ import { log } from '@dxos/log';
|
|
|
10
10
|
import { schema } from '@dxos/protocols/proto';
|
|
11
11
|
import { type Message as SignalMessage, type SwarmEvent } from '@dxos/protocols/proto/dxos/mesh/signal';
|
|
12
12
|
import { runTestSignalServer, type SignalServerRunner } from '@dxos/signal';
|
|
13
|
-
import { afterAll, afterTest, beforeAll, describe, test } from '@dxos/test';
|
|
14
13
|
|
|
15
14
|
import { SignalRPCClient } from './signal-rpc-client';
|
|
16
15
|
|
|
@@ -28,11 +27,11 @@ describe('SignalRPCClient', () => {
|
|
|
28
27
|
// TODO(burdon): Convert to TestBuilder pattern.
|
|
29
28
|
const setupClient = async () => {
|
|
30
29
|
const client = new SignalRPCClient({ url: broker.url() });
|
|
31
|
-
|
|
30
|
+
onTestFinished(async () => await client.close());
|
|
32
31
|
return client;
|
|
33
32
|
};
|
|
34
33
|
|
|
35
|
-
test('signal between 2 peers', async () => {
|
|
34
|
+
test('signal between 2 peers', { timeout: 2_000 }, async () => {
|
|
36
35
|
const client1 = await setupClient();
|
|
37
36
|
const client2 = await setupClient();
|
|
38
37
|
|
|
@@ -65,14 +64,12 @@ describe('SignalRPCClient', () => {
|
|
|
65
64
|
payload,
|
|
66
65
|
});
|
|
67
66
|
|
|
68
|
-
expect((await received).author).toEqual(peerId2.
|
|
69
|
-
expect((await received).payload).
|
|
67
|
+
expect((await received).author).toEqual(peerId2.asBuffer());
|
|
68
|
+
expect((await received).payload).toEqual(expect.objectContaining(payload));
|
|
70
69
|
void stream1.close();
|
|
71
|
-
})
|
|
72
|
-
.timeout(2_000)
|
|
73
|
-
.retries(2);
|
|
70
|
+
});
|
|
74
71
|
|
|
75
|
-
test('join', async () => {
|
|
72
|
+
test('join', { timeout: 2_000 }, async () => {
|
|
76
73
|
const client1 = await setupClient();
|
|
77
74
|
const client2 = await setupClient();
|
|
78
75
|
|
|
@@ -101,7 +98,5 @@ describe('SignalRPCClient', () => {
|
|
|
101
98
|
expect((await promise).peerAvailable?.peer).toEqual(peerId2.asBuffer());
|
|
102
99
|
void stream1.close();
|
|
103
100
|
void stream2.close();
|
|
104
|
-
})
|
|
105
|
-
.timeout(2_000)
|
|
106
|
-
.retries(2);
|
|
101
|
+
});
|
|
107
102
|
});
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
//
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
|
+
|
|
5
|
+
import { onTestFinished, describe, test } from 'vitest';
|
|
6
|
+
|
|
4
7
|
import { EdgeClient } from '@dxos/edge-client';
|
|
5
8
|
import { PublicKey } from '@dxos/keys';
|
|
6
|
-
import {
|
|
9
|
+
import { openAndClose } from '@dxos/test-utils';
|
|
7
10
|
|
|
8
11
|
import { EdgeSignalManager } from './edge-signal-manager';
|
|
9
12
|
import { createMessage, expectReceivedMessage, TestBuilder, type TestBuilderOptions } from '../testing';
|
|
@@ -19,7 +22,7 @@ describe.skip('EdgeSignalManager', () => {
|
|
|
19
22
|
|
|
20
23
|
test('two peers discover each other', async () => {
|
|
21
24
|
const builder = new TestBuilder({ signalManagerFactory: edgeSignalFactory });
|
|
22
|
-
|
|
25
|
+
onTestFinished(() => builder.close());
|
|
23
26
|
const [peer1, peer2] = await builder.createPeers(2);
|
|
24
27
|
|
|
25
28
|
const topic = PublicKey.random();
|
|
@@ -36,7 +39,7 @@ describe.skip('EdgeSignalManager', () => {
|
|
|
36
39
|
|
|
37
40
|
test('join and leave swarm', async () => {
|
|
38
41
|
const builder = new TestBuilder({ signalManagerFactory: edgeSignalFactory });
|
|
39
|
-
|
|
42
|
+
onTestFinished(() => builder.close());
|
|
40
43
|
const [peer1, peer2] = await builder.createPeers(2);
|
|
41
44
|
|
|
42
45
|
const topic = PublicKey.random();
|
|
@@ -54,7 +57,7 @@ describe.skip('EdgeSignalManager', () => {
|
|
|
54
57
|
|
|
55
58
|
test('message between peers', async () => {
|
|
56
59
|
const builder = new TestBuilder({ signalManagerFactory: edgeSignalFactory });
|
|
57
|
-
|
|
60
|
+
onTestFinished(() => builder.close());
|
|
58
61
|
const [peer1, peer2] = await builder.createPeers(2);
|
|
59
62
|
const message = createMessage(peer1.peerInfo, peer2.peerInfo);
|
|
60
63
|
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { AnySchema } from '@bufbuild/protobuf/wkt';
|
|
6
|
-
|
|
7
5
|
import { Event } from '@dxos/async';
|
|
8
6
|
import { Resource } from '@dxos/context';
|
|
9
7
|
import { type EdgeConnection, protocol } from '@dxos/edge-client';
|
|
@@ -11,6 +9,7 @@ import { invariant } from '@dxos/invariant';
|
|
|
11
9
|
import { PublicKey } from '@dxos/keys';
|
|
12
10
|
import { log } from '@dxos/log';
|
|
13
11
|
import { EdgeService } from '@dxos/protocols';
|
|
12
|
+
import { bufWkt } from '@dxos/protocols/buf';
|
|
14
13
|
import {
|
|
15
14
|
SwarmRequestSchema,
|
|
16
15
|
SwarmRequest_Action as SwarmRequestAction,
|
|
@@ -88,7 +87,7 @@ export class EdgeSignalManager extends Resource implements SignalManager {
|
|
|
88
87
|
}
|
|
89
88
|
|
|
90
89
|
await this._edgeConnection.send(
|
|
91
|
-
protocol.createMessage(AnySchema, {
|
|
90
|
+
protocol.createMessage(bufWkt.AnySchema, {
|
|
92
91
|
serviceId: EdgeService.SIGNAL_SERVICE_ID,
|
|
93
92
|
source: message.author,
|
|
94
93
|
target: [message.recipient],
|
|
@@ -126,7 +125,7 @@ export class EdgeSignalManager extends Resource implements SignalManager {
|
|
|
126
125
|
return;
|
|
127
126
|
}
|
|
128
127
|
const oldPeers = this._swarmPeers.get(topic)!;
|
|
129
|
-
const timestamp = new Date(Date.parse(message.timestamp));
|
|
128
|
+
const timestamp = message.timestamp ? new Date(Date.parse(message.timestamp)) : new Date();
|
|
130
129
|
const newPeers = new ComplexSet<PeerInfo>(PeerInfoHash, payload.peers);
|
|
131
130
|
|
|
132
131
|
// Emit new available peers in the swarm.
|
|
@@ -155,8 +154,8 @@ export class EdgeSignalManager extends Resource implements SignalManager {
|
|
|
155
154
|
}
|
|
156
155
|
|
|
157
156
|
private _processMessage(message: EdgeMessage) {
|
|
158
|
-
invariant(protocol.getPayloadType(message) === AnySchema.typeName, 'Wrong payload type');
|
|
159
|
-
const payload = protocol.getPayload(message, AnySchema);
|
|
157
|
+
invariant(protocol.getPayloadType(message) === bufWkt.AnySchema.typeName, 'Wrong payload type');
|
|
158
|
+
const payload = protocol.getPayload(message, bufWkt.AnySchema);
|
|
160
159
|
invariant(message.source, 'source is missing');
|
|
161
160
|
invariant(message.target, 'target is missing');
|
|
162
161
|
invariant(message.target.length === 1, 'target should have exactly one item');
|
|
@@ -2,37 +2,31 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { afterAll, beforeAll, describe, test } from 'vitest';
|
|
6
|
+
|
|
5
7
|
import { asyncTimeout, sleep } from '@dxos/async';
|
|
6
8
|
import { PublicKey } from '@dxos/keys';
|
|
7
9
|
import { runTestSignalServer, type SignalServerRunner } from '@dxos/signal';
|
|
8
|
-
import {
|
|
10
|
+
import { openAndClose } from '@dxos/test-utils';
|
|
9
11
|
|
|
10
12
|
import { WebsocketSignalManager } from './websocket-signal-manager';
|
|
11
13
|
import { createMessage, expectPeerAvailable, expectReceivedMessage } from '../testing';
|
|
12
14
|
|
|
13
|
-
describe('WebSocketSignalManager', () => {
|
|
15
|
+
describe.skip('WebSocketSignalManager', () => {
|
|
14
16
|
let broker1: SignalServerRunner;
|
|
15
17
|
let broker2: SignalServerRunner;
|
|
16
18
|
|
|
17
19
|
beforeAll(async () => {
|
|
18
|
-
if (!mochaExecutor.tags.includes('e2e')) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
20
|
broker1 = await runTestSignalServer({ port: 5001 });
|
|
23
21
|
broker2 = await runTestSignalServer({ port: 5002 });
|
|
24
22
|
});
|
|
25
23
|
|
|
26
24
|
afterAll(() => {
|
|
27
|
-
if (!mochaExecutor.tags.includes('e2e')) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
25
|
void broker1.stop();
|
|
32
26
|
void broker2.stop();
|
|
33
27
|
});
|
|
34
28
|
|
|
35
|
-
test('join swarm with two brokers', async () => {
|
|
29
|
+
test('join swarm with two brokers', { timeout: 1_000 }, async () => {
|
|
36
30
|
const client1 = new WebsocketSignalManager([{ server: broker1.url() }, { server: broker2.url() }]);
|
|
37
31
|
const client2 = new WebsocketSignalManager([{ server: broker1.url() }]);
|
|
38
32
|
const client3 = new WebsocketSignalManager([{ server: broker2.url() }]);
|
|
@@ -50,12 +44,9 @@ describe('WebSocketSignalManager', () => {
|
|
|
50
44
|
await client3.join({ topic, peer: { peerKey: peer3.toHex() } });
|
|
51
45
|
|
|
52
46
|
await Promise.all([joined12, joined13, joined21, joined31]);
|
|
53
|
-
})
|
|
54
|
-
.timeout(1_000)
|
|
55
|
-
.retries(2)
|
|
56
|
-
.tag('e2e');
|
|
47
|
+
});
|
|
57
48
|
|
|
58
|
-
test('join single swarm with doubled brokers', async () => {
|
|
49
|
+
test('join single swarm with doubled brokers', { timeout: 1_000 }, async () => {
|
|
59
50
|
const client1 = new WebsocketSignalManager([{ server: broker1.url() }, { server: broker2.url() }]);
|
|
60
51
|
const client2 = new WebsocketSignalManager([{ server: broker1.url() }, { server: broker2.url() }]);
|
|
61
52
|
await openAndClose(client1, client2);
|
|
@@ -78,12 +69,9 @@ describe('WebSocketSignalManager', () => {
|
|
|
78
69
|
await client1.sendMessage(message);
|
|
79
70
|
|
|
80
71
|
await asyncTimeout(received, 1_000);
|
|
81
|
-
})
|
|
82
|
-
.timeout(1_000)
|
|
83
|
-
.retries(2)
|
|
84
|
-
.tag('e2e');
|
|
72
|
+
});
|
|
85
73
|
|
|
86
|
-
test('works with one broken server', async () => {
|
|
74
|
+
test('works with one broken server', { timeout: 1_000 }, async () => {
|
|
87
75
|
const client1 = new WebsocketSignalManager([{ server: 'ws://broken.server/signal' }, { server: broker1.url() }]);
|
|
88
76
|
const client2 = new WebsocketSignalManager([{ server: 'ws://broken.server/signal' }, { server: broker1.url() }]);
|
|
89
77
|
await openAndClose(client1, client2);
|
|
@@ -97,12 +85,9 @@ describe('WebSocketSignalManager', () => {
|
|
|
97
85
|
await client2.join({ topic, peer: { peerKey: peer2.toHex() } });
|
|
98
86
|
|
|
99
87
|
await Promise.all([joined12, joined21]);
|
|
100
|
-
})
|
|
101
|
-
.timeout(1_000)
|
|
102
|
-
.retries(2)
|
|
103
|
-
.tag('e2e');
|
|
88
|
+
});
|
|
104
89
|
|
|
105
|
-
test('join two swarms with a broken signal server', async () => {
|
|
90
|
+
test('join two swarms with a broken signal server', { timeout: 1_000 }, async () => {
|
|
106
91
|
const client1 = new WebsocketSignalManager([{ server: 'ws://broken.server/signal' }, { server: broker1.url() }]);
|
|
107
92
|
const client2 = new WebsocketSignalManager([{ server: 'ws://broken.server/signal' }, { server: broker1.url() }]);
|
|
108
93
|
await openAndClose(client1, client2);
|
|
@@ -122,8 +107,5 @@ describe('WebSocketSignalManager', () => {
|
|
|
122
107
|
await client1.join({ topic: topic2, peer: { peerKey: peer1.toHex() } });
|
|
123
108
|
await client2.join({ topic: topic2, peer: { peerKey: peer2.toHex() } });
|
|
124
109
|
await Promise.all([joined212, joined221]);
|
|
125
|
-
})
|
|
126
|
-
.timeout(1_000)
|
|
127
|
-
.retries(2)
|
|
128
|
-
.tag('e2e');
|
|
110
|
+
});
|
|
129
111
|
});
|
package/src/testing/test-peer.ts
CHANGED
|
@@ -45,7 +45,7 @@ export class TestPeer extends Resource {
|
|
|
45
45
|
|
|
46
46
|
protected override async _open() {
|
|
47
47
|
this.signalManager = await this.testBuilder.createSignalManager(this.identityKey, this.peerId);
|
|
48
|
-
this.messenger = new Messenger({ signalManager: this.signalManager });
|
|
48
|
+
this.messenger = new Messenger({ signalManager: this.signalManager, retryDelay: 300 });
|
|
49
49
|
|
|
50
50
|
await this.signalManager.open();
|
|
51
51
|
this.messenger.open();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messenger.test.d.ts","sourceRoot":"","sources":["../../../src/messenger.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signal-client.test.d.ts","sourceRoot":"","sources":["../../../../src/signal-client/signal-client.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signal-rpc-client.test.d.ts","sourceRoot":"","sources":["../../../../src/signal-client/signal-rpc-client.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"edge-signal-manager.test.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/edge-signal-manager.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-signal-manager.test.d.ts","sourceRoot":"","sources":["../../../../src/signal-manager/websocket-signal-manager.test.ts"],"names":[],"mappings":""}
|