@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.
Files changed (307) hide show
  1. package/dist/src/connection/ConnectionLockHandler.d.ts +11 -11
  2. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  3. package/dist/src/connection/ConnectionLockRpcLocal.d.ts +3 -3
  4. package/dist/src/connection/ConnectionLockRpcLocal.js +4 -4
  5. package/dist/src/connection/ConnectionLockRpcLocal.js.map +1 -1
  6. package/dist/src/connection/ConnectionLockRpcRemote.d.ts +3 -5
  7. package/dist/src/connection/ConnectionLockRpcRemote.js +4 -7
  8. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
  9. package/dist/src/connection/ConnectionManager.d.ts +4 -6
  10. package/dist/src/connection/ConnectionManager.js +48 -46
  11. package/dist/src/connection/ConnectionManager.js.map +1 -1
  12. package/dist/src/connection/ConnectorFacade.d.ts +2 -2
  13. package/dist/src/connection/ConnectorFacade.js +2 -1
  14. package/dist/src/connection/ConnectorFacade.js.map +1 -1
  15. package/dist/src/connection/ManagedConnection.d.ts +3 -6
  16. package/dist/src/connection/ManagedConnection.js +6 -10
  17. package/dist/src/connection/ManagedConnection.js.map +1 -1
  18. package/dist/src/connection/connectivityChecker.js +1 -0
  19. package/dist/src/connection/connectivityChecker.js.map +1 -1
  20. package/dist/src/connection/simulator/Simulator.d.ts +0 -3
  21. package/dist/src/connection/simulator/Simulator.js +3 -51
  22. package/dist/src/connection/simulator/Simulator.js.map +1 -1
  23. package/dist/src/connection/simulator/SimulatorConnector.js +5 -5
  24. package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -1
  25. package/dist/src/connection/webrtc/NodeWebrtcConnection.js +2 -2
  26. package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
  27. package/dist/src/connection/webrtc/WebrtcConnector.d.ts +0 -1
  28. package/dist/src/connection/webrtc/WebrtcConnector.js +7 -9
  29. package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
  30. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +2 -2
  31. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +11 -12
  32. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -1
  33. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.d.ts +2 -5
  34. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js +1 -4
  35. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -1
  36. package/dist/src/connection/websocket/AutoCertifierClientFacade.d.ts +1 -2
  37. package/dist/src/connection/websocket/AutoCertifierClientFacade.js +3 -4
  38. package/dist/src/connection/websocket/AutoCertifierClientFacade.js.map +1 -1
  39. package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
  40. package/dist/src/connection/websocket/WebsocketConnector.d.ts +2 -7
  41. package/dist/src/connection/websocket/WebsocketConnector.js +32 -38
  42. package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
  43. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +3 -2
  44. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +8 -10
  45. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
  46. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.d.ts +3 -6
  47. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +0 -3
  48. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
  49. package/dist/src/connection/websocket/WebsocketServer.d.ts +1 -4
  50. package/dist/src/connection/websocket/WebsocketServer.js +11 -12
  51. package/dist/src/connection/websocket/WebsocketServer.js.map +1 -1
  52. package/dist/src/dht/DhtNode.d.ts +10 -13
  53. package/dist/src/dht/DhtNode.js +39 -52
  54. package/dist/src/dht/DhtNode.js.map +1 -1
  55. package/dist/src/dht/DhtNodeRpcLocal.d.ts +0 -1
  56. package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
  57. package/dist/src/dht/DhtNodeRpcRemote.d.ts +7 -7
  58. package/dist/src/dht/DhtNodeRpcRemote.js +8 -7
  59. package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -1
  60. package/dist/src/dht/ExternalApiRpcLocal.d.ts +5 -4
  61. package/dist/src/dht/ExternalApiRpcLocal.js +3 -2
  62. package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -1
  63. package/dist/src/dht/ExternalApiRpcRemote.d.ts +2 -2
  64. package/dist/src/dht/ExternalApiRpcRemote.js +2 -0
  65. package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
  66. package/dist/src/dht/PeerManager.d.ts +13 -14
  67. package/dist/src/dht/PeerManager.js +45 -60
  68. package/dist/src/dht/PeerManager.js.map +1 -1
  69. package/dist/src/dht/contact/Contact.d.ts +2 -2
  70. package/dist/src/dht/contact/Contact.js +2 -2
  71. package/dist/src/dht/contact/Contact.js.map +1 -1
  72. package/dist/src/dht/contact/ContactList.d.ts +7 -7
  73. package/dist/src/dht/contact/ContactList.js +3 -3
  74. package/dist/src/dht/contact/ContactList.js.map +1 -1
  75. package/dist/src/dht/contact/RandomContactList.d.ts +4 -4
  76. package/dist/src/dht/contact/RandomContactList.js +12 -11
  77. package/dist/src/dht/contact/RandomContactList.js.map +1 -1
  78. package/dist/src/dht/contact/RpcRemote.d.ts +7 -4
  79. package/dist/src/dht/contact/RpcRemote.js +5 -2
  80. package/dist/src/dht/contact/RpcRemote.js.map +1 -1
  81. package/dist/src/dht/contact/SortedContactList.d.ts +13 -13
  82. package/dist/src/dht/contact/SortedContactList.js +33 -29
  83. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  84. package/dist/src/dht/discovery/DiscoverySession.d.ts +2 -4
  85. package/dist/src/dht/discovery/DiscoverySession.js +19 -20
  86. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  87. package/dist/src/dht/discovery/PeerDiscovery.d.ts +2 -5
  88. package/dist/src/dht/discovery/PeerDiscovery.js +12 -20
  89. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  90. package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +36 -0
  91. package/dist/src/dht/recursive-operation/RecursiveOperationManager.js +165 -0
  92. package/dist/src/dht/recursive-operation/RecursiveOperationManager.js.map +1 -0
  93. package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.d.ts +14 -0
  94. package/dist/src/dht/{find/FindRpcLocal.js → recursive-operation/RecursiveOperationRpcLocal.js} +7 -7
  95. package/dist/src/dht/recursive-operation/RecursiveOperationRpcLocal.js.map +1 -0
  96. package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.d.ts +6 -0
  97. package/dist/src/dht/{routing/FindRpcRemote.js → recursive-operation/RecursiveOperationRpcRemote.js} +11 -11
  98. package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js.map +1 -0
  99. package/dist/src/dht/recursive-operation/RecursiveOperationSession.d.ts +42 -0
  100. package/dist/src/dht/recursive-operation/RecursiveOperationSession.js +182 -0
  101. package/dist/src/dht/recursive-operation/RecursiveOperationSession.js.map +1 -0
  102. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.d.ts +12 -0
  103. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js +17 -0
  104. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.js.map +1 -0
  105. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.d.ts +6 -0
  106. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js +21 -0
  107. package/dist/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.js.map +1 -0
  108. package/dist/src/dht/routing/Router.d.ts +4 -19
  109. package/dist/src/dht/routing/Router.js +41 -33
  110. package/dist/src/dht/routing/Router.js.map +1 -1
  111. package/dist/src/dht/routing/RouterRpcLocal.js +6 -5
  112. package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -1
  113. package/dist/src/dht/routing/RouterRpcRemote.d.ts +2 -2
  114. package/dist/src/dht/routing/RouterRpcRemote.js +7 -7
  115. package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
  116. package/dist/src/dht/routing/RoutingSession.d.ts +20 -16
  117. package/dist/src/dht/routing/RoutingSession.js +37 -45
  118. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  119. package/dist/src/dht/store/LocalDataStore.d.ts +11 -13
  120. package/dist/src/dht/store/LocalDataStore.js +36 -56
  121. package/dist/src/dht/store/LocalDataStore.js.map +1 -1
  122. package/dist/src/dht/store/StoreManager.d.ts +33 -0
  123. package/dist/src/dht/store/StoreManager.js +186 -0
  124. package/dist/src/dht/store/StoreManager.js.map +1 -0
  125. package/dist/src/dht/store/StoreRpcLocal.d.ts +8 -40
  126. package/dist/src/dht/store/StoreRpcLocal.js +13 -229
  127. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
  128. package/dist/src/dht/store/StoreRpcRemote.d.ts +5 -5
  129. package/dist/src/dht/store/StoreRpcRemote.js +4 -5
  130. package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
  131. package/dist/src/exports.d.ts +2 -0
  132. package/dist/src/exports.js.map +1 -1
  133. package/dist/src/helpers/MapWithTtl.d.ts +14 -0
  134. package/dist/src/helpers/MapWithTtl.js +59 -0
  135. package/dist/src/helpers/MapWithTtl.js.map +1 -0
  136. package/dist/src/helpers/PeerID.d.ts +2 -0
  137. package/dist/src/helpers/PeerID.js +4 -0
  138. package/dist/src/helpers/PeerID.js.map +1 -1
  139. package/dist/src/helpers/nodeId.d.ts +5 -0
  140. package/dist/src/helpers/nodeId.js +18 -1
  141. package/dist/src/helpers/nodeId.js.map +1 -1
  142. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +2 -1
  143. package/dist/src/helpers/peerIdFromPeerDescriptor.js +2 -1
  144. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  145. package/dist/src/helpers/protoClasses.js +2 -3
  146. package/dist/src/helpers/protoClasses.js.map +1 -1
  147. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +21 -22
  148. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +18 -18
  149. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  150. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +36 -60
  151. package/dist/src/proto/packages/dht/protos/DhtRpc.js +34 -53
  152. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  153. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +11 -12
  154. package/dist/src/rpc-protocol/DhtCallContext.d.ts +2 -1
  155. package/dist/src/rpc-protocol/DhtCallContext.js.map +1 -1
  156. package/dist/src/rpc-protocol/DhtRpcOptions.d.ts +2 -1
  157. package/dist/src/transport/ITransport.d.ts +9 -1
  158. package/dist/src/transport/ITransport.js +5 -0
  159. package/dist/src/transport/ITransport.js.map +1 -1
  160. package/dist/src/transport/ListeningRpcCommunicator.js +1 -1
  161. package/dist/src/transport/ListeningRpcCommunicator.js.map +1 -1
  162. package/dist/src/transport/RoutingRpcCommunicator.d.ts +2 -1
  163. package/dist/src/transport/RoutingRpcCommunicator.js +16 -11
  164. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  165. package/jest.config.js +4 -1
  166. package/karma-setup.js +2 -0
  167. package/karma.config.js +11 -7
  168. package/package.json +6 -7
  169. package/protos/DhtRpc.proto +17 -23
  170. package/src/connection/ConnectionLockHandler.ts +15 -15
  171. package/src/connection/ConnectionLockRpcLocal.ts +8 -9
  172. package/src/connection/ConnectionLockRpcRemote.ts +7 -16
  173. package/src/connection/ConnectionManager.ts +58 -55
  174. package/src/connection/ConnectorFacade.ts +3 -0
  175. package/src/connection/ManagedConnection.ts +12 -30
  176. package/src/connection/connectivityChecker.ts +1 -0
  177. package/src/connection/simulator/Simulator.ts +5 -36
  178. package/src/connection/simulator/SimulatorConnector.ts +8 -8
  179. package/src/connection/webrtc/BrowserWebrtcConnection.ts +0 -3
  180. package/src/connection/webrtc/NodeWebrtcConnection.ts +3 -4
  181. package/src/connection/webrtc/WebrtcConnector.ts +11 -13
  182. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +16 -16
  183. package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +3 -13
  184. package/src/connection/websocket/AutoCertifierClientFacade.ts +4 -6
  185. package/src/connection/websocket/ClientWebsocket.ts +1 -0
  186. package/src/connection/websocket/WebsocketConnector.ts +43 -56
  187. package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +11 -13
  188. package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +4 -15
  189. package/src/connection/websocket/WebsocketServer.ts +14 -17
  190. package/src/dht/DhtNode.ts +67 -69
  191. package/src/dht/DhtNodeRpcLocal.ts +0 -1
  192. package/src/dht/DhtNodeRpcRemote.ts +13 -13
  193. package/src/dht/ExternalApiRpcLocal.ts +16 -6
  194. package/src/dht/ExternalApiRpcRemote.ts +5 -3
  195. package/src/dht/PeerManager.ts +73 -90
  196. package/src/dht/contact/Contact.ts +5 -4
  197. package/src/dht/contact/ContactList.ts +9 -9
  198. package/src/dht/contact/RandomContactList.ts +14 -14
  199. package/src/dht/contact/RpcRemote.ts +10 -7
  200. package/src/dht/contact/SortedContactList.ts +48 -45
  201. package/src/dht/discovery/DiscoverySession.ts +25 -25
  202. package/src/dht/discovery/PeerDiscovery.ts +16 -37
  203. package/src/dht/recursive-operation/RecursiveOperationManager.ts +240 -0
  204. package/src/dht/{find/FindRpcLocal.ts → recursive-operation/RecursiveOperationRpcLocal.ts} +9 -9
  205. package/src/dht/{routing/FindRpcRemote.ts → recursive-operation/RecursiveOperationRpcRemote.ts} +10 -10
  206. package/src/dht/recursive-operation/RecursiveOperationSession.ts +224 -0
  207. package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +25 -0
  208. package/src/dht/{find/FindSessionRpcRemote.ts → recursive-operation/RecursiveOperationSessionRpcRemote.ts} +8 -8
  209. package/src/dht/routing/Router.ts +45 -64
  210. package/src/dht/routing/RouterRpcLocal.ts +7 -6
  211. package/src/dht/routing/RouterRpcRemote.ts +9 -10
  212. package/src/dht/routing/RoutingSession.ts +59 -68
  213. package/src/dht/store/LocalDataStore.ts +47 -66
  214. package/src/dht/store/StoreManager.ts +217 -0
  215. package/src/dht/store/StoreRpcLocal.ts +26 -302
  216. package/src/dht/store/StoreRpcRemote.ts +9 -11
  217. package/src/exports.ts +2 -0
  218. package/src/helpers/MapWithTtl.ts +71 -0
  219. package/src/helpers/PeerID.ts +5 -0
  220. package/src/helpers/nodeId.ts +20 -0
  221. package/src/helpers/peerIdFromPeerDescriptor.ts +5 -3
  222. package/src/helpers/protoClasses.ts +4 -6
  223. package/src/proto/packages/dht/protos/DhtRpc.client.ts +31 -32
  224. package/src/proto/packages/dht/protos/DhtRpc.server.ts +11 -12
  225. package/src/proto/packages/dht/protos/DhtRpc.ts +49 -80
  226. package/src/rpc-protocol/DhtCallContext.ts +2 -1
  227. package/src/rpc-protocol/DhtRpcOptions.ts +2 -1
  228. package/src/transport/ITransport.ts +10 -1
  229. package/src/transport/ListeningRpcCommunicator.ts +1 -1
  230. package/src/transport/RoutingRpcCommunicator.ts +18 -12
  231. package/test/benchmark/Find.test.ts +8 -21
  232. package/test/benchmark/KademliaCorrectness.test.ts +11 -20
  233. package/test/benchmark/SortedContactListBenchmark.test.ts +9 -9
  234. package/test/benchmark/kademlia-simulation/Contact.ts +9 -8
  235. package/test/benchmark/kademlia-simulation/KademliaSimulation.ts +2 -2
  236. package/test/benchmark/kademlia-simulation/SimulationNode.ts +17 -17
  237. package/test/end-to-end/Layer0-Layer1.test.ts +10 -14
  238. package/test/end-to-end/Layer0.test.ts +15 -18
  239. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +7 -9
  240. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +4 -10
  241. package/test/end-to-end/Layer0Webrtc.test.ts +5 -6
  242. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +8 -16
  243. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +6 -13
  244. package/test/end-to-end/WebsocketConnectionRequest.test.ts +5 -6
  245. package/test/end-to-end/memory-leak.test.ts +6 -8
  246. package/test/integration/ConnectionLocking.test.ts +6 -13
  247. package/test/integration/ConnectionManager.test.ts +26 -43
  248. package/test/integration/DhtJoinPeerDiscovery.test.ts +5 -10
  249. package/test/integration/DhtNodeExternalAPI.test.ts +16 -22
  250. package/test/integration/DhtNodeRpcRemote.test.ts +13 -22
  251. package/test/integration/DhtRpc.test.ts +13 -18
  252. package/test/integration/Find.test.ts +10 -10
  253. package/test/integration/Layer1-scale.test.ts +17 -28
  254. package/test/integration/Mock-Layer1-Layer0.test.ts +25 -43
  255. package/test/integration/MultipleEntryPointJoining.test.ts +7 -7
  256. package/test/integration/ReplicateData.test.ts +28 -30
  257. package/test/integration/RouteMessage.test.ts +30 -27
  258. package/test/integration/RouterRpcRemote.test.ts +12 -18
  259. package/test/integration/RpcErrors.test.ts +8 -21
  260. package/test/integration/ScaleDownDht.test.ts +11 -10
  261. package/test/integration/SimultaneousConnections.test.ts +43 -67
  262. package/test/integration/Store.test.ts +23 -36
  263. package/test/integration/StoreAndDelete.test.ts +30 -50
  264. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +16 -37
  265. package/test/integration/StoreRpcRemote.test.ts +20 -30
  266. package/test/integration/WebrtcConnectionManagement.test.ts +3 -13
  267. package/test/integration/WebrtcConnectorRpc.test.ts +3 -9
  268. package/test/integration/WebsocketConnectionManagement.test.ts +7 -10
  269. package/test/integration/WebsocketConnectorRpc.test.ts +8 -17
  270. package/test/unit/ConnectivityHelpers.test.ts +9 -17
  271. package/test/unit/DuplicateDetector.test.ts +7 -4
  272. package/test/unit/LocalDataStore.test.ts +66 -77
  273. package/test/unit/PeerManager.test.ts +31 -0
  274. package/test/unit/RandomContactList.test.ts +13 -8
  275. package/test/unit/{Finder.test.ts → RecursiveOperationManager.test.ts} +38 -43
  276. package/test/unit/RecursiveOperationSession.test.ts +68 -0
  277. package/test/unit/Router.test.ts +15 -22
  278. package/test/unit/RoutingSession.test.ts +23 -25
  279. package/test/unit/SortedContactList.test.ts +41 -26
  280. package/test/unit/StoreManager.test.ts +132 -0
  281. package/test/unit/WebsocketConnector.test.ts +27 -35
  282. package/test/unit/customMatchers.test.ts +16 -0
  283. package/test/utils/FakeTransport.ts +44 -0
  284. package/test/utils/customMatchers.ts +70 -0
  285. package/test/utils/mock/MockRpcCommunicator.ts +7 -0
  286. package/test/utils/mock/Router.ts +3 -2
  287. package/test/utils/mock/mockDataEntry.ts +36 -0
  288. package/test/utils/utils.ts +49 -87
  289. package/dist/src/dht/find/FindRpcLocal.d.ts +0 -14
  290. package/dist/src/dht/find/FindRpcLocal.js.map +0 -1
  291. package/dist/src/dht/find/FindSession.d.ts +0 -44
  292. package/dist/src/dht/find/FindSession.js +0 -150
  293. package/dist/src/dht/find/FindSession.js.map +0 -1
  294. package/dist/src/dht/find/FindSessionRpcLocal.d.ts +0 -12
  295. package/dist/src/dht/find/FindSessionRpcLocal.js +0 -17
  296. package/dist/src/dht/find/FindSessionRpcLocal.js.map +0 -1
  297. package/dist/src/dht/find/FindSessionRpcRemote.d.ts +0 -6
  298. package/dist/src/dht/find/FindSessionRpcRemote.js +0 -21
  299. package/dist/src/dht/find/FindSessionRpcRemote.js.map +0 -1
  300. package/dist/src/dht/find/Finder.d.ts +0 -49
  301. package/dist/src/dht/find/Finder.js +0 -197
  302. package/dist/src/dht/find/Finder.js.map +0 -1
  303. package/dist/src/dht/routing/FindRpcRemote.d.ts +0 -6
  304. package/dist/src/dht/routing/FindRpcRemote.js.map +0 -1
  305. package/src/dht/find/FindSession.ts +0 -183
  306. package/src/dht/find/FindSessionRpcLocal.ts +0 -25
  307. package/src/dht/find/Finder.ts +0 -295
@@ -1,9 +1,7 @@
1
1
  import {
2
- FindAction,
2
+ RecursiveOperation,
3
3
  Message,
4
4
  MessageType,
5
- NodeType,
6
- PeerDescriptor,
7
5
  RouteMessageAck,
8
6
  RouteMessageError,
9
7
  RouteMessageWrapper
@@ -11,19 +9,20 @@ import {
11
9
  import { PeerID } from '../../src/helpers/PeerID'
12
10
  import {
13
11
  createWrappedClosestPeersRequest,
14
- createFindRequest
12
+ createFindRequest,
13
+ createMockPeerDescriptor
15
14
  } from '../utils/utils'
16
- import { Finder } from '../../src/dht/find/Finder'
15
+ import { RecursiveOperationManager } from '../../src/dht/recursive-operation/RecursiveOperationManager'
17
16
  import { LocalDataStore } from '../../src/dht/store/LocalDataStore'
18
17
  import { v4 } from 'uuid'
19
18
  import { MockRouter } from '../utils/mock/Router'
20
19
  import { MockTransport } from '../utils/mock/Transport'
21
20
  import { areEqualPeerDescriptors } from '../../src/helpers/peerIdFromPeerDescriptor'
22
21
  import { FakeRpcCommunicator } from '../utils/FakeRpcCommunicator'
23
- import { IRouter } from '../../src/dht/routing/Router'
22
+ import { Router } from '../../src/dht/routing/Router'
24
23
  import { ITransport } from '../../src/exports'
25
24
 
26
- const createMockRouter = (error?: RouteMessageError): Partial<IRouter> => {
25
+ const createMockRouter = (error?: RouteMessageError): Partial<Router> => {
27
26
  return {
28
27
  doRouteMessage: (routedMessage: RouteMessageWrapper) => {
29
28
  return {
@@ -35,24 +34,18 @@ const createMockRouter = (error?: RouteMessageError): Partial<IRouter> => {
35
34
  addToDuplicateDetector: () => {}
36
35
  }
37
36
  }
38
- describe('Finder', () => {
37
+ describe('RecursiveOperationManager', () => {
39
38
 
40
- const peerDescriptor1: PeerDescriptor = {
41
- nodeId: PeerID.fromString('peerid').value,
42
- type: NodeType.NODEJS
43
- }
44
- const peerDescriptor2: PeerDescriptor = {
45
- nodeId: PeerID.fromString('destination').value,
46
- type: NodeType.NODEJS
47
- }
48
- const findRequest = createFindRequest(FindAction.NODE)
39
+ const peerDescriptor1 = createMockPeerDescriptor()
40
+ const peerDescriptor2 = createMockPeerDescriptor()
41
+ const recursiveOperationRequest = createFindRequest()
49
42
  const message: Message = {
50
43
  serviceId: 'unknown',
51
44
  messageId: v4(),
52
45
  messageType: MessageType.RPC,
53
46
  body: {
54
- oneofKind: 'findRequest',
55
- findRequest
47
+ oneofKind: 'recursiveOperationRequest',
48
+ recursiveOperationRequest
56
49
  },
57
50
  sourceDescriptor: peerDescriptor1,
58
51
  targetDescriptor: peerDescriptor2
@@ -63,40 +56,42 @@ describe('Finder', () => {
63
56
  routingPath: [],
64
57
  reachableThrough: [],
65
58
  sourcePeer: peerDescriptor1,
66
- destinationPeer: peerDescriptor2
59
+ target: peerDescriptor2.nodeId
67
60
  }
68
61
  const rpcCommunicator = new FakeRpcCommunicator()
69
62
 
70
- const createFinder = (router: IRouter = new MockRouter(), transport: ITransport = new MockTransport()): Finder => {
71
- return new Finder({
63
+ const createRecursiveOperationManager = (
64
+ router: Router = new MockRouter() as any,
65
+ transport: ITransport = new MockTransport()
66
+ ): RecursiveOperationManager => {
67
+ return new RecursiveOperationManager({
72
68
  localPeerDescriptor: peerDescriptor1,
73
69
  router,
74
70
  connections: new Map(),
75
- serviceId: 'Finder',
76
- localDataStore: new LocalDataStore(),
71
+ serviceId: 'RecursiveOperationManager',
72
+ localDataStore: new LocalDataStore(30 * 100),
77
73
  sessionTransport: transport,
78
74
  addContact: () => {},
79
- isPeerCloserToIdThanSelf: (_peer1, _compareToId) => true,
80
75
  rpcCommunicator: rpcCommunicator as any
81
76
  })
82
77
  }
83
78
 
84
- it('Finder server', async () => {
85
- const finder = createFinder()
86
- const res = await rpcCommunicator.callRpcMethod('routeFindRequest', routedMessage) as RouteMessageAck
79
+ it('RecursiveOperationManager server', async () => {
80
+ const recursiveOperationManager = createRecursiveOperationManager()
81
+ const res = await rpcCommunicator.callRpcMethod('routeRequest', routedMessage) as RouteMessageAck
87
82
  expect(res.error).toBeUndefined()
88
- finder.stop()
83
+ recursiveOperationManager.stop()
89
84
  })
90
85
 
91
86
  it('startFind with mode Node returns self if no peers', async () => {
92
- const finder = createFinder()
93
- const res = await finder.startFind(PeerID.fromString('find').value)
87
+ const recursiveOperationManager = createRecursiveOperationManager()
88
+ const res = await recursiveOperationManager.execute(PeerID.fromString('find').value, RecursiveOperation.FIND_NODE)
94
89
  expect(areEqualPeerDescriptors(res.closestNodes[0], peerDescriptor1)).toEqual(true)
95
- finder.stop()
90
+ recursiveOperationManager.stop()
96
91
  })
97
92
 
98
- it('Finder server throws if payload is not FindRequest', async () => {
99
- const finder = createFinder(new MockRouter())
93
+ it('RecursiveOperationManager server throws if payload is not RecursiveOperationRequest', async () => {
94
+ const manager = createRecursiveOperationManager(new MockRouter() as any)
100
95
  const rpcWrapper = createWrappedClosestPeersRequest(peerDescriptor1)
101
96
  const badMessage: Message = {
102
97
  serviceId: 'unknown',
@@ -109,15 +104,15 @@ describe('Finder', () => {
109
104
  sourceDescriptor: peerDescriptor1,
110
105
  targetDescriptor: peerDescriptor2
111
106
  }
112
- await expect(() => rpcCommunicator.callRpcMethod('routeFindRequest', {
107
+ await expect(() => rpcCommunicator.callRpcMethod('routeRequest', {
113
108
  message: badMessage,
114
109
  requestId: 'REQ',
115
110
  routingPath: [],
116
111
  reachableThrough: [],
117
- destinationPeer: peerDescriptor1,
112
+ target: peerDescriptor1.nodeId,
118
113
  sourcePeer: peerDescriptor2
119
114
  })).rejects.toThrow()
120
- finder.stop()
115
+ manager.stop()
121
116
  })
122
117
 
123
118
  it('no targets', async () => {
@@ -128,14 +123,14 @@ describe('Finder', () => {
128
123
  on: () => {},
129
124
  off: () => {}
130
125
  }
131
- const finder = createFinder(router as any, transport as any)
132
- const ack = await rpcCommunicator.callRpcMethod('routeFindRequest', routedMessage)
126
+ const recursiveOperationManager = createRecursiveOperationManager(router as any, transport as any)
127
+ const ack = await rpcCommunicator.callRpcMethod('routeRequest', routedMessage)
133
128
  expect(ack).toEqual({
134
129
  requestId: routedMessage.requestId,
135
130
  error: RouteMessageError.NO_TARGETS
136
131
  })
137
132
  expect(send).toHaveBeenCalledTimes(1)
138
- finder.stop()
133
+ recursiveOperationManager.stop()
139
134
  })
140
135
 
141
136
  it('error', async () => {
@@ -144,13 +139,13 @@ describe('Finder', () => {
144
139
  const transport = {
145
140
  send
146
141
  }
147
- const finder = createFinder(router as any, transport as any)
148
- const ack = await rpcCommunicator.callRpcMethod('routeFindRequest', routedMessage)
142
+ const recursiveOperationManager = createRecursiveOperationManager(router as any, transport as any)
143
+ const ack = await rpcCommunicator.callRpcMethod('routeRequest', routedMessage)
149
144
  expect(ack).toEqual({
150
145
  requestId: routedMessage.requestId,
151
146
  error: RouteMessageError.DUPLICATE
152
147
  })
153
148
  expect(send).not.toHaveBeenCalled()
154
- finder.stop()
149
+ recursiveOperationManager.stop()
155
150
  })
156
151
  })
@@ -0,0 +1,68 @@
1
+ import { waitForCondition } from '@streamr/utils'
2
+ import { range } from 'lodash'
3
+ import { RecursiveOperationSession } from '../../src/dht/recursive-operation/RecursiveOperationSession'
4
+ import { RecursiveOperationSessionRpcRemote } from '../../src/dht/recursive-operation/RecursiveOperationSessionRpcRemote'
5
+ import { ServiceID } from '../../src/exports'
6
+ import { createRandomNodeId } from '../../src/helpers/nodeId'
7
+ import { Message, PeerDescriptor, RecursiveOperation } from '../../src/proto/packages/dht/protos/DhtRpc'
8
+ import { RecursiveOperationSessionRpcClient } from '../../src/proto/packages/dht/protos/DhtRpc.client'
9
+ import { RoutingRpcCommunicator } from '../../src/transport/RoutingRpcCommunicator'
10
+ import { FakeEnvironment } from '../utils/FakeTransport'
11
+ import { createMockPeerDescriptor } from '../utils/utils'
12
+
13
+ describe('RecursiveOperationSession', () => {
14
+
15
+ let environment: FakeEnvironment
16
+ let localPeerDescriptor: PeerDescriptor
17
+
18
+ const createRpcRemote = (serviceId: ServiceID) => {
19
+ const transport = environment.createTransport()
20
+ const send = (msg: Message) => transport.send(msg)
21
+ return new RecursiveOperationSessionRpcRemote(
22
+ createMockPeerDescriptor(),
23
+ localPeerDescriptor,
24
+ serviceId,
25
+ new RoutingRpcCommunicator(serviceId, send),
26
+ RecursiveOperationSessionRpcClient
27
+ )
28
+ }
29
+
30
+ beforeEach(() => {
31
+ environment = new FakeEnvironment()
32
+ localPeerDescriptor = createMockPeerDescriptor()
33
+ })
34
+
35
+ it('happy path', async () => {
36
+ const doRouteRequest = jest.fn()
37
+ const session = new RecursiveOperationSession({
38
+ transport: environment.createTransport(),
39
+ targetId: createRandomNodeId(),
40
+ localPeerDescriptor,
41
+ waitedRoutingPathCompletions: 3,
42
+ operation: RecursiveOperation.FIND_NODE,
43
+ doRouteRequest
44
+ })
45
+ const onCompleted = jest.fn()
46
+ session.on('completed', onCompleted)
47
+
48
+ session.start('')
49
+ expect(doRouteRequest).toHaveBeenCalled()
50
+ range(3).forEach(() => {
51
+ const remote = createRpcRemote(session.getId())
52
+ remote.sendResponse(
53
+ [createMockPeerDescriptor(), createMockPeerDescriptor()],
54
+ [createMockPeerDescriptor(), createMockPeerDescriptor()],
55
+ [],
56
+ true
57
+ )
58
+ })
59
+
60
+ // TODO now waits for the 4s timeout, could setup test so that it completes by receiving
61
+ // all data it wants
62
+ await waitForCondition(() => onCompleted.mock.calls.length > 0)
63
+ const result = session.getResults()
64
+ // TODO assert peer descriptors
65
+ expect(result.closestNodes).toHaveLength(6)
66
+ expect(result.dataEntries).toEqual([])
67
+ })
68
+ })
@@ -1,31 +1,25 @@
1
1
  import { v4 } from 'uuid'
2
2
  import { DhtNodeRpcRemote } from '../../src/dht/DhtNodeRpcRemote'
3
3
  import { Router } from '../../src/dht/routing/Router'
4
- import { PeerID, PeerIDKey } from '../../src/helpers/PeerID'
4
+ import { PeerID } from '../../src/helpers/PeerID'
5
5
  import {
6
6
  Message,
7
7
  MessageType,
8
- NodeType,
9
8
  PeerDescriptor,
10
9
  RouteMessageAck,
11
10
  RouteMessageError,
12
11
  RouteMessageWrapper
13
12
  } from '../../src/proto/packages/dht/protos/DhtRpc'
14
- import { createWrappedClosestPeersRequest } from '../utils/utils'
13
+ import { createMockPeerDescriptor, createWrappedClosestPeersRequest } from '../utils/utils'
15
14
  import { FakeRpcCommunicator } from '../utils/FakeRpcCommunicator'
15
+ import { NodeID } from '../../src/helpers/nodeId'
16
+ import { MockRpcCommunicator } from '../utils/mock/MockRpcCommunicator'
16
17
 
17
18
  describe('Router', () => {
18
- let router: Router
19
19
 
20
- const peerId = PeerID.fromString('router')
21
- const peerDescriptor1: PeerDescriptor = {
22
- nodeId: peerId.value,
23
- type: NodeType.NODEJS
24
- }
25
- const peerDescriptor2: PeerDescriptor = {
26
- nodeId: PeerID.fromString('destination').value,
27
- type: NodeType.NODEJS
28
- }
20
+ let router: Router
21
+ const peerDescriptor1 = createMockPeerDescriptor()
22
+ const peerDescriptor2 = createMockPeerDescriptor()
29
23
  const rpcWrapper = createWrappedClosestPeersRequest(peerDescriptor1)
30
24
  const message: Message = {
31
25
  serviceId: 'unknown',
@@ -43,14 +37,14 @@ describe('Router', () => {
43
37
  requestId: 'REQ',
44
38
  routingPath: [],
45
39
  reachableThrough: [],
46
- destinationPeer: peerDescriptor1,
40
+ target: peerDescriptor1.nodeId,
47
41
  sourcePeer: peerDescriptor2
48
42
  }
49
- let connections: Map<PeerIDKey, DhtNodeRpcRemote>
43
+ let connections: Map<NodeID, DhtNodeRpcRemote>
50
44
  const rpcCommunicator = new FakeRpcCommunicator()
51
45
 
52
46
  const createMockDhtNodeRpcRemote = (destination: PeerDescriptor): DhtNodeRpcRemote => {
53
- return new DhtNodeRpcRemote(peerDescriptor1, destination, {} as any, 'router')
47
+ return new DhtNodeRpcRemote(peerDescriptor1, destination, undefined as any, new MockRpcCommunicator())
54
48
  }
55
49
 
56
50
  beforeEach(() => {
@@ -59,7 +53,6 @@ describe('Router', () => {
59
53
  localPeerDescriptor: peerDescriptor1,
60
54
  rpcCommunicator: rpcCommunicator as any,
61
55
  addContact: (_contact) => {},
62
- serviceId: 'router',
63
56
  connections
64
57
  })
65
58
  })
@@ -71,7 +64,7 @@ describe('Router', () => {
71
64
  it('doRouteMessage without connections', async () => {
72
65
  const ack = await rpcCommunicator.callRpcMethod('routeMessage', {
73
66
  message,
74
- destinationPeer: peerDescriptor2,
67
+ target: peerDescriptor2.nodeId,
75
68
  requestId: v4(),
76
69
  sourcePeer: peerDescriptor1,
77
70
  reachableThrough: [],
@@ -81,10 +74,10 @@ describe('Router', () => {
81
74
  })
82
75
 
83
76
  it('doRouteMessage with connections', async () => {
84
- connections.set(PeerID.fromString('test').toKey(), createMockDhtNodeRpcRemote(peerDescriptor2))
77
+ connections.set(PeerID.fromString('test').toNodeId(), createMockDhtNodeRpcRemote(peerDescriptor2))
85
78
  const ack = await rpcCommunicator.callRpcMethod('routeMessage', {
86
79
  message,
87
- destinationPeer: peerDescriptor2,
80
+ target: peerDescriptor2.nodeId,
88
81
  requestId: v4(),
89
82
  sourcePeer: peerDescriptor1,
90
83
  reachableThrough: [],
@@ -99,7 +92,7 @@ describe('Router', () => {
99
92
  })
100
93
 
101
94
  it('route server with connections', async () => {
102
- connections.set(PeerID.fromString('test').toKey(), createMockDhtNodeRpcRemote(peerDescriptor2))
95
+ connections.set(PeerID.fromString('test').toNodeId(), createMockDhtNodeRpcRemote(peerDescriptor2))
103
96
  const ack = await rpcCommunicator.callRpcMethod('routeMessage', routedMessage) as RouteMessageAck
104
97
  expect(ack.error).toBeUndefined()
105
98
  })
@@ -116,7 +109,7 @@ describe('Router', () => {
116
109
  })
117
110
 
118
111
  it('forward server with connections', async () => {
119
- connections.set(PeerID.fromString('test').toKey(), createMockDhtNodeRpcRemote(peerDescriptor2))
112
+ connections.set(PeerID.fromString('test').toNodeId(), createMockDhtNodeRpcRemote(peerDescriptor2))
120
113
  const ack = await rpcCommunicator.callRpcMethod('forwardMessage', routedMessage) as RouteMessageAck
121
114
  expect(ack.error).toBeUndefined()
122
115
  })
@@ -1,29 +1,20 @@
1
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'
2
+ import { RoutingMode, RoutingSession } from '../../src/dht/routing/RoutingSession'
3
+ import { Message, MessageType, PeerDescriptor, RouteMessageWrapper } from '../../src/proto/packages/dht/protos/DhtRpc'
4
+ import { createMockPeerDescriptor, createWrappedClosestPeersRequest } from '../utils/utils'
7
5
  import { DhtNodeRpcRemote } from '../../src/dht/DhtNodeRpcRemote'
8
6
  import { RoutingRpcCommunicator } from '../../src/transport/RoutingRpcCommunicator'
9
- import { keyFromPeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
7
+ import { getNodeIdFromPeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
8
+ import { NodeID } from '../../src/helpers/nodeId'
9
+ import { MockRpcCommunicator } from '../utils/mock/MockRpcCommunicator'
10
10
 
11
11
  describe('RoutingSession', () => {
12
12
 
13
13
  let session: RoutingSession
14
- let connections: Map<PeerIDKey, DhtNodeRpcRemote>
14
+ let connections: Map<NodeID, DhtNodeRpcRemote>
15
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
-
16
+ const mockPeerDescriptor1 = createMockPeerDescriptor()
17
+ const mockPeerDescriptor2 = createMockPeerDescriptor()
27
18
  const rpcWrapper = createWrappedClosestPeersRequest(mockPeerDescriptor1)
28
19
  const message: Message = {
29
20
  serviceId: 'unknown',
@@ -41,18 +32,25 @@ describe('RoutingSession', () => {
41
32
  requestId: 'REQ',
42
33
  routingPath: [],
43
34
  reachableThrough: [],
44
- destinationPeer: mockPeerDescriptor1,
35
+ target: mockPeerDescriptor1.nodeId,
45
36
  sourcePeer: mockPeerDescriptor2
46
37
  }
47
38
 
48
39
  const createMockDhtNodeRpcRemote = (destination: PeerDescriptor): DhtNodeRpcRemote => {
49
- return new DhtNodeRpcRemote(mockPeerDescriptor1, destination, {} as any, 'router')
40
+ return new DhtNodeRpcRemote(mockPeerDescriptor1, destination, undefined as any, rpcCommunicator)
50
41
  }
51
42
 
52
43
  beforeEach(() => {
53
- rpcCommunicator = new RoutingRpcCommunicator('mock', async () => {})
44
+ rpcCommunicator = new MockRpcCommunicator()
54
45
  connections = new Map()
55
- session = new RoutingSession(rpcCommunicator, mockPeerDescriptor1, routedMessage, connections, 2)
46
+ session = new RoutingSession({
47
+ rpcCommunicator: rpcCommunicator,
48
+ localPeerDescriptor: mockPeerDescriptor1,
49
+ routedMessage,
50
+ connections,
51
+ parallelism: 2,
52
+ mode: RoutingMode.ROUTE
53
+ })
56
54
  })
57
55
 
58
56
  afterEach(() => {
@@ -61,15 +59,15 @@ describe('RoutingSession', () => {
61
59
  })
62
60
 
63
61
  it('findMoreContacts', () => {
64
- connections.set(keyFromPeerDescriptor(mockPeerDescriptor2), createMockDhtNodeRpcRemote(mockPeerDescriptor2))
62
+ connections.set(getNodeIdFromPeerDescriptor(mockPeerDescriptor2), createMockDhtNodeRpcRemote(mockPeerDescriptor2))
65
63
  const contacts = session.updateAndGetRoutablePeers()
66
64
  expect(contacts.length).toBe(1)
67
65
  })
68
66
 
69
67
  it('findMoreContacts peer disconnects', () => {
70
- connections.set(keyFromPeerDescriptor(mockPeerDescriptor2), createMockDhtNodeRpcRemote(mockPeerDescriptor2))
68
+ connections.set(getNodeIdFromPeerDescriptor(mockPeerDescriptor2), createMockDhtNodeRpcRemote(mockPeerDescriptor2))
71
69
  expect(session.updateAndGetRoutablePeers().length).toBe(1)
72
- connections.delete(keyFromPeerDescriptor(mockPeerDescriptor2))
70
+ connections.delete(getNodeIdFromPeerDescriptor(mockPeerDescriptor2))
73
71
  expect(session.updateAndGetRoutablePeers().length).toBe(0)
74
72
  })
75
73
 
@@ -1,11 +1,16 @@
1
1
  import { SortedContactList } from '../../src/dht/contact/SortedContactList'
2
2
  import { PeerID } from '../../src/helpers/PeerID'
3
+ import { NodeID, createRandomNodeId, getNodeIdFromBinary } from '../../src/helpers/nodeId'
3
4
 
4
- const createItem = (nodeId: Uint8Array): { getPeerId: () => PeerID } => {
5
- return { getPeerId: () => PeerID.fromValue(nodeId) }
5
+ const createItem = (nodeId: Uint8Array): { getNodeId: () => NodeID, getPeerId: () => PeerID } => {
6
+ return {
7
+ getNodeId: () => getNodeIdFromBinary(nodeId),
8
+ getPeerId: () => PeerID.fromValue(nodeId)
9
+ }
6
10
  }
7
11
 
8
12
  describe('SortedContactList', () => {
13
+
9
14
  const item0 = createItem(new Uint8Array([0, 0, 0, 0]))
10
15
  const item1 = createItem(new Uint8Array([0, 0, 0, 1]))
11
16
  const item2 = createItem(new Uint8Array([0, 0, 0, 2]))
@@ -13,19 +18,19 @@ describe('SortedContactList', () => {
13
18
  const item4 = createItem(new Uint8Array([0, 0, 0, 4]))
14
19
 
15
20
  it('compares Ids correctly', async () => {
16
- const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 10, allowToContainReferenceId: true, emitEvents: false })
17
- expect(list.compareIds(item0.getPeerId(), item0.getPeerId())).toBe(0)
18
- expect(list.compareIds(item1.getPeerId(), item1.getPeerId())).toBe(0)
19
- expect(list.compareIds(item0.getPeerId(), item1.getPeerId())).toBe(-1)
20
- expect(list.compareIds(item0.getPeerId(), item2.getPeerId())).toBe(-2)
21
- expect(list.compareIds(item1.getPeerId(), item0.getPeerId())).toBe(1)
22
- expect(list.compareIds(item2.getPeerId(), item0.getPeerId())).toBe(2)
23
- expect(list.compareIds(item2.getPeerId(), item3.getPeerId())).toBe(-1)
24
- expect(list.compareIds(item1.getPeerId(), item4.getPeerId())).toBe(-3)
21
+ const list = new SortedContactList({ referenceId: item0.getNodeId(), maxSize: 10, allowToContainReferenceId: true, emitEvents: false })
22
+ expect(list.compareIds(item0.getNodeId(), item0.getNodeId())).toBe(0)
23
+ expect(list.compareIds(item1.getNodeId(), item1.getNodeId())).toBe(0)
24
+ expect(list.compareIds(item0.getNodeId(), item1.getNodeId())).toBe(-1)
25
+ expect(list.compareIds(item0.getNodeId(), item2.getNodeId())).toBe(-2)
26
+ expect(list.compareIds(item1.getNodeId(), item0.getNodeId())).toBe(1)
27
+ expect(list.compareIds(item2.getNodeId(), item0.getNodeId())).toBe(2)
28
+ expect(list.compareIds(item2.getNodeId(), item3.getNodeId())).toBe(-1)
29
+ expect(list.compareIds(item1.getNodeId(), item4.getNodeId())).toBe(-3)
25
30
  })
26
31
 
27
32
  it('orders itself correctly', async () => {
28
- const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 10, allowToContainReferenceId: true, emitEvents: false })
33
+ const list = new SortedContactList({ referenceId: item0.getNodeId(), maxSize: 10, allowToContainReferenceId: true, emitEvents: false })
29
34
  list.addContact(item3)
30
35
  list.addContact(item2)
31
36
  list.addContact(item1)
@@ -37,11 +42,11 @@ describe('SortedContactList', () => {
37
42
  })
38
43
 
39
44
  it('handles contacted nodes correctly', async () => {
40
- const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 10, allowToContainReferenceId: false, emitEvents: false })
45
+ const list = new SortedContactList({ referenceId: item0.getNodeId(), maxSize: 10, allowToContainReferenceId: false, emitEvents: false })
41
46
  list.addContact(item3)
42
47
  list.addContact(item2)
43
48
  list.addContact(item1)
44
- list.setContacted(item2.getPeerId())
49
+ list.setContacted(item2.getNodeId())
45
50
  const contacts = list.getUncontactedContacts(3)
46
51
  expect(contacts.length).toEqual(2)
47
52
  expect(contacts[0]).toEqual(item1)
@@ -49,7 +54,7 @@ describe('SortedContactList', () => {
49
54
  })
50
55
 
51
56
  it('cannot exceed maxSize', async () => {
52
- const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 3, allowToContainReferenceId: false, emitEvents: true })
57
+ const list = new SortedContactList({ referenceId: item0.getNodeId(), maxSize: 3, allowToContainReferenceId: false, emitEvents: true })
53
58
  const onContactRemoved = jest.fn()
54
59
  list.on('contactRemoved', onContactRemoved)
55
60
  list.addContact(item1)
@@ -57,31 +62,41 @@ describe('SortedContactList', () => {
57
62
  list.addContact(item3)
58
63
  list.addContact(item2)
59
64
  expect(list.getSize()).toEqual(3)
65
+ expect(list.getAllContacts()).toEqual([item1, item2, item3])
66
+ expect(list.getContactIds()).toEqual([item1.getNodeId(), item2.getNodeId(), item3.getNodeId()])
60
67
  expect(onContactRemoved).toBeCalledWith(item4, [item1, item2, item3])
61
- expect(list.getContact(item4.getPeerId())).toBeFalsy()
68
+ expect(list.getContact(item4.getNodeId())).toBeFalsy()
62
69
  })
63
70
 
64
71
  it('removing contacts', async () => {
65
- const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 8, allowToContainReferenceId: false, emitEvents: true })
72
+ const list = new SortedContactList({ referenceId: item0.getNodeId(), maxSize: 8, allowToContainReferenceId: false, emitEvents: true })
66
73
  const onContactRemoved = jest.fn()
67
74
  list.on('contactRemoved', onContactRemoved)
75
+ list.removeContact(getNodeIdFromBinary(createRandomNodeId()))
76
+ list.addContact(item3)
77
+ list.removeContact(item3.getNodeId())
68
78
  list.addContact(item4)
69
79
  list.addContact(item3)
70
80
  list.addContact(item2)
71
81
  list.addContact(item1)
72
- list.removeContact(item2.getPeerId())
82
+ list.removeContact(item2.getNodeId())
73
83
  expect(list.getSize()).toEqual(3)
74
- expect(list.getContact(item2.getPeerId())).toBeFalsy()
84
+ expect(list.getContact(item2.getNodeId())).toBeFalsy()
75
85
  expect(list.getContactIds()).toEqual(list.getContactIds().sort(list.compareIds))
76
86
  expect(list.getAllContacts()).toEqual([item1, item3, item4])
77
- expect(onContactRemoved).toBeCalledWith(item2, [item1, item3, item4])
78
- const ret = list.removeContact(PeerID.fromValue(Buffer.from([0, 0, 0, 6])))
87
+ const ret = list.removeContact(getNodeIdFromBinary(Buffer.from([0, 0, 0, 6])))
79
88
  expect(ret).toEqual(false)
89
+ list.removeContact(item3.getNodeId())
90
+ list.removeContact(getNodeIdFromBinary(createRandomNodeId()))
91
+ expect(list.getAllContacts()).toEqual([item1, item4])
92
+ expect(onContactRemoved).toHaveBeenNthCalledWith(1, item3, [])
93
+ expect(onContactRemoved).toHaveBeenNthCalledWith(2, item2, [item1, item3, item4])
94
+ expect(onContactRemoved).toHaveBeenNthCalledWith(3, item3, [item1, item4])
80
95
  })
81
96
 
82
97
  it('get closest contacts', () => {
83
98
  const list = new SortedContactList({
84
- referenceId: item0.getPeerId(),
99
+ referenceId: item0.getNodeId(),
85
100
  maxSize: 8,
86
101
  allowToContainReferenceId: false,
87
102
  emitEvents: false
@@ -95,14 +110,14 @@ describe('SortedContactList', () => {
95
110
  })
96
111
 
97
112
  it('get active contacts', () => {
98
- const list = new SortedContactList({ referenceId: item0.getPeerId(), maxSize: 8, allowToContainReferenceId: false, emitEvents: false })
113
+ const list = new SortedContactList({ referenceId: item0.getNodeId(), maxSize: 8, allowToContainReferenceId: false, emitEvents: false })
99
114
  list.addContact(item1)
100
115
  list.addContact(item3)
101
116
  list.addContact(item4)
102
117
  list.addContact(item2)
103
- list.setActive(item2.getPeerId())
104
- list.setActive(item3.getPeerId())
105
- list.setActive(item4.getPeerId())
118
+ list.setActive(item2.getNodeId())
119
+ list.setActive(item3.getNodeId())
120
+ list.setActive(item4.getNodeId())
106
121
  expect(list.getActiveContacts()).toEqual([item2, item3, item4])
107
122
  })
108
123
  })