@streamr/dht 102.0.0-beta.0 → 102.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/dist/generated/packages/dht/protos/DhtRpc.d.ts +16 -8
  2. package/dist/generated/packages/dht/protos/DhtRpc.js +7 -5
  3. package/dist/generated/packages/dht/protos/DhtRpc.js.map +1 -1
  4. package/dist/package.json +15 -16
  5. package/dist/src/connection/ConnectionManager.js +18 -8
  6. package/dist/src/connection/ConnectionManager.js.map +1 -1
  7. package/dist/src/connection/Handshaker.d.ts +1 -1
  8. package/dist/src/connection/Handshaker.js +9 -5
  9. package/dist/src/connection/Handshaker.js.map +1 -1
  10. package/dist/src/connection/ManagedConnection.js +17 -7
  11. package/dist/src/connection/ManagedConnection.js.map +1 -1
  12. package/dist/src/connection/connectivityChecker.js +20 -10
  13. package/dist/src/connection/connectivityChecker.js.map +1 -1
  14. package/dist/src/connection/connectivityRequestHandler.js +3 -3
  15. package/dist/src/connection/connectivityRequestHandler.js.map +1 -1
  16. package/dist/src/connection/simulator/Simulator.js +3 -2
  17. package/dist/src/connection/simulator/Simulator.js.map +1 -1
  18. package/dist/src/connection/simulator/pings.d.ts +1 -1
  19. package/dist/src/connection/simulator/pings.js +3 -3
  20. package/dist/src/connection/simulator/pings.js.map +1 -1
  21. package/dist/src/connection/webrtc/NodeWebrtcConnection.js +0 -2
  22. package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
  23. package/dist/src/connection/webrtc/WebrtcConnector.js +19 -9
  24. package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
  25. package/dist/src/connection/webrtc/iceServerAsString.js +1 -2
  26. package/dist/src/connection/webrtc/iceServerAsString.js.map +1 -1
  27. package/dist/src/connection/websocket/AbstractWebsocketClientConnection.d.ts +0 -2
  28. package/dist/src/connection/websocket/WebsocketClientConnectorRpcLocal.d.ts +0 -1
  29. package/dist/src/connection/websocket/WebsocketServerConnection.d.ts +0 -1
  30. package/dist/src/connection/websocket/WebsocketServerConnector.js +28 -18
  31. package/dist/src/connection/websocket/WebsocketServerConnector.js.map +1 -1
  32. package/dist/src/dht/DhtNode.d.ts +1 -0
  33. package/dist/src/dht/DhtNode.js +3 -2
  34. package/dist/src/dht/DhtNode.js.map +1 -1
  35. package/dist/src/dht/DhtNodeRpcLocal.d.ts +1 -1
  36. package/dist/src/dht/PeerManager.d.ts +2 -1
  37. package/dist/src/dht/PeerManager.js +2 -1
  38. package/dist/src/dht/PeerManager.js.map +1 -1
  39. package/dist/src/dht/contact/SortedContactList.js +1 -1
  40. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  41. package/dist/src/dht/discovery/DiscoverySession.d.ts +0 -1
  42. package/dist/src/dht/discovery/PeerDiscovery.d.ts +0 -1
  43. package/dist/src/dht/discovery/RingDiscoverySession.d.ts +0 -1
  44. package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +2 -2
  45. package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
  46. package/dist/src/dht/routing/RoutingSession.js +2 -2
  47. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  48. package/dist/src/dht/routing/RoutingTablesCache.d.ts +1 -1
  49. package/dist/src/dht/store/LocalDataStore.js +1 -1
  50. package/dist/src/dht/store/LocalDataStore.js.map +1 -1
  51. package/dist/src/dht/store/StoreManager.d.ts +1 -1
  52. package/dist/src/dht/store/StoreRpcLocal.d.ts +1 -1
  53. package/dist/src/helpers/AddressTools.js +2 -3
  54. package/dist/src/helpers/AddressTools.js.map +1 -1
  55. package/dist/src/helpers/debugHelpers.js +2 -2
  56. package/dist/src/helpers/debugHelpers.js.map +1 -1
  57. package/dist/src/helpers/protoClasses.d.ts +1 -1
  58. package/dist/src/helpers/protoClasses.js.map +1 -1
  59. package/dist/src/helpers/protoToString.js +1 -2
  60. package/dist/src/helpers/protoToString.js.map +1 -1
  61. package/dist/src/helpers/version.d.ts +1 -1
  62. package/dist/src/helpers/version.js +4 -4
  63. package/dist/src/helpers/version.js.map +1 -1
  64. package/eslint.config.mjs +12 -0
  65. package/jest.config.ts +12 -0
  66. package/package.json +15 -16
  67. package/protos/DhtRpc.proto +6 -4
  68. package/.eslintignore +0 -5
  69. package/.eslintrc +0 -3
  70. package/generated/google/protobuf/any.ts +0 -326
  71. package/generated/google/protobuf/empty.ts +0 -81
  72. package/generated/google/protobuf/timestamp.ts +0 -287
  73. package/generated/packages/dht/protos/DhtRpc.client.ts +0 -419
  74. package/generated/packages/dht/protos/DhtRpc.server.ts +0 -165
  75. package/generated/packages/dht/protos/DhtRpc.ts +0 -1266
  76. package/generated/packages/proto-rpc/protos/ProtoRpc.ts +0 -108
  77. package/jest.config.js +0 -5
  78. package/src/connection/Connection.ts +0 -28
  79. package/src/connection/ConnectionLockRpcLocal.ts +0 -78
  80. package/src/connection/ConnectionLockRpcRemote.ts +0 -64
  81. package/src/connection/ConnectionLockStates.ts +0 -131
  82. package/src/connection/ConnectionManager.ts +0 -661
  83. package/src/connection/ConnectionsView.ts +0 -8
  84. package/src/connection/ConnectorFacade.ts +0 -217
  85. package/src/connection/Handshaker.ts +0 -205
  86. package/src/connection/IConnection.ts +0 -40
  87. package/src/connection/ManagedConnection.ts +0 -113
  88. package/src/connection/OutputBuffer.ts +0 -28
  89. package/src/connection/PendingConnection.ts +0 -68
  90. package/src/connection/connectivityChecker.ts +0 -108
  91. package/src/connection/connectivityRequestHandler.ts +0 -116
  92. package/src/connection/simulator/Simulator.ts +0 -368
  93. package/src/connection/simulator/SimulatorConnection.ts +0 -137
  94. package/src/connection/simulator/SimulatorConnector.ts +0 -98
  95. package/src/connection/simulator/SimulatorTransport.ts +0 -15
  96. package/src/connection/simulator/pings.ts +0 -42
  97. package/src/connection/webrtc/BrowserWebrtcConnection.ts +0 -242
  98. package/src/connection/webrtc/IWebrtcConnection.ts +0 -24
  99. package/src/connection/webrtc/NodeWebrtcConnection.ts +0 -247
  100. package/src/connection/webrtc/WebrtcConnector.ts +0 -234
  101. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +0 -108
  102. package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +0 -60
  103. package/src/connection/webrtc/iceServerAsString.ts +0 -15
  104. package/src/connection/websocket/AbstractWebsocketClientConnection.ts +0 -122
  105. package/src/connection/websocket/AutoCertifierClientFacade.ts +0 -89
  106. package/src/connection/websocket/BrowserWebsocketClientConnection.ts +0 -44
  107. package/src/connection/websocket/NodeWebsocketClientConnection.ts +0 -39
  108. package/src/connection/websocket/WebsocketClientConnector.ts +0 -119
  109. package/src/connection/websocket/WebsocketClientConnectorRpcLocal.ts +0 -38
  110. package/src/connection/websocket/WebsocketClientConnectorRpcRemote.ts +0 -19
  111. package/src/connection/websocket/WebsocketServer.ts +0 -164
  112. package/src/connection/websocket/WebsocketServerConnection.ts +0 -109
  113. package/src/connection/websocket/WebsocketServerConnector.ts +0 -286
  114. package/src/dht/DhtNode.ts +0 -678
  115. package/src/dht/DhtNodeRpcLocal.ts +0 -84
  116. package/src/dht/DhtNodeRpcRemote.ts +0 -107
  117. package/src/dht/ExternalApiRpcLocal.ts +0 -58
  118. package/src/dht/ExternalApiRpcRemote.ts +0 -41
  119. package/src/dht/PeerManager.ts +0 -303
  120. package/src/dht/contact/Contact.ts +0 -19
  121. package/src/dht/contact/ContactList.ts +0 -43
  122. package/src/dht/contact/RandomContactList.ts +0 -56
  123. package/src/dht/contact/RingContactList.ts +0 -143
  124. package/src/dht/contact/RpcRemote.ts +0 -72
  125. package/src/dht/contact/SortedContactList.ts +0 -173
  126. package/src/dht/contact/getClosestNodes.ts +0 -24
  127. package/src/dht/contact/ringIdentifiers.ts +0 -62
  128. package/src/dht/discovery/DiscoverySession.ts +0 -129
  129. package/src/dht/discovery/PeerDiscovery.ts +0 -244
  130. package/src/dht/discovery/RingDiscoverySession.ts +0 -148
  131. package/src/dht/recursive-operation/RecursiveOperationManager.ts +0 -251
  132. package/src/dht/recursive-operation/RecursiveOperationRpcLocal.ts +0 -34
  133. package/src/dht/recursive-operation/RecursiveOperationRpcRemote.ts +0 -43
  134. package/src/dht/recursive-operation/RecursiveOperationSession.ts +0 -231
  135. package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +0 -35
  136. package/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.ts +0 -30
  137. package/src/dht/routing/DuplicateDetector.ts +0 -34
  138. package/src/dht/routing/Router.ts +0 -246
  139. package/src/dht/routing/RouterRpcLocal.ts +0 -78
  140. package/src/dht/routing/RouterRpcRemote.ts +0 -80
  141. package/src/dht/routing/RoutingSession.ts +0 -243
  142. package/src/dht/routing/RoutingTablesCache.ts +0 -60
  143. package/src/dht/routing/getPreviousPeer.ts +0 -6
  144. package/src/dht/store/LocalDataStore.ts +0 -84
  145. package/src/dht/store/StoreManager.ts +0 -170
  146. package/src/dht/store/StoreRpcLocal.ts +0 -89
  147. package/src/dht/store/StoreRpcRemote.ts +0 -32
  148. package/src/exports.ts +0 -33
  149. package/src/helpers/AddressTools.ts +0 -28
  150. package/src/helpers/Connectivity.ts +0 -19
  151. package/src/helpers/browser/isBrowserEnvironment.ts +0 -1
  152. package/src/helpers/browser/isBrowserEnvironment_override.ts +0 -3
  153. package/src/helpers/createPeerDescriptor.ts +0 -57
  154. package/src/helpers/createPeerDescriptorSignaturePayload.ts +0 -28
  155. package/src/helpers/debugHelpers.ts +0 -9
  156. package/src/helpers/errors.ts +0 -49
  157. package/src/helpers/offering.ts +0 -15
  158. package/src/helpers/protoClasses.ts +0 -57
  159. package/src/helpers/protoToString.ts +0 -21
  160. package/src/helpers/version.ts +0 -32
  161. package/src/identifiers.ts +0 -29
  162. package/src/rpc-protocol/DhtCallContext.ts +0 -14
  163. package/src/rpc-protocol/DhtRpcOptions.ts +0 -10
  164. package/src/transport/ITransport.ts +0 -37
  165. package/src/transport/ListeningRpcCommunicator.ts +0 -32
  166. package/src/transport/RoutingRpcCommunicator.ts +0 -66
  167. package/src/types/ServiceID.ts +0 -1
  168. package/src/types/textencoding.d.ts +0 -6
  169. package/test/benchmark/Find.test.ts +0 -72
  170. package/test/benchmark/KademliaCorrectness.test.ts +0 -114
  171. package/test/benchmark/RingCorrectness.test.ts +0 -157
  172. package/test/benchmark/SortedContactListBenchmark.test.ts +0 -108
  173. package/test/benchmark/WebsocketServerMemoryLeak.test.ts +0 -41
  174. package/test/benchmark/hybrid-network-simulation/RingContactList.test.ts +0 -71
  175. package/test/end-to-end/GeoIpLayer0.test.ts +0 -55
  176. package/test/end-to-end/Layer0-Layer1.test.ts +0 -93
  177. package/test/end-to-end/Layer0.test.ts +0 -76
  178. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +0 -110
  179. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +0 -137
  180. package/test/end-to-end/Layer0Webrtc.test.ts +0 -85
  181. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +0 -82
  182. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +0 -76
  183. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +0 -52
  184. package/test/end-to-end/WebsocketConnectionRequest.test.ts +0 -69
  185. package/test/end-to-end/memory-leak.test.ts +0 -80
  186. package/test/integration/ConnectionLocking.test.ts +0 -182
  187. package/test/integration/ConnectionManager.test.ts +0 -528
  188. package/test/integration/ConnectivityChecking.test.ts +0 -53
  189. package/test/integration/DhtJoinPeerDiscovery.test.ts +0 -49
  190. package/test/integration/DhtNode.test.ts +0 -66
  191. package/test/integration/DhtNodeExternalAPI.test.ts +0 -48
  192. package/test/integration/DhtNodeRpcRemote.test.ts +0 -66
  193. package/test/integration/DhtRpc.test.ts +0 -121
  194. package/test/integration/Find.test.ts +0 -45
  195. package/test/integration/GeoIpConnectivityChecking.test.ts +0 -72
  196. package/test/integration/Layer1-scale.test.ts +0 -189
  197. package/test/integration/Mock-Layer1-Layer0.test.ts +0 -85
  198. package/test/integration/MultipleEntryPointJoining.test.ts +0 -105
  199. package/test/integration/ReplicateData.test.ts +0 -104
  200. package/test/integration/RouteMessage.test.ts +0 -230
  201. package/test/integration/RouterRpcRemote.test.ts +0 -77
  202. package/test/integration/SimultaneousConnections.test.ts +0 -316
  203. package/test/integration/Store.test.ts +0 -85
  204. package/test/integration/StoreAndDelete.test.ts +0 -77
  205. package/test/integration/StoreOnDhtWithThreeNodes.test.ts +0 -59
  206. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +0 -51
  207. package/test/integration/StoreRpcRemote.test.ts +0 -54
  208. package/test/integration/WebrtcConnectionManagement.test.ts +0 -219
  209. package/test/integration/WebrtcConnectorRpc.test.ts +0 -125
  210. package/test/integration/Websocket.test.ts +0 -65
  211. package/test/integration/WebsocketClientConnectorRpc.test.ts +0 -69
  212. package/test/integration/WebsocketConnectionManagement.test.ts +0 -191
  213. package/test/integration/rpc-connections-over-webrtc.test.ts +0 -158
  214. package/test/kademlia-simulation/data/nodeids.json +0 -13002
  215. package/test/kademlia-simulation/data/orderedneighbors.json +0 -1001
  216. package/test/types/global.d.ts +0 -1
  217. package/test/unit/AddressTools.test.ts +0 -44
  218. package/test/unit/AutoCertifierClientFacade.test.ts +0 -58
  219. package/test/unit/ConnectionManager.test.ts +0 -65
  220. package/test/unit/ConnectivityHelpers.test.ts +0 -61
  221. package/test/unit/DiscoverySession.test.ts +0 -87
  222. package/test/unit/DuplicateDetector.test.ts +0 -31
  223. package/test/unit/Handshaker.test.ts +0 -169
  224. package/test/unit/ListeningRpcCommunicator.test.ts +0 -52
  225. package/test/unit/LocalDataStore.test.ts +0 -108
  226. package/test/unit/ManagedConnection.test.ts +0 -58
  227. package/test/unit/PeerManager.test.ts +0 -93
  228. package/test/unit/PendingConnection.test.ts +0 -57
  229. package/test/unit/ProtobufMessage.test.ts +0 -21
  230. package/test/unit/RandomContactList.test.ts +0 -58
  231. package/test/unit/RecursiveOperationManager.test.ts +0 -161
  232. package/test/unit/RecursiveOperationSession.test.ts +0 -68
  233. package/test/unit/Router.test.ts +0 -137
  234. package/test/unit/RoutingSession.test.ts +0 -79
  235. package/test/unit/SortedContactList.test.ts +0 -115
  236. package/test/unit/StoreManager.test.ts +0 -146
  237. package/test/unit/StoreRpcLocal.test.ts +0 -167
  238. package/test/unit/WebrtcConnection.test.ts +0 -29
  239. package/test/unit/WebrtcConnector.test.ts +0 -56
  240. package/test/unit/WebsocketClientConnector.test.ts +0 -101
  241. package/test/unit/WebsocketServer.test.ts +0 -66
  242. package/test/unit/WebsocketServerConnector.test.ts +0 -102
  243. package/test/unit/connectivityRequestHandler.test.ts +0 -104
  244. package/test/unit/createPeerDescriptor.test.ts +0 -69
  245. package/test/unit/customMatchers.test.ts +0 -16
  246. package/test/unit/getClosestNodes.test.ts +0 -30
  247. package/test/unit/version.test.ts +0 -18
  248. package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +0 -18
  249. package/test/utils/FakeConnectorFacade.ts +0 -41
  250. package/test/utils/FakeRpcCommunicator.ts +0 -23
  251. package/test/utils/FakeTransport.ts +0 -79
  252. package/test/utils/customMatchers.ts +0 -71
  253. package/test/utils/mock/MockConnection.ts +0 -26
  254. package/test/utils/mock/MockConnectionsView.ts +0 -18
  255. package/test/utils/mock/MockRouter.ts +0 -62
  256. package/test/utils/mock/MockRpcCommunicator.ts +0 -7
  257. package/test/utils/mock/MockTransport.ts +0 -26
  258. package/test/utils/mock/mockDataEntry.ts +0 -38
  259. package/test/utils/topology.ts +0 -80
  260. package/test/utils/utils.ts +0 -268
  261. package/tsconfig.browser.json +0 -17
  262. package/tsconfig.jest.json +0 -25
  263. package/tsconfig.json +0 -3
  264. package/tsconfig.node.json +0 -24
@@ -1,105 +0,0 @@
1
- import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
2
- import { DhtNode } from '../../src/dht/DhtNode'
3
- import { PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
4
- import { createMockConnectionDhtNode } from '../utils/utils'
5
-
6
- describe('multiple entry point joining', () => {
7
-
8
- describe('all nodes are entry points', () => {
9
-
10
- let simulator: Simulator
11
- let node1: DhtNode
12
- let node2: DhtNode
13
- let node3: DhtNode
14
- let entryPoints: PeerDescriptor[]
15
-
16
- beforeEach(async () => {
17
- simulator = new Simulator(LatencyType.REAL)
18
-
19
- node1 = await createMockConnectionDhtNode(simulator)
20
- node2 = await createMockConnectionDhtNode(simulator)
21
- node3 = await createMockConnectionDhtNode(simulator)
22
-
23
- entryPoints = [
24
- node1.getLocalPeerDescriptor(),
25
- node2.getLocalPeerDescriptor(),
26
- node3.getLocalPeerDescriptor()
27
- ]
28
- })
29
-
30
- afterEach(async () => {
31
- await Promise.all([
32
- node1.stop(),
33
- node2.stop(),
34
- node3.stop()
35
- ])
36
- simulator.stop()
37
- })
38
-
39
- it('can join simultaneously', async () => {
40
- await Promise.all([
41
- node1.joinDht(entryPoints),
42
- node2.joinDht(entryPoints),
43
- node3.joinDht(entryPoints)
44
- ])
45
- expect(node1.getNeighborCount()).toEqual(2)
46
- expect(node2.getNeighborCount()).toEqual(2)
47
- expect(node3.getNeighborCount()).toEqual(2)
48
- })
49
-
50
- it('can join even if a node is offline', async () => {
51
- await node3.stop()
52
- await Promise.all([
53
- node1.joinDht(entryPoints),
54
- node2.joinDht(entryPoints)
55
- ])
56
- expect(node1.getNeighborCount()).toEqual(1)
57
- expect(node2.getNeighborCount()).toEqual(1)
58
- }, 10000)
59
- })
60
-
61
- describe('non entry point nodes can join via multiple entry points', () => {
62
- let simulator: Simulator
63
- let entryPoint1: DhtNode
64
- let entryPoint2: DhtNode
65
- let node1: DhtNode
66
- let node2: DhtNode
67
- let entryPoints: PeerDescriptor[]
68
-
69
- beforeEach(async () => {
70
- simulator = new Simulator(LatencyType.REAL)
71
-
72
- entryPoint1 = await createMockConnectionDhtNode(simulator)
73
- entryPoint2 = await createMockConnectionDhtNode(simulator)
74
-
75
- node1 = await createMockConnectionDhtNode(simulator)
76
- node2 = await createMockConnectionDhtNode(simulator)
77
-
78
- entryPoints = [
79
- entryPoint1.getLocalPeerDescriptor(),
80
- entryPoint2.getLocalPeerDescriptor(),
81
- ]
82
-
83
- await entryPoint1.joinDht(entryPoints)
84
- await entryPoint2.joinDht(entryPoints)
85
- })
86
-
87
- afterEach(async () => {
88
- await Promise.all([
89
- entryPoint1.stop(),
90
- entryPoint2.stop(),
91
- node1.stop(),
92
- node2.stop()
93
- ])
94
- simulator.stop()
95
- })
96
-
97
- it('non-entry point nodes can join', async () => {
98
- await node1.joinDht(entryPoints)
99
- expect(node1.getNeighborCount()).toEqual(2)
100
- await node2.joinDht(entryPoints)
101
- expect(node2.getNeighborCount()).toEqual(3)
102
- })
103
-
104
- })
105
- })
@@ -1,104 +0,0 @@
1
- import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
2
- import { DhtNode } from '../../src/dht/DhtNode'
3
- import { createMockConnectionDhtNode, waitForStableTopology } from '../utils/utils'
4
- import { SortedContactList } from '../../src/dht/contact/SortedContactList'
5
- import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
6
- import { DhtAddress, randomDhtAddress, toDhtAddress, toNodeId } from '../../src/identifiers'
7
- import { sample } from 'lodash'
8
- import { DataEntry, PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
9
-
10
- const DATA = createMockDataEntry()
11
- const NUM_NODES = 100
12
- const MAX_CONNECTIONS = 80
13
- const K = 8
14
- const ENTRY_POINT_INDEX = 0
15
-
16
- const getDataEntries = (node: DhtNode): DataEntry[] => {
17
- // @ts-expect-error private field
18
- const store = node.localDataStore
19
- return Array.from(store.values(toDhtAddress(DATA.key)))
20
- }
21
-
22
- describe('Replicate data from node to node in DHT', () => {
23
-
24
- let nodes: DhtNode[]
25
- let entryPointDescriptor: PeerDescriptor
26
- const simulator = new Simulator(LatencyType.FIXED, 20)
27
-
28
- beforeEach(async () => {
29
- const entryPoint = await createMockConnectionDhtNode(simulator, randomDhtAddress(), K, MAX_CONNECTIONS)
30
- entryPointDescriptor = entryPoint.getLocalPeerDescriptor()
31
- await entryPoint.joinDht([entryPointDescriptor])
32
- nodes = []
33
- nodes.push(entryPoint)
34
- for (let i = 1; i < NUM_NODES; i++) {
35
- const node = await createMockConnectionDhtNode(
36
- simulator,
37
- randomDhtAddress(),
38
- K,
39
- MAX_CONNECTIONS
40
- )
41
- nodes.push(node)
42
- }
43
- }, 60000)
44
-
45
- afterEach(async () => {
46
- await Promise.all(nodes.map(async (node) => await node.stop()))
47
- }, 60000)
48
-
49
- afterAll(async () => {
50
- simulator.stop()
51
- })
52
-
53
- it('Data replicates to the closest node no matter where it is stored', async () => {
54
- // calculate offline which node is closest to the data
55
- const sortedList = new SortedContactList<DhtNode>({
56
- referenceId: toDhtAddress(DATA.key),
57
- maxSize: 10000,
58
- allowToContainReferenceId: true
59
- })
60
- nodes.forEach((node) => sortedList.addContact(node))
61
-
62
- const closest = sortedList.getClosestContacts()
63
- const successfulStorers = await nodes[0].storeDataToDht(toDhtAddress(DATA.key), DATA.data!)
64
- expect(successfulStorers.length).toBe(1)
65
-
66
- await Promise.all(
67
- nodes.map(async (node, i) => {
68
- if (i !== ENTRY_POINT_INDEX) {
69
- await node.joinDht([entryPointDescriptor])
70
- }
71
- })
72
- )
73
- await waitForStableTopology(nodes)
74
-
75
- const data = getDataEntries(closest[0])
76
- expect(data).toHaveLength(1)
77
- expectEqualData(data[0], DATA)
78
- }, 180000)
79
-
80
- it('Data replicates to the other nodes when storers are stopped', async () => {
81
- await Promise.all(
82
- nodes.map(async (node, i) => {
83
- if (i !== ENTRY_POINT_INDEX) {
84
- await node.joinDht([entryPointDescriptor])
85
- }
86
- })
87
- )
88
- await waitForStableTopology(nodes)
89
-
90
- const randomIndex = Math.floor(Math.random() * nodes.length)
91
- const storerDescriptors = await nodes[randomIndex].storeDataToDht(toDhtAddress(DATA.key), DATA.data!)
92
- const stoppedNodeIds: DhtAddress[] = []
93
- await Promise.all(storerDescriptors.map(async (storerDescriptor) => {
94
- const storer = nodes.find((n) => n.getNodeId() === toNodeId(storerDescriptor))!
95
- await storer.stop()
96
- stoppedNodeIds.push(storer.getNodeId())
97
- }))
98
-
99
- const randomNonStoppedNode = sample(nodes.filter((n) => !stoppedNodeIds.includes(n.getNodeId())))!
100
- const data = await randomNonStoppedNode.fetchDataFromDht(toDhtAddress(DATA.key))
101
- expect(data).toHaveLength(1)
102
- expectEqualData(data[0], DATA)
103
- }, 180000)
104
- })
@@ -1,230 +0,0 @@
1
- import { DhtNode, Events as DhtNodeEvents } from '../../src/dht/DhtNode'
2
- import { Message, NodeType, PeerDescriptor, RouteMessageWrapper } from '../../generated/packages/dht/protos/DhtRpc'
3
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
4
- import { Logger, runAndWaitForEvents3, waitForCondition } from '@streamr/utils'
5
- import { createMockConnectionDhtNode, createWrappedClosestPeersRequest } from '../utils/utils'
6
- import { Simulator } from '../../src/connection/simulator/Simulator'
7
- import { v4 } from 'uuid'
8
- import { Any } from '../../generated/google/protobuf/any'
9
- import { RoutingMode } from '../../src/dht/routing/RoutingSession'
10
- import { DhtAddress, randomDhtAddress, toDhtAddressRaw } from '../../src/identifiers'
11
-
12
- const logger = new Logger(module)
13
-
14
- const NUM_NODES = 30
15
-
16
- describe('Route Message With Mock Connections', () => {
17
-
18
- let entryPoint: DhtNode
19
- let sourceNode: DhtNode
20
- let destinationNode: DhtNode
21
- let routerNodes: DhtNode[]
22
- let simulator: Simulator
23
- let entryPointDescriptor: PeerDescriptor
24
-
25
- beforeEach(async () => {
26
- routerNodes = []
27
- simulator = new Simulator()
28
- entryPoint = await createMockConnectionDhtNode(simulator, randomDhtAddress())
29
-
30
- entryPointDescriptor = {
31
- nodeId: toDhtAddressRaw(entryPoint.getNodeId()),
32
- type: NodeType.NODEJS
33
- }
34
-
35
- sourceNode = await createMockConnectionDhtNode(simulator, randomDhtAddress())
36
- destinationNode = await createMockConnectionDhtNode(simulator, randomDhtAddress())
37
-
38
- for (let i = 1; i < NUM_NODES; i++) {
39
- const node = await createMockConnectionDhtNode(simulator, randomDhtAddress())
40
- routerNodes.push(node)
41
- }
42
-
43
- await destinationNode.joinDht([entryPointDescriptor])
44
- await sourceNode.joinDht([entryPointDescriptor])
45
- await Promise.all(routerNodes.map((node) => node.joinDht([entryPointDescriptor])))
46
- await entryPoint.joinDht([entryPointDescriptor])
47
- }, 15000)
48
-
49
- afterEach(async () => {
50
- await Promise.allSettled(routerNodes.map((node) => node.stop()))
51
- await Promise.allSettled([
52
- entryPoint.stop(),
53
- destinationNode.stop(),
54
- sourceNode.stop()
55
- ])
56
-
57
- logger.info('calling simulator stop')
58
- simulator.stop()
59
- logger.info('simulator stop called')
60
- }, 10000)
61
-
62
- it('Happy path', async () => {
63
- const rpcWrapper = createWrappedClosestPeersRequest(sourceNode.getLocalPeerDescriptor())
64
- const message: Message = {
65
- serviceId: 'unknown',
66
- messageId: v4(),
67
- body: {
68
- oneofKind: 'rpcMessage',
69
- rpcMessage: rpcWrapper
70
- },
71
- sourceDescriptor: sourceNode.getLocalPeerDescriptor(),
72
- targetDescriptor: destinationNode.getLocalPeerDescriptor()
73
- }
74
-
75
- await runAndWaitForEvents3<DhtNodeEvents>([() => {
76
- // @ts-expect-error private
77
- sourceNode.router!.doRouteMessage({
78
- message,
79
- target: destinationNode.getLocalPeerDescriptor().nodeId,
80
- requestId: v4(),
81
- sourcePeer: sourceNode.getLocalPeerDescriptor(),
82
- reachableThrough: [],
83
- routingPath: [],
84
- parallelRootNodeIds: []
85
- })
86
- }], [[destinationNode, 'message']], 20000)
87
- }, 30000)
88
-
89
- it('Receives multiple messages', async () => {
90
- const messageCount = 20
91
- let receivedMessages = 0
92
- destinationNode.on('message', () => {
93
- receivedMessages += 1
94
- })
95
- const rpcWrapper = createWrappedClosestPeersRequest(sourceNode.getLocalPeerDescriptor())
96
-
97
- for (let i = 0; i < messageCount; i++) {
98
- const message: Message = {
99
- serviceId: 'unknown',
100
- messageId: v4(),
101
- body: {
102
- oneofKind: 'rpcMessage',
103
- rpcMessage: rpcWrapper
104
- },
105
- sourceDescriptor: sourceNode.getLocalPeerDescriptor(),
106
- targetDescriptor: destinationNode.getLocalPeerDescriptor()
107
- }
108
- // @ts-expect-error private
109
- sourceNode.router!.doRouteMessage({
110
- message,
111
- target: destinationNode.getLocalPeerDescriptor().nodeId,
112
- requestId: v4(),
113
- sourcePeer: sourceNode.getLocalPeerDescriptor(),
114
- reachableThrough: [],
115
- routingPath: [],
116
- parallelRootNodeIds: []
117
- })
118
- }
119
- await waitForCondition(() => receivedMessages === messageCount)
120
- })
121
-
122
- it('From all to all', async () => {
123
- const receivedMessageCounts: Record<DhtAddress, number> = {}
124
- routerNodes.forEach((node) => {
125
- const key = node.getNodeId()
126
- receivedMessageCounts[key] = 0
127
- node.on('message', () => {
128
- receivedMessageCounts[key] = receivedMessageCounts[key] + 1
129
- })
130
- })
131
- await Promise.all(
132
- routerNodes.map(async (node) =>
133
- Promise.all(routerNodes.map(async (receiver) => {
134
- if (node.getNodeId() !== receiver.getNodeId()) {
135
- const rpcWrapper = createWrappedClosestPeersRequest(sourceNode.getLocalPeerDescriptor())
136
- const message: Message = {
137
- serviceId: 'nonexisting_service',
138
- messageId: v4(),
139
- body: {
140
- oneofKind: 'rpcMessage',
141
- rpcMessage: rpcWrapper
142
- },
143
- sourceDescriptor: node.getLocalPeerDescriptor(),
144
- targetDescriptor: destinationNode.getLocalPeerDescriptor()
145
- }
146
- // @ts-expect-error private
147
- node.router!.doRouteMessage({
148
- message,
149
- target: receiver.getLocalPeerDescriptor().nodeId,
150
- sourcePeer: node.getLocalPeerDescriptor(),
151
- requestId: v4(),
152
- reachableThrough: [],
153
- routingPath: [],
154
- parallelRootNodeIds: []
155
- })
156
- }
157
- }))
158
- )
159
- )
160
- await waitForCondition(() => receivedMessageCounts[routerNodes[0].getNodeId()] >= routerNodes.length - 1, 30000)
161
- await Promise.all(
162
- Object.keys(receivedMessageCounts).map(async (key) =>
163
- waitForCondition(() => receivedMessageCounts[key as DhtAddress] >= routerNodes.length - 1, 30000)
164
- )
165
- )
166
-
167
- }, 90000)
168
-
169
- it('Destination receives forwarded message', async () => {
170
- const closestPeersRequest = createWrappedClosestPeersRequest(sourceNode.getLocalPeerDescriptor())
171
- const closestPeersRequestMessage: Message = {
172
- serviceId: 'unknown',
173
- messageId: v4(),
174
- body: {
175
- oneofKind: 'rpcMessage',
176
- rpcMessage: closestPeersRequest
177
- },
178
- sourceDescriptor: sourceNode.getLocalPeerDescriptor(),
179
- targetDescriptor: destinationNode.getLocalPeerDescriptor()
180
- }
181
-
182
- const routeMessageWrapper: RouteMessageWrapper = {
183
- message: closestPeersRequestMessage,
184
- target: destinationNode.getLocalPeerDescriptor().nodeId,
185
- requestId: v4(),
186
- sourcePeer: sourceNode.getLocalPeerDescriptor(),
187
- reachableThrough: [entryPointDescriptor],
188
- routingPath: [],
189
- parallelRootNodeIds: []
190
- }
191
-
192
- const rpcMessage: RpcMessage = {
193
- body: Any.pack(routeMessageWrapper, RouteMessageWrapper),
194
- header: {
195
- method: 'routeMessage',
196
- request: 'request'
197
- },
198
- requestId: v4()
199
- }
200
-
201
- const requestMessage: Message = {
202
- serviceId: 'layer0',
203
- messageId: v4(),
204
- body: {
205
- oneofKind: 'rpcMessage',
206
- rpcMessage
207
- },
208
- sourceDescriptor: sourceNode.getLocalPeerDescriptor(),
209
- targetDescriptor: entryPoint.getLocalPeerDescriptor()
210
- }
211
-
212
- const forwardedMessage: RouteMessageWrapper = {
213
- message: requestMessage,
214
- requestId: v4(),
215
- sourcePeer: sourceNode.getLocalPeerDescriptor(),
216
- target: entryPoint.getLocalPeerDescriptor().nodeId,
217
- reachableThrough: [],
218
- routingPath: [],
219
- parallelRootNodeIds: []
220
- }
221
-
222
- await runAndWaitForEvents3<DhtNodeEvents>([() => {
223
- // @ts-expect-error private
224
- sourceNode.router!.doRouteMessage(forwardedMessage, RoutingMode.FORWARD)
225
- }], [[destinationNode, 'message']])
226
-
227
- })
228
-
229
- })
230
-
@@ -1,77 +0,0 @@
1
- import { RpcCommunicator } from '@streamr/proto-rpc'
2
- import { RouterRpcRemote } from '../../src/dht/routing/RouterRpcRemote'
3
- import { Message, RouteMessageAck, RouteMessageWrapper } from '../../generated/packages/dht/protos/DhtRpc'
4
- import { RouterRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client'
5
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
6
- import { createMockPeerDescriptor, createWrappedClosestPeersRequest, mockRouterRpc } from '../utils/utils'
7
- import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
8
-
9
- const SERVICE_ID = 'test'
10
-
11
- describe('RemoteRouter', () => {
12
-
13
- let remoteRouter: RouterRpcRemote
14
- let clientRpcCommunicator: RpcCommunicator<DhtCallContext>
15
- let serverRpcCommunicator: RpcCommunicator<DhtCallContext>
16
- const clientPeerDescriptor = createMockPeerDescriptor()
17
- const serverPeerDescriptor = createMockPeerDescriptor()
18
-
19
- beforeEach(() => {
20
- clientRpcCommunicator = new RpcCommunicator()
21
- serverRpcCommunicator = new RpcCommunicator()
22
- serverRpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'routeMessage', mockRouterRpc.routeMessage)
23
- clientRpcCommunicator.setOutgoingMessageListener(async (message: RpcMessage) => {
24
- serverRpcCommunicator.handleIncomingMessage(message, new DhtCallContext())
25
- })
26
- serverRpcCommunicator.setOutgoingMessageListener(async (message: RpcMessage) => {
27
- clientRpcCommunicator.handleIncomingMessage(message, new DhtCallContext())
28
- })
29
- remoteRouter = new RouterRpcRemote(clientPeerDescriptor, serverPeerDescriptor, clientRpcCommunicator, RouterRpcClient)
30
- })
31
-
32
- it('routeMessage happy path', async () => {
33
- const rpcWrapper = createWrappedClosestPeersRequest(clientPeerDescriptor)
34
- const routed: Message = {
35
- serviceId: SERVICE_ID,
36
- messageId: 'routed',
37
- body: {
38
- oneofKind: 'rpcMessage',
39
- rpcMessage: rpcWrapper
40
- }
41
- }
42
- const routable = await remoteRouter.routeMessage({
43
- requestId: 'routed',
44
- message: routed,
45
- sourcePeer: clientPeerDescriptor,
46
- target: serverPeerDescriptor.nodeId,
47
- reachableThrough: [],
48
- routingPath: [],
49
- parallelRootNodeIds: []
50
- })
51
- expect(routable).toEqual(true)
52
- })
53
-
54
- it('routeMessage error path', async () => {
55
- serverRpcCommunicator.registerRpcMethod(RouteMessageWrapper, RouteMessageAck, 'routeMessage', mockRouterRpc.throwRouteMessageError)
56
- const rpcWrapper = createWrappedClosestPeersRequest(clientPeerDescriptor)
57
- const routed: Message = {
58
- serviceId: SERVICE_ID,
59
- messageId: 'routed',
60
- body: {
61
- oneofKind: 'rpcMessage',
62
- rpcMessage: rpcWrapper
63
- }
64
- }
65
- const routable = await remoteRouter.routeMessage({
66
- requestId: 'routed',
67
- message: routed,
68
- sourcePeer: clientPeerDescriptor,
69
- target: serverPeerDescriptor.nodeId,
70
- reachableThrough: [],
71
- routingPath: [],
72
- parallelRootNodeIds: []
73
- })
74
- expect(routable).toEqual(false)
75
- })
76
-
77
- })