@streamr/dht 100.0.0-testnet-one.3 → 100.0.0-testnet-two.0
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/ConnectionLockHandler.d.ts +11 -11
- package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
- package/dist/src/connection/ConnectionLockRpcLocal.d.ts +3 -3
- package/dist/src/connection/ConnectionLockRpcLocal.js +4 -4
- package/dist/src/connection/ConnectionLockRpcLocal.js.map +1 -1
- package/dist/src/connection/ConnectionLockRpcRemote.d.ts +3 -5
- package/dist/src/connection/ConnectionLockRpcRemote.js +4 -7
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +4 -6
- package/dist/src/connection/ConnectionManager.js +48 -46
- 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 -1
- package/dist/src/connection/ConnectorFacade.js.map +1 -1
- package/dist/src/connection/ManagedConnection.d.ts +3 -6
- package/dist/src/connection/ManagedConnection.js +6 -10
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/connectivityChecker.js +1 -0
- package/dist/src/connection/connectivityChecker.js.map +1 -1
- package/dist/src/connection/simulator/Simulator.d.ts +0 -3
- package/dist/src/connection/simulator/Simulator.js +3 -51
- package/dist/src/connection/simulator/Simulator.js.map +1 -1
- package/dist/src/connection/simulator/SimulatorConnector.js +5 -5
- package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -1
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js +2 -2
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnector.d.ts +0 -1
- package/dist/src/connection/webrtc/WebrtcConnector.js +7 -9
- package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +2 -2
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +11 -12
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.d.ts +2 -5
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js +1 -4
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -1
- package/dist/src/connection/websocket/AutoCertifierClientFacade.d.ts +1 -2
- package/dist/src/connection/websocket/AutoCertifierClientFacade.js +3 -4
- package/dist/src/connection/websocket/AutoCertifierClientFacade.js.map +1 -1
- package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnector.d.ts +2 -7
- package/dist/src/connection/websocket/WebsocketConnector.js +32 -38
- package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +3 -2
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +8 -10
- package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.d.ts +3 -6
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +0 -3
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
- package/dist/src/connection/websocket/WebsocketServer.d.ts +1 -4
- package/dist/src/connection/websocket/WebsocketServer.js +11 -12
- package/dist/src/connection/websocket/WebsocketServer.js.map +1 -1
- package/dist/src/dht/DhtNode.d.ts +10 -13
- package/dist/src/dht/DhtNode.js +39 -52
- package/dist/src/dht/DhtNode.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcLocal.d.ts +0 -1
- package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
- package/dist/src/dht/DhtNodeRpcRemote.d.ts +7 -7
- package/dist/src/dht/DhtNodeRpcRemote.js +8 -7
- package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -1
- package/dist/src/dht/ExternalApiRpcLocal.d.ts +5 -4
- package/dist/src/dht/ExternalApiRpcLocal.js +3 -2
- package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -1
- package/dist/src/dht/ExternalApiRpcRemote.d.ts +2 -2
- package/dist/src/dht/ExternalApiRpcRemote.js +2 -0
- package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
- package/dist/src/dht/PeerManager.d.ts +13 -14
- package/dist/src/dht/PeerManager.js +45 -60
- package/dist/src/dht/PeerManager.js.map +1 -1
- package/dist/src/dht/contact/Contact.d.ts +2 -2
- package/dist/src/dht/contact/Contact.js +2 -2
- package/dist/src/dht/contact/Contact.js.map +1 -1
- package/dist/src/dht/contact/ContactList.d.ts +7 -7
- package/dist/src/dht/contact/ContactList.js +3 -3
- package/dist/src/dht/contact/ContactList.js.map +1 -1
- package/dist/src/dht/contact/RandomContactList.d.ts +4 -4
- package/dist/src/dht/contact/RandomContactList.js +12 -11
- package/dist/src/dht/contact/RandomContactList.js.map +1 -1
- package/dist/src/dht/contact/RpcRemote.d.ts +7 -4
- package/dist/src/dht/contact/RpcRemote.js +5 -2
- package/dist/src/dht/contact/RpcRemote.js.map +1 -1
- package/dist/src/dht/contact/SortedContactList.d.ts +13 -13
- package/dist/src/dht/contact/SortedContactList.js +33 -29
- package/dist/src/dht/contact/SortedContactList.js.map +1 -1
- package/dist/src/dht/discovery/DiscoverySession.d.ts +2 -4
- package/dist/src/dht/discovery/DiscoverySession.js +19 -20
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +2 -5
- package/dist/src/dht/discovery/PeerDiscovery.js +12 -20
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +36 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationManager.js +165 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationManager.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.d.ts +14 -0
- package/dist/src/dht/{find/FindRpcLocal.js → recursive-operation/RecursiveOperationRpcLocal.js} +7 -7
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.d.ts +6 -0
- package/dist/src/dht/{routing/FindRpcRemote.js → recursive-operation/RecursiveOperationRpcRemote.js} +11 -11
- package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSession.d.ts +42 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSession.js +182 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSession.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.d.ts +12 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js +17 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js.map +1 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.d.ts +6 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js +21 -0
- package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js.map +1 -0
- package/dist/src/dht/routing/Router.d.ts +4 -19
- package/dist/src/dht/routing/Router.js +41 -33
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/RouterRpcLocal.js +6 -5
- package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -1
- package/dist/src/dht/routing/RouterRpcRemote.d.ts +2 -2
- package/dist/src/dht/routing/RouterRpcRemote.js +7 -7
- package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.d.ts +20 -16
- package/dist/src/dht/routing/RoutingSession.js +37 -45
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/store/LocalDataStore.d.ts +11 -13
- package/dist/src/dht/store/LocalDataStore.js +36 -56
- package/dist/src/dht/store/LocalDataStore.js.map +1 -1
- package/dist/src/dht/store/StoreManager.d.ts +33 -0
- package/dist/src/dht/store/StoreManager.js +186 -0
- package/dist/src/dht/store/StoreManager.js.map +1 -0
- package/dist/src/dht/store/StoreRpcLocal.d.ts +8 -40
- package/dist/src/dht/store/StoreRpcLocal.js +13 -229
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
- package/dist/src/dht/store/StoreRpcRemote.d.ts +5 -5
- package/dist/src/dht/store/StoreRpcRemote.js +4 -5
- package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
- package/dist/src/exports.d.ts +2 -0
- package/dist/src/exports.js.map +1 -1
- package/dist/src/helpers/MapWithTtl.d.ts +14 -0
- package/dist/src/helpers/MapWithTtl.js +59 -0
- package/dist/src/helpers/MapWithTtl.js.map +1 -0
- package/dist/src/helpers/PeerID.d.ts +2 -0
- package/dist/src/helpers/PeerID.js +4 -0
- package/dist/src/helpers/PeerID.js.map +1 -1
- package/dist/src/helpers/nodeId.d.ts +5 -0
- package/dist/src/helpers/nodeId.js +18 -1
- package/dist/src/helpers/nodeId.js.map +1 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +2 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +2 -1
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
- package/dist/src/helpers/protoClasses.js +2 -3
- package/dist/src/helpers/protoClasses.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +21 -22
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +18 -18
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +36 -60
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +34 -53
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +11 -12
- package/dist/src/rpc-protocol/DhtCallContext.d.ts +2 -1
- package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -1
- package/dist/src/rpc-protocol/DhtRpcOptions.d.ts +2 -1
- package/dist/src/transport/ITransport.d.ts +9 -1
- package/dist/src/transport/ITransport.js +5 -0
- package/dist/src/transport/ITransport.js.map +1 -1
- package/dist/src/transport/ListeningRpcCommunicator.js +1 -1
- package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
- package/dist/src/transport/RoutingRpcCommunicator.d.ts +2 -1
- package/dist/src/transport/RoutingRpcCommunicator.js +16 -11
- package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
- package/jest.config.js +4 -1
- package/karma-setup.js +2 -0
- package/karma.config.js +11 -7
- package/package.json +6 -7
- package/protos/DhtRpc.proto +17 -23
- package/src/connection/ConnectionLockHandler.ts +15 -15
- package/src/connection/ConnectionLockRpcLocal.ts +8 -9
- package/src/connection/ConnectionLockRpcRemote.ts +7 -16
- package/src/connection/ConnectionManager.ts +58 -55
- package/src/connection/ConnectorFacade.ts +3 -0
- package/src/connection/ManagedConnection.ts +12 -30
- package/src/connection/connectivityChecker.ts +1 -0
- package/src/connection/simulator/Simulator.ts +5 -36
- package/src/connection/simulator/SimulatorConnector.ts +8 -8
- package/src/connection/webrtc/BrowserWebrtcConnection.ts +0 -3
- package/src/connection/webrtc/NodeWebrtcConnection.ts +3 -4
- package/src/connection/webrtc/WebrtcConnector.ts +11 -13
- package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +16 -16
- package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +3 -13
- package/src/connection/websocket/AutoCertifierClientFacade.ts +4 -6
- package/src/connection/websocket/ClientWebsocket.ts +1 -0
- package/src/connection/websocket/WebsocketConnector.ts +43 -56
- package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +11 -13
- package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +4 -15
- package/src/connection/websocket/WebsocketServer.ts +14 -17
- package/src/dht/DhtNode.ts +67 -69
- package/src/dht/DhtNodeRpcLocal.ts +0 -1
- package/src/dht/DhtNodeRpcRemote.ts +13 -13
- package/src/dht/ExternalApiRpcLocal.ts +16 -6
- package/src/dht/ExternalApiRpcRemote.ts +5 -3
- package/src/dht/PeerManager.ts +73 -90
- package/src/dht/contact/Contact.ts +5 -4
- package/src/dht/contact/ContactList.ts +9 -9
- package/src/dht/contact/RandomContactList.ts +14 -14
- package/src/dht/contact/RpcRemote.ts +10 -7
- package/src/dht/contact/SortedContactList.ts +48 -45
- package/src/dht/discovery/DiscoverySession.ts +25 -25
- package/src/dht/discovery/PeerDiscovery.ts +16 -37
- package/src/dht/recursive-operation/RecursiveOperationManager.ts +240 -0
- package/src/dht/{find/FindRpcLocal.ts → recursive-operation/RecursiveOperationRpcLocal.ts} +9 -9
- package/src/dht/{routing/FindRpcRemote.ts → recursive-operation/RecursiveOperationRpcRemote.ts} +10 -10
- package/src/dht/recursive-operation/RecursiveOperationSession.ts +224 -0
- package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +25 -0
- package/src/dht/{find/FindSessionRpcRemote.ts → recursive-operation/RecursiveOperationSessionRpcRemote.ts} +8 -8
- package/src/dht/routing/Router.ts +45 -64
- package/src/dht/routing/RouterRpcLocal.ts +7 -6
- package/src/dht/routing/RouterRpcRemote.ts +9 -10
- package/src/dht/routing/RoutingSession.ts +59 -68
- package/src/dht/store/LocalDataStore.ts +47 -66
- package/src/dht/store/StoreManager.ts +217 -0
- package/src/dht/store/StoreRpcLocal.ts +26 -302
- package/src/dht/store/StoreRpcRemote.ts +9 -11
- package/src/exports.ts +2 -0
- package/src/helpers/MapWithTtl.ts +71 -0
- package/src/helpers/PeerID.ts +5 -0
- package/src/helpers/nodeId.ts +20 -0
- package/src/helpers/peerIdFromPeerDescriptor.ts +5 -3
- package/src/helpers/protoClasses.ts +4 -6
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +31 -32
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +11 -12
- package/src/proto/packages/dht/protos/DhtRpc.ts +49 -80
- package/src/rpc-protocol/DhtCallContext.ts +2 -1
- package/src/rpc-protocol/DhtRpcOptions.ts +2 -1
- package/src/transport/ITransport.ts +10 -1
- package/src/transport/ListeningRpcCommunicator.ts +1 -1
- package/src/transport/RoutingRpcCommunicator.ts +18 -12
- package/test/benchmark/Find.test.ts +8 -21
- package/test/benchmark/KademliaCorrectness.test.ts +11 -20
- package/test/benchmark/SortedContactListBenchmark.test.ts +9 -9
- package/test/benchmark/kademlia-simulation/Contact.ts +9 -8
- package/test/benchmark/kademlia-simulation/KademliaSimulation.ts +2 -2
- package/test/benchmark/kademlia-simulation/SimulationNode.ts +17 -17
- package/test/end-to-end/Layer0-Layer1.test.ts +10 -14
- package/test/end-to-end/Layer0.test.ts +15 -18
- package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +7 -9
- package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +4 -10
- package/test/end-to-end/Layer0Webrtc.test.ts +5 -6
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +8 -16
- package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +6 -13
- package/test/end-to-end/WebsocketConnectionRequest.test.ts +5 -6
- package/test/end-to-end/memory-leak.test.ts +6 -8
- package/test/integration/ConnectionLocking.test.ts +6 -13
- package/test/integration/ConnectionManager.test.ts +26 -43
- package/test/integration/DhtJoinPeerDiscovery.test.ts +5 -10
- package/test/integration/DhtNodeExternalAPI.test.ts +16 -22
- package/test/integration/DhtNodeRpcRemote.test.ts +13 -22
- package/test/integration/DhtRpc.test.ts +13 -18
- package/test/integration/Find.test.ts +10 -10
- package/test/integration/Layer1-scale.test.ts +17 -28
- package/test/integration/Mock-Layer1-Layer0.test.ts +25 -43
- package/test/integration/MultipleEntryPointJoining.test.ts +7 -7
- package/test/integration/ReplicateData.test.ts +28 -30
- package/test/integration/RouteMessage.test.ts +30 -27
- package/test/integration/RouterRpcRemote.test.ts +12 -18
- package/test/integration/RpcErrors.test.ts +8 -21
- package/test/integration/ScaleDownDht.test.ts +11 -10
- package/test/integration/SimultaneousConnections.test.ts +43 -67
- package/test/integration/Store.test.ts +23 -36
- package/test/integration/StoreAndDelete.test.ts +30 -50
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +16 -37
- package/test/integration/StoreRpcRemote.test.ts +20 -30
- package/test/integration/WebrtcConnectionManagement.test.ts +3 -13
- package/test/integration/WebrtcConnectorRpc.test.ts +3 -9
- package/test/integration/WebsocketConnectionManagement.test.ts +7 -10
- package/test/integration/WebsocketConnectorRpc.test.ts +8 -17
- package/test/unit/ConnectivityHelpers.test.ts +9 -17
- package/test/unit/DuplicateDetector.test.ts +7 -4
- package/test/unit/LocalDataStore.test.ts +66 -77
- package/test/unit/PeerManager.test.ts +31 -0
- package/test/unit/RandomContactList.test.ts +13 -8
- package/test/unit/{Finder.test.ts → RecursiveOperationManager.test.ts} +38 -43
- package/test/unit/RecursiveOperationSession.test.ts +68 -0
- package/test/unit/Router.test.ts +15 -22
- package/test/unit/RoutingSession.test.ts +23 -25
- package/test/unit/SortedContactList.test.ts +41 -26
- package/test/unit/StoreManager.test.ts +132 -0
- package/test/unit/WebsocketConnector.test.ts +27 -35
- package/test/unit/customMatchers.test.ts +16 -0
- package/test/utils/FakeTransport.ts +44 -0
- package/test/utils/customMatchers.ts +70 -0
- package/test/utils/mock/MockRpcCommunicator.ts +7 -0
- package/test/utils/mock/Router.ts +3 -2
- package/test/utils/mock/mockDataEntry.ts +36 -0
- package/test/utils/utils.ts +49 -87
- package/dist/src/dht/find/FindRpcLocal.d.ts +0 -14
- package/dist/src/dht/find/FindRpcLocal.js.map +0 -1
- package/dist/src/dht/find/FindSession.d.ts +0 -44
- package/dist/src/dht/find/FindSession.js +0 -150
- package/dist/src/dht/find/FindSession.js.map +0 -1
- package/dist/src/dht/find/FindSessionRpcLocal.d.ts +0 -12
- package/dist/src/dht/find/FindSessionRpcLocal.js +0 -17
- package/dist/src/dht/find/FindSessionRpcLocal.js.map +0 -1
- package/dist/src/dht/find/FindSessionRpcRemote.d.ts +0 -6
- package/dist/src/dht/find/FindSessionRpcRemote.js +0 -21
- package/dist/src/dht/find/FindSessionRpcRemote.js.map +0 -1
- package/dist/src/dht/find/Finder.d.ts +0 -49
- package/dist/src/dht/find/Finder.js +0 -197
- package/dist/src/dht/find/Finder.js.map +0 -1
- package/dist/src/dht/routing/FindRpcRemote.d.ts +0 -6
- package/dist/src/dht/routing/FindRpcRemote.js.map +0 -1
- package/src/dht/find/FindSession.ts +0 -183
- package/src/dht/find/FindSessionRpcLocal.ts +0 -25
- package/src/dht/find/Finder.ts +0 -295
|
@@ -1,32 +1,22 @@
|
|
|
1
1
|
import { Simulator } from '../../src/connection/simulator/Simulator'
|
|
2
|
-
import { PeerID } from '../../src/helpers/PeerID'
|
|
3
2
|
import { DhtNode } from '../../src/dht/DhtNode'
|
|
4
|
-
import { createMockConnectionDhtNode, createMockConnectionLayer1Node } from '../utils/utils'
|
|
5
|
-
import {
|
|
6
|
-
import { NodeType } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
3
|
+
import { createMockConnectionDhtNode, createMockConnectionLayer1Node, createMockPeerDescriptor } from '../utils/utils'
|
|
4
|
+
import { areEqualNodeIds } from '../../src/helpers/nodeId'
|
|
7
5
|
|
|
6
|
+
const NODE_COUNT = 48
|
|
8
7
|
const NUM_OF_NODES_PER_KBUCKET = 8
|
|
9
8
|
|
|
10
9
|
describe('Layer1', () => {
|
|
11
10
|
|
|
12
11
|
let simulator: Simulator
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
const entryPoint0Descriptor = {
|
|
16
|
-
nodeId: PeerID.fromString(layer0EntryPointId).value,
|
|
17
|
-
type: NodeType.NODEJS
|
|
18
|
-
}
|
|
19
|
-
|
|
12
|
+
const entryPoint0Descriptor = createMockPeerDescriptor()
|
|
20
13
|
let layer0EntryPoint: DhtNode
|
|
21
|
-
|
|
22
|
-
const NODE_COUNT = 48
|
|
23
14
|
let nodes: DhtNode[]
|
|
24
|
-
|
|
25
15
|
let layer1CleanUp: DhtNode[]
|
|
26
16
|
|
|
27
17
|
beforeEach(async () => {
|
|
28
18
|
simulator = new Simulator()
|
|
29
|
-
layer0EntryPoint = await createMockConnectionDhtNode(
|
|
19
|
+
layer0EntryPoint = await createMockConnectionDhtNode(simulator, entryPoint0Descriptor.nodeId)
|
|
30
20
|
await layer0EntryPoint.joinDht([entryPoint0Descriptor])
|
|
31
21
|
|
|
32
22
|
nodes = []
|
|
@@ -34,7 +24,6 @@ describe('Layer1', () => {
|
|
|
34
24
|
|
|
35
25
|
for (let i = 0; i < NODE_COUNT; i++) {
|
|
36
26
|
const node = await createMockConnectionDhtNode(
|
|
37
|
-
new UUID().toString(),
|
|
38
27
|
simulator,
|
|
39
28
|
undefined,
|
|
40
29
|
undefined,
|
|
@@ -56,14 +45,14 @@ describe('Layer1', () => {
|
|
|
56
45
|
})
|
|
57
46
|
|
|
58
47
|
it('single layer1 dht', async () => {
|
|
59
|
-
const layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint
|
|
48
|
+
const layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint)
|
|
60
49
|
await layer1EntryPoint.joinDht([entryPoint0Descriptor])
|
|
61
50
|
layer1CleanUp.push(layer1EntryPoint)
|
|
62
51
|
|
|
63
52
|
const layer1Nodes: DhtNode[] = []
|
|
64
53
|
for (let i = 0; i < NODE_COUNT; i++) {
|
|
65
54
|
const layer0 = nodes[i]
|
|
66
|
-
const layer1 = await createMockConnectionLayer1Node(layer0
|
|
55
|
+
const layer1 = await createMockConnectionLayer1Node(layer0, undefined, NUM_OF_NODES_PER_KBUCKET)
|
|
67
56
|
layer1Nodes.push(layer1)
|
|
68
57
|
layer1CleanUp.push(layer1)
|
|
69
58
|
}
|
|
@@ -73,7 +62,7 @@ describe('Layer1', () => {
|
|
|
73
62
|
for (let i = 0; i < NODE_COUNT; i++) {
|
|
74
63
|
const layer0Node = nodes[i]
|
|
75
64
|
const layer1Node = layer1Nodes[i]
|
|
76
|
-
expect(layer1Node.getNodeId()
|
|
65
|
+
expect(areEqualNodeIds(layer1Node.getNodeId(), layer0Node.getNodeId())).toEqual(true)
|
|
77
66
|
expect(layer1Node.getNumberOfConnections()).toEqual(layer0Node.getNumberOfConnections())
|
|
78
67
|
expect(layer1Node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
|
|
79
68
|
expect(layer1Node.getAllConnectionPeerDescriptors()).toEqual(layer0Node.getAllConnectionPeerDescriptors())
|
|
@@ -81,16 +70,16 @@ describe('Layer1', () => {
|
|
|
81
70
|
}, 120000)
|
|
82
71
|
|
|
83
72
|
it('multiple layer1 dht', async () => {
|
|
84
|
-
const stream1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint
|
|
73
|
+
const stream1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'one')
|
|
85
74
|
await stream1EntryPoint.joinDht([entryPoint0Descriptor])
|
|
86
75
|
|
|
87
|
-
const stream2EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint
|
|
76
|
+
const stream2EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'two')
|
|
88
77
|
await stream2EntryPoint.joinDht([entryPoint0Descriptor])
|
|
89
78
|
|
|
90
|
-
const stream3EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint
|
|
79
|
+
const stream3EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'three')
|
|
91
80
|
await stream3EntryPoint.joinDht([entryPoint0Descriptor])
|
|
92
81
|
|
|
93
|
-
const stream4EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint
|
|
82
|
+
const stream4EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint, 'four')
|
|
94
83
|
await stream4EntryPoint.joinDht([entryPoint0Descriptor])
|
|
95
84
|
|
|
96
85
|
layer1CleanUp.push(stream1EntryPoint)
|
|
@@ -105,10 +94,10 @@ describe('Layer1', () => {
|
|
|
105
94
|
|
|
106
95
|
for (let i = 0; i < NODE_COUNT; i++) {
|
|
107
96
|
const layer0 = nodes[i]
|
|
108
|
-
const one = await createMockConnectionLayer1Node(layer0
|
|
109
|
-
const two = await createMockConnectionLayer1Node(layer0
|
|
110
|
-
const three = await createMockConnectionLayer1Node(layer0
|
|
111
|
-
const four = await createMockConnectionLayer1Node(layer0
|
|
97
|
+
const one = await createMockConnectionLayer1Node(layer0, 'one')
|
|
98
|
+
const two = await createMockConnectionLayer1Node(layer0, 'two')
|
|
99
|
+
const three = await createMockConnectionLayer1Node(layer0, 'three')
|
|
100
|
+
const four = await createMockConnectionLayer1Node(layer0, 'four')
|
|
112
101
|
|
|
113
102
|
stream1.push(one)
|
|
114
103
|
stream2.push(two)
|
|
@@ -180,7 +169,7 @@ describe('Layer1', () => {
|
|
|
180
169
|
// }
|
|
181
170
|
// await sender.doRouteMessage({
|
|
182
171
|
// message,
|
|
183
|
-
//
|
|
172
|
+
// target: receiver.getPeerDescriptor().nodeId,
|
|
184
173
|
// sourcePeer: sender.getPeerDescriptor(),
|
|
185
174
|
// requestId: v4(),
|
|
186
175
|
// reachableThrough: [],
|
|
@@ -1,62 +1,44 @@
|
|
|
1
1
|
import { Logger } from '@streamr/utils'
|
|
2
2
|
import { Simulator } from '../../src/connection/simulator/Simulator'
|
|
3
3
|
import { DhtNode } from '../../src/dht/DhtNode'
|
|
4
|
-
import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
5
4
|
import { createMockConnectionDhtNode, createMockConnectionLayer1Node } from '../utils/utils'
|
|
5
|
+
import { PeerID } from '../../src/exports'
|
|
6
6
|
|
|
7
7
|
const logger = new Logger(module)
|
|
8
8
|
|
|
9
|
+
// TODO refactor the test to not to use PeerID
|
|
10
|
+
|
|
9
11
|
describe('Layer 1 on Layer 0 with mocked connections', () => {
|
|
10
|
-
const simulator = new Simulator()
|
|
11
|
-
const layer0EntryPointId = 'layer0entrypoint'
|
|
12
12
|
|
|
13
|
+
const simulator = new Simulator()
|
|
13
14
|
let layer0EntryPoint: DhtNode
|
|
14
15
|
let layer1Node1: DhtNode
|
|
15
|
-
|
|
16
16
|
let layer0Node1: DhtNode
|
|
17
17
|
let layer1EntryPoint: DhtNode
|
|
18
|
-
|
|
19
18
|
let layer0Node2: DhtNode
|
|
20
19
|
let layer1Node2: DhtNode
|
|
21
|
-
|
|
22
20
|
let layer0Node3: DhtNode
|
|
23
21
|
let layer1Node3: DhtNode
|
|
24
|
-
|
|
25
22
|
let layer0Node4: DhtNode
|
|
26
23
|
let layer1Node4: DhtNode
|
|
27
24
|
|
|
28
|
-
let entryPointDescriptor: PeerDescriptor
|
|
29
|
-
|
|
30
25
|
beforeEach(async () => {
|
|
31
26
|
|
|
32
|
-
layer0EntryPoint = await createMockConnectionDhtNode(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const layer0Node2Id = 'node2'
|
|
38
|
-
layer0Node2 = await createMockConnectionDhtNode(layer0Node2Id, simulator)
|
|
39
|
-
|
|
40
|
-
const layer0Node3Id = 'node3'
|
|
41
|
-
layer0Node3 = await createMockConnectionDhtNode(layer0Node3Id, simulator)
|
|
42
|
-
|
|
43
|
-
const layer0Node4Id = 'node4'
|
|
44
|
-
layer0Node4 = await createMockConnectionDhtNode(layer0Node4Id, simulator)
|
|
45
|
-
|
|
46
|
-
layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPointId, layer0EntryPoint)
|
|
27
|
+
layer0EntryPoint = await createMockConnectionDhtNode(simulator, PeerID.fromString('layer0entrypoint').value)
|
|
28
|
+
layer0Node1 = await createMockConnectionDhtNode(simulator, PeerID.fromString('node1').value)
|
|
29
|
+
layer0Node2 = await createMockConnectionDhtNode(simulator, PeerID.fromString('node2').value)
|
|
30
|
+
layer0Node3 = await createMockConnectionDhtNode(simulator, PeerID.fromString('node3').value)
|
|
31
|
+
layer0Node4 = await createMockConnectionDhtNode(simulator, PeerID.fromString('node4').value)
|
|
47
32
|
|
|
48
|
-
|
|
49
|
-
layer1Node2 = await createMockConnectionLayer1Node(layer0Node2Id, layer0Node2)
|
|
50
|
-
layer1Node3 = await createMockConnectionLayer1Node(layer0Node3Id, layer0Node3)
|
|
51
|
-
layer1Node4 = await createMockConnectionLayer1Node(layer0Node4Id, layer0Node4)
|
|
33
|
+
layer1EntryPoint = await createMockConnectionLayer1Node(layer0EntryPoint)
|
|
52
34
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
35
|
+
layer1Node1 = await createMockConnectionLayer1Node(layer0Node1)
|
|
36
|
+
layer1Node2 = await createMockConnectionLayer1Node(layer0Node2)
|
|
37
|
+
layer1Node3 = await createMockConnectionLayer1Node(layer0Node3)
|
|
38
|
+
layer1Node4 = await createMockConnectionLayer1Node(layer0Node4)
|
|
57
39
|
|
|
58
|
-
await layer0EntryPoint.joinDht([
|
|
59
|
-
await layer1EntryPoint.joinDht([
|
|
40
|
+
await layer0EntryPoint.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
41
|
+
await layer1EntryPoint.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
60
42
|
})
|
|
61
43
|
|
|
62
44
|
afterEach(async () => {
|
|
@@ -75,15 +57,15 @@ describe('Layer 1 on Layer 0 with mocked connections', () => {
|
|
|
75
57
|
})
|
|
76
58
|
|
|
77
59
|
it('Happy Path', async () => {
|
|
78
|
-
await layer0Node1.joinDht([
|
|
79
|
-
await layer0Node2.joinDht([
|
|
80
|
-
await layer0Node3.joinDht([
|
|
81
|
-
await layer0Node4.joinDht([
|
|
82
|
-
|
|
83
|
-
await layer1Node1.joinDht([
|
|
84
|
-
await layer1Node2.joinDht([
|
|
85
|
-
await layer1Node3.joinDht([
|
|
86
|
-
await layer1Node4.joinDht([
|
|
60
|
+
await layer0Node1.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
61
|
+
await layer0Node2.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
62
|
+
await layer0Node3.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
63
|
+
await layer0Node4.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
64
|
+
|
|
65
|
+
await layer1Node1.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
66
|
+
await layer1Node2.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
67
|
+
await layer1Node3.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
68
|
+
await layer1Node4.joinDht([layer0EntryPoint.getLocalPeerDescriptor()])
|
|
87
69
|
|
|
88
70
|
logger.info('layer1EntryPoint.getNumberOfNeighbors() ' + layer1EntryPoint.getNumberOfNeighbors())
|
|
89
71
|
logger.info('layer1Node1.getNumberOfNeighbors()' + layer1Node1.getNumberOfNeighbors())
|
|
@@ -16,9 +16,9 @@ describe('multiple entry point joining', () => {
|
|
|
16
16
|
beforeEach(async () => {
|
|
17
17
|
simulator = new Simulator(LatencyType.REAL)
|
|
18
18
|
|
|
19
|
-
node1 = await createMockConnectionDhtNode(
|
|
20
|
-
node2 = await createMockConnectionDhtNode(
|
|
21
|
-
node3 = await createMockConnectionDhtNode(
|
|
19
|
+
node1 = await createMockConnectionDhtNode(simulator)
|
|
20
|
+
node2 = await createMockConnectionDhtNode(simulator)
|
|
21
|
+
node3 = await createMockConnectionDhtNode(simulator)
|
|
22
22
|
|
|
23
23
|
entryPoints = [
|
|
24
24
|
node1.getLocalPeerDescriptor(),
|
|
@@ -69,11 +69,11 @@ describe('multiple entry point joining', () => {
|
|
|
69
69
|
beforeEach(async () => {
|
|
70
70
|
simulator = new Simulator(LatencyType.REAL)
|
|
71
71
|
|
|
72
|
-
entryPoint1 = await createMockConnectionDhtNode(
|
|
73
|
-
entryPoint2 = await createMockConnectionDhtNode(
|
|
72
|
+
entryPoint1 = await createMockConnectionDhtNode(simulator)
|
|
73
|
+
entryPoint2 = await createMockConnectionDhtNode(simulator)
|
|
74
74
|
|
|
75
|
-
node1 = await createMockConnectionDhtNode(
|
|
76
|
-
node2 = await createMockConnectionDhtNode(
|
|
75
|
+
node1 = await createMockConnectionDhtNode(simulator)
|
|
76
|
+
node2 = await createMockConnectionDhtNode(simulator)
|
|
77
77
|
|
|
78
78
|
entryPoints = [
|
|
79
79
|
entryPoint1.getLocalPeerDescriptor(),
|
|
@@ -5,27 +5,29 @@ import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/Dh
|
|
|
5
5
|
import { createMockConnectionDhtNode, waitNodesReadyForTesting } from '../utils/utils'
|
|
6
6
|
import { execSync } from 'child_process'
|
|
7
7
|
import fs from 'fs'
|
|
8
|
-
import { Logger } from '@streamr/utils'
|
|
8
|
+
import { Logger, hexToBinary } from '@streamr/utils'
|
|
9
9
|
import { PeerID } from '../../src/helpers/PeerID'
|
|
10
10
|
import { getNodeIdFromPeerDescriptor, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
|
|
11
|
-
import { Any } from '../../src/proto/google/protobuf/any'
|
|
12
11
|
import { SortedContactList } from '../../src/dht/contact/SortedContactList'
|
|
13
12
|
import { Contact } from '../../src/dht/contact/Contact'
|
|
13
|
+
import { NodeID } from '../../src/helpers/nodeId'
|
|
14
|
+
import { createMockDataEntry } from '../utils/mock/mockDataEntry'
|
|
14
15
|
|
|
15
16
|
const logger = new Logger(module)
|
|
16
17
|
|
|
17
18
|
jest.setTimeout(60000)
|
|
18
19
|
|
|
20
|
+
const NUM_NODES = 100
|
|
21
|
+
const MAX_CONNECTIONS = 80
|
|
22
|
+
const K = 8
|
|
23
|
+
|
|
19
24
|
describe('Replicate data from node to node in DHT', () => {
|
|
25
|
+
|
|
20
26
|
let entryPoint: DhtNode
|
|
21
27
|
let nodes: DhtNode[]
|
|
22
28
|
let entrypointDescriptor: PeerDescriptor
|
|
23
29
|
const simulator = new Simulator(LatencyType.FIXED, 20)
|
|
24
|
-
const
|
|
25
|
-
const MAX_CONNECTIONS = 80
|
|
26
|
-
const K = 8
|
|
27
|
-
|
|
28
|
-
const nodesById: Map<string, DhtNode> = new Map()
|
|
30
|
+
const nodesById: Map<NodeID, DhtNode> = new Map()
|
|
29
31
|
|
|
30
32
|
if (!fs.existsSync('test/data/nodeids.json')) {
|
|
31
33
|
console.log('ground truth data does not exist yet, generating..')
|
|
@@ -40,25 +42,22 @@ describe('Replicate data from node to node in DHT', () => {
|
|
|
40
42
|
*/
|
|
41
43
|
beforeEach(async () => {
|
|
42
44
|
nodes = []
|
|
43
|
-
|
|
44
|
-
entryPoint = await createMockConnectionDhtNode(entryPointId, simulator,
|
|
45
|
+
entryPoint = await createMockConnectionDhtNode(simulator,
|
|
45
46
|
Uint8Array.from(dhtIds[0].data), K, MAX_CONNECTIONS)
|
|
46
47
|
nodes.push(entryPoint)
|
|
47
|
-
nodesById.set(entryPoint.getNodeId()
|
|
48
|
+
nodesById.set(entryPoint.getNodeId(), entryPoint)
|
|
48
49
|
|
|
49
50
|
entrypointDescriptor = {
|
|
50
|
-
nodeId: entryPoint.getNodeId()
|
|
51
|
+
nodeId: hexToBinary(entryPoint.getNodeId()),
|
|
51
52
|
type: NodeType.NODEJS
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
nodes.push(entryPoint)
|
|
55
56
|
|
|
56
57
|
for (let i = 1; i < NUM_NODES; i++) {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
const node = await createMockConnectionDhtNode(nodeId, simulator,
|
|
58
|
+
const node = await createMockConnectionDhtNode(simulator,
|
|
60
59
|
Uint8Array.from(dhtIds[i].data), K, MAX_CONNECTIONS)
|
|
61
|
-
nodesById.set(node.getNodeId()
|
|
60
|
+
nodesById.set(node.getNodeId(), node)
|
|
62
61
|
nodes.push(node)
|
|
63
62
|
}
|
|
64
63
|
})
|
|
@@ -76,12 +75,12 @@ describe('Replicate data from node to node in DHT', () => {
|
|
|
76
75
|
|
|
77
76
|
it('Data replicates to the closest node no matter where it is stored', async () => {
|
|
78
77
|
const dataKey = PeerID.fromString('3232323e12r31r3')
|
|
79
|
-
const data =
|
|
78
|
+
const data = createMockDataEntry({ key: dataKey.value })
|
|
80
79
|
|
|
81
80
|
// calculate offline which node is closest to the data
|
|
82
81
|
|
|
83
82
|
const sortedList = new SortedContactList<Contact>({
|
|
84
|
-
referenceId: dataKey,
|
|
83
|
+
referenceId: dataKey.toNodeId(),
|
|
85
84
|
maxSize: 10000,
|
|
86
85
|
allowToContainReferenceId: true,
|
|
87
86
|
emitEvents: false
|
|
@@ -104,18 +103,18 @@ describe('Replicate data from node to node in DHT', () => {
|
|
|
104
103
|
await nodes[0].joinDht([entrypointDescriptor])
|
|
105
104
|
|
|
106
105
|
logger.info('storing data to node 0')
|
|
107
|
-
const successfulStorers = await nodes[0].storeDataToDht(dataKey.value, data)
|
|
106
|
+
const successfulStorers = await nodes[0].storeDataToDht(dataKey.value, data.data!)
|
|
108
107
|
expect(successfulStorers.length).toBe(1)
|
|
109
108
|
logger.info('data successfully stored to node 0')
|
|
110
109
|
|
|
111
110
|
logger.info('Nodes sorted according to distance to data with storing nodes marked are: ')
|
|
112
111
|
|
|
113
112
|
closest.forEach((contact) => {
|
|
114
|
-
const node = nodesById.get(
|
|
113
|
+
const node = nodesById.get(getNodeIdFromPeerDescriptor(contact.getPeerDescriptor()))!
|
|
115
114
|
let hasDataMarker = ''
|
|
116
115
|
|
|
117
116
|
// @ts-expect-error private field
|
|
118
|
-
if (node.localDataStore.
|
|
117
|
+
if (node.localDataStore.getEntries(dataKey.value)) {
|
|
119
118
|
hasDataMarker = '<-'
|
|
120
119
|
}
|
|
121
120
|
|
|
@@ -139,27 +138,26 @@ describe('Replicate data from node to node in DHT', () => {
|
|
|
139
138
|
logger.info('After join of 99 nodes: nodes sorted according to distance to data with storing nodes marked are: ')
|
|
140
139
|
|
|
141
140
|
closest.forEach((contact) => {
|
|
142
|
-
const node = nodesById.get(
|
|
141
|
+
const node = nodesById.get(getNodeIdFromPeerDescriptor(contact.getPeerDescriptor()))!
|
|
143
142
|
let hasDataMarker = ''
|
|
144
143
|
|
|
145
144
|
// @ts-expect-error private field
|
|
146
|
-
|
|
147
|
-
if (node.localDataStore.getEntry(dataKey)) {
|
|
145
|
+
if (node.localDataStore.getEntries(dataKey.value)) {
|
|
148
146
|
hasDataMarker = '<-'
|
|
149
147
|
}
|
|
150
148
|
|
|
151
149
|
logger.info(getNodeIdFromPeerDescriptor(node.getLocalPeerDescriptor()) + hasDataMarker)
|
|
152
150
|
})
|
|
153
151
|
|
|
154
|
-
const closestNode = nodesById.get(
|
|
152
|
+
const closestNode = nodesById.get(getNodeIdFromPeerDescriptor(closest[0].getPeerDescriptor()))!
|
|
155
153
|
|
|
156
154
|
// @ts-expect-error private field
|
|
157
|
-
expect(closestNode.localDataStore.
|
|
155
|
+
expect(closestNode.localDataStore.getEntries(dataKey.value).size).toBeGreaterThanOrEqual(1)
|
|
158
156
|
}, 180000)
|
|
159
157
|
|
|
160
158
|
it('Data replicates to the last remaining node if all other nodes leave gracefully', async () => {
|
|
161
159
|
const dataKey = PeerID.fromString('3232323e12r31r3')
|
|
162
|
-
const data =
|
|
160
|
+
const data = createMockDataEntry({ key: dataKey.value })
|
|
163
161
|
|
|
164
162
|
logger.info(NUM_NODES + ' nodes joining layer0 DHT')
|
|
165
163
|
await Promise.all(
|
|
@@ -175,7 +173,7 @@ describe('Replicate data from node to node in DHT', () => {
|
|
|
175
173
|
const randomIndex = Math.floor(Math.random() * nodes.length)
|
|
176
174
|
logger.info('storing data to a random node: ' + randomIndex)
|
|
177
175
|
|
|
178
|
-
const successfulStorers = await nodes[randomIndex].storeDataToDht(dataKey.value, data)
|
|
176
|
+
const successfulStorers = await nodes[randomIndex].storeDataToDht(dataKey.value, data.data!)
|
|
179
177
|
|
|
180
178
|
logger.info('data successfully stored to ' + successfulStorers + ' nodes')
|
|
181
179
|
|
|
@@ -192,7 +190,7 @@ describe('Replicate data from node to node in DHT', () => {
|
|
|
192
190
|
|
|
193
191
|
logger.info('Stopping node ' + nodeIndex + ' ' +
|
|
194
192
|
// @ts-expect-error private field
|
|
195
|
-
(nodes[nodeIndex].localDataStore.
|
|
193
|
+
(nodes[nodeIndex].localDataStore.getEntries(dataKey.value) ? ', has data' : ' does not have data'))
|
|
196
194
|
|
|
197
195
|
await nodes[nodeIndex].stop()
|
|
198
196
|
}
|
|
@@ -200,10 +198,10 @@ describe('Replicate data from node to node in DHT', () => {
|
|
|
200
198
|
logger.info('after random graceful leaving, node ' + randomIndices[0] + ' is left')
|
|
201
199
|
|
|
202
200
|
// @ts-expect-error private field
|
|
203
|
-
logger.info('data of ' + randomIndices[0] + ' was ' + nodes[randomIndices[0]].localDataStore.
|
|
201
|
+
logger.info('data of ' + randomIndices[0] + ' was ' + nodes[randomIndices[0]].localDataStore.getEntries(dataKey.value))
|
|
204
202
|
|
|
205
203
|
// @ts-expect-error private field
|
|
206
|
-
expect(nodes[randomIndices[0]].localDataStore.
|
|
204
|
+
expect(nodes[randomIndices[0]].localDataStore.getEntries(dataKey.value).size).toBeGreaterThanOrEqual(1)
|
|
207
205
|
|
|
208
206
|
}, 180000)
|
|
209
207
|
})
|
|
@@ -1,47 +1,50 @@
|
|
|
1
1
|
import { DhtNode, Events as DhtNodeEvents } from '../../src/dht/DhtNode'
|
|
2
2
|
import { Message, MessageType, NodeType, PeerDescriptor, RouteMessageWrapper } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
3
3
|
import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
|
|
4
|
-
import { Logger, runAndWaitForEvents3, waitForCondition } from '@streamr/utils'
|
|
4
|
+
import { Logger, hexToBinary, runAndWaitForEvents3, waitForCondition } from '@streamr/utils'
|
|
5
5
|
import { createMockConnectionDhtNode, createWrappedClosestPeersRequest } from '../utils/utils'
|
|
6
|
-
import { PeerID } from '../../src/helpers/PeerID'
|
|
6
|
+
import { PeerID, PeerIDKey } from '../../src/helpers/PeerID'
|
|
7
7
|
import { Simulator } from '../../src/connection/simulator/Simulator'
|
|
8
8
|
import { v4 } from 'uuid'
|
|
9
9
|
import { Any } from '../../src/proto/google/protobuf/any'
|
|
10
10
|
import { RoutingMode } from '../../src/dht/routing/RoutingSession'
|
|
11
|
+
import { areEqualNodeIds } from '../../src/helpers/nodeId'
|
|
12
|
+
import { createRandomNodeId } from '../../src/helpers/nodeId'
|
|
11
13
|
|
|
12
14
|
const logger = new Logger(module)
|
|
13
15
|
|
|
16
|
+
// TODO refactor the test to not to use PeerID
|
|
17
|
+
const getPeerId = (node: DhtNode) => {
|
|
18
|
+
return PeerID.fromValue(hexToBinary(node.getNodeId()))
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const NUM_NODES = 30
|
|
22
|
+
|
|
14
23
|
describe('Route Message With Mock Connections', () => {
|
|
24
|
+
|
|
15
25
|
let entryPoint: DhtNode
|
|
16
26
|
let sourceNode: DhtNode
|
|
17
27
|
let destinationNode: DhtNode
|
|
18
28
|
let routerNodes: DhtNode[]
|
|
19
29
|
let simulator: Simulator
|
|
20
30
|
let entryPointDescriptor: PeerDescriptor
|
|
21
|
-
|
|
22
|
-
const entryPointId = '0'
|
|
23
|
-
const sourceId = 'eeeeeeeee'
|
|
24
|
-
const destinationId = '000000000'
|
|
25
|
-
const NUM_NODES = 30
|
|
26
|
-
|
|
27
31
|
const receiveMatrix: Array<Array<number>> = []
|
|
28
32
|
|
|
29
33
|
beforeEach(async () => {
|
|
30
34
|
routerNodes = []
|
|
31
35
|
simulator = new Simulator()
|
|
32
|
-
entryPoint = await createMockConnectionDhtNode(
|
|
36
|
+
entryPoint = await createMockConnectionDhtNode(simulator, createRandomNodeId())
|
|
33
37
|
|
|
34
38
|
entryPointDescriptor = {
|
|
35
|
-
nodeId: entryPoint.getNodeId()
|
|
39
|
+
nodeId: hexToBinary(entryPoint.getNodeId()),
|
|
36
40
|
type: NodeType.NODEJS
|
|
37
41
|
}
|
|
38
42
|
|
|
39
|
-
sourceNode = await createMockConnectionDhtNode(
|
|
40
|
-
destinationNode = await createMockConnectionDhtNode(
|
|
43
|
+
sourceNode = await createMockConnectionDhtNode(simulator, createRandomNodeId())
|
|
44
|
+
destinationNode = await createMockConnectionDhtNode(simulator, createRandomNodeId())
|
|
41
45
|
|
|
42
46
|
for (let i = 1; i < NUM_NODES; i++) {
|
|
43
|
-
const
|
|
44
|
-
const node = await createMockConnectionDhtNode(nodeId, simulator)
|
|
47
|
+
const node = await createMockConnectionDhtNode(simulator, PeerID.fromString(`${i}`).value)
|
|
45
48
|
routerNodes.push(node)
|
|
46
49
|
}
|
|
47
50
|
|
|
@@ -81,7 +84,7 @@ describe('Route Message With Mock Connections', () => {
|
|
|
81
84
|
await runAndWaitForEvents3<DhtNodeEvents>([() => {
|
|
82
85
|
sourceNode.router!.doRouteMessage({
|
|
83
86
|
message,
|
|
84
|
-
|
|
87
|
+
target: destinationNode.getLocalPeerDescriptor().nodeId,
|
|
85
88
|
requestId: v4(),
|
|
86
89
|
sourcePeer: sourceNode.getLocalPeerDescriptor(),
|
|
87
90
|
reachableThrough: [],
|
|
@@ -113,7 +116,7 @@ describe('Route Message With Mock Connections', () => {
|
|
|
113
116
|
}
|
|
114
117
|
sourceNode.router!.doRouteMessage({
|
|
115
118
|
message,
|
|
116
|
-
|
|
119
|
+
target: destinationNode.getLocalPeerDescriptor().nodeId,
|
|
117
120
|
requestId: v4(),
|
|
118
121
|
sourcePeer: sourceNode.getLocalPeerDescriptor(),
|
|
119
122
|
reachableThrough: [],
|
|
@@ -134,19 +137,19 @@ describe('Route Message With Mock Connections', () => {
|
|
|
134
137
|
receiveMatrix.push(arr)
|
|
135
138
|
}
|
|
136
139
|
|
|
137
|
-
const numsOfReceivedMessages: Record<
|
|
140
|
+
const numsOfReceivedMessages: Record<PeerIDKey, number> = {}
|
|
138
141
|
routerNodes.forEach((node) => {
|
|
139
|
-
numsOfReceivedMessages[node
|
|
142
|
+
numsOfReceivedMessages[getPeerId(node).toKey()] = 0
|
|
140
143
|
node.on('message', (msg: Message) => {
|
|
141
|
-
numsOfReceivedMessages[node
|
|
144
|
+
numsOfReceivedMessages[getPeerId(node).toKey()] = numsOfReceivedMessages[getPeerId(node).toKey()] + 1
|
|
142
145
|
try {
|
|
143
|
-
const target = receiveMatrix[parseInt(node
|
|
146
|
+
const target = receiveMatrix[parseInt(getPeerId(node).toString()) - 1]
|
|
144
147
|
target[parseInt(PeerID.fromValue(msg.sourceDescriptor!.nodeId).toString()) - 1]++
|
|
145
148
|
} catch (e) {
|
|
146
149
|
console.error(e)
|
|
147
150
|
}
|
|
148
|
-
if (parseInt(node
|
|
149
|
-
console.error(node
|
|
151
|
+
if (parseInt(getPeerId(node).toString()) > routerNodes.length || parseInt(getPeerId(node).toString()) === 0) {
|
|
152
|
+
console.error(getPeerId(node).toString())
|
|
150
153
|
}
|
|
151
154
|
})
|
|
152
155
|
}
|
|
@@ -154,7 +157,7 @@ describe('Route Message With Mock Connections', () => {
|
|
|
154
157
|
await Promise.all(
|
|
155
158
|
routerNodes.map(async (node) =>
|
|
156
159
|
Promise.all(routerNodes.map(async (receiver) => {
|
|
157
|
-
if (!node.getNodeId()
|
|
160
|
+
if (!areEqualNodeIds(node.getNodeId(), receiver.getNodeId())) {
|
|
158
161
|
const rpcWrapper = createWrappedClosestPeersRequest(sourceNode.getLocalPeerDescriptor())
|
|
159
162
|
const message: Message = {
|
|
160
163
|
serviceId: 'nonexisting_service',
|
|
@@ -169,7 +172,7 @@ describe('Route Message With Mock Connections', () => {
|
|
|
169
172
|
}
|
|
170
173
|
node.router!.doRouteMessage({
|
|
171
174
|
message,
|
|
172
|
-
|
|
175
|
+
target: receiver.getLocalPeerDescriptor().nodeId,
|
|
173
176
|
sourcePeer: node.getLocalPeerDescriptor(),
|
|
174
177
|
requestId: v4(),
|
|
175
178
|
reachableThrough: [],
|
|
@@ -183,7 +186,7 @@ describe('Route Message With Mock Connections', () => {
|
|
|
183
186
|
, 30000)
|
|
184
187
|
await Promise.all(
|
|
185
188
|
Object.keys(numsOfReceivedMessages).map(async (key) =>
|
|
186
|
-
waitForCondition(() => numsOfReceivedMessages[key] >= routerNodes.length - 1, 30000)
|
|
189
|
+
waitForCondition(() => numsOfReceivedMessages[key as PeerIDKey] >= routerNodes.length - 1, 30000)
|
|
187
190
|
)
|
|
188
191
|
)
|
|
189
192
|
|
|
@@ -205,7 +208,7 @@ describe('Route Message With Mock Connections', () => {
|
|
|
205
208
|
|
|
206
209
|
const routeMessageWrapper: RouteMessageWrapper = {
|
|
207
210
|
message: closestPeersRequestMessage,
|
|
208
|
-
|
|
211
|
+
target: destinationNode.getLocalPeerDescriptor().nodeId,
|
|
209
212
|
requestId: v4(),
|
|
210
213
|
sourcePeer: sourceNode.getLocalPeerDescriptor(),
|
|
211
214
|
reachableThrough: [entryPointDescriptor],
|
|
@@ -237,7 +240,7 @@ describe('Route Message With Mock Connections', () => {
|
|
|
237
240
|
message: requestMessage,
|
|
238
241
|
requestId: v4(),
|
|
239
242
|
sourcePeer: sourceNode.getLocalPeerDescriptor(),
|
|
240
|
-
|
|
243
|
+
target: entryPoint.getLocalPeerDescriptor()!.nodeId,
|
|
241
244
|
reachableThrough: [],
|
|
242
245
|
routingPath: []
|
|
243
246
|
}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
import { RpcCommunicator
|
|
1
|
+
import { RpcCommunicator } from '@streamr/proto-rpc'
|
|
2
2
|
import { RouterRpcRemote } from '../../src/dht/routing/RouterRpcRemote'
|
|
3
|
-
import { Message, MessageType,
|
|
3
|
+
import { Message, MessageType, RouteMessageAck, RouteMessageWrapper } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
4
4
|
import { RouterRpcClient } from '../../src/proto/packages/dht/protos/DhtRpc.client'
|
|
5
5
|
import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
|
|
6
|
-
import {
|
|
6
|
+
import { createMockPeerDescriptor, createWrappedClosestPeersRequest, mockRouterRpc } from '../utils/utils'
|
|
7
|
+
|
|
8
|
+
const SERVICE_ID = 'test'
|
|
7
9
|
|
|
8
10
|
describe('RemoteRouter', () => {
|
|
9
11
|
|
|
10
12
|
let remoteRouter: RouterRpcRemote
|
|
11
13
|
let clientRpcCommunicator: RpcCommunicator
|
|
12
14
|
let serverRpcCommunicator: RpcCommunicator
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
nodeId: generateId('client'),
|
|
16
|
-
type: NodeType.NODEJS
|
|
17
|
-
}
|
|
18
|
-
const serverPeerDescriptor: PeerDescriptor = {
|
|
19
|
-
nodeId: generateId('server'),
|
|
20
|
-
type: NodeType.NODEJS
|
|
21
|
-
}
|
|
15
|
+
const clientPeerDescriptor = createMockPeerDescriptor()
|
|
16
|
+
const serverPeerDescriptor = createMockPeerDescriptor()
|
|
22
17
|
|
|
23
18
|
beforeEach(() => {
|
|
24
19
|
clientRpcCommunicator = new RpcCommunicator()
|
|
@@ -30,14 +25,13 @@ describe('RemoteRouter', () => {
|
|
|
30
25
|
serverRpcCommunicator.on('outgoingMessage', (message: RpcMessage) => {
|
|
31
26
|
clientRpcCommunicator.handleIncomingMessage(message)
|
|
32
27
|
})
|
|
33
|
-
|
|
34
|
-
remoteRouter = new RouterRpcRemote(clientPeerDescriptor, serverPeerDescriptor, serviceId, client)
|
|
28
|
+
remoteRouter = new RouterRpcRemote(clientPeerDescriptor, serverPeerDescriptor, SERVICE_ID, clientRpcCommunicator, RouterRpcClient)
|
|
35
29
|
})
|
|
36
30
|
|
|
37
31
|
it('routeMessage happy path', async () => {
|
|
38
32
|
const rpcWrapper = createWrappedClosestPeersRequest(clientPeerDescriptor)
|
|
39
33
|
const routed: Message = {
|
|
40
|
-
serviceId,
|
|
34
|
+
serviceId: SERVICE_ID,
|
|
41
35
|
messageId: 'routed',
|
|
42
36
|
messageType: MessageType.RPC,
|
|
43
37
|
body: {
|
|
@@ -49,7 +43,7 @@ describe('RemoteRouter', () => {
|
|
|
49
43
|
requestId: 'routed',
|
|
50
44
|
message: routed,
|
|
51
45
|
sourcePeer: clientPeerDescriptor,
|
|
52
|
-
|
|
46
|
+
target: serverPeerDescriptor.nodeId,
|
|
53
47
|
reachableThrough: [],
|
|
54
48
|
routingPath: []
|
|
55
49
|
})
|
|
@@ -60,7 +54,7 @@ describe('RemoteRouter', () => {
|
|
|
60
54
|
serverRpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'routeMessage', mockRouterRpc.throwRouteMessageError)
|
|
61
55
|
const rpcWrapper = createWrappedClosestPeersRequest(clientPeerDescriptor)
|
|
62
56
|
const routed: Message = {
|
|
63
|
-
serviceId,
|
|
57
|
+
serviceId: SERVICE_ID,
|
|
64
58
|
messageId: 'routed',
|
|
65
59
|
messageType: MessageType.RPC,
|
|
66
60
|
body: {
|
|
@@ -72,7 +66,7 @@ describe('RemoteRouter', () => {
|
|
|
72
66
|
requestId: 'routed',
|
|
73
67
|
message: routed,
|
|
74
68
|
sourcePeer: clientPeerDescriptor,
|
|
75
|
-
|
|
69
|
+
target: serverPeerDescriptor.nodeId,
|
|
76
70
|
reachableThrough: [],
|
|
77
71
|
routingPath: []
|
|
78
72
|
})
|