@dxos/network-manager 0.6.12-staging.e11e696 → 0.6.12
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/{chunk-YOKKEU6T.mjs → chunk-XYSYUN63.mjs} +998 -1192
- package/dist/lib/browser/chunk-XYSYUN63.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +19 -10
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +27 -18
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node/{chunk-7ZWQLO5T.cjs → chunk-4YAYC7WN.cjs} +1166 -1233
- package/dist/lib/node/chunk-4YAYC7WN.cjs.map +7 -0
- package/dist/lib/node/index.cjs +37 -27
- package/dist/lib/node/index.cjs.map +2 -2
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +29 -20
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/types/src/signal/integration.test.d.ts +2 -0
- package/dist/types/src/signal/integration.test.d.ts.map +1 -0
- package/dist/types/src/signal/swarm-messenger.test.d.ts +2 -0
- package/dist/types/src/signal/swarm-messenger.test.d.ts.map +1 -0
- package/dist/types/src/swarm/connection.d.ts.map +1 -1
- package/dist/types/src/swarm/swarm.d.ts +1 -1
- package/dist/types/src/testing/test-builder.d.ts +2 -2
- package/dist/types/src/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/tests/basic-test-suite.d.ts.map +1 -1
- package/dist/types/src/tests/property-test-suite.d.ts.map +1 -1
- package/dist/types/src/tests/tcp-transport.test.d.ts +2 -0
- package/dist/types/src/tests/tcp-transport.test.d.ts.map +1 -0
- package/dist/types/src/tests/utils.d.ts.map +1 -1
- package/dist/types/src/transport/index.d.ts +5 -1
- package/dist/types/src/transport/index.d.ts.map +1 -1
- package/dist/types/src/transport/libdatachannel-transport.d.ts +42 -0
- package/dist/types/src/transport/libdatachannel-transport.d.ts.map +1 -0
- package/dist/types/src/transport/libdatachannel-transport.test.d.ts +2 -0
- package/dist/types/src/transport/libdatachannel-transport.test.d.ts.map +1 -0
- package/dist/types/src/transport/memory-transport.d.ts +2 -2
- package/dist/types/src/transport/memory-transport.d.ts.map +1 -1
- package/dist/types/src/transport/memory-transport.test.d.ts +2 -0
- package/dist/types/src/transport/memory-transport.test.d.ts.map +1 -0
- package/dist/types/src/transport/simplepeer-simple-peer.d.ts +2 -0
- package/dist/types/src/transport/simplepeer-simple-peer.d.ts.map +1 -0
- package/dist/types/src/transport/simplepeer-transport-proxy-test.d.ts +2 -0
- package/dist/types/src/transport/simplepeer-transport-proxy-test.d.ts.map +1 -0
- package/dist/types/src/transport/{webrtc/rtc-transport-proxy.d.ts → simplepeer-transport-proxy.d.ts} +12 -10
- package/dist/types/src/transport/simplepeer-transport-proxy.d.ts.map +1 -0
- package/dist/types/src/transport/{webrtc/rtc-transport-service.d.ts → simplepeer-transport-service.d.ts} +7 -9
- package/dist/types/src/transport/simplepeer-transport-service.d.ts.map +1 -0
- package/dist/types/src/transport/simplepeer-transport.d.ts +36 -0
- package/dist/types/src/transport/simplepeer-transport.d.ts.map +1 -0
- package/dist/types/src/transport/simplepeer-transport.test.d.ts +2 -0
- package/dist/types/src/transport/simplepeer-transport.test.d.ts.map +1 -0
- package/dist/types/src/transport/{tcp/tcp-transport.browser.d.ts → tcp-transport.browser.d.ts} +3 -3
- package/dist/types/src/transport/tcp-transport.browser.d.ts.map +1 -0
- package/dist/types/src/transport/{tcp/tcp-transport.d.ts → tcp-transport.d.ts} +3 -3
- package/dist/types/src/transport/tcp-transport.d.ts.map +1 -0
- package/dist/types/src/transport/transport.d.ts +6 -7
- package/dist/types/src/transport/transport.d.ts.map +1 -1
- package/dist/types/src/transport/webrtc.d.ts +6 -0
- package/dist/types/src/transport/webrtc.d.ts.map +1 -0
- package/package.json +30 -53
- package/src/globals.d.ts +7 -0
- package/src/signal/ice.test.ts +3 -1
- package/src/signal/{integration.node.test.ts → integration.test.ts} +15 -9
- package/src/signal/{swarm-messenger.node.test.ts → swarm-messenger.test.ts} +23 -13
- package/src/swarm/connection-limiter.test.ts +6 -3
- package/src/swarm/connection.test.ts +38 -63
- package/src/swarm/connection.ts +5 -5
- package/src/swarm/swarm.test.ts +11 -9
- package/src/swarm/swarm.ts +1 -1
- package/src/testing/test-builder.ts +28 -12
- package/src/tests/basic-test-suite.ts +33 -34
- package/src/tests/memory-transport.test.ts +42 -40
- package/src/tests/property-test-suite.ts +22 -21
- package/src/tests/tcp-transport.test.ts +67 -0
- package/src/tests/utils.ts +2 -3
- package/src/tests/webrtc-transport.test.ts +9 -9
- package/src/transport/index.ts +5 -1
- package/src/transport/libdatachannel-transport.test.ts +100 -0
- package/src/transport/libdatachannel-transport.ts +376 -0
- package/src/transport/memory-transport.test.ts +74 -0
- package/src/transport/memory-transport.ts +0 -2
- package/src/transport/simplepeer-simple-peer.ts +26 -0
- package/src/transport/simplepeer-transport-proxy-test.ts +181 -0
- package/src/transport/simplepeer-transport-proxy.ts +246 -0
- package/src/transport/simplepeer-transport-service.ts +160 -0
- package/src/transport/simplepeer-transport.test.ts +61 -0
- package/src/transport/simplepeer-transport.ts +250 -0
- package/src/transport/{tcp/tcp-transport.browser.ts → tcp-transport.browser.ts} +3 -7
- package/src/transport/{tcp/tcp-transport.ts → tcp-transport.ts} +1 -3
- package/src/transport/transport.ts +7 -8
- package/src/transport/webrtc.ts +15 -0
- package/src/typings.d.ts +2 -8
- package/dist/lib/browser/chunk-GW3YM55A.mjs +0 -14
- package/dist/lib/browser/chunk-GW3YM55A.mjs.map +0 -7
- package/dist/lib/browser/chunk-YOKKEU6T.mjs.map +0 -7
- package/dist/lib/browser/transport/tcp/index.mjs +0 -39
- package/dist/lib/browser/transport/tcp/index.mjs.map +0 -7
- package/dist/lib/node/chunk-7ZWQLO5T.cjs.map +0 -7
- package/dist/lib/node/transport/tcp/index.cjs +0 -191
- package/dist/lib/node/transport/tcp/index.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-4VO725JT.mjs +0 -4383
- package/dist/lib/node-esm/chunk-4VO725JT.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -50
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/testing/index.mjs +0 -280
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/transport/tcp/index.mjs +0 -159
- package/dist/lib/node-esm/transport/tcp/index.mjs.map +0 -7
- package/dist/types/src/signal/integration.node.test.d.ts +0 -2
- package/dist/types/src/signal/integration.node.test.d.ts.map +0 -1
- package/dist/types/src/signal/swarm-messenger.node.test.d.ts +0 -2
- package/dist/types/src/signal/swarm-messenger.node.test.d.ts.map +0 -1
- package/dist/types/src/tests/tcp-transport.node.test.d.ts +0 -2
- package/dist/types/src/tests/tcp-transport.node.test.d.ts.map +0 -1
- package/dist/types/src/transport/tcp/index.d.ts +0 -2
- package/dist/types/src/transport/tcp/index.d.ts.map +0 -1
- package/dist/types/src/transport/tcp/tcp-transport.browser.d.ts.map +0 -1
- package/dist/types/src/transport/tcp/tcp-transport.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/index.d.ts +0 -4
- package/dist/types/src/transport/webrtc/index.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/rtc-connection-factory.d.ts +0 -14
- package/dist/types/src/transport/webrtc/rtc-connection-factory.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts +0 -68
- package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/rtc-transport-channel.d.ts +0 -33
- package/dist/types/src/transport/webrtc/rtc-transport-channel.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/rtc-transport-channel.test.d.ts +0 -2
- package/dist/types/src/transport/webrtc/rtc-transport-channel.test.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/rtc-transport-factory.d.ts +0 -4
- package/dist/types/src/transport/webrtc/rtc-transport-factory.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/rtc-transport-proxy.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/rtc-transport-proxy.test.d.ts +0 -2
- package/dist/types/src/transport/webrtc/rtc-transport-proxy.test.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/rtc-transport-service.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/rtc-transport-stats.d.ts +0 -4
- package/dist/types/src/transport/webrtc/rtc-transport-stats.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/rtc-transport.test.d.ts +0 -2
- package/dist/types/src/transport/webrtc/rtc-transport.test.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/test-utils.d.ts +0 -5
- package/dist/types/src/transport/webrtc/test-utils.d.ts.map +0 -1
- package/dist/types/src/transport/webrtc/utils.d.ts +0 -3
- package/dist/types/src/transport/webrtc/utils.d.ts.map +0 -1
- package/src/tests/tcp-transport.node.test.ts +0 -65
- package/src/transport/tcp/index.ts +0 -5
- package/src/transport/webrtc/index.ts +0 -7
- package/src/transport/webrtc/rtc-connection-factory.ts +0 -82
- package/src/transport/webrtc/rtc-peer-connection.ts +0 -472
- package/src/transport/webrtc/rtc-transport-channel.test.ts +0 -176
- package/src/transport/webrtc/rtc-transport-channel.ts +0 -195
- package/src/transport/webrtc/rtc-transport-factory.ts +0 -28
- package/src/transport/webrtc/rtc-transport-proxy.test.ts +0 -413
- package/src/transport/webrtc/rtc-transport-proxy.ts +0 -264
- package/src/transport/webrtc/rtc-transport-service.ts +0 -192
- package/src/transport/webrtc/rtc-transport-stats.ts +0 -67
- package/src/transport/webrtc/rtc-transport.test.ts +0 -198
- package/src/transport/webrtc/test-utils.ts +0 -22
- package/src/transport/webrtc/utils.ts +0 -36
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
// Copyright 2021 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { randomBytes } from '
|
|
6
|
-
import { describe, test } from 'vitest';
|
|
5
|
+
import { randomBytes } from 'crypto';
|
|
7
6
|
|
|
8
7
|
import { PublicKey } from '@dxos/keys';
|
|
8
|
+
import { test } from '@dxos/test';
|
|
9
9
|
import { range } from '@dxos/util';
|
|
10
10
|
|
|
11
11
|
import { basicTestSuite } from './basic-test-suite';
|
|
@@ -17,45 +17,47 @@ describe('Memory transport', () => {
|
|
|
17
17
|
const testBuilder = new TestBuilder();
|
|
18
18
|
basicTestSuite(testBuilder);
|
|
19
19
|
|
|
20
|
-
test
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
20
|
+
test
|
|
21
|
+
.skip('load', async () => {
|
|
22
|
+
const NUM_PAIRS = 100;
|
|
23
|
+
const NUM_ROUNDS = 10_000;
|
|
24
|
+
const PACKET_SIZE = 1_000;
|
|
25
|
+
|
|
26
|
+
const pairs = await Promise.all(
|
|
27
|
+
range(NUM_PAIRS).map(async () => {
|
|
28
|
+
const peer1 = testBuilder.createPeer();
|
|
29
|
+
const peer2 = testBuilder.createPeer();
|
|
30
|
+
await openAndCloseAfterTest([peer1, peer2]);
|
|
31
|
+
|
|
32
|
+
const topic = PublicKey.random();
|
|
33
|
+
const [swarm1, swarm2] = await joinSwarm([peer1, peer2], topic, () => new FullyConnectedTopology());
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
peer1,
|
|
37
|
+
peer2,
|
|
38
|
+
topic,
|
|
39
|
+
swarm1,
|
|
40
|
+
swarm2,
|
|
41
|
+
};
|
|
42
|
+
}),
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
const message = randomBytes(PACKET_SIZE / 2).toString('hex');
|
|
46
|
+
|
|
47
|
+
for (let i = 0; i < NUM_ROUNDS; i++) {
|
|
48
|
+
// console.log(`Round ${i}/${NUM_ROUNDS}`);
|
|
49
|
+
await Promise.all(
|
|
50
|
+
pairs.map(async ({ swarm1, swarm2 }) => {
|
|
51
|
+
await exchangeMessages(swarm1, swarm2, message);
|
|
52
|
+
}),
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
48
56
|
await Promise.all(
|
|
49
|
-
pairs.map(async ({
|
|
50
|
-
await
|
|
57
|
+
pairs.map(async ({ peer1, peer2, topic }) => {
|
|
58
|
+
await leaveSwarm([peer1, peer2], topic);
|
|
51
59
|
}),
|
|
52
60
|
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
await Promise.all(
|
|
56
|
-
pairs.map(async ({ peer1, peer2, topic }) => {
|
|
57
|
-
await leaveSwarm([peer1, peer2], topic);
|
|
58
|
-
}),
|
|
59
|
-
);
|
|
60
|
-
});
|
|
61
|
+
})
|
|
62
|
+
.timeout(1_000_000);
|
|
61
63
|
});
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
import * as fc from 'fast-check';
|
|
6
6
|
import { type ModelRunSetup } from 'fast-check';
|
|
7
|
-
import
|
|
7
|
+
import waitForExpect from 'wait-for-expect';
|
|
8
8
|
|
|
9
9
|
import { todo } from '@dxos/debug';
|
|
10
10
|
import { PublicKey } from '@dxos/keys';
|
|
11
|
+
import { test } from '@dxos/test';
|
|
11
12
|
import { ComplexMap, ComplexSet, range } from '@dxos/util';
|
|
12
13
|
|
|
13
14
|
import { type SwarmNetworkManager } from '../network-manager';
|
|
@@ -36,29 +37,29 @@ export const propertyTestSuite = () => {
|
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
const assertState = async (model: Model, real: Real) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
40
|
+
await waitForExpect(() => {
|
|
41
|
+
for (const peer of real.peers.values()) {
|
|
42
|
+
if (peer.presence) {
|
|
43
|
+
for (const expectedPeerId of model.joinedPeers) {
|
|
44
|
+
if (expectedPeerId.equals(peer.presence.peerId)) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const actuallyConnectedPeers = peer.presence!.peers;
|
|
49
|
+
if (!actuallyConnectedPeers.some((peer: any) => PublicKey.equals(expectedPeerId, peer))) {
|
|
50
|
+
// TODO(burdon): More concise error.
|
|
51
|
+
const context = {
|
|
52
|
+
peerId: peer.presence.peerId,
|
|
53
|
+
expectedPeerId: expectedPeerId.truncate(),
|
|
54
|
+
connectedPeerIds: actuallyConnectedPeers.map((key: any) => key.toString('hex')),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
throw new Error(`Expected peer to be in the list of joined peers: ${context}`);
|
|
58
|
+
}
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
|
-
}
|
|
61
|
-
// }, 5_000);
|
|
62
|
+
}, 5_000);
|
|
62
63
|
|
|
63
64
|
real.peers.forEach((peer) =>
|
|
64
65
|
peer.networkManager.topics.forEach((topic) => {
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2021 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { randomBytes } from 'crypto';
|
|
6
|
+
|
|
7
|
+
import { PublicKey } from '@dxos/keys';
|
|
8
|
+
import { test } from '@dxos/test';
|
|
9
|
+
import { range } from '@dxos/util';
|
|
10
|
+
|
|
11
|
+
import { basicTestSuite } from './basic-test-suite';
|
|
12
|
+
import { exchangeMessages, joinSwarm, leaveSwarm, openAndCloseAfterTest } from './utils';
|
|
13
|
+
import { TestBuilder } from '../testing';
|
|
14
|
+
import { FullyConnectedTopology } from '../topology';
|
|
15
|
+
import { TransportKind } from '../transport';
|
|
16
|
+
|
|
17
|
+
describe('Tcp transport', () => {
|
|
18
|
+
const testBuilder = new TestBuilder({
|
|
19
|
+
transport: TransportKind.TCP,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
basicTestSuite(testBuilder);
|
|
23
|
+
|
|
24
|
+
test
|
|
25
|
+
.skip('load', async () => {
|
|
26
|
+
const NUM_PAIRS = 100;
|
|
27
|
+
const NUM_ROUNDS = 10_000;
|
|
28
|
+
const PACKET_SIZE = 1_000;
|
|
29
|
+
|
|
30
|
+
const pairs = await Promise.all(
|
|
31
|
+
range(NUM_PAIRS).map(async () => {
|
|
32
|
+
const peer1 = testBuilder.createPeer();
|
|
33
|
+
const peer2 = testBuilder.createPeer();
|
|
34
|
+
await openAndCloseAfterTest([peer1, peer2]);
|
|
35
|
+
|
|
36
|
+
const topic = PublicKey.random();
|
|
37
|
+
const [swarm1, swarm2] = await joinSwarm([peer1, peer2], topic, () => new FullyConnectedTopology());
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
peer1,
|
|
41
|
+
peer2,
|
|
42
|
+
topic,
|
|
43
|
+
swarm1,
|
|
44
|
+
swarm2,
|
|
45
|
+
};
|
|
46
|
+
}),
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
const message = randomBytes(PACKET_SIZE / 2).toString('hex');
|
|
50
|
+
|
|
51
|
+
for (let i = 0; i < NUM_ROUNDS; i++) {
|
|
52
|
+
// console.log(`Round ${i}/${NUM_ROUNDS}`);
|
|
53
|
+
await Promise.all(
|
|
54
|
+
pairs.map(async ({ swarm1, swarm2 }) => {
|
|
55
|
+
await exchangeMessages(swarm1, swarm2, message);
|
|
56
|
+
}),
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
await Promise.all(
|
|
61
|
+
pairs.map(async ({ peer1, peer2, topic }) => {
|
|
62
|
+
await leaveSwarm([peer1, peer2], topic);
|
|
63
|
+
}),
|
|
64
|
+
);
|
|
65
|
+
})
|
|
66
|
+
.timeout(1_000_000);
|
|
67
|
+
});
|
package/src/tests/utils.ts
CHANGED
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { onTestFinished } from 'vitest';
|
|
6
|
-
|
|
7
5
|
import { asyncTimeout } from '@dxos/async';
|
|
8
6
|
import { type PublicKey } from '@dxos/keys';
|
|
7
|
+
import { afterTest } from '@dxos/test';
|
|
9
8
|
import { type Provider } from '@dxos/util';
|
|
10
9
|
|
|
11
10
|
import { type TestPeer, type TestSwarmConnection } from '../testing';
|
|
@@ -20,7 +19,7 @@ import { type Topology } from '../topology';
|
|
|
20
19
|
*/
|
|
21
20
|
export const openAndCloseAfterTest = async (peers: TestPeer[]) => {
|
|
22
21
|
await Promise.all(peers.map((peer) => peer.open()));
|
|
23
|
-
|
|
22
|
+
afterTest(async () => {
|
|
24
23
|
await asyncTimeout(Promise.all(peers.map((peer) => peer.close())), 1_000);
|
|
25
24
|
});
|
|
26
25
|
};
|
|
@@ -2,29 +2,29 @@
|
|
|
2
2
|
// Copyright 2021 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { describe } from '
|
|
5
|
+
import { describe } from '@dxos/test';
|
|
6
6
|
|
|
7
7
|
import { basicTestSuite } from './basic-test-suite';
|
|
8
8
|
import { TEST_SIGNAL_HOSTS, TestBuilder } from '../testing';
|
|
9
9
|
|
|
10
|
-
describe('WebRTC transport',
|
|
10
|
+
describe('WebRTC transport', () => {
|
|
11
11
|
const testBuilder = new TestBuilder();
|
|
12
12
|
basicTestSuite(testBuilder);
|
|
13
|
-
});
|
|
13
|
+
}).timeout(10_000);
|
|
14
14
|
|
|
15
|
-
describe('WebRTC transport proxy',
|
|
15
|
+
describe('WebRTC transport proxy', () => {
|
|
16
16
|
const testBuilder = new TestBuilder({ bridge: true });
|
|
17
17
|
basicTestSuite(testBuilder);
|
|
18
|
-
});
|
|
18
|
+
}).timeout(10_000);
|
|
19
19
|
|
|
20
20
|
describe('test with signal server', () => {
|
|
21
|
-
describe('WebRTC transport',
|
|
21
|
+
describe('WebRTC transport', () => {
|
|
22
22
|
const testBuilder = new TestBuilder({ signalHosts: TEST_SIGNAL_HOSTS });
|
|
23
23
|
basicTestSuite(testBuilder);
|
|
24
|
-
});
|
|
24
|
+
}).timeout(10_000);
|
|
25
25
|
|
|
26
|
-
describe('WebRTC transport proxy',
|
|
26
|
+
describe('WebRTC transport proxy', () => {
|
|
27
27
|
const testBuilder = new TestBuilder({ signalHosts: TEST_SIGNAL_HOSTS, bridge: true });
|
|
28
28
|
basicTestSuite(testBuilder);
|
|
29
|
-
});
|
|
29
|
+
}).timeout(10_000);
|
|
30
30
|
});
|
package/src/transport/index.ts
CHANGED
|
@@ -4,4 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
export * from './memory-transport';
|
|
6
6
|
export * from './transport';
|
|
7
|
-
export * from './
|
|
7
|
+
export * from './simplepeer-transport';
|
|
8
|
+
export * from './simplepeer-transport-service';
|
|
9
|
+
export * from './simplepeer-transport-proxy';
|
|
10
|
+
export * from './libdatachannel-transport';
|
|
11
|
+
export * from './tcp-transport';
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { Duplex } from 'stream';
|
|
6
|
+
|
|
7
|
+
import { sleep, TestStream } from '@dxos/async';
|
|
8
|
+
import { log } from '@dxos/log';
|
|
9
|
+
import { afterTest, describe, test } from '@dxos/test';
|
|
10
|
+
|
|
11
|
+
import { LibDataChannelTransport } from './libdatachannel-transport';
|
|
12
|
+
import { SimplePeerTransport } from './simplepeer-transport';
|
|
13
|
+
|
|
14
|
+
describe('LibDataChannelTransport', () => {
|
|
15
|
+
test('open and close', async () => {
|
|
16
|
+
const connection = new LibDataChannelTransport({
|
|
17
|
+
initiator: true,
|
|
18
|
+
stream: new Duplex(),
|
|
19
|
+
sendSignal: async () => {},
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
await connection.open();
|
|
23
|
+
const wait = connection.closed.waitForCount(1);
|
|
24
|
+
await connection.close();
|
|
25
|
+
await wait;
|
|
26
|
+
})
|
|
27
|
+
.onlyEnvironments('nodejs')
|
|
28
|
+
.timeout(1_000)
|
|
29
|
+
.retries(3);
|
|
30
|
+
|
|
31
|
+
test('establish connection and send data through with protocol', async () => {
|
|
32
|
+
const stream1 = new TestStream();
|
|
33
|
+
const connection1 = new LibDataChannelTransport({
|
|
34
|
+
initiator: true,
|
|
35
|
+
stream: stream1,
|
|
36
|
+
sendSignal: async (signal) => {
|
|
37
|
+
await sleep(10);
|
|
38
|
+
await connection2.onSignal(signal);
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
await connection1.open();
|
|
42
|
+
afterTest(() => connection1.close());
|
|
43
|
+
afterTest(() => connection1.errors.assertNoUnhandledErrors());
|
|
44
|
+
|
|
45
|
+
const stream2 = new TestStream();
|
|
46
|
+
const connection2 = new LibDataChannelTransport({
|
|
47
|
+
initiator: false,
|
|
48
|
+
stream: stream2,
|
|
49
|
+
sendSignal: async (signal) => {
|
|
50
|
+
await sleep(10);
|
|
51
|
+
await connection1.onSignal(signal);
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
await connection2.open();
|
|
55
|
+
afterTest(() => connection2.close());
|
|
56
|
+
afterTest(() => connection2.errors.assertNoUnhandledErrors());
|
|
57
|
+
|
|
58
|
+
await TestStream.assertConnectivity(stream1, stream2, { timeout: 2_000 });
|
|
59
|
+
})
|
|
60
|
+
.onlyEnvironments('nodejs')
|
|
61
|
+
.timeout(2_000)
|
|
62
|
+
.retries(3);
|
|
63
|
+
|
|
64
|
+
test('establish connection between LibDataChannel and SimplePeer', async () => {
|
|
65
|
+
const stream1 = new TestStream();
|
|
66
|
+
const connection1 = new LibDataChannelTransport({
|
|
67
|
+
initiator: true,
|
|
68
|
+
stream: stream1,
|
|
69
|
+
sendSignal: async (signal) => {
|
|
70
|
+
log.debug('signal', signal);
|
|
71
|
+
|
|
72
|
+
await sleep(10);
|
|
73
|
+
await connection2.onSignal(signal);
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
await connection1.open();
|
|
77
|
+
afterTest(() => connection1.close());
|
|
78
|
+
afterTest(() => connection1.errors.assertNoUnhandledErrors());
|
|
79
|
+
|
|
80
|
+
const stream2 = new TestStream();
|
|
81
|
+
const connection2 = new SimplePeerTransport({
|
|
82
|
+
initiator: false,
|
|
83
|
+
stream: stream2,
|
|
84
|
+
sendSignal: async (signal) => {
|
|
85
|
+
log.debug('signal', signal);
|
|
86
|
+
|
|
87
|
+
await sleep(10);
|
|
88
|
+
await connection1.onSignal(signal);
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
await connection2.open();
|
|
92
|
+
afterTest(() => connection2.close());
|
|
93
|
+
afterTest(() => connection2.errors.assertNoUnhandledErrors());
|
|
94
|
+
|
|
95
|
+
await TestStream.assertConnectivity(stream1, stream2, { timeout: 2_000 });
|
|
96
|
+
})
|
|
97
|
+
.onlyEnvironments('nodejs')
|
|
98
|
+
.timeout(2_000)
|
|
99
|
+
.retries(3);
|
|
100
|
+
});
|