@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,528 +0,0 @@
1
- import { Logger, MetricsContext, waitForCondition, waitForEvent3 } from '@streamr/utils'
2
- import { MarkOptional } from 'ts-essentials'
3
- import { ConnectionManager } from '../../src/connection/ConnectionManager'
4
- import { DefaultConnectorFacade, DefaultConnectorFacadeOptions } from '../../src/connection/ConnectorFacade'
5
- import { Simulator } from '../../src/connection/simulator/Simulator'
6
- import { SimulatorTransport } from '../../src/connection/simulator/SimulatorTransport'
7
- import { createPeerDescriptor } from '../../src/helpers/createPeerDescriptor'
8
- import { randomDhtAddress, toDhtAddressRaw } from '../../src/identifiers'
9
- import { ConnectivityResponse, Message, NodeType, PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
10
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
11
- import { TransportEvents } from '../../src/transport/ITransport'
12
- import { createMockPeerDescriptor } from '../utils/utils'
13
- import { getRandomRegion } from '../../src/connection/simulator/pings'
14
- import { range } from 'lodash'
15
-
16
- const SERVICE_ID = 'demo'
17
-
18
- const logger = new Logger(module)
19
-
20
- // TODO: refactor this test file to use beforeEach and AfterEach for proper teardown
21
- describe('ConnectionManager', () => {
22
-
23
- const mockPeerDescriptor1 = createMockPeerDescriptor()
24
- const mockPeerDescriptor2 = createMockPeerDescriptor()
25
- const mockPeerDescriptor3 = createMockPeerDescriptor()
26
- const mockPeerDescriptor4 = createMockPeerDescriptor()
27
- const simulator = new Simulator()
28
- const mockTransport = new SimulatorTransport(mockPeerDescriptor1, simulator)
29
- const mockConnectorTransport1 = new SimulatorTransport(mockPeerDescriptor1, simulator)
30
- const mockConnectorTransport2 = new SimulatorTransport(mockPeerDescriptor2, simulator)
31
- let createLocalPeerDescriptor: jest.Mock<PeerDescriptor, [ConnectivityResponse]>
32
-
33
- const createConnectionManager = (opts: MarkOptional<DefaultConnectorFacadeOptions, 'createLocalPeerDescriptor'>) => {
34
- return new ConnectionManager({
35
- createConnectorFacade: () => new DefaultConnectorFacade({
36
- createLocalPeerDescriptor: async (response) => createLocalPeerDescriptor(response),
37
- websocketServerEnableTls: false,
38
- ...opts
39
- }),
40
- metricsContext: new MetricsContext(),
41
- allowIncomingPrivateConnections: true
42
- })
43
- }
44
-
45
- beforeEach(() => {
46
- createLocalPeerDescriptor = jest.fn().mockImplementation((response) => createPeerDescriptor(response, getRandomRegion()))
47
- })
48
-
49
- beforeAll(async () => {
50
- await mockTransport.start()
51
- await mockConnectorTransport1.start()
52
- await mockConnectorTransport2.start()
53
- })
54
-
55
- afterAll(async () => {
56
- await mockTransport.stop()
57
- await mockConnectorTransport1.stop()
58
- await mockConnectorTransport2.stop()
59
- })
60
-
61
- it('Can start alone', async () => {
62
-
63
- const connectionManager = createConnectionManager({
64
- transport: mockTransport,
65
- websocketHost: '127.0.0.1',
66
- websocketPortRange: { min: 9991, max: 9991 }
67
- })
68
-
69
- await connectionManager.start()
70
- expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
71
-
72
- await connectionManager.stop()
73
- })
74
-
75
- it('Throws an async exception if fails to connect to entrypoints', async () => {
76
-
77
- const entryPoint = createMockPeerDescriptor({
78
- websocket: { host: '127.0.0.1', port: 12345, tls: false }
79
- })
80
- const connectionManager = createConnectionManager({
81
- transport: mockTransport,
82
- websocketPortRange: { min: 9992, max: 9992 },
83
- entryPoints: [entryPoint]
84
- })
85
-
86
- await expect(connectionManager.start()).rejects.toThrow('Failed to connect to the entrypoints')
87
-
88
- await connectionManager.stop()
89
- }, 15000)
90
-
91
- it('Succesfully connectivityChecks if at least one entry point is online', async () => {
92
- // Create offline PeerDescriptors
93
- const entryPoints = range(4).map((i) => {
94
- return createMockPeerDescriptor({
95
- websocket: { host: '127.0.0.1', port: 12345 + i, tls: false }
96
- })
97
- })
98
- entryPoints.push(createMockPeerDescriptor({
99
- websocket: { host: '127.0.0.1', port: 9998, tls: false }
100
- }))
101
- const connectionManager = createConnectionManager({
102
- transport: mockTransport,
103
- websocketPortRange: { min: 9998, max: 9998 },
104
- entryPoints
105
- })
106
- await connectionManager.start()
107
- expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
108
-
109
- await connectionManager.stop()
110
- }, 20000)
111
-
112
- it('Can probe connectivity in open internet', async () => {
113
- const connectionManager1 = createConnectionManager({
114
- transport: mockTransport,
115
- websocketHost: '127.0.0.1',
116
- websocketPortRange: { min: 9993, max: 9993 }
117
- })
118
-
119
- await connectionManager1.start()
120
- expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
121
-
122
- const entryPoint = createMockPeerDescriptor({
123
- websocket: { host: '127.0.0.1', port: 9993, tls: false }
124
- })
125
- const connectionManager2 = createConnectionManager({
126
- transport: mockConnectorTransport2,
127
- websocketPortRange: { min: 9994, max: 9994 },
128
- entryPoints: [entryPoint]
129
- })
130
-
131
- await connectionManager2.start()
132
- expect(createLocalPeerDescriptor.mock.calls[1][0].host).toEqual('127.0.0.1')
133
-
134
- await connectionManager1.stop()
135
- await connectionManager2.stop()
136
- })
137
-
138
- it('Can send data to other connectionmanager over websocket', async () => {
139
- const connectionManager1 = createConnectionManager({
140
- transport: mockConnectorTransport1,
141
- websocketHost: '127.0.0.1',
142
- websocketPortRange: { min: 9995, max: 9995 }
143
- })
144
-
145
- await connectionManager1.start()
146
- expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
147
-
148
- const connectionManager2 = createConnectionManager({
149
- transport: mockConnectorTransport2,
150
- websocketPortRange: { min: 9996, max: 9996 },
151
- entryPoints: [
152
- connectionManager1.getLocalPeerDescriptor()
153
- ]
154
- })
155
-
156
- await connectionManager2.start()
157
- expect(createLocalPeerDescriptor.mock.calls[1][0].host).toEqual('127.0.0.1')
158
-
159
- const msg: Message = {
160
- serviceId: SERVICE_ID,
161
- messageId: '1',
162
- body: {
163
- oneofKind: 'rpcMessage',
164
- rpcMessage: RpcMessage.create()
165
- }
166
- }
167
-
168
- const promise = new Promise<void>((resolve, _reject) => {
169
- connectionManager2.on('message', async (message: Message) => {
170
- expect(message.body.oneofKind).toBe('rpcMessage')
171
- resolve()
172
- })
173
- })
174
-
175
- const connectedPromise1 = new Promise<void>((resolve, _reject) => {
176
- connectionManager1.on('connected', () => {
177
- resolve()
178
- })
179
- })
180
-
181
- const connectedPromise2 = new Promise<void>((resolve, _reject) => {
182
- connectionManager2.on('connected', () => {
183
- resolve()
184
- })
185
- })
186
-
187
- msg.targetDescriptor = connectionManager2.getLocalPeerDescriptor()
188
- connectionManager1.send(msg)
189
-
190
- await Promise.all([promise, connectedPromise1, connectedPromise2])
191
-
192
- await connectionManager1.stop()
193
- await connectionManager2.stop()
194
- })
195
-
196
- it('Can disconnect websockets', async () => {
197
- const connectionManager1 = createConnectionManager({
198
- transport: mockConnectorTransport1,
199
- websocketHost: '127.0.0.1',
200
- websocketPortRange: { min: 9997, max: 9997 },
201
- })
202
-
203
- await connectionManager1.start()
204
- expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
205
-
206
- const connectionManager2 = createConnectionManager({
207
- transport: mockConnectorTransport2,
208
- websocketPortRange: { min: 9999, max: 9999 },
209
- websocketServerEnableTls: false,
210
- entryPoints: [
211
- connectionManager1.getLocalPeerDescriptor()
212
- ]
213
- })
214
-
215
- await connectionManager2.start()
216
-
217
- const msg: Message = {
218
- serviceId: SERVICE_ID,
219
- messageId: '1',
220
- body: {
221
- oneofKind: 'rpcMessage',
222
- rpcMessage: RpcMessage.create()
223
- }
224
- }
225
-
226
- const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
227
- connectionManager1.on('disconnected', () => {
228
- logger.info('disconnectedPromise1')
229
- resolve()
230
- })
231
- })
232
-
233
- const disconnectedPromise2 = new Promise<void>((resolve, _reject) => {
234
- connectionManager2.on('disconnected', () => {
235
- logger.info('disconnectedPromise2')
236
- resolve()
237
- })
238
- })
239
-
240
- const promise = new Promise<void>((resolve, _reject) => {
241
- connectionManager2.on('message', async (message: Message) => {
242
- expect(message.body.oneofKind).toBe('rpcMessage')
243
- resolve()
244
- })
245
- })
246
- msg.targetDescriptor = connectionManager2.getLocalPeerDescriptor()
247
- connectionManager1.send(msg)
248
-
249
- await promise
250
-
251
- // @ts-expect-error private field
252
- connectionManager1.closeConnection(connectionManager2.getLocalPeerDescriptor())
253
-
254
- await Promise.all([disconnectedPromise1, disconnectedPromise2])
255
-
256
- await connectionManager1.stop()
257
- await connectionManager2.stop()
258
- })
259
-
260
- it('Connects and disconnects over simulated connections', async () => {
261
- const simulator2 = new Simulator()
262
- const connectionManager3 = new SimulatorTransport(mockPeerDescriptor3, simulator2)
263
- await connectionManager3.start()
264
- const connectionManager4 = new SimulatorTransport(mockPeerDescriptor4, simulator2)
265
- await connectionManager4.start()
266
-
267
- const msg: Message = {
268
- serviceId: SERVICE_ID,
269
- messageId: '1',
270
- body: {
271
- oneofKind: 'rpcMessage',
272
- rpcMessage: RpcMessage.create()
273
- }
274
- }
275
-
276
- const dataPromise = new Promise<void>((resolve, _reject) => {
277
- connectionManager4.on('message', async (message: Message) => {
278
- expect(message.body.oneofKind).toBe('rpcMessage')
279
- resolve()
280
- })
281
- })
282
-
283
- const connectedPromise1 = new Promise<void>((resolve, _reject) => {
284
- connectionManager4.on('connected', () => {
285
- resolve()
286
- })
287
- })
288
-
289
- const connectedPromise2 = new Promise<void>((resolve, _reject) => {
290
- connectionManager3.on('connected', () => {
291
- resolve()
292
- })
293
- })
294
-
295
- const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
296
- connectionManager4.on('disconnected', () => {
297
- resolve()
298
- })
299
- })
300
-
301
- const disconnectedPromise2 = new Promise<void>((resolve, _reject) => {
302
- connectionManager3.on('disconnected', () => {
303
- resolve()
304
- })
305
- })
306
- msg.targetDescriptor = mockPeerDescriptor4
307
- connectionManager3.send(msg)
308
-
309
- await Promise.all([dataPromise, connectedPromise1, connectedPromise2])
310
-
311
- // @ts-expect-error private field
312
- connectionManager3.closeConnection(mockPeerDescriptor4)
313
-
314
- await Promise.all([disconnectedPromise1, disconnectedPromise2])
315
- await connectionManager3.stop()
316
- await connectionManager4.stop()
317
- simulator2.stop()
318
- })
319
-
320
- it('Cannot send to own WebsocketServer if nodeIds do not match', async () => {
321
- const connectionManager1 = createConnectionManager({
322
- transport: mockTransport,
323
- websocketHost: '127.0.0.1',
324
- websocketPortRange: { min: 10001, max: 10001 }
325
- })
326
-
327
- await connectionManager1.start()
328
- expect(createLocalPeerDescriptor.mock.calls[0][0].host).toEqual('127.0.0.1')
329
-
330
- const peerDescriptor = connectionManager1.getLocalPeerDescriptor()
331
- peerDescriptor.nodeId = new Uint8Array([12, 12, 12, 12])
332
- const msg: Message = {
333
- serviceId: SERVICE_ID,
334
- messageId: '1',
335
- targetDescriptor: peerDescriptor,
336
- body: {
337
- oneofKind: 'rpcMessage',
338
- rpcMessage: RpcMessage.create()
339
- }
340
- }
341
- await expect(connectionManager1.send(msg))
342
- .rejects
343
- .toThrow('Cannot send to self')
344
-
345
- await connectionManager1.stop()
346
- })
347
-
348
- it('Cannot send to a WebSocketServer if nodeIds do not match', async () => {
349
-
350
- const peerDescriptor1 = createMockPeerDescriptor({
351
- websocket: {
352
- host: '127.0.0.1',
353
- port: 10002,
354
- tls: false
355
- }
356
- })
357
- const peerDescriptor2 = createMockPeerDescriptor({
358
- websocket: {
359
- host: '127.0.0.1',
360
- port: 10003,
361
- tls: false
362
- }
363
- })
364
- const connectionManager1 = createConnectionManager({
365
- transport: mockTransport,
366
- websocketHost: '127.0.0.1',
367
- websocketPortRange: { min: 10002, max: 10002 },
368
- createLocalPeerDescriptor: async () => peerDescriptor1
369
- })
370
-
371
- await connectionManager1.start()
372
-
373
- const connectionManager2 = createConnectionManager({
374
- transport: mockTransport,
375
- websocketHost: '127.0.0.1',
376
- websocketPortRange: { min: 10003, max: 10003 },
377
- createLocalPeerDescriptor: async () => peerDescriptor2
378
- })
379
-
380
- await connectionManager2.start()
381
-
382
- const msg: Message = {
383
- serviceId: SERVICE_ID,
384
- messageId: '1',
385
- targetDescriptor: {
386
- // This is not the correct nodeId of peerDescriptor2
387
- nodeId: toDhtAddressRaw(randomDhtAddress()),
388
- type: NodeType.NODEJS,
389
- websocket: peerDescriptor2.websocket
390
- },
391
- body: {
392
- oneofKind: 'rpcMessage',
393
- rpcMessage: RpcMessage.create()
394
- }
395
- }
396
- await Promise.all([
397
- waitForEvent3<TransportEvents>(connectionManager1, 'disconnected'),
398
- expect(connectionManager1.send(msg))
399
- .rejects
400
- .toThrow()
401
- ])
402
-
403
- await connectionManager1.stop()
404
- await connectionManager2.stop()
405
- }, 10000)
406
-
407
- it('Failed autocertification', async () => {
408
- const connectionManager1 = createConnectionManager({
409
- transport: mockTransport,
410
- websocketHost: '127.0.0.1',
411
- autoCertifierUrl: 'https://127.0.0.1:12333',
412
- websocketServerEnableTls: true,
413
- websocketPortRange: { min: 10004, max: 10004 }
414
- })
415
-
416
- await connectionManager1.start()
417
- expect(connectionManager1.getLocalPeerDescriptor().websocket!.tls).toEqual(false)
418
- await connectionManager1.stop()
419
- })
420
-
421
- it('Stopping ConnectionManager is cleaned up from peers', async () => {
422
- const connectionManager1 = createConnectionManager({
423
- transport: mockTransport,
424
- websocketHost: '127.0.0.1',
425
- websocketServerEnableTls: false,
426
- websocketPortRange: { min: 10005, max: 10005 }
427
- })
428
-
429
- await connectionManager1.start()
430
-
431
- const connectionManager2 = createConnectionManager({
432
- transport: mockTransport,
433
- websocketHost: '127.0.0.1',
434
- websocketServerEnableTls: false,
435
- websocketPortRange: { min: 10006, max: 10006 }
436
- })
437
-
438
- await connectionManager2.start()
439
-
440
- const msg: Message = {
441
- serviceId: SERVICE_ID,
442
- messageId: '1',
443
- body: {
444
- oneofKind: 'rpcMessage',
445
- rpcMessage: RpcMessage.create()
446
- },
447
- targetDescriptor: connectionManager1.getLocalPeerDescriptor()
448
- }
449
-
450
- const connectedPromise1 = new Promise<void>((resolve, _reject) => {
451
- connectionManager1.on('connected', () => {
452
- resolve()
453
- })
454
- })
455
-
456
- const connectedPromise2 = new Promise<void>((resolve, _reject) => {
457
- connectionManager2.on('connected', () => {
458
- resolve()
459
- })
460
- })
461
- await Promise.all([connectedPromise1, connectedPromise2, connectionManager2.send(msg)])
462
-
463
- expect(connectionManager1.getConnections().length).toEqual(1)
464
- expect(connectionManager2.getConnections().length).toEqual(1)
465
-
466
- await connectionManager1.stop()
467
-
468
- expect(connectionManager2.getConnections().length).toEqual(0)
469
-
470
- await connectionManager2.stop()
471
- })
472
-
473
- it('private connections', async () => {
474
- const connectionManager1 = createConnectionManager({
475
- transport: mockTransport,
476
- websocketHost: '127.0.0.1',
477
- websocketServerEnableTls: false,
478
- websocketPortRange: { min: 10009, max: 10009 }
479
- })
480
-
481
- await connectionManager1.start()
482
-
483
- const connectionManager2 = createConnectionManager({
484
- transport: mockTransport,
485
- websocketHost: '127.0.0.1',
486
- websocketServerEnableTls: false,
487
- websocketPortRange: { min: 10010, max: 100010 }
488
- })
489
-
490
- await connectionManager2.start()
491
-
492
- const msg: Message = {
493
- serviceId: SERVICE_ID,
494
- messageId: '1',
495
- body: {
496
- oneofKind: 'rpcMessage',
497
- rpcMessage: RpcMessage.create()
498
- },
499
- targetDescriptor: connectionManager1.getLocalPeerDescriptor()
500
- }
501
-
502
- const connectedPromise1 = new Promise<void>((resolve, _reject) => {
503
- connectionManager1.on('connected', () => {
504
- resolve()
505
- })
506
- })
507
-
508
- const connectedPromise2 = new Promise<void>((resolve, _reject) => {
509
- connectionManager2.on('connected', () => {
510
- resolve()
511
- })
512
- })
513
- await Promise.all([connectedPromise1, connectedPromise2, connectionManager2.send(msg)])
514
-
515
- await connectionManager1.enablePrivateClientMode()
516
- await waitForCondition(() => connectionManager2.getConnections().length === 0)
517
- expect(connectionManager1.getConnections().length).toEqual(1)
518
-
519
- await connectionManager1.disablePrivateClientMode()
520
- await waitForCondition(() => connectionManager2.getConnections().length === 1)
521
- expect(connectionManager1.getConnections().length).toEqual(1)
522
-
523
- await connectionManager1.stop()
524
- await connectionManager2.stop()
525
-
526
- })
527
-
528
- })
@@ -1,53 +0,0 @@
1
- import { MetricsContext } from '@streamr/utils'
2
- import { ConnectionManager } from '../../src/connection/ConnectionManager'
3
- import { DefaultConnectorFacade } from '../../src/connection/ConnectorFacade'
4
- import { MockTransport } from '../utils/mock/MockTransport'
5
- import { createMockPeerDescriptor } from '../utils/utils'
6
- import { sendConnectivityRequest } from '../../src/connection/connectivityChecker'
7
- import { LOCAL_PROTOCOL_VERSION } from '../../src/helpers/version'
8
-
9
- describe('ConnectivityChecking', () => {
10
-
11
- let server: ConnectionManager
12
- const PORT = 15000
13
- const HOST = '127.0.0.1'
14
-
15
- beforeEach(async () => {
16
- server = new ConnectionManager({
17
- createConnectorFacade: () => new DefaultConnectorFacade({
18
- createLocalPeerDescriptor: async () => {
19
- return {
20
- ...createMockPeerDescriptor(),
21
- websocket: {
22
- host: HOST,
23
- port: PORT,
24
- tls: false
25
- }
26
- }
27
- },
28
- websocketHost: HOST,
29
- websocketPortRange: { min: PORT, max: PORT },
30
- websocketServerEnableTls: false,
31
- transport: new MockTransport()
32
- }),
33
- metricsContext: new MetricsContext(),
34
- allowIncomingPrivateConnections: false
35
- })
36
- await server.start()
37
- })
38
-
39
- afterEach(async () => {
40
- await server.stop()
41
- })
42
-
43
- it('connectivityCheck with compatible version', async () => {
44
- const request = {
45
- host: HOST,
46
- port: PORT,
47
- tls: false,
48
- allowSelfSignedCertificate: false
49
- }
50
- const response = await sendConnectivityRequest(request, server.getLocalPeerDescriptor())
51
- expect(response.version).toEqual(LOCAL_PROTOCOL_VERSION)
52
- })
53
- })
@@ -1,49 +0,0 @@
1
- import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
2
- import { getRandomRegion } from '../../src/connection/simulator/pings'
3
- import { DhtNode } from '../../src/dht/DhtNode'
4
- import { toDhtAddress } from '../../src/identifiers'
5
- import { createMockConnectionDhtNode, createMockPeerDescriptor } from '../utils/utils'
6
-
7
- const NUM_OF_NODES_PER_KBUCKET = 8
8
-
9
- const runTest = async (latencyType: LatencyType) => {
10
- const simulator = new Simulator(latencyType)
11
- const entrypointDescriptor = createMockPeerDescriptor({
12
- region: getRandomRegion()
13
- })
14
- const entryPoint = await createMockConnectionDhtNode(simulator, toDhtAddress(entrypointDescriptor.nodeId), NUM_OF_NODES_PER_KBUCKET)
15
- const nodes: DhtNode[] = []
16
- for (let i = 1; i < 100; i++) {
17
- const node = await createMockConnectionDhtNode(simulator, undefined, NUM_OF_NODES_PER_KBUCKET)
18
- nodes.push(node)
19
- }
20
-
21
- await entryPoint.joinDht([entrypointDescriptor])
22
- await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
23
- nodes.forEach((node) => {
24
- expect(node.getNeighborCount()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
25
- expect(node.getClosestContacts().length).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
26
- })
27
- expect(entryPoint.getNeighborCount()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
28
-
29
- await Promise.all([
30
- entryPoint.stop(),
31
- ...nodes.map((node) => node.stop())
32
- ])
33
- simulator.stop()
34
- }
35
-
36
- describe('DhtJoinPeerDiscovery', () => {
37
-
38
- it('latency: none', async () => {
39
- await runTest(LatencyType.NONE)
40
- }, 60 * 1000)
41
-
42
- it('latency: random', async () => {
43
- await runTest(LatencyType.RANDOM)
44
- }, 60 * 1000)
45
-
46
- it('latency: real', async () => {
47
- await runTest(LatencyType.REAL)
48
- }, 60 * 1000)
49
- })
@@ -1,66 +0,0 @@
1
- import { waitForCondition } from '@streamr/utils'
2
- import { range, without } from 'lodash'
3
- import { DhtNodeRpcLocal } from '../../src/dht/DhtNodeRpcLocal'
4
- import { DhtNode, ListeningRpcCommunicator, toNodeId } from '../../src/exports'
5
- import { ClosestPeersRequest, ClosestPeersResponse, PeerDescriptor, PingRequest, PingResponse } from '../../generated/packages/dht/protos/DhtRpc'
6
- import { FakeEnvironment } from '../utils/FakeTransport'
7
- import { createMockPeerDescriptor } from '../utils/utils'
8
-
9
- const OTHER_NODE_COUNT = 3
10
- const SERVICE_ID_LAYER0 = 'layer0'
11
-
12
- describe('DhtNode', () => {
13
-
14
- let localPeerDescriptor: PeerDescriptor
15
- let entryPointPeerDescriptor: PeerDescriptor
16
- let otherPeerDescriptors: PeerDescriptor[]
17
-
18
- const startRemoteNode = (peerDescriptor: PeerDescriptor, environment: FakeEnvironment) => {
19
- const epRpcCommunicator = new ListeningRpcCommunicator(SERVICE_ID_LAYER0, environment.createTransport(peerDescriptor))
20
- const dhtNodeRpcLocal = new DhtNodeRpcLocal({
21
- peerDiscoveryQueryBatchSize: undefined as any,
22
- getNeighbors: () => without(getAllPeerDescriptors(), peerDescriptor),
23
- getClosestRingContactsTo: undefined as any,
24
- addContact: () => {},
25
- removeContact: undefined as any,
26
- })
27
- epRpcCommunicator.registerRpcMethod(PingRequest, PingResponse, 'ping',
28
- (req: PingRequest, context) => dhtNodeRpcLocal.ping(req, context))
29
- epRpcCommunicator.registerRpcMethod(ClosestPeersRequest, ClosestPeersResponse, 'getClosestPeers',
30
- (req: ClosestPeersRequest, context) => dhtNodeRpcLocal.getClosestPeers(req, context))
31
- }
32
-
33
- const getAllPeerDescriptors = () => {
34
- return [localPeerDescriptor, entryPointPeerDescriptor, ...otherPeerDescriptors]
35
- }
36
-
37
- beforeAll(() => {
38
- localPeerDescriptor = createMockPeerDescriptor()
39
- entryPointPeerDescriptor = createMockPeerDescriptor()
40
- otherPeerDescriptors = range(OTHER_NODE_COUNT).map(() => createMockPeerDescriptor())
41
- })
42
-
43
- it('start node and join DHT', async () => {
44
- const environment = new FakeEnvironment()
45
- startRemoteNode(entryPointPeerDescriptor, environment)
46
- for (const other of otherPeerDescriptors) {
47
- startRemoteNode(other, environment)
48
- }
49
-
50
- const transport = environment.createTransport(localPeerDescriptor)
51
- const localNode = new DhtNode({
52
- peerDescriptor: localPeerDescriptor,
53
- transport,
54
- connectionsView: transport,
55
- entryPoints: [entryPointPeerDescriptor]
56
- })
57
- await localNode.start()
58
- await localNode.joinDht([entryPointPeerDescriptor])
59
- await localNode.waitForNetworkConnectivity()
60
-
61
- await waitForCondition(() => localNode.getNeighborCount() === otherPeerDescriptors.length + 1)
62
- const expectedNodeIds = without(getAllPeerDescriptors(), localPeerDescriptor).map((n) => toNodeId(n))
63
- const actualNodeIds = localNode.getClosestContacts().map((n) => toNodeId(n))
64
- expect(actualNodeIds).toIncludeSameMembers(expectedNodeIds)
65
- })
66
- })