@streamr/dht 100.0.0-pretestnet.6 → 100.0.0-testnet-one.1
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.js +2 -2
- package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
- package/dist/src/connection/ConnectionLockRpcRemote.d.ts +2 -2
- package/dist/src/connection/ConnectionLockRpcRemote.js +3 -27
- package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
- package/dist/src/connection/ConnectionManager.d.ts +0 -1
- package/dist/src/connection/ConnectionManager.js +11 -7
- package/dist/src/connection/ConnectionManager.js.map +1 -1
- package/dist/src/connection/ConnectorFacade.d.ts +2 -2
- package/dist/src/connection/ConnectorFacade.js +1 -2
- package/dist/src/connection/ConnectorFacade.js.map +1 -1
- package/dist/src/connection/ManagedConnection.js +1 -0
- package/dist/src/connection/ManagedConnection.js.map +1 -1
- package/dist/src/connection/connectivityChecker.d.ts +9 -0
- package/dist/src/connection/connectivityChecker.js +122 -0
- package/dist/src/connection/connectivityChecker.js.map +1 -0
- package/dist/src/connection/connectivityRequestHandler.d.ts +2 -0
- package/dist/src/connection/connectivityRequestHandler.js +79 -0
- package/dist/src/connection/connectivityRequestHandler.js.map +1 -0
- package/dist/src/connection/simulator/Simulator.js +3 -2
- package/dist/src/connection/simulator/Simulator.js.map +1 -1
- package/dist/src/connection/simulator/SimulatorConnection.js +1 -1
- package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -1
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js +1 -1
- package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnector.js +1 -1
- package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +1 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -1
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.d.ts +2 -2
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js +2 -2
- package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -1
- package/dist/src/connection/webrtc/iceServerAsString.js +1 -1
- package/dist/src/connection/webrtc/iceServerAsString.js.map +1 -1
- package/dist/src/connection/websocket/ClientWebsocket.d.ts +1 -0
- package/dist/src/connection/websocket/ClientWebsocket.js +7 -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 -2
- package/dist/src/connection/websocket/WebsocketConnector.js +61 -16
- 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 +4 -4
- package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +5 -39
- 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 +13 -23
- package/dist/src/dht/DhtNode.js +97 -226
- 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/DhtNodeRpcRemote.d.ts +3 -3
- package/dist/src/dht/DhtNodeRpcRemote.js +4 -4
- package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -1
- package/dist/src/dht/ExternalApiRpcLocal.d.ts +4 -4
- package/dist/src/dht/ExternalApiRpcLocal.js +5 -12
- package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -1
- package/dist/src/dht/ExternalApiRpcRemote.d.ts +3 -3
- package/dist/src/dht/ExternalApiRpcRemote.js +5 -5
- package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
- package/dist/src/dht/PeerManager.d.ts +52 -0
- package/dist/src/dht/PeerManager.js +273 -0
- package/dist/src/dht/PeerManager.js.map +1 -0
- package/dist/src/dht/contact/ContactList.d.ts +1 -1
- package/dist/src/dht/contact/ContactList.js +1 -0
- package/dist/src/dht/contact/ContactList.js.map +1 -1
- package/dist/src/dht/contact/{Remote.d.ts → RpcRemote.d.ts} +3 -3
- package/dist/src/dht/contact/{Remote.js → RpcRemote.js} +8 -8
- package/dist/src/dht/contact/RpcRemote.js.map +1 -0
- 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 +4 -14
- package/dist/src/dht/discovery/DiscoverySession.js +15 -26
- package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
- package/dist/src/dht/discovery/PeerDiscovery.d.ts +2 -9
- package/dist/src/dht/discovery/PeerDiscovery.js +11 -19
- package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
- package/dist/src/dht/find/FindRpcLocal.js +2 -1
- package/dist/src/dht/find/FindRpcLocal.js.map +1 -1
- package/dist/src/dht/find/FindSession.d.ts +6 -6
- package/dist/src/dht/find/FindSession.js +18 -13
- package/dist/src/dht/find/FindSession.js.map +1 -1
- package/dist/src/dht/find/FindSessionRpcLocal.d.ts +1 -1
- package/dist/src/dht/find/FindSessionRpcRemote.d.ts +2 -2
- package/dist/src/dht/find/FindSessionRpcRemote.js +2 -2
- package/dist/src/dht/find/FindSessionRpcRemote.js.map +1 -1
- package/dist/src/dht/find/Finder.d.ts +4 -4
- package/dist/src/dht/find/Finder.js +55 -42
- package/dist/src/dht/find/Finder.js.map +1 -1
- package/dist/src/dht/routing/FindRpcRemote.d.ts +2 -2
- package/dist/src/dht/routing/FindRpcRemote.js +7 -5
- package/dist/src/dht/routing/FindRpcRemote.js.map +1 -1
- package/dist/src/dht/routing/Router.d.ts +3 -7
- package/dist/src/dht/routing/Router.js +29 -22
- package/dist/src/dht/routing/Router.js.map +1 -1
- package/dist/src/dht/routing/RouterRpcLocal.d.ts +2 -2
- package/dist/src/dht/routing/RouterRpcLocal.js +4 -3
- 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 +13 -8
- package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
- package/dist/src/dht/routing/RoutingSession.d.ts +1 -1
- package/dist/src/dht/routing/RoutingSession.js +23 -11
- package/dist/src/dht/routing/RoutingSession.js.map +1 -1
- package/dist/src/dht/routing/getPreviousPeer.js.map +1 -1
- package/dist/src/dht/store/LocalDataStore.d.ts +3 -3
- package/dist/src/dht/store/LocalDataStore.js +18 -17
- package/dist/src/dht/store/LocalDataStore.js.map +1 -1
- package/dist/src/dht/store/StoreRpcLocal.d.ts +10 -9
- package/dist/src/dht/store/StoreRpcLocal.js +108 -102
- package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
- package/dist/src/dht/store/StoreRpcRemote.d.ts +4 -5
- package/dist/src/dht/store/StoreRpcRemote.js +6 -15
- package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
- package/dist/src/exports.d.ts +1 -1
- package/dist/src/exports.js +4 -4
- package/dist/src/exports.js.map +1 -1
- package/dist/src/helpers/PeerID.d.ts +1 -0
- package/dist/src/helpers/PeerID.js +9 -4
- package/dist/src/helpers/PeerID.js.map +1 -1
- package/dist/src/helpers/UUID.js +1 -1
- package/dist/src/helpers/UUID.js.map +1 -1
- package/dist/src/helpers/nodeId.d.ts +1 -0
- package/dist/src/helpers/{kademliaId.js → nodeId.js} +4 -4
- package/dist/src/helpers/nodeId.js.map +1 -0
- package/dist/src/helpers/peerIdFromPeerDescriptor.js +4 -4
- package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +5 -16
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +2 -9
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +80 -95
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +67 -66
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +3 -10
- package/dist/src/transport/RoutingRpcCommunicator.js +2 -0
- package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
- package/karma.config.js +2 -2
- package/package.json +5 -5
- package/protos/DhtRpc.proto +36 -36
- package/src/connection/ConnectionLockHandler.ts +2 -2
- package/src/connection/ConnectionLockRpcRemote.ts +3 -4
- package/src/connection/ConnectionManager.ts +19 -17
- package/src/connection/ConnectorFacade.ts +5 -7
- package/src/connection/ManagedConnection.ts +1 -0
- package/src/connection/connectivityChecker.ts +102 -0
- package/src/connection/connectivityRequestHandler.ts +79 -0
- package/src/connection/simulator/Simulator.ts +3 -2
- package/src/connection/simulator/SimulatorConnection.ts +1 -1
- package/src/connection/webrtc/BrowserWebrtcConnection.ts +10 -10
- package/src/connection/webrtc/NodeWebrtcConnection.ts +1 -1
- package/src/connection/webrtc/WebrtcConnector.ts +1 -1
- package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +1 -1
- package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +2 -2
- package/src/connection/webrtc/iceServerAsString.ts +1 -1
- package/src/connection/websocket/ClientWebsocket.ts +6 -2
- package/src/connection/websocket/ServerWebsocket.ts +40 -25
- package/src/connection/websocket/WebsocketConnector.ts +43 -22
- package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +9 -11
- package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +7 -16
- package/src/connection/websocket/WebsocketServer.ts +20 -5
- package/src/dht/DhtNode.ts +123 -280
- package/src/dht/DhtNodeRpcLocal.ts +2 -9
- package/src/dht/DhtNodeRpcRemote.ts +4 -4
- package/src/dht/ExternalApiRpcLocal.ts +8 -13
- package/src/dht/ExternalApiRpcRemote.ts +5 -5
- package/src/dht/PeerManager.ts +330 -0
- package/src/dht/contact/ContactList.ts +3 -2
- package/src/dht/contact/{Remote.ts → RpcRemote.ts} +7 -6
- package/src/dht/contact/SortedContactList.ts +87 -44
- package/src/dht/discovery/DiscoverySession.ts +19 -44
- package/src/dht/discovery/PeerDiscovery.ts +16 -28
- package/src/dht/find/FindRpcLocal.ts +2 -2
- package/src/dht/find/FindSession.ts +25 -20
- package/src/dht/find/FindSessionRpcLocal.ts +1 -1
- package/src/dht/find/FindSessionRpcRemote.ts +2 -2
- package/src/dht/find/Finder.ts +84 -64
- package/src/dht/routing/FindRpcRemote.ts +7 -5
- package/src/dht/routing/Router.ts +30 -25
- package/src/dht/routing/RouterRpcLocal.ts +5 -5
- package/src/dht/routing/RouterRpcRemote.ts +13 -10
- package/src/dht/routing/RoutingSession.ts +22 -17
- package/src/dht/routing/getPreviousPeer.ts +1 -1
- package/src/dht/store/LocalDataStore.ts +18 -17
- package/src/dht/store/StoreRpcLocal.ts +118 -113
- package/src/dht/store/StoreRpcRemote.ts +7 -23
- package/src/exports.ts +1 -1
- package/src/helpers/PeerID.ts +8 -4
- package/src/helpers/UUID.ts +1 -1
- package/src/helpers/{kademliaId.ts → nodeId.ts} +1 -1
- package/src/helpers/peerIdFromPeerDescriptor.ts +6 -6
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +6 -20
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +3 -10
- package/src/proto/packages/dht/protos/DhtRpc.ts +103 -135
- package/src/transport/RoutingRpcCommunicator.ts +2 -0
- package/test/benchmark/Find.test.ts +5 -5
- package/test/benchmark/KademliaCorrectness.test.ts +3 -3
- package/test/benchmark/SortedContactListBenchmark.test.ts +150 -0
- package/test/benchmark/WebsocketServerMemoryLeak.test.ts +41 -0
- package/test/benchmark/kademlia-simulation/Contact.ts +1 -1
- package/test/benchmark/kademlia-simulation/KademliaSimulation.ts +1 -1
- package/test/benchmark/kademlia-simulation/SimulationNode.ts +6 -1
- package/test/end-to-end/Layer0-Layer1.test.ts +1 -1
- package/test/end-to-end/Layer0.test.ts +4 -4
- package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +11 -11
- package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +6 -6
- package/test/end-to-end/Layer0Webrtc.test.ts +2 -2
- package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +3 -3
- package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +3 -3
- package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +1 -1
- package/test/end-to-end/WebsocketConnectionRequest.test.ts +1 -1
- package/test/end-to-end/memory-leak.test.ts +9 -12
- package/test/integration/ConnectionLocking.test.ts +2 -2
- package/test/integration/ConnectionManager.test.ts +14 -14
- package/test/integration/DhtJoinPeerDiscovery.test.ts +3 -3
- package/test/integration/DhtNodeExternalAPI.test.ts +10 -7
- package/test/integration/DhtNodeRpcRemote.test.ts +4 -4
- package/test/integration/DhtRpc.test.ts +6 -6
- package/test/integration/Find.test.ts +3 -3
- package/test/integration/Layer1-scale.test.ts +3 -3
- package/test/integration/Mock-Layer1-Layer0.test.ts +16 -16
- package/test/integration/MultipleEntryPointJoining.test.ts +7 -7
- package/test/integration/{MigrateData.test.ts → ReplicateData.test.ts} +15 -10
- package/test/integration/RouteMessage.test.ts +2 -2
- package/test/integration/RouterRpcRemote.test.ts +2 -2
- package/test/integration/RpcErrors.test.ts +2 -2
- package/test/integration/ScaleDownDht.test.ts +4 -2
- package/test/integration/SimultaneousConnections.test.ts +89 -57
- package/test/integration/Store.test.ts +33 -13
- package/test/integration/StoreAndDelete.test.ts +19 -17
- package/test/integration/StoreOnDhtWithTwoNodes.test.ts +21 -21
- package/test/integration/StoreRpcRemote.test.ts +3 -3
- package/test/integration/WebrtcConnectionManagement.test.ts +2 -2
- package/test/integration/WebrtcConnectorRpc.test.ts +1 -1
- package/test/integration/WebsocketConnectionManagement.test.ts +41 -3
- package/test/integration/WebsocketConnectorRpc.test.ts +5 -7
- package/test/unit/ConnectivityHelpers.test.ts +4 -4
- package/test/unit/Finder.test.ts +69 -23
- package/test/unit/LocalDataStore.test.ts +60 -43
- package/test/unit/RandomContactList.test.ts +2 -2
- package/test/unit/Router.test.ts +19 -11
- package/test/unit/RoutingSession.test.ts +76 -0
- package/test/unit/SortedContactList.test.ts +17 -12
- package/test/unit/WebsocketConnector.test.ts +1 -1
- package/test/unit/connectivityRequestHandler.test.ts +71 -0
- package/test/utils/mock/Router.ts +1 -1
- package/test/utils/utils.ts +24 -22
- package/dist/src/connection/ConnectivityChecker.d.ts +0 -17
- package/dist/src/connection/ConnectivityChecker.js +0 -208
- package/dist/src/connection/ConnectivityChecker.js.map +0 -1
- package/dist/src/dht/contact/Remote.js.map +0 -1
- package/dist/src/helpers/kademliaId.d.ts +0 -1
- package/dist/src/helpers/kademliaId.js.map +0 -1
- package/src/connection/ConnectivityChecker.ts +0 -199
|
@@ -26,11 +26,12 @@ describe('Websocket Connection Management', () => {
|
|
|
26
26
|
const serviceId = 'test'
|
|
27
27
|
let wsServerManager: ConnectionManager
|
|
28
28
|
let noWsServerManager: ConnectionManager
|
|
29
|
+
let biggerNoWsServerManager: ConnectionManager
|
|
29
30
|
|
|
30
31
|
const simulator = new Simulator()
|
|
31
32
|
|
|
32
33
|
const wsServerConnectorPeerDescriptor: PeerDescriptor = {
|
|
33
|
-
|
|
34
|
+
nodeId: PeerID.fromString('2').value,
|
|
34
35
|
type: NodeType.NODEJS,
|
|
35
36
|
websocket: {
|
|
36
37
|
host: '127.0.0.1',
|
|
@@ -40,12 +41,18 @@ describe('Websocket Connection Management', () => {
|
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
const noWsServerConnectorPeerDescriptor: PeerDescriptor = {
|
|
43
|
-
|
|
44
|
+
nodeId: PeerID.fromString('1').value,
|
|
45
|
+
type: NodeType.NODEJS,
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const biggerNoWsServerConnectorPeerDescriptor: PeerDescriptor = {
|
|
49
|
+
nodeId: PeerID.fromString('3').value,
|
|
44
50
|
type: NodeType.NODEJS,
|
|
45
51
|
}
|
|
46
52
|
|
|
47
53
|
let connectorTransport1: SimulatorTransport
|
|
48
54
|
let connectorTransport2: SimulatorTransport
|
|
55
|
+
let connectorTransport3: SimulatorTransport
|
|
49
56
|
|
|
50
57
|
beforeEach(async () => {
|
|
51
58
|
|
|
@@ -53,6 +60,8 @@ describe('Websocket Connection Management', () => {
|
|
|
53
60
|
await connectorTransport1.start()
|
|
54
61
|
connectorTransport2 = new SimulatorTransport(noWsServerConnectorPeerDescriptor, simulator)
|
|
55
62
|
await connectorTransport2.start()
|
|
63
|
+
connectorTransport3 = new SimulatorTransport(biggerNoWsServerConnectorPeerDescriptor, simulator)
|
|
64
|
+
await connectorTransport3.start()
|
|
56
65
|
|
|
57
66
|
const config1 = createConfig(wsServerConnectorPeerDescriptor, {
|
|
58
67
|
transport: connectorTransport1,
|
|
@@ -62,22 +71,29 @@ describe('Websocket Connection Management', () => {
|
|
|
62
71
|
const config2 = createConfig(noWsServerConnectorPeerDescriptor, {
|
|
63
72
|
transport: connectorTransport2
|
|
64
73
|
})
|
|
74
|
+
const config3 = createConfig(biggerNoWsServerConnectorPeerDescriptor, {
|
|
75
|
+
transport: connectorTransport3
|
|
76
|
+
})
|
|
65
77
|
|
|
66
78
|
wsServerManager = new ConnectionManager(config1)
|
|
67
79
|
noWsServerManager = new ConnectionManager(config2)
|
|
80
|
+
biggerNoWsServerManager = new ConnectionManager(config3)
|
|
68
81
|
|
|
69
82
|
await wsServerManager.start()
|
|
70
83
|
await noWsServerManager.start()
|
|
84
|
+
await biggerNoWsServerManager.start()
|
|
71
85
|
})
|
|
72
86
|
|
|
73
87
|
afterEach(async () => {
|
|
74
88
|
await wsServerManager.stop()
|
|
75
89
|
await noWsServerManager.stop()
|
|
90
|
+
await biggerNoWsServerManager.stop()
|
|
76
91
|
await connectorTransport1.stop()
|
|
77
92
|
await connectorTransport2.stop()
|
|
93
|
+
await connectorTransport3.stop()
|
|
78
94
|
})
|
|
79
95
|
|
|
80
|
-
it('Can open connections to serverless peer', (done) => {
|
|
96
|
+
it('Can open connections to serverless peer with smaller peerId', (done) => {
|
|
81
97
|
const dummyMessage: Message = {
|
|
82
98
|
serviceId,
|
|
83
99
|
body: {
|
|
@@ -99,6 +115,28 @@ describe('Websocket Connection Management', () => {
|
|
|
99
115
|
wsServerManager.send(dummyMessage)
|
|
100
116
|
})
|
|
101
117
|
|
|
118
|
+
it('Can open connections to serverless peer with bigger peerId', (done) => {
|
|
119
|
+
const dummyMessage: Message = {
|
|
120
|
+
serviceId,
|
|
121
|
+
body: {
|
|
122
|
+
oneofKind: 'rpcMessage',
|
|
123
|
+
rpcMessage: RpcMessage.create()
|
|
124
|
+
},
|
|
125
|
+
messageType: MessageType.RPC,
|
|
126
|
+
messageId: 'mockerer',
|
|
127
|
+
targetDescriptor: biggerNoWsServerConnectorPeerDescriptor
|
|
128
|
+
}
|
|
129
|
+
biggerNoWsServerManager.on('message', (message: Message) => {
|
|
130
|
+
expect(message.messageId).toEqual('mockerer')
|
|
131
|
+
expect(wsServerManager.getConnection(biggerNoWsServerConnectorPeerDescriptor)!.connectionType).toEqual(ConnectionType.WEBSOCKET_SERVER)
|
|
132
|
+
expect(biggerNoWsServerManager.getConnection(wsServerConnectorPeerDescriptor)!.connectionType).toEqual(ConnectionType.WEBSOCKET_CLIENT)
|
|
133
|
+
|
|
134
|
+
done()
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
wsServerManager.send(dummyMessage)
|
|
138
|
+
})
|
|
139
|
+
|
|
102
140
|
it('Can open connections to peer with server', async () => {
|
|
103
141
|
const dummyMessage: Message = {
|
|
104
142
|
serviceId,
|
|
@@ -17,12 +17,12 @@ describe('WebsocketConnectorRpc', () => {
|
|
|
17
17
|
let client2: ProtoRpcClient<WebsocketConnectorRpcClient>
|
|
18
18
|
|
|
19
19
|
const peerDescriptor1: PeerDescriptor = {
|
|
20
|
-
|
|
20
|
+
nodeId: generateId('peer1'),
|
|
21
21
|
type: NodeType.NODEJS
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
const peerDescriptor2: PeerDescriptor = {
|
|
25
|
-
|
|
25
|
+
nodeId: generateId('peer2'),
|
|
26
26
|
type: NodeType.NODEJS
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -67,16 +67,14 @@ describe('WebsocketConnectorRpc', () => {
|
|
|
67
67
|
},
|
|
68
68
|
{ targetDescriptor: peerDescriptor2 },
|
|
69
69
|
)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
await response1
|
|
71
|
+
|
|
73
72
|
const response2 = client2.requestConnection({
|
|
74
73
|
ip: '127.0.0.1',
|
|
75
74
|
port: 9111
|
|
76
75
|
},
|
|
77
76
|
{ targetDescriptor: peerDescriptor1 },
|
|
78
77
|
)
|
|
79
|
-
|
|
80
|
-
expect(res2.accepted).toEqual(true)
|
|
78
|
+
await response2
|
|
81
79
|
})
|
|
82
80
|
})
|
|
@@ -5,7 +5,7 @@ import { ConnectionType } from '../../src/connection/IConnection'
|
|
|
5
5
|
describe('Connectivity helpers', () => {
|
|
6
6
|
|
|
7
7
|
const tlsServerPeerDescriptor = {
|
|
8
|
-
|
|
8
|
+
nodeId: new Uint8Array(1),
|
|
9
9
|
type: NodeType.NODEJS,
|
|
10
10
|
websocket: {
|
|
11
11
|
host: 'mock',
|
|
@@ -15,7 +15,7 @@ describe('Connectivity helpers', () => {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
const noTlsServerPeerDescriptor = {
|
|
18
|
-
|
|
18
|
+
nodeId: new Uint8Array(1),
|
|
19
19
|
type: NodeType.NODEJS,
|
|
20
20
|
websocket: {
|
|
21
21
|
host: 'mock',
|
|
@@ -25,12 +25,12 @@ describe('Connectivity helpers', () => {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
const browserPeerDescriptor = {
|
|
28
|
-
|
|
28
|
+
nodeId: new Uint8Array(2),
|
|
29
29
|
type: NodeType.BROWSER
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
const noServerPeerDescriptor = {
|
|
33
|
-
|
|
33
|
+
nodeId: new Uint8Array(3),
|
|
34
34
|
type: NodeType.NODEJS
|
|
35
35
|
}
|
|
36
36
|
|
package/test/unit/Finder.test.ts
CHANGED
|
@@ -1,39 +1,51 @@
|
|
|
1
1
|
import {
|
|
2
|
+
FindAction,
|
|
2
3
|
Message,
|
|
3
4
|
MessageType,
|
|
4
5
|
NodeType,
|
|
5
6
|
PeerDescriptor,
|
|
6
7
|
RouteMessageAck,
|
|
8
|
+
RouteMessageError,
|
|
7
9
|
RouteMessageWrapper
|
|
8
10
|
} from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
9
|
-
import { PeerID
|
|
11
|
+
import { PeerID } from '../../src/helpers/PeerID'
|
|
10
12
|
import {
|
|
11
13
|
createWrappedClosestPeersRequest,
|
|
12
14
|
createFindRequest
|
|
13
15
|
} from '../utils/utils'
|
|
14
16
|
import { Finder } from '../../src/dht/find/Finder'
|
|
15
|
-
import { DhtNodeRpcRemote } from '../../src/dht/DhtNodeRpcRemote'
|
|
16
17
|
import { LocalDataStore } from '../../src/dht/store/LocalDataStore'
|
|
17
18
|
import { v4 } from 'uuid'
|
|
18
19
|
import { MockRouter } from '../utils/mock/Router'
|
|
19
20
|
import { MockTransport } from '../utils/mock/Transport'
|
|
20
21
|
import { areEqualPeerDescriptors } from '../../src/helpers/peerIdFromPeerDescriptor'
|
|
21
22
|
import { FakeRpcCommunicator } from '../utils/FakeRpcCommunicator'
|
|
23
|
+
import { IRouter } from '../../src/dht/routing/Router'
|
|
24
|
+
import { ITransport } from '../../src/exports'
|
|
22
25
|
|
|
26
|
+
const createMockRouter = (error?: RouteMessageError): Partial<IRouter> => {
|
|
27
|
+
return {
|
|
28
|
+
doRouteMessage: (routedMessage: RouteMessageWrapper) => {
|
|
29
|
+
return {
|
|
30
|
+
requestId: routedMessage.requestId,
|
|
31
|
+
error
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
isMostLikelyDuplicate: () => false,
|
|
35
|
+
addToDuplicateDetector: () => {}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
23
38
|
describe('Finder', () => {
|
|
24
39
|
|
|
25
|
-
let finder: Finder
|
|
26
|
-
let connections: Map<PeerIDKey, DhtNodeRpcRemote>
|
|
27
|
-
|
|
28
40
|
const peerDescriptor1: PeerDescriptor = {
|
|
29
|
-
|
|
41
|
+
nodeId: PeerID.fromString('peerid').value,
|
|
30
42
|
type: NodeType.NODEJS
|
|
31
43
|
}
|
|
32
44
|
const peerDescriptor2: PeerDescriptor = {
|
|
33
|
-
|
|
45
|
+
nodeId: PeerID.fromString('destination').value,
|
|
34
46
|
type: NodeType.NODEJS
|
|
35
47
|
}
|
|
36
|
-
const findRequest = createFindRequest(
|
|
48
|
+
const findRequest = createFindRequest(FindAction.NODE)
|
|
37
49
|
const message: Message = {
|
|
38
50
|
serviceId: 'unknown',
|
|
39
51
|
messageId: v4(),
|
|
@@ -50,41 +62,41 @@ describe('Finder', () => {
|
|
|
50
62
|
requestId: 'REQ',
|
|
51
63
|
routingPath: [],
|
|
52
64
|
reachableThrough: [],
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
sourcePeer: peerDescriptor1,
|
|
66
|
+
destinationPeer: peerDescriptor2
|
|
55
67
|
}
|
|
56
68
|
const rpcCommunicator = new FakeRpcCommunicator()
|
|
57
69
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
finder = new Finder({
|
|
70
|
+
const createFinder = (router: IRouter = new MockRouter(), transport: ITransport = new MockTransport()): Finder => {
|
|
71
|
+
return new Finder({
|
|
61
72
|
localPeerDescriptor: peerDescriptor1,
|
|
62
|
-
router
|
|
63
|
-
connections,
|
|
73
|
+
router,
|
|
74
|
+
connections: new Map(),
|
|
64
75
|
serviceId: 'Finder',
|
|
65
76
|
localDataStore: new LocalDataStore(),
|
|
66
|
-
sessionTransport:
|
|
67
|
-
addContact: (
|
|
77
|
+
sessionTransport: transport,
|
|
78
|
+
addContact: () => {},
|
|
68
79
|
isPeerCloserToIdThanSelf: (_peer1, _compareToId) => true,
|
|
69
80
|
rpcCommunicator: rpcCommunicator as any
|
|
70
81
|
})
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
afterEach(() => {
|
|
74
|
-
finder.stop()
|
|
75
|
-
})
|
|
82
|
+
}
|
|
76
83
|
|
|
77
84
|
it('Finder server', async () => {
|
|
85
|
+
const finder = createFinder()
|
|
78
86
|
const res = await rpcCommunicator.callRpcMethod('routeFindRequest', routedMessage) as RouteMessageAck
|
|
79
|
-
expect(res.error).
|
|
87
|
+
expect(res.error).toBeUndefined()
|
|
88
|
+
finder.stop()
|
|
80
89
|
})
|
|
81
90
|
|
|
82
91
|
it('startFind with mode Node returns self if no peers', async () => {
|
|
92
|
+
const finder = createFinder()
|
|
83
93
|
const res = await finder.startFind(PeerID.fromString('find').value)
|
|
84
94
|
expect(areEqualPeerDescriptors(res.closestNodes[0], peerDescriptor1)).toEqual(true)
|
|
95
|
+
finder.stop()
|
|
85
96
|
})
|
|
86
97
|
|
|
87
98
|
it('Finder server throws if payload is not FindRequest', async () => {
|
|
99
|
+
const finder = createFinder(new MockRouter())
|
|
88
100
|
const rpcWrapper = createWrappedClosestPeersRequest(peerDescriptor1)
|
|
89
101
|
const badMessage: Message = {
|
|
90
102
|
serviceId: 'unknown',
|
|
@@ -105,6 +117,40 @@ describe('Finder', () => {
|
|
|
105
117
|
destinationPeer: peerDescriptor1,
|
|
106
118
|
sourcePeer: peerDescriptor2
|
|
107
119
|
})).rejects.toThrow()
|
|
120
|
+
finder.stop()
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
it('no targets', async () => {
|
|
124
|
+
const router = createMockRouter(RouteMessageError.NO_TARGETS)
|
|
125
|
+
const send = jest.fn()
|
|
126
|
+
const transport = {
|
|
127
|
+
send,
|
|
128
|
+
on: () => {},
|
|
129
|
+
off: () => {}
|
|
130
|
+
}
|
|
131
|
+
const finder = createFinder(router as any, transport as any)
|
|
132
|
+
const ack = await rpcCommunicator.callRpcMethod('routeFindRequest', routedMessage)
|
|
133
|
+
expect(ack).toEqual({
|
|
134
|
+
requestId: routedMessage.requestId,
|
|
135
|
+
error: RouteMessageError.NO_TARGETS
|
|
136
|
+
})
|
|
137
|
+
expect(send).toHaveBeenCalledTimes(1)
|
|
138
|
+
finder.stop()
|
|
108
139
|
})
|
|
109
140
|
|
|
141
|
+
it('error', async () => {
|
|
142
|
+
const router = createMockRouter(RouteMessageError.DUPLICATE)
|
|
143
|
+
const send = jest.fn()
|
|
144
|
+
const transport = {
|
|
145
|
+
send
|
|
146
|
+
}
|
|
147
|
+
const finder = createFinder(router as any, transport as any)
|
|
148
|
+
const ack = await rpcCommunicator.callRpcMethod('routeFindRequest', routedMessage)
|
|
149
|
+
expect(ack).toEqual({
|
|
150
|
+
requestId: routedMessage.requestId,
|
|
151
|
+
error: RouteMessageError.DUPLICATE
|
|
152
|
+
})
|
|
153
|
+
expect(send).not.toHaveBeenCalled()
|
|
154
|
+
finder.stop()
|
|
155
|
+
})
|
|
110
156
|
})
|
|
@@ -11,16 +11,16 @@ import { Timestamp } from '../../src/proto/google/protobuf/timestamp'
|
|
|
11
11
|
|
|
12
12
|
describe('LocalDataStore', () => {
|
|
13
13
|
let localDataStore: LocalDataStore
|
|
14
|
-
const
|
|
15
|
-
|
|
14
|
+
const creator1: PeerDescriptor = {
|
|
15
|
+
nodeId: new Uint8Array([1, 2, 3]),
|
|
16
16
|
type: NodeType.NODEJS
|
|
17
17
|
}
|
|
18
|
-
const
|
|
19
|
-
|
|
18
|
+
const creator2: PeerDescriptor = {
|
|
19
|
+
nodeId: new Uint8Array([3, 2, 1]),
|
|
20
20
|
type: NodeType.NODEJS
|
|
21
21
|
}
|
|
22
|
-
const data1 = Any.pack(
|
|
23
|
-
const data2 = Any.pack(
|
|
22
|
+
const data1 = Any.pack(creator1, PeerDescriptor)
|
|
23
|
+
const data2 = Any.pack(creator2, PeerDescriptor)
|
|
24
24
|
|
|
25
25
|
beforeEach(() => {
|
|
26
26
|
localDataStore = new LocalDataStore()
|
|
@@ -31,59 +31,59 @@ describe('LocalDataStore', () => {
|
|
|
31
31
|
})
|
|
32
32
|
|
|
33
33
|
it('can store', () => {
|
|
34
|
-
const dataKey = peerIdFromPeerDescriptor(
|
|
35
|
-
localDataStore.storeEntry({
|
|
36
|
-
ttl: 10000, stale: false, deleted: false,
|
|
34
|
+
const dataKey = peerIdFromPeerDescriptor(creator1)
|
|
35
|
+
localDataStore.storeEntry({ creator: creator1, key: dataKey.value, data: data1,
|
|
36
|
+
ttl: 10000, stale: false, deleted: false, createdAt: Timestamp.now() })
|
|
37
37
|
const fetchedData = localDataStore.getEntry(dataKey)
|
|
38
38
|
fetchedData.forEach((entry) => {
|
|
39
39
|
const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
|
|
40
|
-
expect(areEqualPeerDescriptors(fetchedDescriptor,
|
|
40
|
+
expect(areEqualPeerDescriptors(fetchedDescriptor, creator1)).toBeTrue()
|
|
41
41
|
})
|
|
42
42
|
})
|
|
43
43
|
|
|
44
44
|
it('multiple storers behind one key', () => {
|
|
45
|
-
const dataKey = peerIdFromPeerDescriptor(
|
|
46
|
-
localDataStore.storeEntry({
|
|
47
|
-
ttl: 10000, stale: false, deleted: false,
|
|
48
|
-
localDataStore.storeEntry({
|
|
49
|
-
data: data1, ttl: 10000, stale: false, deleted: false,
|
|
45
|
+
const dataKey = peerIdFromPeerDescriptor(creator1)
|
|
46
|
+
localDataStore.storeEntry({ creator: creator1, key: dataKey.value, data: data1,
|
|
47
|
+
ttl: 10000, stale: false, deleted: false, createdAt: Timestamp.now() })
|
|
48
|
+
localDataStore.storeEntry({ creator: creator2, key: dataKey.value,
|
|
49
|
+
data: data1, ttl: 10000, stale: false, deleted: false, createdAt: Timestamp.now() })
|
|
50
50
|
const fetchedData = localDataStore.getEntry(dataKey)
|
|
51
51
|
fetchedData.forEach((entry) => {
|
|
52
52
|
const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
|
|
53
|
-
expect(areEqualPeerDescriptors(fetchedDescriptor,
|
|
53
|
+
expect(areEqualPeerDescriptors(fetchedDescriptor, creator1)).toBeTrue()
|
|
54
54
|
})
|
|
55
55
|
})
|
|
56
56
|
|
|
57
57
|
it('can remove data entries', () => {
|
|
58
|
-
const dataKey = peerIdFromPeerDescriptor(
|
|
59
|
-
localDataStore.storeEntry({
|
|
60
|
-
ttl: 10000, stale: false, deleted: false,
|
|
61
|
-
localDataStore.storeEntry({
|
|
62
|
-
ttl: 10000, stale: false, deleted: false,
|
|
63
|
-
localDataStore.deleteEntry(dataKey,
|
|
58
|
+
const dataKey = peerIdFromPeerDescriptor(creator1)
|
|
59
|
+
localDataStore.storeEntry({ creator: creator1, key: dataKey.value, data: data1,
|
|
60
|
+
ttl: 10000, stale: false, deleted: false, createdAt: Timestamp.now() })
|
|
61
|
+
localDataStore.storeEntry({ creator: creator2, key: dataKey.value, data: data2,
|
|
62
|
+
ttl: 10000, stale: false, deleted: false, createdAt: Timestamp.now() })
|
|
63
|
+
localDataStore.deleteEntry(dataKey, creator1)
|
|
64
64
|
const fetchedData = localDataStore.getEntry(dataKey)
|
|
65
65
|
fetchedData.forEach((entry) => {
|
|
66
66
|
const fetchedDescriptor = Any.unpack(entry.data!, PeerDescriptor)
|
|
67
|
-
expect(areEqualPeerDescriptors(fetchedDescriptor,
|
|
67
|
+
expect(areEqualPeerDescriptors(fetchedDescriptor, creator2)).toBeTrue()
|
|
68
68
|
})
|
|
69
69
|
})
|
|
70
70
|
|
|
71
71
|
it('can remove all data entries', () => {
|
|
72
|
-
const dataKey = peerIdFromPeerDescriptor(
|
|
73
|
-
localDataStore.storeEntry({
|
|
74
|
-
ttl: 10000, stale: false, deleted: false,
|
|
75
|
-
localDataStore.storeEntry({
|
|
76
|
-
ttl: 10000, stale: false, deleted: false,
|
|
77
|
-
localDataStore.deleteEntry(dataKey,
|
|
78
|
-
localDataStore.deleteEntry(dataKey,
|
|
72
|
+
const dataKey = peerIdFromPeerDescriptor(creator1)
|
|
73
|
+
localDataStore.storeEntry({ creator: creator1, key: dataKey.value, data: data1,
|
|
74
|
+
ttl: 10000, stale: false, deleted: false, createdAt: Timestamp.now() })
|
|
75
|
+
localDataStore.storeEntry({ creator: creator2, key: dataKey.value, data: data2,
|
|
76
|
+
ttl: 10000, stale: false, deleted: false, createdAt: Timestamp.now() })
|
|
77
|
+
localDataStore.deleteEntry(dataKey, creator1)
|
|
78
|
+
localDataStore.deleteEntry(dataKey, creator2)
|
|
79
79
|
const fetchedData = localDataStore.getEntry(dataKey)
|
|
80
80
|
expect(fetchedData.size).toBe(0)
|
|
81
81
|
})
|
|
82
82
|
|
|
83
83
|
it('data is deleted after TTL', async () => {
|
|
84
|
-
const dataKey = peerIdFromPeerDescriptor(
|
|
85
|
-
localDataStore.storeEntry({
|
|
86
|
-
ttl: 1000, stale: false, deleted: false,
|
|
84
|
+
const dataKey = peerIdFromPeerDescriptor(creator1)
|
|
85
|
+
localDataStore.storeEntry({ creator: creator1, key: dataKey.value, data: data1,
|
|
86
|
+
ttl: 1000, stale: false, deleted: false, createdAt: Timestamp.now() })
|
|
87
87
|
const intitialStore = localDataStore.getEntry(dataKey)
|
|
88
88
|
expect(intitialStore.size).toBe(1)
|
|
89
89
|
await wait(1100)
|
|
@@ -91,15 +91,32 @@ describe('LocalDataStore', () => {
|
|
|
91
91
|
expect(fetchedData.size).toBe(0)
|
|
92
92
|
})
|
|
93
93
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
94
|
+
describe('mark data as deleted', () => {
|
|
95
|
+
|
|
96
|
+
it('happy path', () => {
|
|
97
|
+
const dataKey = peerIdFromPeerDescriptor(creator1)
|
|
98
|
+
localDataStore.storeEntry({ creator: creator1, key: dataKey.value, data: data1,
|
|
99
|
+
ttl: 10000, stale: false, deleted: false, createdAt: Timestamp.now() })
|
|
100
|
+
const notDeletedData = localDataStore.getEntry(dataKey)
|
|
101
|
+
expect(notDeletedData.get(keyFromPeerDescriptor(creator1))!.deleted).toBeFalse()
|
|
102
|
+
const returnValue = localDataStore.markAsDeleted(dataKey.value, peerIdFromPeerDescriptor(creator1))
|
|
103
|
+
expect(returnValue).toBe(true)
|
|
104
|
+
const deletedData = localDataStore.getEntry(dataKey)
|
|
105
|
+
expect(deletedData.get(keyFromPeerDescriptor(creator1))!.deleted).toBeTrue()
|
|
106
|
+
})
|
|
104
107
|
|
|
108
|
+
it('data not stored', () => {
|
|
109
|
+
const dataKey = peerIdFromPeerDescriptor(creator1)
|
|
110
|
+
const returnValue = localDataStore.markAsDeleted(dataKey.value, peerIdFromPeerDescriptor(creator2))
|
|
111
|
+
expect(returnValue).toBe(false)
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
it('data not stored by the given creator', () => {
|
|
115
|
+
const dataKey = peerIdFromPeerDescriptor(creator1)
|
|
116
|
+
localDataStore.storeEntry({ creator: creator1, key: dataKey.value, data: data1,
|
|
117
|
+
ttl: 10000, stale: false, deleted: false, createdAt: Timestamp.now() })
|
|
118
|
+
const returnValue = localDataStore.markAsDeleted(dataKey.value, peerIdFromPeerDescriptor(creator2))
|
|
119
|
+
expect(returnValue).toBe(false)
|
|
120
|
+
})
|
|
121
|
+
})
|
|
105
122
|
})
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { RandomContactList } from '../../src/dht/contact/RandomContactList'
|
|
2
2
|
import { PeerID } from '../../src/helpers/PeerID'
|
|
3
3
|
|
|
4
|
-
const createItem = (
|
|
5
|
-
return { getPeerId: () => PeerID.fromValue(
|
|
4
|
+
const createItem = (nodeId: Uint8Array): { getPeerId: () => PeerID } => {
|
|
5
|
+
return { getPeerId: () => PeerID.fromValue(nodeId) }
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
describe('RandomContactList', () => {
|
package/test/unit/Router.test.ts
CHANGED
|
@@ -2,7 +2,15 @@ import { v4 } from 'uuid'
|
|
|
2
2
|
import { DhtNodeRpcRemote } from '../../src/dht/DhtNodeRpcRemote'
|
|
3
3
|
import { Router } from '../../src/dht/routing/Router'
|
|
4
4
|
import { PeerID, PeerIDKey } from '../../src/helpers/PeerID'
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
Message,
|
|
7
|
+
MessageType,
|
|
8
|
+
NodeType,
|
|
9
|
+
PeerDescriptor,
|
|
10
|
+
RouteMessageAck,
|
|
11
|
+
RouteMessageError,
|
|
12
|
+
RouteMessageWrapper
|
|
13
|
+
} from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
6
14
|
import { createWrappedClosestPeersRequest } from '../utils/utils'
|
|
7
15
|
import { FakeRpcCommunicator } from '../utils/FakeRpcCommunicator'
|
|
8
16
|
|
|
@@ -11,11 +19,11 @@ describe('Router', () => {
|
|
|
11
19
|
|
|
12
20
|
const peerId = PeerID.fromString('router')
|
|
13
21
|
const peerDescriptor1: PeerDescriptor = {
|
|
14
|
-
|
|
22
|
+
nodeId: peerId.value,
|
|
15
23
|
type: NodeType.NODEJS
|
|
16
24
|
}
|
|
17
25
|
const peerDescriptor2: PeerDescriptor = {
|
|
18
|
-
|
|
26
|
+
nodeId: PeerID.fromString('destination').value,
|
|
19
27
|
type: NodeType.NODEJS
|
|
20
28
|
}
|
|
21
29
|
const rpcWrapper = createWrappedClosestPeersRequest(peerDescriptor1)
|
|
@@ -69,7 +77,7 @@ describe('Router', () => {
|
|
|
69
77
|
reachableThrough: [],
|
|
70
78
|
routingPath: []
|
|
71
79
|
}) as RouteMessageAck
|
|
72
|
-
expect(ack.error).toEqual(
|
|
80
|
+
expect(ack.error).toEqual(RouteMessageError.NO_TARGETS)
|
|
73
81
|
})
|
|
74
82
|
|
|
75
83
|
it('doRouteMessage with connections', async () => {
|
|
@@ -82,40 +90,40 @@ describe('Router', () => {
|
|
|
82
90
|
reachableThrough: [],
|
|
83
91
|
routingPath: []
|
|
84
92
|
}) as RouteMessageAck
|
|
85
|
-
expect(ack.error).
|
|
93
|
+
expect(ack.error).toBeUndefined()
|
|
86
94
|
})
|
|
87
95
|
|
|
88
96
|
it('route server is destination without connections', async () => {
|
|
89
97
|
const ack = await rpcCommunicator.callRpcMethod('routeMessage', routedMessage) as RouteMessageAck
|
|
90
|
-
expect(ack.error).
|
|
98
|
+
expect(ack.error).toBeUndefined()
|
|
91
99
|
})
|
|
92
100
|
|
|
93
101
|
it('route server with connections', async () => {
|
|
94
102
|
connections.set(PeerID.fromString('test').toKey(), createMockDhtNodeRpcRemote(peerDescriptor2))
|
|
95
103
|
const ack = await rpcCommunicator.callRpcMethod('routeMessage', routedMessage) as RouteMessageAck
|
|
96
|
-
expect(ack.error).
|
|
104
|
+
expect(ack.error).toBeUndefined()
|
|
97
105
|
})
|
|
98
106
|
|
|
99
107
|
it('route server on duplicate message', async () => {
|
|
100
108
|
router.addToDuplicateDetector(routedMessage.requestId)
|
|
101
109
|
const ack = await rpcCommunicator.callRpcMethod('routeMessage', routedMessage) as RouteMessageAck
|
|
102
|
-
expect(ack.error).toEqual(
|
|
110
|
+
expect(ack.error).toEqual(RouteMessageError.DUPLICATE)
|
|
103
111
|
})
|
|
104
112
|
|
|
105
113
|
it('forward server no connections', async () => {
|
|
106
114
|
const ack = await rpcCommunicator.callRpcMethod('forwardMessage', routedMessage) as RouteMessageAck
|
|
107
|
-
expect(ack.error).toEqual(
|
|
115
|
+
expect(ack.error).toEqual(RouteMessageError.NO_TARGETS)
|
|
108
116
|
})
|
|
109
117
|
|
|
110
118
|
it('forward server with connections', async () => {
|
|
111
119
|
connections.set(PeerID.fromString('test').toKey(), createMockDhtNodeRpcRemote(peerDescriptor2))
|
|
112
120
|
const ack = await rpcCommunicator.callRpcMethod('forwardMessage', routedMessage) as RouteMessageAck
|
|
113
|
-
expect(ack.error).
|
|
121
|
+
expect(ack.error).toBeUndefined()
|
|
114
122
|
})
|
|
115
123
|
|
|
116
124
|
it('forward server on duplicate message', async () => {
|
|
117
125
|
router.addToDuplicateDetector(routedMessage.requestId)
|
|
118
126
|
const ack = await rpcCommunicator.callRpcMethod('forwardMessage', routedMessage) as RouteMessageAck
|
|
119
|
-
expect(ack.error).toEqual(
|
|
127
|
+
expect(ack.error).toEqual(RouteMessageError.DUPLICATE)
|
|
120
128
|
})
|
|
121
129
|
})
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { v4 } from 'uuid'
|
|
2
|
+
import { RoutingSession } from '../../src/dht/routing/RoutingSession'
|
|
3
|
+
import { Message, MessageType, NodeType, PeerDescriptor, RouteMessageWrapper } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
4
|
+
import { createWrappedClosestPeersRequest } from '../utils/utils'
|
|
5
|
+
import { hexToBinary } from '@streamr/utils'
|
|
6
|
+
import { PeerIDKey } from '../../src/helpers/PeerID'
|
|
7
|
+
import { DhtNodeRpcRemote } from '../../src/dht/DhtNodeRpcRemote'
|
|
8
|
+
import { RoutingRpcCommunicator } from '../../src/transport/RoutingRpcCommunicator'
|
|
9
|
+
import { keyFromPeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
|
|
10
|
+
|
|
11
|
+
describe('RoutingSession', () => {
|
|
12
|
+
|
|
13
|
+
let session: RoutingSession
|
|
14
|
+
let connections: Map<PeerIDKey, DhtNodeRpcRemote>
|
|
15
|
+
let rpcCommunicator: RoutingRpcCommunicator
|
|
16
|
+
|
|
17
|
+
const mockPeerDescriptor1: PeerDescriptor = {
|
|
18
|
+
nodeId: hexToBinary('eee1'),
|
|
19
|
+
type: NodeType.NODEJS
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const mockPeerDescriptor2 = {
|
|
23
|
+
nodeId: hexToBinary('eee2'),
|
|
24
|
+
type: NodeType.NODEJS
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const rpcWrapper = createWrappedClosestPeersRequest(mockPeerDescriptor1)
|
|
28
|
+
const message: Message = {
|
|
29
|
+
serviceId: 'unknown',
|
|
30
|
+
messageId: v4(),
|
|
31
|
+
messageType: MessageType.RPC,
|
|
32
|
+
body: {
|
|
33
|
+
oneofKind: 'rpcMessage',
|
|
34
|
+
rpcMessage: rpcWrapper
|
|
35
|
+
},
|
|
36
|
+
sourceDescriptor: mockPeerDescriptor1,
|
|
37
|
+
targetDescriptor: mockPeerDescriptor2
|
|
38
|
+
}
|
|
39
|
+
const routedMessage: RouteMessageWrapper = {
|
|
40
|
+
message,
|
|
41
|
+
requestId: 'REQ',
|
|
42
|
+
routingPath: [],
|
|
43
|
+
reachableThrough: [],
|
|
44
|
+
destinationPeer: mockPeerDescriptor1,
|
|
45
|
+
sourcePeer: mockPeerDescriptor2
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const createMockDhtNodeRpcRemote = (destination: PeerDescriptor): DhtNodeRpcRemote => {
|
|
49
|
+
return new DhtNodeRpcRemote(mockPeerDescriptor1, destination, {} as any, 'router')
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
beforeEach(() => {
|
|
53
|
+
rpcCommunicator = new RoutingRpcCommunicator('mock', async () => {})
|
|
54
|
+
connections = new Map()
|
|
55
|
+
session = new RoutingSession(rpcCommunicator, mockPeerDescriptor1, routedMessage, connections, 2)
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
afterEach(() => {
|
|
59
|
+
rpcCommunicator.stop()
|
|
60
|
+
session.stop()
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it('findMoreContacts', () => {
|
|
64
|
+
connections.set(keyFromPeerDescriptor(mockPeerDescriptor2), createMockDhtNodeRpcRemote(mockPeerDescriptor2))
|
|
65
|
+
const contacts = session.updateAndGetRoutablePeers()
|
|
66
|
+
expect(contacts.length).toBe(1)
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
it('findMoreContacts peer disconnects', () => {
|
|
70
|
+
connections.set(keyFromPeerDescriptor(mockPeerDescriptor2), createMockDhtNodeRpcRemote(mockPeerDescriptor2))
|
|
71
|
+
expect(session.updateAndGetRoutablePeers().length).toBe(1)
|
|
72
|
+
connections.delete(keyFromPeerDescriptor(mockPeerDescriptor2))
|
|
73
|
+
expect(session.updateAndGetRoutablePeers().length).toBe(0)
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
})
|