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