@streamr/dht 102.0.0-beta.1 → 102.0.0-beta.3

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 (211) hide show
  1. package/dist/generated/google/protobuf/any.d.ts +180 -0
  2. package/dist/generated/google/protobuf/any.js +155 -0
  3. package/dist/generated/google/protobuf/any.js.map +1 -0
  4. package/dist/generated/google/protobuf/empty.d.ts +31 -0
  5. package/dist/generated/google/protobuf/empty.js +32 -0
  6. package/dist/generated/google/protobuf/empty.js.map +1 -0
  7. package/dist/generated/google/protobuf/timestamp.d.ts +155 -0
  8. package/dist/generated/google/protobuf/timestamp.js +136 -0
  9. package/dist/generated/google/protobuf/timestamp.js.map +1 -0
  10. package/dist/generated/packages/dht/protos/DhtRpc.client.d.ts +361 -0
  11. package/dist/generated/packages/dht/protos/DhtRpc.client.js +285 -0
  12. package/dist/generated/packages/dht/protos/DhtRpc.client.js.map +1 -0
  13. package/dist/generated/packages/dht/protos/DhtRpc.d.ts +999 -0
  14. package/dist/generated/packages/dht/protos/DhtRpc.js +677 -0
  15. package/dist/generated/packages/dht/protos/DhtRpc.js.map +1 -0
  16. package/dist/generated/packages/dht/protos/DhtRpc.server.d.ts +162 -0
  17. package/dist/generated/packages/dht/protos/DhtRpc.server.js +3 -0
  18. package/dist/generated/packages/dht/protos/DhtRpc.server.js.map +1 -0
  19. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.d.ts +87 -0
  20. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js +66 -0
  21. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js.map +1 -0
  22. package/dist/package.json +7 -7
  23. package/package.json +7 -7
  24. package/eslint.config.mjs +0 -12
  25. package/src/connection/Connection.ts +0 -28
  26. package/src/connection/ConnectionLockRpcLocal.ts +0 -78
  27. package/src/connection/ConnectionLockRpcRemote.ts +0 -64
  28. package/src/connection/ConnectionLockStates.ts +0 -131
  29. package/src/connection/ConnectionManager.ts +0 -661
  30. package/src/connection/ConnectionsView.ts +0 -8
  31. package/src/connection/ConnectorFacade.ts +0 -217
  32. package/src/connection/Handshaker.ts +0 -209
  33. package/src/connection/IConnection.ts +0 -40
  34. package/src/connection/ManagedConnection.ts +0 -113
  35. package/src/connection/OutputBuffer.ts +0 -28
  36. package/src/connection/PendingConnection.ts +0 -68
  37. package/src/connection/connectivityChecker.ts +0 -108
  38. package/src/connection/connectivityRequestHandler.ts +0 -116
  39. package/src/connection/simulator/Simulator.ts +0 -369
  40. package/src/connection/simulator/SimulatorConnection.ts +0 -137
  41. package/src/connection/simulator/SimulatorConnector.ts +0 -98
  42. package/src/connection/simulator/SimulatorTransport.ts +0 -15
  43. package/src/connection/simulator/pings.ts +0 -42
  44. package/src/connection/webrtc/BrowserWebrtcConnection.ts +0 -242
  45. package/src/connection/webrtc/IWebrtcConnection.ts +0 -24
  46. package/src/connection/webrtc/NodeWebrtcConnection.ts +0 -245
  47. package/src/connection/webrtc/WebrtcConnector.ts +0 -234
  48. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +0 -108
  49. package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +0 -60
  50. package/src/connection/webrtc/iceServerAsString.ts +0 -15
  51. package/src/connection/websocket/AbstractWebsocketClientConnection.ts +0 -122
  52. package/src/connection/websocket/AutoCertifierClientFacade.ts +0 -89
  53. package/src/connection/websocket/BrowserWebsocketClientConnection.ts +0 -44
  54. package/src/connection/websocket/NodeWebsocketClientConnection.ts +0 -39
  55. package/src/connection/websocket/WebsocketClientConnector.ts +0 -119
  56. package/src/connection/websocket/WebsocketClientConnectorRpcLocal.ts +0 -38
  57. package/src/connection/websocket/WebsocketClientConnectorRpcRemote.ts +0 -19
  58. package/src/connection/websocket/WebsocketServer.ts +0 -164
  59. package/src/connection/websocket/WebsocketServerConnection.ts +0 -109
  60. package/src/connection/websocket/WebsocketServerConnector.ts +0 -290
  61. package/src/dht/DhtNode.ts +0 -683
  62. package/src/dht/DhtNodeRpcLocal.ts +0 -84
  63. package/src/dht/DhtNodeRpcRemote.ts +0 -107
  64. package/src/dht/ExternalApiRpcLocal.ts +0 -58
  65. package/src/dht/ExternalApiRpcRemote.ts +0 -41
  66. package/src/dht/PeerManager.ts +0 -305
  67. package/src/dht/contact/Contact.ts +0 -19
  68. package/src/dht/contact/ContactList.ts +0 -43
  69. package/src/dht/contact/RandomContactList.ts +0 -56
  70. package/src/dht/contact/RingContactList.ts +0 -143
  71. package/src/dht/contact/RpcRemote.ts +0 -72
  72. package/src/dht/contact/SortedContactList.ts +0 -173
  73. package/src/dht/contact/getClosestNodes.ts +0 -24
  74. package/src/dht/contact/ringIdentifiers.ts +0 -62
  75. package/src/dht/discovery/DiscoverySession.ts +0 -129
  76. package/src/dht/discovery/PeerDiscovery.ts +0 -244
  77. package/src/dht/discovery/RingDiscoverySession.ts +0 -148
  78. package/src/dht/recursive-operation/RecursiveOperationManager.ts +0 -251
  79. package/src/dht/recursive-operation/RecursiveOperationRpcLocal.ts +0 -34
  80. package/src/dht/recursive-operation/RecursiveOperationRpcRemote.ts +0 -43
  81. package/src/dht/recursive-operation/RecursiveOperationSession.ts +0 -231
  82. package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +0 -35
  83. package/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.ts +0 -30
  84. package/src/dht/routing/DuplicateDetector.ts +0 -34
  85. package/src/dht/routing/Router.ts +0 -246
  86. package/src/dht/routing/RouterRpcLocal.ts +0 -78
  87. package/src/dht/routing/RouterRpcRemote.ts +0 -80
  88. package/src/dht/routing/RoutingSession.ts +0 -243
  89. package/src/dht/routing/RoutingTablesCache.ts +0 -60
  90. package/src/dht/routing/getPreviousPeer.ts +0 -6
  91. package/src/dht/store/LocalDataStore.ts +0 -84
  92. package/src/dht/store/StoreManager.ts +0 -170
  93. package/src/dht/store/StoreRpcLocal.ts +0 -89
  94. package/src/dht/store/StoreRpcRemote.ts +0 -32
  95. package/src/exports.ts +0 -33
  96. package/src/helpers/AddressTools.ts +0 -28
  97. package/src/helpers/Connectivity.ts +0 -19
  98. package/src/helpers/browser/isBrowserEnvironment.ts +0 -1
  99. package/src/helpers/browser/isBrowserEnvironment_override.ts +0 -3
  100. package/src/helpers/createPeerDescriptor.ts +0 -57
  101. package/src/helpers/createPeerDescriptorSignaturePayload.ts +0 -28
  102. package/src/helpers/debugHelpers.ts +0 -9
  103. package/src/helpers/errors.ts +0 -49
  104. package/src/helpers/offering.ts +0 -15
  105. package/src/helpers/protoClasses.ts +0 -57
  106. package/src/helpers/protoToString.ts +0 -21
  107. package/src/helpers/version.ts +0 -32
  108. package/src/identifiers.ts +0 -29
  109. package/src/rpc-protocol/DhtCallContext.ts +0 -14
  110. package/src/rpc-protocol/DhtRpcOptions.ts +0 -10
  111. package/src/transport/ITransport.ts +0 -37
  112. package/src/transport/ListeningRpcCommunicator.ts +0 -32
  113. package/src/transport/RoutingRpcCommunicator.ts +0 -66
  114. package/src/types/ServiceID.ts +0 -1
  115. package/src/types/textencoding.d.ts +0 -6
  116. package/test/benchmark/Find.test.ts +0 -72
  117. package/test/benchmark/KademliaCorrectness.test.ts +0 -114
  118. package/test/benchmark/RingCorrectness.test.ts +0 -157
  119. package/test/benchmark/SortedContactListBenchmark.test.ts +0 -108
  120. package/test/benchmark/WebsocketServerMemoryLeak.test.ts +0 -41
  121. package/test/benchmark/hybrid-network-simulation/RingContactList.test.ts +0 -71
  122. package/test/end-to-end/GeoIpLayer0.test.ts +0 -55
  123. package/test/end-to-end/Layer0-Layer1.test.ts +0 -93
  124. package/test/end-to-end/Layer0.test.ts +0 -76
  125. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +0 -110
  126. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +0 -137
  127. package/test/end-to-end/Layer0Webrtc.test.ts +0 -85
  128. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +0 -82
  129. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +0 -76
  130. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +0 -52
  131. package/test/end-to-end/WebsocketConnectionRequest.test.ts +0 -69
  132. package/test/end-to-end/memory-leak.test.ts +0 -80
  133. package/test/integration/ConnectionLocking.test.ts +0 -192
  134. package/test/integration/ConnectionManager.test.ts +0 -528
  135. package/test/integration/ConnectivityChecking.test.ts +0 -53
  136. package/test/integration/DhtJoinPeerDiscovery.test.ts +0 -49
  137. package/test/integration/DhtNode.test.ts +0 -66
  138. package/test/integration/DhtNodeExternalAPI.test.ts +0 -48
  139. package/test/integration/DhtNodeRpcRemote.test.ts +0 -66
  140. package/test/integration/DhtRpc.test.ts +0 -121
  141. package/test/integration/Find.test.ts +0 -45
  142. package/test/integration/GeoIpConnectivityChecking.test.ts +0 -72
  143. package/test/integration/Layer1-scale.test.ts +0 -189
  144. package/test/integration/Mock-Layer1-Layer0.test.ts +0 -85
  145. package/test/integration/MultipleEntryPointJoining.test.ts +0 -105
  146. package/test/integration/ReplicateData.test.ts +0 -104
  147. package/test/integration/RouteMessage.test.ts +0 -230
  148. package/test/integration/RouterRpcRemote.test.ts +0 -77
  149. package/test/integration/SimultaneousConnections.test.ts +0 -316
  150. package/test/integration/Store.test.ts +0 -85
  151. package/test/integration/StoreAndDelete.test.ts +0 -77
  152. package/test/integration/StoreOnDhtWithThreeNodes.test.ts +0 -59
  153. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +0 -51
  154. package/test/integration/StoreRpcRemote.test.ts +0 -54
  155. package/test/integration/WebrtcConnectionManagement.test.ts +0 -191
  156. package/test/integration/WebrtcConnectorRpc.test.ts +0 -125
  157. package/test/integration/Websocket.test.ts +0 -65
  158. package/test/integration/WebsocketClientConnectorRpc.test.ts +0 -69
  159. package/test/integration/WebsocketConnectionManagement.test.ts +0 -191
  160. package/test/integration/rpc-connections-over-webrtc.test.ts +0 -123
  161. package/test/kademlia-simulation/data/nodeids.json +0 -13002
  162. package/test/kademlia-simulation/data/orderedneighbors.json +0 -1001
  163. package/test/types/global.d.ts +0 -1
  164. package/test/unit/AddressTools.test.ts +0 -44
  165. package/test/unit/AutoCertifierClientFacade.test.ts +0 -58
  166. package/test/unit/ConnectionManager.test.ts +0 -65
  167. package/test/unit/ConnectivityHelpers.test.ts +0 -61
  168. package/test/unit/DiscoverySession.test.ts +0 -87
  169. package/test/unit/DuplicateDetector.test.ts +0 -31
  170. package/test/unit/Handshaker.test.ts +0 -169
  171. package/test/unit/ListeningRpcCommunicator.test.ts +0 -52
  172. package/test/unit/LocalDataStore.test.ts +0 -108
  173. package/test/unit/ManagedConnection.test.ts +0 -58
  174. package/test/unit/PeerManager.test.ts +0 -93
  175. package/test/unit/PendingConnection.test.ts +0 -57
  176. package/test/unit/ProtobufMessage.test.ts +0 -21
  177. package/test/unit/RandomContactList.test.ts +0 -58
  178. package/test/unit/RecursiveOperationManager.test.ts +0 -161
  179. package/test/unit/RecursiveOperationSession.test.ts +0 -68
  180. package/test/unit/Router.test.ts +0 -137
  181. package/test/unit/RoutingSession.test.ts +0 -86
  182. package/test/unit/SortedContactList.test.ts +0 -115
  183. package/test/unit/StoreManager.test.ts +0 -146
  184. package/test/unit/StoreRpcLocal.test.ts +0 -167
  185. package/test/unit/WebrtcConnection.test.ts +0 -29
  186. package/test/unit/WebrtcConnector.test.ts +0 -56
  187. package/test/unit/WebsocketClientConnector.test.ts +0 -101
  188. package/test/unit/WebsocketServer.test.ts +0 -66
  189. package/test/unit/WebsocketServerConnector.test.ts +0 -102
  190. package/test/unit/connectivityRequestHandler.test.ts +0 -104
  191. package/test/unit/createPeerDescriptor.test.ts +0 -69
  192. package/test/unit/customMatchers.test.ts +0 -34
  193. package/test/unit/getClosestNodes.test.ts +0 -30
  194. package/test/unit/version.test.ts +0 -18
  195. package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +0 -18
  196. package/test/utils/FakeConnectorFacade.ts +0 -41
  197. package/test/utils/FakeRpcCommunicator.ts +0 -23
  198. package/test/utils/FakeTransport.ts +0 -79
  199. package/test/utils/customMatchers.ts +0 -71
  200. package/test/utils/mock/MockConnection.ts +0 -26
  201. package/test/utils/mock/MockConnectionsView.ts +0 -18
  202. package/test/utils/mock/MockRouter.ts +0 -62
  203. package/test/utils/mock/MockRpcCommunicator.ts +0 -7
  204. package/test/utils/mock/MockTransport.ts +0 -26
  205. package/test/utils/mock/mockDataEntry.ts +0 -38
  206. package/test/utils/topology.ts +0 -79
  207. package/test/utils/utils.ts +0 -268
  208. package/tsconfig.browser.json +0 -17
  209. package/tsconfig.jest.json +0 -25
  210. package/tsconfig.json +0 -3
  211. package/tsconfig.node.json +0 -24
@@ -1,528 +0,0 @@
1
- import { Logger, MetricsContext, until, 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 until(() => connectionManager2.getConnections().length === 0)
517
- expect(connectionManager1.getConnections().length).toEqual(1)
518
-
519
- await connectionManager1.disablePrivateClientMode()
520
- await until(() => 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.protocolVersion).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 { until } 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 until(() => 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
- })