@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,316 +0,0 @@
1
- import { MetricsContext, waitForCondition } from '@streamr/utils'
2
- import { ConnectionManager } from '../../src/connection/ConnectionManager'
3
- import { DefaultConnectorFacade, DefaultConnectorFacadeOptions } from '../../src/connection/ConnectorFacade'
4
- import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
5
- import { SimulatorTransport } from '../../src/connection/simulator/SimulatorTransport'
6
- import { Message, PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
7
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
8
- import { createMockPeerDescriptor } from '../utils/utils'
9
- import { getRandomRegion } from '../../src/connection/simulator/pings'
10
- import { MockTransport } from '../utils/mock/MockTransport'
11
- import { toNodeId } from '../../src/identifiers'
12
-
13
- const BASE_MESSAGE: Message = {
14
- serviceId: 'serviceId',
15
- messageId: '1',
16
- body: {
17
- oneofKind: 'rpcMessage',
18
- rpcMessage: RpcMessage.create()
19
- }
20
- }
21
-
22
- const createConnectionManager = (localPeerDescriptor: PeerDescriptor, opts: Omit<DefaultConnectorFacadeOptions, 'createLocalPeerDescriptor'>) => {
23
- return new ConnectionManager({
24
- createConnectorFacade: () => new DefaultConnectorFacade({
25
- createLocalPeerDescriptor: async () => localPeerDescriptor,
26
- ...opts
27
- }),
28
- metricsContext: new MetricsContext(),
29
- allowIncomingPrivateConnections: false
30
- })
31
- }
32
-
33
- describe('SimultaneousConnections', () => {
34
-
35
- let simulator: Simulator
36
- let simTransport1: SimulatorTransport
37
- let simTransport2: SimulatorTransport
38
- const peerDescriptor1 = createMockPeerDescriptor({ region: getRandomRegion() })
39
- const peerDescriptor2 = createMockPeerDescriptor({ region: getRandomRegion() })
40
-
41
- beforeEach(async () => {
42
- simulator = new Simulator(LatencyType.REAL)
43
- simTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
44
- await simTransport1.start()
45
- simTransport2 = new SimulatorTransport(peerDescriptor2, simulator)
46
- await simTransport2.start()
47
- })
48
-
49
- afterEach(async () => {
50
- await simTransport1.stop()
51
- await simTransport2.stop()
52
- })
53
-
54
- it('simultanous simulated connection', async () => {
55
- const msg1: Message = {
56
- ...BASE_MESSAGE,
57
- targetDescriptor: peerDescriptor2
58
- }
59
- const msg2: Message = {
60
- ...BASE_MESSAGE,
61
- targetDescriptor: peerDescriptor1
62
- }
63
-
64
- const promise1 = new Promise<void>((resolve, _reject) => {
65
- simTransport1.on('message', async (message: Message) => {
66
- expect(message.body.oneofKind).toBe('rpcMessage')
67
- resolve()
68
- })
69
- })
70
- const promise2 = new Promise<void>((resolve, _reject) => {
71
- simTransport2.on('message', async (message: Message) => {
72
- expect(message.body.oneofKind).toBe('rpcMessage')
73
- resolve()
74
- })
75
- })
76
- await Promise.all([
77
- promise1,
78
- promise2,
79
- simTransport1.send(msg1),
80
- simTransport2.send(msg2)
81
- ])
82
- await waitForCondition(() => simTransport2.hasConnection(toNodeId(peerDescriptor1)))
83
- await waitForCondition(() => simTransport1.hasConnection(toNodeId(peerDescriptor2)))
84
- })
85
-
86
- describe('Websocket 2 servers', () => {
87
-
88
- let connectionManager1: ConnectionManager
89
- let connectionManager2: ConnectionManager
90
-
91
- const wsPeerDescriptor1 = createMockPeerDescriptor({
92
- websocket: {
93
- host: '127.0.0.1',
94
- port: 43432,
95
- tls: false
96
- },
97
- region: getRandomRegion()
98
- })
99
-
100
- const wsPeerDescriptor2 = createMockPeerDescriptor({
101
- websocket: {
102
- host: '127.0.0.1',
103
- port: 43433,
104
- tls: false
105
- },
106
- region: getRandomRegion()
107
- })
108
-
109
- beforeEach(async () => {
110
-
111
- const websocketPortRange = { min: 43432, max: 43433 }
112
- connectionManager1 = createConnectionManager(wsPeerDescriptor1, {
113
- transport: new MockTransport(),
114
- websocketPortRange,
115
- entryPoints: [wsPeerDescriptor1],
116
- websocketServerEnableTls: false
117
- })
118
- connectionManager2 = createConnectionManager(wsPeerDescriptor2, {
119
- transport: new MockTransport(),
120
- websocketPortRange,
121
- entryPoints: [wsPeerDescriptor1],
122
- websocketServerEnableTls: false
123
- })
124
- await connectionManager1.start()
125
- await connectionManager2.start()
126
- })
127
-
128
- afterEach(async () => {
129
- await connectionManager1.stop()
130
- await connectionManager2.stop()
131
- })
132
-
133
- it('Simultaneous Connections', async () => {
134
- const msg1: Message = {
135
- ...BASE_MESSAGE,
136
- targetDescriptor: wsPeerDescriptor2
137
- }
138
- const msg2: Message = {
139
- ...BASE_MESSAGE,
140
- targetDescriptor: wsPeerDescriptor1
141
- }
142
-
143
- const promise1 = new Promise<void>((resolve, _reject) => {
144
- connectionManager1.on('message', async (message: Message) => {
145
- expect(message.body.oneofKind).toBe('rpcMessage')
146
- resolve()
147
- })
148
- })
149
- const promise2 = new Promise<void>((resolve, _reject) => {
150
- connectionManager2.on('message', async (message: Message) => {
151
- expect(message.body.oneofKind).toBe('rpcMessage')
152
- resolve()
153
- })
154
- })
155
-
156
- await Promise.all([
157
- promise1,
158
- promise2,
159
- connectionManager1.send(msg1),
160
- connectionManager2.send(msg2)
161
- ])
162
-
163
- await waitForCondition(() => connectionManager1.hasConnection(toNodeId(wsPeerDescriptor2)))
164
- await waitForCondition(() => connectionManager2.hasConnection(toNodeId(wsPeerDescriptor1)))
165
- })
166
- })
167
-
168
- describe('Websocket 1 server (ConnectionRequests)', () => {
169
-
170
- let simTransport1: SimulatorTransport
171
- let simTransport2: SimulatorTransport
172
- let connectionManager1: ConnectionManager
173
- let connectionManager2: ConnectionManager
174
-
175
- const wsPeerDescriptor1 = createMockPeerDescriptor({
176
- websocket: {
177
- host: '127.0.0.1',
178
- port: 43432,
179
- tls: false
180
- },
181
- region: getRandomRegion()
182
- })
183
-
184
- const wsPeerDescriptor2 = createMockPeerDescriptor({ region: getRandomRegion() })
185
-
186
- beforeEach(async () => {
187
- simulator = new Simulator(LatencyType.REAL)
188
- simTransport1 = new SimulatorTransport(wsPeerDescriptor1, simulator)
189
- await simTransport1.start()
190
- simTransport2 = new SimulatorTransport(wsPeerDescriptor2, simulator)
191
- await simTransport2.start()
192
-
193
- connectionManager1 = createConnectionManager(wsPeerDescriptor1, {
194
- transport: simTransport1,
195
- websocketPortRange: { min: 43432, max: 43432 },
196
- entryPoints: [wsPeerDescriptor1],
197
- websocketServerEnableTls: false
198
- })
199
- connectionManager2 = createConnectionManager(wsPeerDescriptor2, {
200
- transport: simTransport2
201
- })
202
- await connectionManager1.start()
203
- await connectionManager2.start()
204
- })
205
-
206
- afterEach(async () => {
207
- await connectionManager1.stop()
208
- await connectionManager2.stop()
209
- await simTransport1.stop()
210
- await simTransport2.stop()
211
- })
212
-
213
- it('Simultaneous Connections', async () => {
214
- const msg1: Message = {
215
- ...BASE_MESSAGE,
216
- targetDescriptor: wsPeerDescriptor2
217
- }
218
- const msg2: Message = {
219
- ...BASE_MESSAGE,
220
- targetDescriptor: wsPeerDescriptor1
221
- }
222
-
223
- const promise1 = new Promise<void>((resolve, _reject) => {
224
- connectionManager1.on('message', async (message: Message) => {
225
- expect(message.body.oneofKind).toBe('rpcMessage')
226
- resolve()
227
- })
228
- })
229
- const promise2 = new Promise<void>((resolve, _reject) => {
230
- connectionManager2.on('message', async (message: Message) => {
231
- expect(message.body.oneofKind).toBe('rpcMessage')
232
- resolve()
233
- })
234
- })
235
-
236
- await Promise.all([
237
- promise1,
238
- promise2,
239
- connectionManager1.send(msg1),
240
- connectionManager2.send(msg2)
241
- ])
242
-
243
- await waitForCondition(() => connectionManager1.hasConnection(toNodeId(wsPeerDescriptor2)))
244
- await waitForCondition(() => connectionManager2.hasConnection(toNodeId(wsPeerDescriptor1)))
245
- })
246
- })
247
-
248
- describe('WebRTC', () => {
249
-
250
- let simTransport1: SimulatorTransport
251
- let simTransport2: SimulatorTransport
252
- let connectionManager1: ConnectionManager
253
- let connectionManager2: ConnectionManager
254
-
255
- const wrtcPeerDescriptor1 = createMockPeerDescriptor({ region: getRandomRegion() })
256
- const wrtcPeerDescriptor2 = createMockPeerDescriptor({ region: getRandomRegion() })
257
-
258
- beforeEach(async () => {
259
- simulator = new Simulator(LatencyType.REAL)
260
- simTransport1 = new SimulatorTransport(wrtcPeerDescriptor1, simulator)
261
- await simTransport1.start()
262
- simTransport2 = new SimulatorTransport(wrtcPeerDescriptor2, simulator)
263
- await simTransport2.start()
264
- connectionManager1 = createConnectionManager(wrtcPeerDescriptor1, {
265
- transport: simTransport1,
266
- })
267
- connectionManager2 = createConnectionManager(wrtcPeerDescriptor2, {
268
- transport: simTransport2,
269
- })
270
- await connectionManager1.start()
271
- await connectionManager2.start()
272
- })
273
-
274
- afterEach(async () => {
275
- await connectionManager1.stop()
276
- await connectionManager2.stop()
277
- await simTransport1.stop()
278
- await simTransport2.stop()
279
- })
280
-
281
- it('Simultaneous Connections', async () => {
282
- const msg1: Message = {
283
- ...BASE_MESSAGE,
284
- targetDescriptor: wrtcPeerDescriptor2
285
- }
286
- const msg2: Message = {
287
- ...BASE_MESSAGE,
288
- targetDescriptor: wrtcPeerDescriptor1
289
- }
290
-
291
- const promise1 = new Promise<void>((resolve, _reject) => {
292
- connectionManager1.on('message', async (message: Message) => {
293
- expect(message.body.oneofKind).toBe('rpcMessage')
294
- resolve()
295
- })
296
- })
297
- const promise2 = new Promise<void>((resolve, _reject) => {
298
- connectionManager2.on('message', async (message: Message) => {
299
- expect(message.body.oneofKind).toBe('rpcMessage')
300
- resolve()
301
- })
302
- })
303
-
304
- await Promise.all([
305
- promise1,
306
- promise2,
307
- connectionManager1.send(msg1),
308
- connectionManager2.send(msg2)
309
- ])
310
-
311
- await waitForCondition(() => connectionManager1.hasConnection(toNodeId(wrtcPeerDescriptor2)))
312
- await waitForCondition(() => connectionManager2.hasConnection(toNodeId(wrtcPeerDescriptor1)))
313
- })
314
- })
315
-
316
- })
@@ -1,85 +0,0 @@
1
- import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
2
- import { DhtNode } from '../../src/dht/DhtNode'
3
- import { toDhtAddress, toNodeId } from '../../src/identifiers'
4
- import { PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
5
- import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
6
- import { createMockConnectionDhtNode, createMockPeerDescriptor, waitForStableTopology } from '../utils/utils'
7
-
8
- const NUM_NODES = 100
9
- const MAX_CONNECTIONS = 20
10
- const K = 4
11
-
12
- describe('Storing data in DHT', () => {
13
-
14
- let entryPoint: DhtNode
15
- let nodes: DhtNode[]
16
- let entrypointDescriptor: PeerDescriptor
17
- const simulator = new Simulator(LatencyType.REAL)
18
-
19
- const getRandomNode = () => {
20
- return nodes[Math.floor(Math.random() * nodes.length)]
21
- }
22
-
23
- beforeEach(async () => {
24
- nodes = []
25
- entryPoint = await createMockConnectionDhtNode(simulator,
26
- undefined, K, MAX_CONNECTIONS)
27
- nodes.push(entryPoint)
28
- entrypointDescriptor = entryPoint.getLocalPeerDescriptor()
29
- nodes.push(entryPoint)
30
- for (let i = 1; i < NUM_NODES; i++) {
31
- const node = await createMockConnectionDhtNode(simulator,
32
- undefined, K, MAX_CONNECTIONS, 60000)
33
- nodes.push(node)
34
- }
35
- await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
36
- await waitForStableTopology(nodes, MAX_CONNECTIONS)
37
- }, 90000)
38
-
39
- afterEach(async () => {
40
- await Promise.all(nodes.map((node) => node.stop()))
41
- }, 15000)
42
-
43
- it('Storing data works', async () => {
44
- const storingNodeIndex = 34
45
- const entry = createMockDataEntry()
46
- const successfulStorers = await nodes[storingNodeIndex].storeDataToDht(
47
- toDhtAddress(entry.key),
48
- entry.data!
49
- )
50
- expect(successfulStorers.length).toBeGreaterThan(4)
51
- }, 30000)
52
-
53
- it('Storing and getting data works', async () => {
54
- const storingNode = getRandomNode()
55
- const entry = createMockDataEntry()
56
- const successfulStorers = await storingNode.storeDataToDht(
57
- toDhtAddress(entry.key),
58
- entry.data!
59
- )
60
- expect(successfulStorers.length).toBeGreaterThan(4)
61
- const fetchingNode = getRandomNode()
62
- const results = await fetchingNode.fetchDataFromDht(toDhtAddress(entry.key))
63
- results.forEach((result) => {
64
- expectEqualData(result, entry)
65
- })
66
- }, 30000)
67
-
68
- it('storing with explicit creator', async () => {
69
- const storingNode = getRandomNode()
70
- const entry = createMockDataEntry()
71
- const requestor = createMockPeerDescriptor()
72
- const successfulStorers = await storingNode.storeDataToDht(
73
- toDhtAddress(entry.key),
74
- entry.data!,
75
- toDhtAddress(requestor.nodeId)
76
- )
77
- expect(successfulStorers.length).toBeGreaterThan(4)
78
- const fetchingNode = getRandomNode()
79
- const results = await fetchingNode.fetchDataFromDht(toDhtAddress(entry.key))
80
- results.forEach((result) => {
81
- expectEqualData(result, entry)
82
- expect(toDhtAddress(result.creator)).toEqual(toNodeId(requestor))
83
- })
84
- }, 30000)
85
- })
@@ -1,77 +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 { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
5
- import { randomDhtAddress, toDhtAddress } from '../../src/identifiers'
6
- import { wait } from '@streamr/utils'
7
-
8
- const NUM_NODES = 5
9
- const MAX_CONNECTIONS = 5
10
- const K = 4
11
-
12
- describe('Storing data in DHT', () => {
13
-
14
- let nodes: DhtNode[]
15
- const simulator = new Simulator(LatencyType.REAL)
16
-
17
- const getRandomNode = () => {
18
- return nodes[Math.floor(Math.random() * nodes.length)]
19
- }
20
-
21
- beforeEach(async () => {
22
- nodes = []
23
- const entryPoint = await createMockConnectionDhtNode(simulator,
24
- randomDhtAddress(), K, MAX_CONNECTIONS)
25
- nodes.push(entryPoint)
26
- for (let i = 1; i < NUM_NODES; i++) {
27
- const node = await createMockConnectionDhtNode(simulator,
28
- undefined, K, MAX_CONNECTIONS, 60000)
29
- nodes.push(node)
30
- }
31
- await Promise.all(nodes.map((node) => node.joinDht([entryPoint.getLocalPeerDescriptor()])))
32
- await waitForStableTopology(nodes, MAX_CONNECTIONS)
33
- }, 90000)
34
-
35
- afterEach(async () => {
36
- await Promise.all(nodes.map((node) => node.stop()))
37
- })
38
-
39
- it('Data can be deleted', async () => {
40
- const storingNode = getRandomNode()
41
- const entry = createMockDataEntry()
42
- const successfulStorers = await storingNode.storeDataToDht(toDhtAddress(entry.key), entry.data!)
43
- expect(successfulStorers.length).toBeGreaterThan(4)
44
- await storingNode.deleteDataFromDht(toDhtAddress(entry.key), true)
45
- // Wait for the delete operation to propagate
46
- await wait(500)
47
- const fetchingNode = getRandomNode()
48
- const results = await fetchingNode.fetchDataFromDht(toDhtAddress(entry.key))
49
- results.forEach((result) => {
50
- expect(result.deleted).toBeTrue()
51
- expectEqualData(result, entry)
52
- })
53
- }, 90000)
54
-
55
- it('Data can be deleted and re-stored', async () => {
56
- const storingNode = getRandomNode()
57
- const entry = createMockDataEntry()
58
- const successfulStorers1 = await storingNode.storeDataToDht(toDhtAddress(entry.key), entry.data!)
59
- expect(successfulStorers1.length).toBeGreaterThan(4)
60
- await storingNode.deleteDataFromDht(toDhtAddress(entry.key), true)
61
- // Wait for the delete operation to propagate
62
- await wait(500)
63
- const fetchingNode = getRandomNode()
64
- const results1 = await fetchingNode.fetchDataFromDht(toDhtAddress(entry.key))
65
- results1.forEach((result) => {
66
- expect(result.deleted).toBeTrue()
67
- expectEqualData(result, entry)
68
- })
69
- const successfulStorers2 = await storingNode.storeDataToDht(toDhtAddress(entry.key), entry.data!)
70
- expect(successfulStorers2.length).toBeGreaterThan(4)
71
- const results2 = await fetchingNode.fetchDataFromDht(toDhtAddress(entry.key))
72
- results2.forEach((result) => {
73
- expect(result.deleted).toBeFalse()
74
- expectEqualData(result, entry)
75
- })
76
- }, 90000)
77
- })
@@ -1,59 +0,0 @@
1
- import { createMockConnectionDhtNode } from '../utils/utils'
2
- import { DhtNode } from '../../src/dht/DhtNode'
3
- import { Simulator } from '../../src/connection/simulator/Simulator'
4
- import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
5
- import { toDhtAddress } from '../../src/identifiers'
6
-
7
- describe('Storing data in DHT with two peers', () => {
8
-
9
- let entryPoint: DhtNode
10
- let node1: DhtNode
11
- let node2: DhtNode
12
- let simulator: Simulator | undefined
13
-
14
- beforeEach(async () => {
15
- simulator = new Simulator()
16
- entryPoint = await createMockConnectionDhtNode(simulator)
17
- node1 = await createMockConnectionDhtNode(simulator)
18
- node2 = await createMockConnectionDhtNode(simulator)
19
-
20
- await entryPoint.start()
21
- await node1.start()
22
- await node2.start()
23
-
24
- await entryPoint.joinDht([entryPoint.getLocalPeerDescriptor()])
25
- node1.joinDht([entryPoint.getLocalPeerDescriptor()]).catch(() => {})
26
- node2.joinDht([entryPoint.getLocalPeerDescriptor()]).catch(() => {})
27
- await Promise.all([
28
- node1.waitForNetworkConnectivity(),
29
- node2.waitForNetworkConnectivity()
30
- ])
31
- })
32
-
33
- afterEach(async () => {
34
- await entryPoint.stop()
35
- await node1.stop()
36
- await node2.stop()
37
- simulator?.stop()
38
- })
39
-
40
- it('Node can store on three peer DHT', async () => {
41
- const storedData1 = createMockDataEntry()
42
- const storedData2 = createMockDataEntry()
43
- // Here we effectively test that fetching "null" data doesn't take too long. A test timeout here indicates an issue.
44
- await node1.fetchDataFromDht(toDhtAddress(storedData1.key))
45
- await node2.fetchDataFromDht(toDhtAddress(storedData1.key))
46
-
47
- await node1.storeDataToDht(toDhtAddress(storedData1.key), storedData1.data!)
48
- await node2.storeDataToDht(toDhtAddress(storedData1.key), storedData1.data!)
49
- await entryPoint.storeDataToDht(toDhtAddress(storedData2.key), storedData2.data!)
50
- const foundData1 = await node1.fetchDataFromDht(toDhtAddress(storedData1.key))
51
- const foundData2 = await node2.fetchDataFromDht(toDhtAddress(storedData1.key))
52
- const foundData3 = await entryPoint.fetchDataFromDht(toDhtAddress(storedData2.key))
53
- expectEqualData(foundData1[0], storedData1)
54
- expectEqualData(foundData1[1], storedData1)
55
- expectEqualData(foundData2[0], storedData1)
56
- expectEqualData(foundData2[1], storedData1)
57
- expectEqualData(foundData3[0], storedData2)
58
- }, 30000)
59
- })
@@ -1,51 +0,0 @@
1
- import { createMockConnectionDhtNode } from '../utils/utils'
2
- import { DhtNode } from '../../src/dht/DhtNode'
3
- import { Simulator } from '../../src/connection/simulator/Simulator'
4
- import { waitForCondition } from '@streamr/utils'
5
- import { createMockDataEntry, expectEqualData } from '../utils/mock/mockDataEntry'
6
- import { toDhtAddress } from '../../src/identifiers'
7
-
8
- describe('Storing data in DHT with two peers', () => {
9
-
10
- let entryPoint: DhtNode
11
- let otherNode: DhtNode
12
- let simulator: Simulator | undefined
13
-
14
- beforeEach(async () => {
15
- simulator = new Simulator()
16
- entryPoint = await createMockConnectionDhtNode(simulator)
17
- otherNode = await createMockConnectionDhtNode(simulator)
18
-
19
- await entryPoint.start()
20
- await otherNode.start()
21
-
22
- await entryPoint.joinDht([entryPoint.getLocalPeerDescriptor()])
23
- await otherNode.joinDht([entryPoint.getLocalPeerDescriptor()])
24
- })
25
-
26
- afterEach(async () => {
27
- await entryPoint.stop()
28
- await otherNode.stop()
29
- simulator?.stop()
30
- })
31
-
32
- it('Node can store on two peer DHT', async () => {
33
- const storedData1 = createMockDataEntry()
34
- const storedData2 = createMockDataEntry()
35
- await otherNode.storeDataToDht(toDhtAddress(storedData1.key), storedData1.data!)
36
- await entryPoint.storeDataToDht(toDhtAddress(storedData2.key), storedData2.data!)
37
- const foundData1 = await otherNode.fetchDataFromDht(toDhtAddress(storedData1.key))
38
- const foundData2 = await entryPoint.fetchDataFromDht(toDhtAddress(storedData2.key))
39
- expectEqualData(foundData1[0], storedData1)
40
- expectEqualData(foundData2[0], storedData2)
41
- })
42
-
43
- it('Can store on one peer DHT', async () => {
44
- await otherNode.stop()
45
- await waitForCondition(() => entryPoint.getNeighborCount() === 0)
46
- const storedData = createMockDataEntry()
47
- await entryPoint.storeDataToDht(toDhtAddress(storedData.key), storedData.data!)
48
- const foundData = await entryPoint.fetchDataFromDht(toDhtAddress(storedData.key))
49
- expectEqualData(foundData[0], storedData)
50
- }, 60000)
51
- })
@@ -1,54 +0,0 @@
1
- import { RpcCommunicator } from '@streamr/proto-rpc'
2
- import {
3
- StoreDataRequest,
4
- StoreDataResponse
5
- } from '../../generated/packages/dht/protos/DhtRpc'
6
- import { createMockPeerDescriptor, mockStoreRpc } from '../utils/utils'
7
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
8
- import { StoreRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client'
9
- import { StoreRpcRemote } from '../../src/dht/store/StoreRpcRemote'
10
- import { createMockDataEntry } from '../utils/mock/mockDataEntry'
11
- import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
12
- import { randomDhtAddress, toNodeId, toDhtAddressRaw } from '../../src/identifiers'
13
-
14
- describe('StoreRpcRemote', () => {
15
-
16
- let rpcRemote: StoreRpcRemote
17
- let clientRpcCommunicator: RpcCommunicator<DhtCallContext>
18
- let serverRpcCommunicator: RpcCommunicator<DhtCallContext>
19
- const clientPeerDescriptor = createMockPeerDescriptor()
20
- const serverPeerDescriptor = createMockPeerDescriptor()
21
- const data = createMockDataEntry()
22
- const request: StoreDataRequest = {
23
- key: data.key,
24
- data: data.data,
25
- creator: toDhtAddressRaw(randomDhtAddress()),
26
- ttl: 10
27
- }
28
-
29
- beforeEach(() => {
30
- clientRpcCommunicator = new RpcCommunicator()
31
- serverRpcCommunicator = new RpcCommunicator()
32
- serverRpcCommunicator.registerRpcMethod(StoreDataRequest, StoreDataResponse, 'storeData', mockStoreRpc.storeData)
33
- clientRpcCommunicator.setOutgoingMessageListener(async (message: RpcMessage) => {
34
- serverRpcCommunicator.handleIncomingMessage(message, new DhtCallContext())
35
- })
36
- serverRpcCommunicator.setOutgoingMessageListener(async (message: RpcMessage) => {
37
- clientRpcCommunicator.handleIncomingMessage(message, new DhtCallContext())
38
- })
39
- rpcRemote = new StoreRpcRemote(clientPeerDescriptor, serverPeerDescriptor, clientRpcCommunicator, StoreRpcClient)
40
- })
41
-
42
- it('storeData happy path', async () => {
43
- await expect(rpcRemote.storeData(request)).toResolve()
44
- })
45
-
46
- it('storeData rejects', async () => {
47
- serverRpcCommunicator.registerRpcMethod(StoreDataRequest, StoreDataResponse, 'storeData', mockStoreRpc.throwStoreDataError)
48
- await expect(rpcRemote.storeData(request)).rejects.toThrowError(
49
- 'Could not store data to'
50
- + ` ${toNodeId(serverPeerDescriptor)} from ${toNodeId(clientPeerDescriptor)}`
51
- + ' Error: Mock'
52
- )
53
- })
54
- })