@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.
Files changed (260) hide show
  1. package/dist/src/connection/ConnectionLockHandler.js +2 -2
  2. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  3. package/dist/src/connection/ConnectionLockRpcRemote.d.ts +2 -2
  4. package/dist/src/connection/ConnectionLockRpcRemote.js +3 -27
  5. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
  6. package/dist/src/connection/ConnectionManager.d.ts +0 -1
  7. package/dist/src/connection/ConnectionManager.js +11 -7
  8. package/dist/src/connection/ConnectionManager.js.map +1 -1
  9. package/dist/src/connection/ConnectorFacade.d.ts +2 -2
  10. package/dist/src/connection/ConnectorFacade.js +1 -2
  11. package/dist/src/connection/ConnectorFacade.js.map +1 -1
  12. package/dist/src/connection/ManagedConnection.js +1 -0
  13. package/dist/src/connection/ManagedConnection.js.map +1 -1
  14. package/dist/src/connection/connectivityChecker.d.ts +9 -0
  15. package/dist/src/connection/connectivityChecker.js +122 -0
  16. package/dist/src/connection/connectivityChecker.js.map +1 -0
  17. package/dist/src/connection/connectivityRequestHandler.d.ts +2 -0
  18. package/dist/src/connection/connectivityRequestHandler.js +79 -0
  19. package/dist/src/connection/connectivityRequestHandler.js.map +1 -0
  20. package/dist/src/connection/simulator/Simulator.js +3 -2
  21. package/dist/src/connection/simulator/Simulator.js.map +1 -1
  22. package/dist/src/connection/simulator/SimulatorConnection.js +1 -1
  23. package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -1
  24. package/dist/src/connection/webrtc/NodeWebrtcConnection.js +1 -1
  25. package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
  26. package/dist/src/connection/webrtc/WebrtcConnector.js +1 -1
  27. package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
  28. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +1 -1
  29. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -1
  30. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.d.ts +2 -2
  31. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js +2 -2
  32. package/dist/src/connection/webrtc/WebrtcConnectorRpcRemote.js.map +1 -1
  33. package/dist/src/connection/webrtc/iceServerAsString.js +1 -1
  34. package/dist/src/connection/webrtc/iceServerAsString.js.map +1 -1
  35. package/dist/src/connection/websocket/ClientWebsocket.d.ts +1 -0
  36. package/dist/src/connection/websocket/ClientWebsocket.js +7 -3
  37. package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
  38. package/dist/src/connection/websocket/ServerWebsocket.d.ts +4 -0
  39. package/dist/src/connection/websocket/ServerWebsocket.js +32 -21
  40. package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -1
  41. package/dist/src/connection/websocket/WebsocketConnector.d.ts +0 -2
  42. package/dist/src/connection/websocket/WebsocketConnector.js +61 -16
  43. package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
  44. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +1 -1
  45. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +8 -11
  46. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
  47. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.d.ts +4 -4
  48. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +5 -39
  49. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
  50. package/dist/src/connection/websocket/WebsocketServer.js +21 -4
  51. package/dist/src/connection/websocket/WebsocketServer.js.map +1 -1
  52. package/dist/src/dht/DhtNode.d.ts +13 -23
  53. package/dist/src/dht/DhtNode.js +97 -226
  54. package/dist/src/dht/DhtNode.js.map +1 -1
  55. package/dist/src/dht/DhtNodeRpcLocal.d.ts +1 -4
  56. package/dist/src/dht/DhtNodeRpcLocal.js +1 -5
  57. package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
  58. package/dist/src/dht/DhtNodeRpcRemote.d.ts +3 -3
  59. package/dist/src/dht/DhtNodeRpcRemote.js +4 -4
  60. package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -1
  61. package/dist/src/dht/ExternalApiRpcLocal.d.ts +4 -4
  62. package/dist/src/dht/ExternalApiRpcLocal.js +5 -12
  63. package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -1
  64. package/dist/src/dht/ExternalApiRpcRemote.d.ts +3 -3
  65. package/dist/src/dht/ExternalApiRpcRemote.js +5 -5
  66. package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
  67. package/dist/src/dht/PeerManager.d.ts +52 -0
  68. package/dist/src/dht/PeerManager.js +273 -0
  69. package/dist/src/dht/PeerManager.js.map +1 -0
  70. package/dist/src/dht/contact/ContactList.d.ts +1 -1
  71. package/dist/src/dht/contact/ContactList.js +1 -0
  72. package/dist/src/dht/contact/ContactList.js.map +1 -1
  73. package/dist/src/dht/contact/{Remote.d.ts → RpcRemote.d.ts} +3 -3
  74. package/dist/src/dht/contact/{Remote.js → RpcRemote.js} +8 -8
  75. package/dist/src/dht/contact/RpcRemote.js.map +1 -0
  76. package/dist/src/dht/contact/SortedContactList.d.ts +20 -6
  77. package/dist/src/dht/contact/SortedContactList.js +55 -24
  78. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  79. package/dist/src/dht/discovery/DiscoverySession.d.ts +4 -14
  80. package/dist/src/dht/discovery/DiscoverySession.js +15 -26
  81. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  82. package/dist/src/dht/discovery/PeerDiscovery.d.ts +2 -9
  83. package/dist/src/dht/discovery/PeerDiscovery.js +11 -19
  84. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  85. package/dist/src/dht/find/FindRpcLocal.js +2 -1
  86. package/dist/src/dht/find/FindRpcLocal.js.map +1 -1
  87. package/dist/src/dht/find/FindSession.d.ts +6 -6
  88. package/dist/src/dht/find/FindSession.js +18 -13
  89. package/dist/src/dht/find/FindSession.js.map +1 -1
  90. package/dist/src/dht/find/FindSessionRpcLocal.d.ts +1 -1
  91. package/dist/src/dht/find/FindSessionRpcRemote.d.ts +2 -2
  92. package/dist/src/dht/find/FindSessionRpcRemote.js +2 -2
  93. package/dist/src/dht/find/FindSessionRpcRemote.js.map +1 -1
  94. package/dist/src/dht/find/Finder.d.ts +4 -4
  95. package/dist/src/dht/find/Finder.js +55 -42
  96. package/dist/src/dht/find/Finder.js.map +1 -1
  97. package/dist/src/dht/routing/FindRpcRemote.d.ts +2 -2
  98. package/dist/src/dht/routing/FindRpcRemote.js +7 -5
  99. package/dist/src/dht/routing/FindRpcRemote.js.map +1 -1
  100. package/dist/src/dht/routing/Router.d.ts +3 -7
  101. package/dist/src/dht/routing/Router.js +29 -22
  102. package/dist/src/dht/routing/Router.js.map +1 -1
  103. package/dist/src/dht/routing/RouterRpcLocal.d.ts +2 -2
  104. package/dist/src/dht/routing/RouterRpcLocal.js +4 -3
  105. package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -1
  106. package/dist/src/dht/routing/RouterRpcRemote.d.ts +2 -2
  107. package/dist/src/dht/routing/RouterRpcRemote.js +13 -8
  108. package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
  109. package/dist/src/dht/routing/RoutingSession.d.ts +1 -1
  110. package/dist/src/dht/routing/RoutingSession.js +23 -11
  111. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  112. package/dist/src/dht/routing/getPreviousPeer.js.map +1 -1
  113. package/dist/src/dht/store/LocalDataStore.d.ts +3 -3
  114. package/dist/src/dht/store/LocalDataStore.js +18 -17
  115. package/dist/src/dht/store/LocalDataStore.js.map +1 -1
  116. package/dist/src/dht/store/StoreRpcLocal.d.ts +10 -9
  117. package/dist/src/dht/store/StoreRpcLocal.js +108 -102
  118. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
  119. package/dist/src/dht/store/StoreRpcRemote.d.ts +4 -5
  120. package/dist/src/dht/store/StoreRpcRemote.js +6 -15
  121. package/dist/src/dht/store/StoreRpcRemote.js.map +1 -1
  122. package/dist/src/exports.d.ts +1 -1
  123. package/dist/src/exports.js +4 -4
  124. package/dist/src/exports.js.map +1 -1
  125. package/dist/src/helpers/PeerID.d.ts +1 -0
  126. package/dist/src/helpers/PeerID.js +9 -4
  127. package/dist/src/helpers/PeerID.js.map +1 -1
  128. package/dist/src/helpers/UUID.js +1 -1
  129. package/dist/src/helpers/UUID.js.map +1 -1
  130. package/dist/src/helpers/nodeId.d.ts +1 -0
  131. package/dist/src/helpers/{kademliaId.js → nodeId.js} +4 -4
  132. package/dist/src/helpers/nodeId.js.map +1 -0
  133. package/dist/src/helpers/peerIdFromPeerDescriptor.js +4 -4
  134. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  135. package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +5 -16
  136. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +2 -9
  137. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
  138. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +80 -95
  139. package/dist/src/proto/packages/dht/protos/DhtRpc.js +67 -66
  140. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  141. package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +3 -10
  142. package/dist/src/transport/RoutingRpcCommunicator.js +2 -0
  143. package/dist/src/transport/RoutingRpcCommunicator.js.map +1 -1
  144. package/karma.config.js +2 -2
  145. package/package.json +5 -5
  146. package/protos/DhtRpc.proto +36 -36
  147. package/src/connection/ConnectionLockHandler.ts +2 -2
  148. package/src/connection/ConnectionLockRpcRemote.ts +3 -4
  149. package/src/connection/ConnectionManager.ts +19 -17
  150. package/src/connection/ConnectorFacade.ts +5 -7
  151. package/src/connection/ManagedConnection.ts +1 -0
  152. package/src/connection/connectivityChecker.ts +102 -0
  153. package/src/connection/connectivityRequestHandler.ts +79 -0
  154. package/src/connection/simulator/Simulator.ts +3 -2
  155. package/src/connection/simulator/SimulatorConnection.ts +1 -1
  156. package/src/connection/webrtc/BrowserWebrtcConnection.ts +10 -10
  157. package/src/connection/webrtc/NodeWebrtcConnection.ts +1 -1
  158. package/src/connection/webrtc/WebrtcConnector.ts +1 -1
  159. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +1 -1
  160. package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +2 -2
  161. package/src/connection/webrtc/iceServerAsString.ts +1 -1
  162. package/src/connection/websocket/ClientWebsocket.ts +6 -2
  163. package/src/connection/websocket/ServerWebsocket.ts +40 -25
  164. package/src/connection/websocket/WebsocketConnector.ts +43 -22
  165. package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +9 -11
  166. package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +7 -16
  167. package/src/connection/websocket/WebsocketServer.ts +20 -5
  168. package/src/dht/DhtNode.ts +123 -280
  169. package/src/dht/DhtNodeRpcLocal.ts +2 -9
  170. package/src/dht/DhtNodeRpcRemote.ts +4 -4
  171. package/src/dht/ExternalApiRpcLocal.ts +8 -13
  172. package/src/dht/ExternalApiRpcRemote.ts +5 -5
  173. package/src/dht/PeerManager.ts +330 -0
  174. package/src/dht/contact/ContactList.ts +3 -2
  175. package/src/dht/contact/{Remote.ts → RpcRemote.ts} +7 -6
  176. package/src/dht/contact/SortedContactList.ts +87 -44
  177. package/src/dht/discovery/DiscoverySession.ts +19 -44
  178. package/src/dht/discovery/PeerDiscovery.ts +16 -28
  179. package/src/dht/find/FindRpcLocal.ts +2 -2
  180. package/src/dht/find/FindSession.ts +25 -20
  181. package/src/dht/find/FindSessionRpcLocal.ts +1 -1
  182. package/src/dht/find/FindSessionRpcRemote.ts +2 -2
  183. package/src/dht/find/Finder.ts +84 -64
  184. package/src/dht/routing/FindRpcRemote.ts +7 -5
  185. package/src/dht/routing/Router.ts +30 -25
  186. package/src/dht/routing/RouterRpcLocal.ts +5 -5
  187. package/src/dht/routing/RouterRpcRemote.ts +13 -10
  188. package/src/dht/routing/RoutingSession.ts +22 -17
  189. package/src/dht/routing/getPreviousPeer.ts +1 -1
  190. package/src/dht/store/LocalDataStore.ts +18 -17
  191. package/src/dht/store/StoreRpcLocal.ts +118 -113
  192. package/src/dht/store/StoreRpcRemote.ts +7 -23
  193. package/src/exports.ts +1 -1
  194. package/src/helpers/PeerID.ts +8 -4
  195. package/src/helpers/UUID.ts +1 -1
  196. package/src/helpers/{kademliaId.ts → nodeId.ts} +1 -1
  197. package/src/helpers/peerIdFromPeerDescriptor.ts +6 -6
  198. package/src/proto/packages/dht/protos/DhtRpc.client.ts +6 -20
  199. package/src/proto/packages/dht/protos/DhtRpc.server.ts +3 -10
  200. package/src/proto/packages/dht/protos/DhtRpc.ts +103 -135
  201. package/src/transport/RoutingRpcCommunicator.ts +2 -0
  202. package/test/benchmark/Find.test.ts +5 -5
  203. package/test/benchmark/KademliaCorrectness.test.ts +3 -3
  204. package/test/benchmark/SortedContactListBenchmark.test.ts +150 -0
  205. package/test/benchmark/WebsocketServerMemoryLeak.test.ts +41 -0
  206. package/test/benchmark/kademlia-simulation/Contact.ts +1 -1
  207. package/test/benchmark/kademlia-simulation/KademliaSimulation.ts +1 -1
  208. package/test/benchmark/kademlia-simulation/SimulationNode.ts +6 -1
  209. package/test/end-to-end/Layer0-Layer1.test.ts +1 -1
  210. package/test/end-to-end/Layer0.test.ts +4 -4
  211. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +11 -11
  212. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +6 -6
  213. package/test/end-to-end/Layer0Webrtc.test.ts +2 -2
  214. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +3 -3
  215. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +3 -3
  216. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +1 -1
  217. package/test/end-to-end/WebsocketConnectionRequest.test.ts +1 -1
  218. package/test/end-to-end/memory-leak.test.ts +9 -12
  219. package/test/integration/ConnectionLocking.test.ts +2 -2
  220. package/test/integration/ConnectionManager.test.ts +14 -14
  221. package/test/integration/DhtJoinPeerDiscovery.test.ts +3 -3
  222. package/test/integration/DhtNodeExternalAPI.test.ts +10 -7
  223. package/test/integration/DhtNodeRpcRemote.test.ts +4 -4
  224. package/test/integration/DhtRpc.test.ts +6 -6
  225. package/test/integration/Find.test.ts +3 -3
  226. package/test/integration/Layer1-scale.test.ts +3 -3
  227. package/test/integration/Mock-Layer1-Layer0.test.ts +16 -16
  228. package/test/integration/MultipleEntryPointJoining.test.ts +7 -7
  229. package/test/integration/{MigrateData.test.ts → ReplicateData.test.ts} +15 -10
  230. package/test/integration/RouteMessage.test.ts +2 -2
  231. package/test/integration/RouterRpcRemote.test.ts +2 -2
  232. package/test/integration/RpcErrors.test.ts +2 -2
  233. package/test/integration/ScaleDownDht.test.ts +4 -2
  234. package/test/integration/SimultaneousConnections.test.ts +89 -57
  235. package/test/integration/Store.test.ts +33 -13
  236. package/test/integration/StoreAndDelete.test.ts +19 -17
  237. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +21 -21
  238. package/test/integration/StoreRpcRemote.test.ts +3 -3
  239. package/test/integration/WebrtcConnectionManagement.test.ts +2 -2
  240. package/test/integration/WebrtcConnectorRpc.test.ts +1 -1
  241. package/test/integration/WebsocketConnectionManagement.test.ts +41 -3
  242. package/test/integration/WebsocketConnectorRpc.test.ts +5 -7
  243. package/test/unit/ConnectivityHelpers.test.ts +4 -4
  244. package/test/unit/Finder.test.ts +69 -23
  245. package/test/unit/LocalDataStore.test.ts +60 -43
  246. package/test/unit/RandomContactList.test.ts +2 -2
  247. package/test/unit/Router.test.ts +19 -11
  248. package/test/unit/RoutingSession.test.ts +76 -0
  249. package/test/unit/SortedContactList.test.ts +17 -12
  250. package/test/unit/WebsocketConnector.test.ts +1 -1
  251. package/test/unit/connectivityRequestHandler.test.ts +71 -0
  252. package/test/utils/mock/Router.ts +1 -1
  253. package/test/utils/utils.ts +24 -22
  254. package/dist/src/connection/ConnectivityChecker.d.ts +0 -17
  255. package/dist/src/connection/ConnectivityChecker.js +0 -208
  256. package/dist/src/connection/ConnectivityChecker.js.map +0 -1
  257. package/dist/src/dht/contact/Remote.js.map +0 -1
  258. package/dist/src/helpers/kademliaId.d.ts +0 -1
  259. package/dist/src/helpers/kademliaId.js.map +0 -1
  260. 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
- kademliaId: PeerID.fromString('peerWithServer').value,
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
- kademliaId: PeerID.fromString('peerWithoutServer').value,
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
- kademliaId: generateId('peer1'),
20
+ nodeId: generateId('peer1'),
21
21
  type: NodeType.NODEJS
22
22
  }
23
23
 
24
24
  const peerDescriptor2: PeerDescriptor = {
25
- kademliaId: generateId('peer2'),
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
- const res1 = await response1
71
- expect(res1.accepted).toEqual(true)
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
- const res2 = await response2
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
- kademliaId: new Uint8Array(1),
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
- kademliaId: new Uint8Array(1),
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
- kademliaId: new Uint8Array(2),
28
+ nodeId: new Uint8Array(2),
29
29
  type: NodeType.BROWSER
30
30
  }
31
31
 
32
32
  const noServerPeerDescriptor = {
33
- kademliaId: new Uint8Array(3),
33
+ nodeId: new Uint8Array(3),
34
34
  type: NodeType.NODEJS
35
35
  }
36
36
 
@@ -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, PeerIDKey } from '../../src/helpers/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
- kademliaId: PeerID.fromString('peerid').value,
41
+ nodeId: PeerID.fromString('peerid').value,
30
42
  type: NodeType.NODEJS
31
43
  }
32
44
  const peerDescriptor2: PeerDescriptor = {
33
- kademliaId: PeerID.fromString('destination').value,
45
+ nodeId: PeerID.fromString('destination').value,
34
46
  type: NodeType.NODEJS
35
47
  }
36
- const findRequest = createFindRequest(false)
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
- destinationPeer: peerDescriptor1,
54
- sourcePeer: peerDescriptor2
65
+ sourcePeer: peerDescriptor1,
66
+ destinationPeer: peerDescriptor2
55
67
  }
56
68
  const rpcCommunicator = new FakeRpcCommunicator()
57
69
 
58
- beforeEach(() => {
59
- connections = new Map()
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: new MockRouter(),
63
- connections,
73
+ router,
74
+ connections: new Map(),
64
75
  serviceId: 'Finder',
65
76
  localDataStore: new LocalDataStore(),
66
- sessionTransport: new MockTransport(),
67
- addContact: (_contact, _setActive) => {},
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).toEqual('')
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 storer1: PeerDescriptor = {
15
- kademliaId: new Uint8Array([1, 2, 3]),
14
+ const creator1: PeerDescriptor = {
15
+ nodeId: new Uint8Array([1, 2, 3]),
16
16
  type: NodeType.NODEJS
17
17
  }
18
- const storer2: PeerDescriptor = {
19
- kademliaId: new Uint8Array([3, 2, 1]),
18
+ const creator2: PeerDescriptor = {
19
+ nodeId: new Uint8Array([3, 2, 1]),
20
20
  type: NodeType.NODEJS
21
21
  }
22
- const data1 = Any.pack(storer1, PeerDescriptor)
23
- const data2 = Any.pack(storer2, PeerDescriptor)
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(storer1)
35
- localDataStore.storeEntry({ storer: storer1, kademliaId: dataKey.value, data: data1,
36
- ttl: 10000, stale: false, deleted: false, storerTime: Timestamp.now() })
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, storer1)).toBeTrue()
40
+ expect(areEqualPeerDescriptors(fetchedDescriptor, creator1)).toBeTrue()
41
41
  })
42
42
  })
43
43
 
44
44
  it('multiple storers behind one key', () => {
45
- const dataKey = peerIdFromPeerDescriptor(storer1)
46
- localDataStore.storeEntry({ storer: storer1, kademliaId: dataKey.value, data: data1,
47
- ttl: 10000, stale: false, deleted: false, storerTime: Timestamp.now() })
48
- localDataStore.storeEntry({ storer: storer2, kademliaId: dataKey.value,
49
- data: data1, ttl: 10000, stale: false, deleted: false, storerTime: Timestamp.now() })
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, storer1)).toBeTrue()
53
+ expect(areEqualPeerDescriptors(fetchedDescriptor, creator1)).toBeTrue()
54
54
  })
55
55
  })
56
56
 
57
57
  it('can remove data entries', () => {
58
- const dataKey = peerIdFromPeerDescriptor(storer1)
59
- localDataStore.storeEntry({ storer: storer1, kademliaId: dataKey.value, data: data1,
60
- ttl: 10000, stale: false, deleted: false, storerTime: Timestamp.now() })
61
- localDataStore.storeEntry({ storer: storer2, kademliaId: dataKey.value, data: data2,
62
- ttl: 10000, stale: false, deleted: false, storerTime: Timestamp.now() })
63
- localDataStore.deleteEntry(dataKey, storer1)
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, storer2)).toBeTrue()
67
+ expect(areEqualPeerDescriptors(fetchedDescriptor, creator2)).toBeTrue()
68
68
  })
69
69
  })
70
70
 
71
71
  it('can remove all data entries', () => {
72
- const dataKey = peerIdFromPeerDescriptor(storer1)
73
- localDataStore.storeEntry({ storer: storer1, kademliaId: dataKey.value, data: data1,
74
- ttl: 10000, stale: false, deleted: false, storerTime: Timestamp.now() })
75
- localDataStore.storeEntry({ storer: storer2, kademliaId: dataKey.value, data: data2,
76
- ttl: 10000, stale: false, deleted: false, storerTime: Timestamp.now() })
77
- localDataStore.deleteEntry(dataKey, storer1)
78
- localDataStore.deleteEntry(dataKey, storer2)
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(storer1)
85
- localDataStore.storeEntry({ storer: storer1, kademliaId: dataKey.value, data: data1,
86
- ttl: 1000, stale: false, deleted: false, storerTime: Timestamp.now() })
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
- it('can mark data as deleted', () => {
95
- const dataKey = peerIdFromPeerDescriptor(storer1)
96
- localDataStore.storeEntry({ storer: storer1, kademliaId: dataKey.value, data: data1,
97
- ttl: 10000, stale: false, deleted: false, storerTime: Timestamp.now() })
98
- const notDeletedData = localDataStore.getEntry(dataKey)
99
- expect(notDeletedData.get(keyFromPeerDescriptor(storer1))!.deleted).toBeFalse()
100
- localDataStore.markAsDeleted(dataKey.value, peerIdFromPeerDescriptor(storer1))
101
- const deletedData = localDataStore.getEntry(dataKey)
102
- expect(deletedData.get(keyFromPeerDescriptor(storer1))!.deleted).toBeTrue()
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 = (kademliaId: Uint8Array): { getPeerId: () => PeerID } => {
5
- return { getPeerId: () => PeerID.fromValue(kademliaId) }
4
+ const createItem = (nodeId: Uint8Array): { getPeerId: () => PeerID } => {
5
+ return { getPeerId: () => PeerID.fromValue(nodeId) }
6
6
  }
7
7
 
8
8
  describe('RandomContactList', () => {
@@ -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 { Message, MessageType, NodeType, PeerDescriptor, RouteMessageAck, RouteMessageWrapper } from '../../src/proto/packages/dht/protos/DhtRpc'
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
- kademliaId: peerId.value,
22
+ nodeId: peerId.value,
15
23
  type: NodeType.NODEJS
16
24
  }
17
25
  const peerDescriptor2: PeerDescriptor = {
18
- kademliaId: PeerID.fromString('destination').value,
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('No routing candidates found')
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).toEqual('')
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).toEqual('')
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).toEqual('')
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('message given to routeMessage() service is likely a duplicate')
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('No routing candidates found')
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).toEqual('')
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('message given to forwardMessage() service is likely a duplicate')
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
+ })