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