@streamr/dht 100.0.0-testnet-one.0 → 100.0.0-testnet-one.2
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/connection/ConnectionLockRpcRemote.js +1 -25
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +0 -1
- package/dist/src/connection/ConnectionManager.js +7 -6
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +2 -2
- package/dist/src/connection/ConnectorFacade.js +2 -3
- package/dist/src/connection/ConnectorFacade.js.map +1 -1
- package/dist/src/connection/ManagedConnection.d.ts +1 -0
- package/dist/src/connection/ManagedConnection.js +11 -1
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/connectivityChecker.js +3 -2
- package/dist/src/connection/connectivityChecker.js.map +1 -1
- package/dist/src/connection/websocket/ClientWebsocket.d.ts +1 -0
- package/dist/src/connection/websocket/ClientWebsocket.js +6 -3
- package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
- package/dist/src/connection/websocket/ServerWebsocket.d.ts +4 -0
- package/dist/src/connection/websocket/ServerWebsocket.js +32 -21
- package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnector.d.ts +0 -1
- package/dist/src/connection/websocket/WebsocketConnector.js +21 -10
- package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +8 -11
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.d.ts +2 -2
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +3 -37
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketServer.js +21 -4
- package/dist/src/connection/websocket/WebsocketServer.js.map +1 -1
- package/dist/src/dht/DhtNode.d.ts +4 -4
- package/dist/src/dht/DhtNode.js +31 -20
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcLocal.d.ts +1 -4
- package/dist/src/dht/DhtNodeRpcLocal.js +1 -5
- package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
- package/dist/src/dht/PeerManager.d.ts +10 -6
- package/dist/src/dht/PeerManager.js +95 -30
- package/dist/src/dht/PeerManager.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +20 -6
- package/dist/src/dht/contact/SortedContactList.js +55 -24
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +3 -5
- package/dist/src/dht/discovery/DiscoverySession.js +11 -9
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +4 -2
- package/dist/src/dht/discovery/PeerDiscovery.js +17 -16
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/find/FindSession.js +6 -1
- package/dist/src/dht/find/FindSession.js.map +1 -1
- package/dist/src/dht/find/Finder.js +6 -1
- package/dist/src/dht/find/Finder.js.map +1 -1
- package/dist/src/dht/routing/Router.d.ts +1 -1
- package/dist/src/dht/routing/Router.js +8 -4
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.js +8 -1
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/store/StoreRpcLocal.js +19 -5
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
- package/dist/src/helpers/PeerID.d.ts +1 -0
- package/dist/src/helpers/PeerID.js +7 -2
- package/dist/src/helpers/PeerID.js.map +1 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +2 -2
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
- package/package.json +5 -5
- package/src/connection/ConnectionLockRpcRemote.ts +1 -2
- package/src/connection/ConnectionManager.ts +16 -17
- package/src/connection/ConnectorFacade.ts +1 -4
- package/src/connection/ManagedConnection.ts +12 -1
- package/src/connection/connectivityChecker.ts +3 -2
- package/src/connection/websocket/ClientWebsocket.ts +5 -2
- package/src/connection/websocket/ServerWebsocket.ts +40 -25
- package/src/connection/websocket/WebsocketConnector.ts +23 -12
- package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +9 -11
- package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +5 -14
- package/src/connection/websocket/WebsocketServer.ts +20 -5
- package/src/dht/DhtNode.ts +32 -24
- package/src/dht/DhtNodeRpcLocal.ts +2 -9
- package/src/dht/PeerManager.ts +110 -36
- package/src/dht/contact/SortedContactList.ts +87 -44
- package/src/dht/discovery/DiscoverySession.ts +15 -14
- package/src/dht/discovery/PeerDiscovery.ts +37 -22
- package/src/dht/find/FindSession.ts +6 -1
- package/src/dht/find/Finder.ts +6 -7
- package/src/dht/routing/Router.ts +8 -4
- package/src/dht/routing/RoutingSession.ts +8 -8
- package/src/dht/store/StoreRpcLocal.ts +19 -7
- package/src/helpers/PeerID.ts +6 -2
- package/src/helpers/peerIdFromPeerDescriptor.ts +4 -4
- package/test/benchmark/Find.test.ts +1 -1
- package/test/benchmark/KademliaCorrectness.test.ts +1 -1
- package/test/benchmark/SortedContactListBenchmark.test.ts +150 -0
- package/test/benchmark/WebsocketServerMemoryLeak.test.ts +41 -0
- package/test/benchmark/kademlia-simulation/SimulationNode.ts +6 -1
- package/test/end-to-end/Layer0.test.ts +4 -4
- package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +10 -10
- package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +4 -4
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +2 -2
- package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +2 -2
- package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +1 -1
- package/test/end-to-end/memory-leak.test.ts +1 -0
- package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -2
- package/test/integration/Layer1-scale.test.ts +1 -1
- package/test/integration/Mock-Layer1-Layer0.test.ts +15 -15
- package/test/integration/MultipleEntryPointJoining.test.ts +7 -7
- package/test/integration/ReplicateData.test.ts +6 -1
- package/test/integration/SimultaneousConnections.test.ts +81 -49
- package/test/integration/Store.test.ts +1 -1
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +1 -1
- package/test/integration/WebrtcConnectionManagement.test.ts +29 -0
- package/test/integration/WebsocketConnectionManagement.test.ts +65 -4
- package/test/integration/WebsocketConnectorRpc.test.ts +3 -5
- package/test/unit/SortedContactList.test.ts +15 -10
|
@@ -89,11 +89,11 @@ describe('Layer0MixedConnectionTypes', () => {
|
|
|
89
89
|
node5.joinDht([epPeerDescriptor])
|
|
90
90
|
])
|
|
91
91
|
|
|
92
|
-
expect(node1.
|
|
93
|
-
expect(node2.
|
|
94
|
-
expect(node3.
|
|
95
|
-
expect(node4.
|
|
96
|
-
expect(node5.
|
|
92
|
+
expect(node1.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
93
|
+
expect(node2.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
94
|
+
expect(node3.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
95
|
+
expect(node4.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
96
|
+
expect(node5.getNumberOfNeighbors()).toBeGreaterThanOrEqual(1)
|
|
97
97
|
|
|
98
98
|
}, 15000)
|
|
99
99
|
|
|
@@ -105,10 +105,10 @@ describe('Layer0MixedConnectionTypes', () => {
|
|
|
105
105
|
node4.joinDht([epPeerDescriptor]),
|
|
106
106
|
node5.joinDht([epPeerDescriptor])
|
|
107
107
|
])
|
|
108
|
-
expect(node1.
|
|
109
|
-
expect(node2.
|
|
110
|
-
expect(node3.
|
|
111
|
-
expect(node4.
|
|
112
|
-
expect(node5.
|
|
108
|
+
expect(node1.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
109
|
+
expect(node2.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
110
|
+
expect(node3.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
111
|
+
expect(node4.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
112
|
+
expect(node5.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
113
113
|
}, 30000)
|
|
114
114
|
})
|
|
@@ -125,9 +125,9 @@ describe('Layer 1 on Layer 0 with mocked connections', () => {
|
|
|
125
125
|
await layer1Node3.joinDht([entrypointDescriptor])
|
|
126
126
|
await layer1Node4.joinDht([entrypointDescriptor])
|
|
127
127
|
|
|
128
|
-
expect(layer1Node1.
|
|
129
|
-
expect(layer1Node2.
|
|
130
|
-
expect(layer1Node3.
|
|
131
|
-
expect(layer1Node4.
|
|
128
|
+
expect(layer1Node1.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
129
|
+
expect(layer1Node2.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
130
|
+
expect(layer1Node3.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
131
|
+
expect(layer1Node4.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
|
|
132
132
|
}, 60000)
|
|
133
133
|
})
|
|
@@ -75,10 +75,10 @@ describe('Layer1 Scale', () => {
|
|
|
75
75
|
// TODO: fix flaky test in NET-1021
|
|
76
76
|
it('bucket sizes', async () => {
|
|
77
77
|
layer0Nodes.forEach((node) => {
|
|
78
|
-
expect(node.
|
|
78
|
+
expect(node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET - 1)
|
|
79
79
|
})
|
|
80
80
|
layer1Nodes.forEach((node ) => {
|
|
81
|
-
expect(node.
|
|
81
|
+
expect(node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
82
82
|
})
|
|
83
83
|
})
|
|
84
84
|
})
|
|
@@ -65,10 +65,10 @@ describe('Layer1 Scale', () => {
|
|
|
65
65
|
|
|
66
66
|
it('bucket sizes', async () => {
|
|
67
67
|
layer0Nodes.forEach((node) => {
|
|
68
|
-
expect(node.
|
|
68
|
+
expect(node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET - 1)
|
|
69
69
|
})
|
|
70
70
|
layer1Nodes.forEach((node) => {
|
|
71
|
-
expect(node.
|
|
71
|
+
expect(node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
72
72
|
})
|
|
73
73
|
})
|
|
74
74
|
})
|
|
@@ -46,7 +46,7 @@ describe('Failed autocertification', () => {
|
|
|
46
46
|
const failedAutocertificationPeerDescriptor = failedAutocertificationNode.getLocalPeerDescriptor()
|
|
47
47
|
expect(failedAutocertificationPeerDescriptor.websocket!.tls).toBe(false)
|
|
48
48
|
await failedAutocertificationNode.joinDht([entryPointPeerDescriptor])
|
|
49
|
-
expect(failedAutocertificationNode.
|
|
49
|
+
expect(failedAutocertificationNode.getNumberOfNeighbors()).toEqual(2)
|
|
50
50
|
})
|
|
51
51
|
|
|
52
52
|
})
|
|
@@ -25,10 +25,10 @@ const runTest = async (latencyType: LatencyType) => {
|
|
|
25
25
|
await entryPoint.joinDht([entrypointDescriptor])
|
|
26
26
|
await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
|
|
27
27
|
nodes.forEach((node) => {
|
|
28
|
-
expect(node.
|
|
28
|
+
expect(node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
29
29
|
expect(node.getClosestContacts().length).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
30
30
|
})
|
|
31
|
-
expect(entryPoint.
|
|
31
|
+
expect(entryPoint.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
32
32
|
|
|
33
33
|
await Promise.all([
|
|
34
34
|
entryPoint.stop(),
|
|
@@ -75,7 +75,7 @@ describe('Layer1', () => {
|
|
|
75
75
|
const layer1Node = layer1Nodes[i]
|
|
76
76
|
expect(layer1Node.getNodeId().equals(layer0Node.getNodeId())).toEqual(true)
|
|
77
77
|
expect(layer1Node.getNumberOfConnections()).toEqual(layer0Node.getNumberOfConnections())
|
|
78
|
-
expect(layer1Node.
|
|
78
|
+
expect(layer1Node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
79
79
|
expect(layer1Node.getAllConnectionPeerDescriptors()).toEqual(layer0Node.getAllConnectionPeerDescriptors())
|
|
80
80
|
}
|
|
81
81
|
}, 120000)
|
|
@@ -85,21 +85,21 @@ describe('Layer 1 on Layer 0 with mocked connections', () => {
|
|
|
85
85
|
await layer1Node3.joinDht([entryPointDescriptor])
|
|
86
86
|
await layer1Node4.joinDht([entryPointDescriptor])
|
|
87
87
|
|
|
88
|
-
logger.info('layer1EntryPoint.
|
|
89
|
-
logger.info('layer1Node1.
|
|
90
|
-
logger.info('layer1Node2.
|
|
91
|
-
logger.info('layer1Node3.
|
|
92
|
-
logger.info('layer1Node4.
|
|
93
|
-
|
|
94
|
-
expect(layer1Node1.
|
|
95
|
-
expect(layer1Node2.
|
|
96
|
-
expect(layer1Node3.
|
|
97
|
-
expect(layer1Node4.
|
|
98
|
-
|
|
99
|
-
expect(layer1Node1.
|
|
100
|
-
expect(layer1Node2.
|
|
101
|
-
expect(layer1Node3.
|
|
102
|
-
expect(layer1Node4.
|
|
88
|
+
logger.info('layer1EntryPoint.getNumberOfNeighbors() ' + layer1EntryPoint.getNumberOfNeighbors())
|
|
89
|
+
logger.info('layer1Node1.getNumberOfNeighbors()' + layer1Node1.getNumberOfNeighbors())
|
|
90
|
+
logger.info('layer1Node2.getNumberOfNeighbors()' + layer1Node2.getNumberOfNeighbors())
|
|
91
|
+
logger.info('layer1Node3.getNumberOfNeighbors()' + layer1Node3.getNumberOfNeighbors())
|
|
92
|
+
logger.info('layer1Node4.getNumberOfNeighbors()' + layer1Node4.getNumberOfNeighbors())
|
|
93
|
+
|
|
94
|
+
expect(layer1Node1.getNumberOfNeighbors()).toEqual(layer0Node1.getNumberOfNeighbors())
|
|
95
|
+
expect(layer1Node2.getNumberOfNeighbors()).toEqual(layer0Node2.getNumberOfNeighbors())
|
|
96
|
+
expect(layer1Node3.getNumberOfNeighbors()).toEqual(layer0Node3.getNumberOfNeighbors())
|
|
97
|
+
expect(layer1Node4.getNumberOfNeighbors()).toEqual(layer0Node4.getNumberOfNeighbors())
|
|
98
|
+
|
|
99
|
+
expect(layer1Node1.getAllNeighborPeerDescriptors()).toContainValues(layer0Node1.getAllNeighborPeerDescriptors())
|
|
100
|
+
expect(layer1Node2.getAllNeighborPeerDescriptors()).toContainValues(layer0Node2.getAllNeighborPeerDescriptors())
|
|
101
|
+
expect(layer1Node3.getAllNeighborPeerDescriptors()).toContainValues(layer0Node3.getAllNeighborPeerDescriptors())
|
|
102
|
+
expect(layer1Node4.getAllNeighborPeerDescriptors()).toContainValues(layer0Node4.getAllNeighborPeerDescriptors())
|
|
103
103
|
|
|
104
104
|
}, 60000)
|
|
105
105
|
})
|
|
@@ -42,9 +42,9 @@ describe('multiple entry point joining', () => {
|
|
|
42
42
|
node2.joinDht(entryPoints),
|
|
43
43
|
node3.joinDht(entryPoints)
|
|
44
44
|
])
|
|
45
|
-
expect(node1.
|
|
46
|
-
expect(node2.
|
|
47
|
-
expect(node3.
|
|
45
|
+
expect(node1.getNumberOfNeighbors()).toEqual(2)
|
|
46
|
+
expect(node2.getNumberOfNeighbors()).toEqual(2)
|
|
47
|
+
expect(node3.getNumberOfNeighbors()).toEqual(2)
|
|
48
48
|
})
|
|
49
49
|
|
|
50
50
|
it('can join even if a node is offline', async () => {
|
|
@@ -53,8 +53,8 @@ describe('multiple entry point joining', () => {
|
|
|
53
53
|
node1.joinDht(entryPoints),
|
|
54
54
|
node2.joinDht(entryPoints)
|
|
55
55
|
])
|
|
56
|
-
expect(node1.
|
|
57
|
-
expect(node2.
|
|
56
|
+
expect(node1.getNumberOfNeighbors()).toEqual(1)
|
|
57
|
+
expect(node2.getNumberOfNeighbors()).toEqual(1)
|
|
58
58
|
}, 10000)
|
|
59
59
|
})
|
|
60
60
|
|
|
@@ -96,9 +96,9 @@ describe('multiple entry point joining', () => {
|
|
|
96
96
|
|
|
97
97
|
it('non-entry point nodes can join', async () => {
|
|
98
98
|
await node1.joinDht(entryPoints)
|
|
99
|
-
expect(node1.
|
|
99
|
+
expect(node1.getNumberOfNeighbors()).toEqual(2)
|
|
100
100
|
await node2.joinDht(entryPoints)
|
|
101
|
-
expect(node2.
|
|
101
|
+
expect(node2.getNumberOfNeighbors()).toEqual(3)
|
|
102
102
|
})
|
|
103
103
|
|
|
104
104
|
})
|
|
@@ -80,7 +80,12 @@ describe('Replicate data from node to node in DHT', () => {
|
|
|
80
80
|
|
|
81
81
|
// calculate offline which node is closest to the data
|
|
82
82
|
|
|
83
|
-
const sortedList = new SortedContactList<Contact>(
|
|
83
|
+
const sortedList = new SortedContactList<Contact>({
|
|
84
|
+
referenceId: dataKey,
|
|
85
|
+
maxSize: 10000,
|
|
86
|
+
allowToContainReferenceId: true,
|
|
87
|
+
emitEvents: false
|
|
88
|
+
})
|
|
84
89
|
|
|
85
90
|
nodes.forEach((node) => {
|
|
86
91
|
sortedList.addContact(new Contact(node.getLocalPeerDescriptor())
|
|
@@ -20,8 +20,8 @@ const createConnectionManager = (localPeerDescriptor: PeerDescriptor, opts: Omit
|
|
|
20
20
|
describe('SimultaneousConnections', () => {
|
|
21
21
|
|
|
22
22
|
let simulator: Simulator
|
|
23
|
-
let
|
|
24
|
-
let
|
|
23
|
+
let simTransport1: SimulatorTransport
|
|
24
|
+
let simTransport2: SimulatorTransport
|
|
25
25
|
|
|
26
26
|
const peerDescriptor1 = {
|
|
27
27
|
nodeId: PeerID.fromString('mock1').value,
|
|
@@ -45,15 +45,15 @@ describe('SimultaneousConnections', () => {
|
|
|
45
45
|
|
|
46
46
|
beforeEach(async () => {
|
|
47
47
|
simulator = new Simulator()
|
|
48
|
-
|
|
49
|
-
await
|
|
50
|
-
|
|
51
|
-
await
|
|
48
|
+
simTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
|
|
49
|
+
await simTransport1.start()
|
|
50
|
+
simTransport2 = new SimulatorTransport(peerDescriptor2, simulator)
|
|
51
|
+
await simTransport2.start()
|
|
52
52
|
})
|
|
53
53
|
|
|
54
54
|
afterEach(async () => {
|
|
55
|
-
await
|
|
56
|
-
await
|
|
55
|
+
await simTransport1.stop()
|
|
56
|
+
await simTransport2.stop()
|
|
57
57
|
})
|
|
58
58
|
|
|
59
59
|
it('simultanous simulated connection', async () => {
|
|
@@ -67,13 +67,13 @@ describe('SimultaneousConnections', () => {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
const promise1 = new Promise<void>((resolve, _reject) => {
|
|
70
|
-
|
|
70
|
+
simTransport1.on('message', async (message: Message) => {
|
|
71
71
|
expect(message.messageType).toBe(MessageType.RPC)
|
|
72
72
|
resolve()
|
|
73
73
|
})
|
|
74
74
|
})
|
|
75
75
|
const promise2 = new Promise<void>((resolve, _reject) => {
|
|
76
|
-
|
|
76
|
+
simTransport2.on('message', async (message: Message) => {
|
|
77
77
|
expect(message.messageType).toBe(MessageType.RPC)
|
|
78
78
|
resolve()
|
|
79
79
|
})
|
|
@@ -81,19 +81,21 @@ describe('SimultaneousConnections', () => {
|
|
|
81
81
|
await Promise.all([
|
|
82
82
|
promise1,
|
|
83
83
|
promise2,
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
simTransport1.send(msg1),
|
|
85
|
+
simTransport2.send(msg2)
|
|
86
86
|
])
|
|
87
|
-
await waitForCondition(() =>
|
|
88
|
-
await waitForCondition(() =>
|
|
87
|
+
await waitForCondition(() => simTransport2.hasConnection(peerDescriptor1))
|
|
88
|
+
await waitForCondition(() => simTransport1.hasConnection(peerDescriptor2))
|
|
89
89
|
})
|
|
90
90
|
|
|
91
91
|
describe('Websocket 2 servers', () => {
|
|
92
92
|
|
|
93
|
+
let simTransport1: SimulatorTransport
|
|
94
|
+
let simTransport2: SimulatorTransport
|
|
93
95
|
let connectionManager1: ConnectionManager
|
|
94
96
|
let connectionManager2: ConnectionManager
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
+
|
|
98
|
+
const wsPeerDescriptor1: PeerDescriptor = {
|
|
97
99
|
nodeId: PeerID.fromString('mock1').value,
|
|
98
100
|
type: NodeType.NODEJS,
|
|
99
101
|
websocket: {
|
|
@@ -103,7 +105,7 @@ describe('SimultaneousConnections', () => {
|
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
107
|
|
|
106
|
-
const
|
|
108
|
+
const wsPeerDescriptor2: PeerDescriptor = {
|
|
107
109
|
nodeId: PeerID.fromString('mock2').value,
|
|
108
110
|
type: NodeType.NODEJS,
|
|
109
111
|
websocket: {
|
|
@@ -114,17 +116,26 @@ describe('SimultaneousConnections', () => {
|
|
|
114
116
|
}
|
|
115
117
|
|
|
116
118
|
beforeEach(async () => {
|
|
119
|
+
|
|
120
|
+
// SimulatorTransport needs to have exatly same peerDescriptor as ConnectionManager
|
|
121
|
+
// that is why we need to create new SimulatorTransports here
|
|
122
|
+
simulator = new Simulator()
|
|
123
|
+
simTransport1 = new SimulatorTransport(wsPeerDescriptor1, simulator)
|
|
124
|
+
await simTransport1.start()
|
|
125
|
+
simTransport2 = new SimulatorTransport(wsPeerDescriptor2, simulator)
|
|
126
|
+
await simTransport2.start()
|
|
127
|
+
|
|
117
128
|
const websocketPortRange = { min: 43432, max: 43433 }
|
|
118
|
-
connectionManager1 = createConnectionManager(
|
|
119
|
-
transport:
|
|
129
|
+
connectionManager1 = createConnectionManager(wsPeerDescriptor1, {
|
|
130
|
+
transport: simTransport1,
|
|
120
131
|
websocketPortRange,
|
|
121
|
-
entryPoints: [
|
|
132
|
+
entryPoints: [wsPeerDescriptor1],
|
|
122
133
|
websocketServerEnableTls: false
|
|
123
134
|
})
|
|
124
|
-
connectionManager2 = createConnectionManager(
|
|
125
|
-
transport:
|
|
135
|
+
connectionManager2 = createConnectionManager(wsPeerDescriptor2, {
|
|
136
|
+
transport: simTransport2,
|
|
126
137
|
websocketPortRange,
|
|
127
|
-
entryPoints: [
|
|
138
|
+
entryPoints: [wsPeerDescriptor1],
|
|
128
139
|
websocketServerEnableTls: false
|
|
129
140
|
})
|
|
130
141
|
await connectionManager1.start()
|
|
@@ -134,16 +145,18 @@ describe('SimultaneousConnections', () => {
|
|
|
134
145
|
afterEach(async () => {
|
|
135
146
|
await connectionManager1.stop()
|
|
136
147
|
await connectionManager2.stop()
|
|
148
|
+
await simTransport1.stop()
|
|
149
|
+
await simTransport2.stop()
|
|
137
150
|
})
|
|
138
151
|
|
|
139
152
|
it('Simultaneous Connections', async () => {
|
|
140
153
|
const msg1: Message = {
|
|
141
154
|
...baseMsg,
|
|
142
|
-
targetDescriptor:
|
|
155
|
+
targetDescriptor: wsPeerDescriptor2
|
|
143
156
|
}
|
|
144
157
|
const msg2: Message = {
|
|
145
158
|
...baseMsg,
|
|
146
|
-
targetDescriptor:
|
|
159
|
+
targetDescriptor: wsPeerDescriptor1
|
|
147
160
|
}
|
|
148
161
|
|
|
149
162
|
const promise1 = new Promise<void>((resolve, _reject) => {
|
|
@@ -166,17 +179,19 @@ describe('SimultaneousConnections', () => {
|
|
|
166
179
|
connectionManager2.send(msg2)
|
|
167
180
|
])
|
|
168
181
|
|
|
169
|
-
await waitForCondition(() => connectionManager1.hasConnection(
|
|
170
|
-
await waitForCondition(() => connectionManager2.hasConnection(
|
|
182
|
+
await waitForCondition(() => connectionManager1.hasConnection(wsPeerDescriptor2))
|
|
183
|
+
await waitForCondition(() => connectionManager2.hasConnection(wsPeerDescriptor1))
|
|
171
184
|
})
|
|
172
185
|
})
|
|
173
186
|
|
|
174
187
|
describe('Websocket 1 server (ConnectionRequests)', () => {
|
|
175
|
-
|
|
188
|
+
|
|
189
|
+
let simTransport1: SimulatorTransport
|
|
190
|
+
let simTransport2: SimulatorTransport
|
|
176
191
|
let connectionManager1: ConnectionManager
|
|
177
192
|
let connectionManager2: ConnectionManager
|
|
178
193
|
|
|
179
|
-
const
|
|
194
|
+
const wsPeerDescriptor1: PeerDescriptor = {
|
|
180
195
|
nodeId: PeerID.fromString('mock1').value,
|
|
181
196
|
type: NodeType.NODEJS,
|
|
182
197
|
websocket: {
|
|
@@ -186,20 +201,26 @@ describe('SimultaneousConnections', () => {
|
|
|
186
201
|
}
|
|
187
202
|
}
|
|
188
203
|
|
|
189
|
-
const
|
|
204
|
+
const wsPeerDescriptor2: PeerDescriptor = {
|
|
190
205
|
nodeId: PeerID.fromString('mock2').value,
|
|
191
206
|
type: NodeType.NODEJS
|
|
192
207
|
}
|
|
193
208
|
|
|
194
209
|
beforeEach(async () => {
|
|
195
|
-
|
|
196
|
-
|
|
210
|
+
simulator = new Simulator()
|
|
211
|
+
simTransport1 = new SimulatorTransport(wsPeerDescriptor1, simulator)
|
|
212
|
+
await simTransport1.start()
|
|
213
|
+
simTransport2 = new SimulatorTransport(wsPeerDescriptor2, simulator)
|
|
214
|
+
await simTransport2.start()
|
|
215
|
+
|
|
216
|
+
connectionManager1 = createConnectionManager(wsPeerDescriptor1, {
|
|
217
|
+
transport: simTransport1,
|
|
197
218
|
websocketPortRange: { min: 43432, max: 43432 },
|
|
198
|
-
entryPoints: [
|
|
219
|
+
entryPoints: [wsPeerDescriptor1],
|
|
199
220
|
websocketServerEnableTls: false
|
|
200
221
|
})
|
|
201
|
-
connectionManager2 = createConnectionManager(
|
|
202
|
-
transport:
|
|
222
|
+
connectionManager2 = createConnectionManager(wsPeerDescriptor2, {
|
|
223
|
+
transport: simTransport2
|
|
203
224
|
})
|
|
204
225
|
await connectionManager1.start()
|
|
205
226
|
await connectionManager2.start()
|
|
@@ -208,16 +229,18 @@ describe('SimultaneousConnections', () => {
|
|
|
208
229
|
afterEach(async () => {
|
|
209
230
|
await connectionManager1.stop()
|
|
210
231
|
await connectionManager2.stop()
|
|
232
|
+
await simTransport1.stop()
|
|
233
|
+
await simTransport2.stop()
|
|
211
234
|
})
|
|
212
235
|
|
|
213
236
|
it('Simultaneous Connections', async () => {
|
|
214
237
|
const msg1: Message = {
|
|
215
238
|
...baseMsg,
|
|
216
|
-
targetDescriptor:
|
|
239
|
+
targetDescriptor: wsPeerDescriptor2
|
|
217
240
|
}
|
|
218
241
|
const msg2: Message = {
|
|
219
242
|
...baseMsg,
|
|
220
|
-
targetDescriptor:
|
|
243
|
+
targetDescriptor: wsPeerDescriptor1
|
|
221
244
|
}
|
|
222
245
|
|
|
223
246
|
const promise1 = new Promise<void>((resolve, _reject) => {
|
|
@@ -240,32 +263,39 @@ describe('SimultaneousConnections', () => {
|
|
|
240
263
|
connectionManager2.send(msg2)
|
|
241
264
|
])
|
|
242
265
|
|
|
243
|
-
await waitForCondition(() => connectionManager1.hasConnection(
|
|
244
|
-
await waitForCondition(() => connectionManager2.hasConnection(
|
|
266
|
+
await waitForCondition(() => connectionManager1.hasConnection(wsPeerDescriptor2))
|
|
267
|
+
await waitForCondition(() => connectionManager2.hasConnection(wsPeerDescriptor1))
|
|
245
268
|
})
|
|
246
269
|
})
|
|
247
270
|
|
|
248
271
|
describe('WebRTC', () => {
|
|
249
272
|
|
|
273
|
+
let simTransport1: SimulatorTransport
|
|
274
|
+
let simTransport2: SimulatorTransport
|
|
250
275
|
let connectionManager1: ConnectionManager
|
|
251
276
|
let connectionManager2: ConnectionManager
|
|
252
277
|
|
|
253
|
-
const
|
|
278
|
+
const wrtcPeerDescriptor1: PeerDescriptor = {
|
|
254
279
|
nodeId: PeerID.fromString('mock1').value,
|
|
255
280
|
type: NodeType.NODEJS
|
|
256
281
|
}
|
|
257
282
|
|
|
258
|
-
const
|
|
283
|
+
const wrtcPeerDescriptor2: PeerDescriptor = {
|
|
259
284
|
nodeId: PeerID.fromString('mock2').value,
|
|
260
285
|
type: NodeType.NODEJS
|
|
261
286
|
}
|
|
262
287
|
|
|
263
288
|
beforeEach(async () => {
|
|
264
|
-
|
|
265
|
-
|
|
289
|
+
simulator = new Simulator()
|
|
290
|
+
simTransport1 = new SimulatorTransport(wrtcPeerDescriptor1, simulator)
|
|
291
|
+
await simTransport1.start()
|
|
292
|
+
simTransport2 = new SimulatorTransport(wrtcPeerDescriptor2, simulator)
|
|
293
|
+
await simTransport2.start()
|
|
294
|
+
connectionManager1 = createConnectionManager(wrtcPeerDescriptor1, {
|
|
295
|
+
transport: simTransport1,
|
|
266
296
|
})
|
|
267
|
-
connectionManager2 = createConnectionManager(
|
|
268
|
-
transport:
|
|
297
|
+
connectionManager2 = createConnectionManager(wrtcPeerDescriptor2, {
|
|
298
|
+
transport: simTransport2,
|
|
269
299
|
})
|
|
270
300
|
await connectionManager1.start()
|
|
271
301
|
await connectionManager2.start()
|
|
@@ -274,16 +304,18 @@ describe('SimultaneousConnections', () => {
|
|
|
274
304
|
afterEach(async () => {
|
|
275
305
|
await connectionManager1.stop()
|
|
276
306
|
await connectionManager2.stop()
|
|
307
|
+
await simTransport1.stop()
|
|
308
|
+
await simTransport2.stop()
|
|
277
309
|
})
|
|
278
310
|
|
|
279
311
|
it('Simultaneous Connections', async () => {
|
|
280
312
|
const msg1: Message = {
|
|
281
313
|
...baseMsg,
|
|
282
|
-
targetDescriptor:
|
|
314
|
+
targetDescriptor: wrtcPeerDescriptor2
|
|
283
315
|
}
|
|
284
316
|
const msg2: Message = {
|
|
285
317
|
...baseMsg,
|
|
286
|
-
targetDescriptor:
|
|
318
|
+
targetDescriptor: wrtcPeerDescriptor1
|
|
287
319
|
}
|
|
288
320
|
|
|
289
321
|
const promise1 = new Promise<void>((resolve, _reject) => {
|
|
@@ -306,8 +338,8 @@ describe('SimultaneousConnections', () => {
|
|
|
306
338
|
connectionManager2.send(msg2)
|
|
307
339
|
])
|
|
308
340
|
|
|
309
|
-
await waitForCondition(() => connectionManager1.hasConnection(
|
|
310
|
-
await waitForCondition(() => connectionManager2.hasConnection(
|
|
341
|
+
await waitForCondition(() => connectionManager1.hasConnection(wrtcPeerDescriptor2))
|
|
342
|
+
await waitForCondition(() => connectionManager2.hasConnection(wrtcPeerDescriptor1))
|
|
311
343
|
})
|
|
312
344
|
})
|
|
313
345
|
|
|
@@ -59,7 +59,7 @@ describe('Storing data in DHT with two peers', () => {
|
|
|
59
59
|
|
|
60
60
|
it('Can store on one peer DHT', async () => {
|
|
61
61
|
await otherNode.stop()
|
|
62
|
-
await waitForCondition(() => entryPoint.
|
|
62
|
+
await waitForCondition(() => entryPoint.getNumberOfNeighbors() === 0)
|
|
63
63
|
const dataKey = createRandomNodeId()
|
|
64
64
|
const storedData = createMockPeerDescriptor()
|
|
65
65
|
const data = Any.pack(storedData, PeerDescriptor)
|
|
@@ -209,4 +209,33 @@ describe('WebRTC Connection Management', () => {
|
|
|
209
209
|
await disconnectedPromise1
|
|
210
210
|
|
|
211
211
|
}, 20000)
|
|
212
|
+
|
|
213
|
+
it('failed connections are cleaned up', async () => {
|
|
214
|
+
const msg: Message = {
|
|
215
|
+
serviceId,
|
|
216
|
+
messageType: MessageType.RPC,
|
|
217
|
+
messageId: '1',
|
|
218
|
+
body: {
|
|
219
|
+
oneofKind: 'rpcMessage',
|
|
220
|
+
rpcMessage: RpcMessage.create()
|
|
221
|
+
},
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
|
|
225
|
+
manager1.on('disconnected', () => {
|
|
226
|
+
resolve()
|
|
227
|
+
})
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
msg.targetDescriptor = {
|
|
231
|
+
nodeId: new Uint8Array([0, 0, 0, 0, 0]),
|
|
232
|
+
type: NodeType.NODEJS,
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
await Promise.allSettled([
|
|
236
|
+
manager1.send(msg),
|
|
237
|
+
disconnectedPromise1
|
|
238
|
+
])
|
|
239
|
+
expect(manager1.getConnection(msg.targetDescriptor!)).toBeUndefined()
|
|
240
|
+
}, 20000)
|
|
212
241
|
})
|