@streamr/dht 102.0.0-beta.0 → 102.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/dist/generated/packages/dht/protos/DhtRpc.d.ts +16 -8
  2. package/dist/generated/packages/dht/protos/DhtRpc.js +7 -5
  3. package/dist/generated/packages/dht/protos/DhtRpc.js.map +1 -1
  4. package/dist/package.json +15 -16
  5. package/dist/src/connection/ConnectionManager.js +18 -8
  6. package/dist/src/connection/ConnectionManager.js.map +1 -1
  7. package/dist/src/connection/Handshaker.d.ts +1 -1
  8. package/dist/src/connection/Handshaker.js +9 -5
  9. package/dist/src/connection/Handshaker.js.map +1 -1
  10. package/dist/src/connection/ManagedConnection.js +17 -7
  11. package/dist/src/connection/ManagedConnection.js.map +1 -1
  12. package/dist/src/connection/connectivityChecker.js +20 -10
  13. package/dist/src/connection/connectivityChecker.js.map +1 -1
  14. package/dist/src/connection/connectivityRequestHandler.js +3 -3
  15. package/dist/src/connection/connectivityRequestHandler.js.map +1 -1
  16. package/dist/src/connection/simulator/Simulator.js +3 -2
  17. package/dist/src/connection/simulator/Simulator.js.map +1 -1
  18. package/dist/src/connection/simulator/pings.d.ts +1 -1
  19. package/dist/src/connection/simulator/pings.js +3 -3
  20. package/dist/src/connection/simulator/pings.js.map +1 -1
  21. package/dist/src/connection/webrtc/NodeWebrtcConnection.js +0 -2
  22. package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
  23. package/dist/src/connection/webrtc/WebrtcConnector.js +19 -9
  24. package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
  25. package/dist/src/connection/webrtc/iceServerAsString.js +1 -2
  26. package/dist/src/connection/webrtc/iceServerAsString.js.map +1 -1
  27. package/dist/src/connection/websocket/AbstractWebsocketClientConnection.d.ts +0 -2
  28. package/dist/src/connection/websocket/WebsocketClientConnectorRpcLocal.d.ts +0 -1
  29. package/dist/src/connection/websocket/WebsocketServerConnection.d.ts +0 -1
  30. package/dist/src/connection/websocket/WebsocketServerConnector.js +28 -18
  31. package/dist/src/connection/websocket/WebsocketServerConnector.js.map +1 -1
  32. package/dist/src/dht/DhtNode.d.ts +1 -0
  33. package/dist/src/dht/DhtNode.js +3 -2
  34. package/dist/src/dht/DhtNode.js.map +1 -1
  35. package/dist/src/dht/DhtNodeRpcLocal.d.ts +1 -1
  36. package/dist/src/dht/PeerManager.d.ts +2 -1
  37. package/dist/src/dht/PeerManager.js +2 -1
  38. package/dist/src/dht/PeerManager.js.map +1 -1
  39. package/dist/src/dht/contact/SortedContactList.js +1 -1
  40. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  41. package/dist/src/dht/discovery/DiscoverySession.d.ts +0 -1
  42. package/dist/src/dht/discovery/PeerDiscovery.d.ts +0 -1
  43. package/dist/src/dht/discovery/RingDiscoverySession.d.ts +0 -1
  44. package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +2 -2
  45. package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
  46. package/dist/src/dht/routing/RoutingSession.js +2 -2
  47. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  48. package/dist/src/dht/routing/RoutingTablesCache.d.ts +1 -1
  49. package/dist/src/dht/store/LocalDataStore.js +1 -1
  50. package/dist/src/dht/store/LocalDataStore.js.map +1 -1
  51. package/dist/src/dht/store/StoreManager.d.ts +1 -1
  52. package/dist/src/dht/store/StoreRpcLocal.d.ts +1 -1
  53. package/dist/src/helpers/AddressTools.js +2 -3
  54. package/dist/src/helpers/AddressTools.js.map +1 -1
  55. package/dist/src/helpers/debugHelpers.js +2 -2
  56. package/dist/src/helpers/debugHelpers.js.map +1 -1
  57. package/dist/src/helpers/protoClasses.d.ts +1 -1
  58. package/dist/src/helpers/protoClasses.js.map +1 -1
  59. package/dist/src/helpers/protoToString.js +1 -2
  60. package/dist/src/helpers/protoToString.js.map +1 -1
  61. package/dist/src/helpers/version.d.ts +1 -1
  62. package/dist/src/helpers/version.js +4 -4
  63. package/dist/src/helpers/version.js.map +1 -1
  64. package/eslint.config.mjs +12 -0
  65. package/jest.config.ts +12 -0
  66. package/package.json +15 -16
  67. package/protos/DhtRpc.proto +6 -4
  68. package/.eslintignore +0 -5
  69. package/.eslintrc +0 -3
  70. package/generated/google/protobuf/any.ts +0 -326
  71. package/generated/google/protobuf/empty.ts +0 -81
  72. package/generated/google/protobuf/timestamp.ts +0 -287
  73. package/generated/packages/dht/protos/DhtRpc.client.ts +0 -419
  74. package/generated/packages/dht/protos/DhtRpc.server.ts +0 -165
  75. package/generated/packages/dht/protos/DhtRpc.ts +0 -1266
  76. package/generated/packages/proto-rpc/protos/ProtoRpc.ts +0 -108
  77. package/jest.config.js +0 -5
  78. package/src/connection/Connection.ts +0 -28
  79. package/src/connection/ConnectionLockRpcLocal.ts +0 -78
  80. package/src/connection/ConnectionLockRpcRemote.ts +0 -64
  81. package/src/connection/ConnectionLockStates.ts +0 -131
  82. package/src/connection/ConnectionManager.ts +0 -661
  83. package/src/connection/ConnectionsView.ts +0 -8
  84. package/src/connection/ConnectorFacade.ts +0 -217
  85. package/src/connection/Handshaker.ts +0 -205
  86. package/src/connection/IConnection.ts +0 -40
  87. package/src/connection/ManagedConnection.ts +0 -113
  88. package/src/connection/OutputBuffer.ts +0 -28
  89. package/src/connection/PendingConnection.ts +0 -68
  90. package/src/connection/connectivityChecker.ts +0 -108
  91. package/src/connection/connectivityRequestHandler.ts +0 -116
  92. package/src/connection/simulator/Simulator.ts +0 -368
  93. package/src/connection/simulator/SimulatorConnection.ts +0 -137
  94. package/src/connection/simulator/SimulatorConnector.ts +0 -98
  95. package/src/connection/simulator/SimulatorTransport.ts +0 -15
  96. package/src/connection/simulator/pings.ts +0 -42
  97. package/src/connection/webrtc/BrowserWebrtcConnection.ts +0 -242
  98. package/src/connection/webrtc/IWebrtcConnection.ts +0 -24
  99. package/src/connection/webrtc/NodeWebrtcConnection.ts +0 -247
  100. package/src/connection/webrtc/WebrtcConnector.ts +0 -234
  101. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +0 -108
  102. package/src/connection/webrtc/WebrtcConnectorRpcRemote.ts +0 -60
  103. package/src/connection/webrtc/iceServerAsString.ts +0 -15
  104. package/src/connection/websocket/AbstractWebsocketClientConnection.ts +0 -122
  105. package/src/connection/websocket/AutoCertifierClientFacade.ts +0 -89
  106. package/src/connection/websocket/BrowserWebsocketClientConnection.ts +0 -44
  107. package/src/connection/websocket/NodeWebsocketClientConnection.ts +0 -39
  108. package/src/connection/websocket/WebsocketClientConnector.ts +0 -119
  109. package/src/connection/websocket/WebsocketClientConnectorRpcLocal.ts +0 -38
  110. package/src/connection/websocket/WebsocketClientConnectorRpcRemote.ts +0 -19
  111. package/src/connection/websocket/WebsocketServer.ts +0 -164
  112. package/src/connection/websocket/WebsocketServerConnection.ts +0 -109
  113. package/src/connection/websocket/WebsocketServerConnector.ts +0 -286
  114. package/src/dht/DhtNode.ts +0 -678
  115. package/src/dht/DhtNodeRpcLocal.ts +0 -84
  116. package/src/dht/DhtNodeRpcRemote.ts +0 -107
  117. package/src/dht/ExternalApiRpcLocal.ts +0 -58
  118. package/src/dht/ExternalApiRpcRemote.ts +0 -41
  119. package/src/dht/PeerManager.ts +0 -303
  120. package/src/dht/contact/Contact.ts +0 -19
  121. package/src/dht/contact/ContactList.ts +0 -43
  122. package/src/dht/contact/RandomContactList.ts +0 -56
  123. package/src/dht/contact/RingContactList.ts +0 -143
  124. package/src/dht/contact/RpcRemote.ts +0 -72
  125. package/src/dht/contact/SortedContactList.ts +0 -173
  126. package/src/dht/contact/getClosestNodes.ts +0 -24
  127. package/src/dht/contact/ringIdentifiers.ts +0 -62
  128. package/src/dht/discovery/DiscoverySession.ts +0 -129
  129. package/src/dht/discovery/PeerDiscovery.ts +0 -244
  130. package/src/dht/discovery/RingDiscoverySession.ts +0 -148
  131. package/src/dht/recursive-operation/RecursiveOperationManager.ts +0 -251
  132. package/src/dht/recursive-operation/RecursiveOperationRpcLocal.ts +0 -34
  133. package/src/dht/recursive-operation/RecursiveOperationRpcRemote.ts +0 -43
  134. package/src/dht/recursive-operation/RecursiveOperationSession.ts +0 -231
  135. package/src/dht/recursive-operation/RecursiveOperationSessionRpcLocal.ts +0 -35
  136. package/src/dht/recursive-operation/RecursiveOperationSessionRpcRemote.ts +0 -30
  137. package/src/dht/routing/DuplicateDetector.ts +0 -34
  138. package/src/dht/routing/Router.ts +0 -246
  139. package/src/dht/routing/RouterRpcLocal.ts +0 -78
  140. package/src/dht/routing/RouterRpcRemote.ts +0 -80
  141. package/src/dht/routing/RoutingSession.ts +0 -243
  142. package/src/dht/routing/RoutingTablesCache.ts +0 -60
  143. package/src/dht/routing/getPreviousPeer.ts +0 -6
  144. package/src/dht/store/LocalDataStore.ts +0 -84
  145. package/src/dht/store/StoreManager.ts +0 -170
  146. package/src/dht/store/StoreRpcLocal.ts +0 -89
  147. package/src/dht/store/StoreRpcRemote.ts +0 -32
  148. package/src/exports.ts +0 -33
  149. package/src/helpers/AddressTools.ts +0 -28
  150. package/src/helpers/Connectivity.ts +0 -19
  151. package/src/helpers/browser/isBrowserEnvironment.ts +0 -1
  152. package/src/helpers/browser/isBrowserEnvironment_override.ts +0 -3
  153. package/src/helpers/createPeerDescriptor.ts +0 -57
  154. package/src/helpers/createPeerDescriptorSignaturePayload.ts +0 -28
  155. package/src/helpers/debugHelpers.ts +0 -9
  156. package/src/helpers/errors.ts +0 -49
  157. package/src/helpers/offering.ts +0 -15
  158. package/src/helpers/protoClasses.ts +0 -57
  159. package/src/helpers/protoToString.ts +0 -21
  160. package/src/helpers/version.ts +0 -32
  161. package/src/identifiers.ts +0 -29
  162. package/src/rpc-protocol/DhtCallContext.ts +0 -14
  163. package/src/rpc-protocol/DhtRpcOptions.ts +0 -10
  164. package/src/transport/ITransport.ts +0 -37
  165. package/src/transport/ListeningRpcCommunicator.ts +0 -32
  166. package/src/transport/RoutingRpcCommunicator.ts +0 -66
  167. package/src/types/ServiceID.ts +0 -1
  168. package/src/types/textencoding.d.ts +0 -6
  169. package/test/benchmark/Find.test.ts +0 -72
  170. package/test/benchmark/KademliaCorrectness.test.ts +0 -114
  171. package/test/benchmark/RingCorrectness.test.ts +0 -157
  172. package/test/benchmark/SortedContactListBenchmark.test.ts +0 -108
  173. package/test/benchmark/WebsocketServerMemoryLeak.test.ts +0 -41
  174. package/test/benchmark/hybrid-network-simulation/RingContactList.test.ts +0 -71
  175. package/test/end-to-end/GeoIpLayer0.test.ts +0 -55
  176. package/test/end-to-end/Layer0-Layer1.test.ts +0 -93
  177. package/test/end-to-end/Layer0.test.ts +0 -76
  178. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +0 -110
  179. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +0 -137
  180. package/test/end-to-end/Layer0Webrtc.test.ts +0 -85
  181. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +0 -82
  182. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +0 -76
  183. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +0 -52
  184. package/test/end-to-end/WebsocketConnectionRequest.test.ts +0 -69
  185. package/test/end-to-end/memory-leak.test.ts +0 -80
  186. package/test/integration/ConnectionLocking.test.ts +0 -182
  187. package/test/integration/ConnectionManager.test.ts +0 -528
  188. package/test/integration/ConnectivityChecking.test.ts +0 -53
  189. package/test/integration/DhtJoinPeerDiscovery.test.ts +0 -49
  190. package/test/integration/DhtNode.test.ts +0 -66
  191. package/test/integration/DhtNodeExternalAPI.test.ts +0 -48
  192. package/test/integration/DhtNodeRpcRemote.test.ts +0 -66
  193. package/test/integration/DhtRpc.test.ts +0 -121
  194. package/test/integration/Find.test.ts +0 -45
  195. package/test/integration/GeoIpConnectivityChecking.test.ts +0 -72
  196. package/test/integration/Layer1-scale.test.ts +0 -189
  197. package/test/integration/Mock-Layer1-Layer0.test.ts +0 -85
  198. package/test/integration/MultipleEntryPointJoining.test.ts +0 -105
  199. package/test/integration/ReplicateData.test.ts +0 -104
  200. package/test/integration/RouteMessage.test.ts +0 -230
  201. package/test/integration/RouterRpcRemote.test.ts +0 -77
  202. package/test/integration/SimultaneousConnections.test.ts +0 -316
  203. package/test/integration/Store.test.ts +0 -85
  204. package/test/integration/StoreAndDelete.test.ts +0 -77
  205. package/test/integration/StoreOnDhtWithThreeNodes.test.ts +0 -59
  206. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +0 -51
  207. package/test/integration/StoreRpcRemote.test.ts +0 -54
  208. package/test/integration/WebrtcConnectionManagement.test.ts +0 -219
  209. package/test/integration/WebrtcConnectorRpc.test.ts +0 -125
  210. package/test/integration/Websocket.test.ts +0 -65
  211. package/test/integration/WebsocketClientConnectorRpc.test.ts +0 -69
  212. package/test/integration/WebsocketConnectionManagement.test.ts +0 -191
  213. package/test/integration/rpc-connections-over-webrtc.test.ts +0 -158
  214. package/test/kademlia-simulation/data/nodeids.json +0 -13002
  215. package/test/kademlia-simulation/data/orderedneighbors.json +0 -1001
  216. package/test/types/global.d.ts +0 -1
  217. package/test/unit/AddressTools.test.ts +0 -44
  218. package/test/unit/AutoCertifierClientFacade.test.ts +0 -58
  219. package/test/unit/ConnectionManager.test.ts +0 -65
  220. package/test/unit/ConnectivityHelpers.test.ts +0 -61
  221. package/test/unit/DiscoverySession.test.ts +0 -87
  222. package/test/unit/DuplicateDetector.test.ts +0 -31
  223. package/test/unit/Handshaker.test.ts +0 -169
  224. package/test/unit/ListeningRpcCommunicator.test.ts +0 -52
  225. package/test/unit/LocalDataStore.test.ts +0 -108
  226. package/test/unit/ManagedConnection.test.ts +0 -58
  227. package/test/unit/PeerManager.test.ts +0 -93
  228. package/test/unit/PendingConnection.test.ts +0 -57
  229. package/test/unit/ProtobufMessage.test.ts +0 -21
  230. package/test/unit/RandomContactList.test.ts +0 -58
  231. package/test/unit/RecursiveOperationManager.test.ts +0 -161
  232. package/test/unit/RecursiveOperationSession.test.ts +0 -68
  233. package/test/unit/Router.test.ts +0 -137
  234. package/test/unit/RoutingSession.test.ts +0 -79
  235. package/test/unit/SortedContactList.test.ts +0 -115
  236. package/test/unit/StoreManager.test.ts +0 -146
  237. package/test/unit/StoreRpcLocal.test.ts +0 -167
  238. package/test/unit/WebrtcConnection.test.ts +0 -29
  239. package/test/unit/WebrtcConnector.test.ts +0 -56
  240. package/test/unit/WebsocketClientConnector.test.ts +0 -101
  241. package/test/unit/WebsocketServer.test.ts +0 -66
  242. package/test/unit/WebsocketServerConnector.test.ts +0 -102
  243. package/test/unit/connectivityRequestHandler.test.ts +0 -104
  244. package/test/unit/createPeerDescriptor.test.ts +0 -69
  245. package/test/unit/customMatchers.test.ts +0 -16
  246. package/test/unit/getClosestNodes.test.ts +0 -30
  247. package/test/unit/version.test.ts +0 -18
  248. package/test/unit/webrtcReplaceInternalIpWithExternalIp.test.ts +0 -18
  249. package/test/utils/FakeConnectorFacade.ts +0 -41
  250. package/test/utils/FakeRpcCommunicator.ts +0 -23
  251. package/test/utils/FakeTransport.ts +0 -79
  252. package/test/utils/customMatchers.ts +0 -71
  253. package/test/utils/mock/MockConnection.ts +0 -26
  254. package/test/utils/mock/MockConnectionsView.ts +0 -18
  255. package/test/utils/mock/MockRouter.ts +0 -62
  256. package/test/utils/mock/MockRpcCommunicator.ts +0 -7
  257. package/test/utils/mock/MockTransport.ts +0 -26
  258. package/test/utils/mock/mockDataEntry.ts +0 -38
  259. package/test/utils/topology.ts +0 -80
  260. package/test/utils/utils.ts +0 -268
  261. package/tsconfig.browser.json +0 -17
  262. package/tsconfig.jest.json +0 -25
  263. package/tsconfig.json +0 -3
  264. package/tsconfig.node.json +0 -24
@@ -1,219 +0,0 @@
1
- import { ConnectionManager } from '../../src/connection/ConnectionManager'
2
- import { LatencyType, Simulator } from '../../src/connection/simulator/Simulator'
3
- import { Message, NodeType, PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
4
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
5
- import { ITransport } from '../../src/transport/ITransport'
6
- import * as Err from '../../src/helpers/errors'
7
- import { SimulatorTransport } from '../../src/connection/simulator/SimulatorTransport'
8
- import { DefaultConnectorFacade } from '../../src/connection/ConnectorFacade'
9
- import { MetricsContext } from '@streamr/utils'
10
- import { createMockPeerDescriptor } from '../utils/utils'
11
-
12
- const createConnectionManager = (localPeerDescriptor: PeerDescriptor, transport: ITransport) => {
13
- return new ConnectionManager({
14
- createConnectorFacade: () => new DefaultConnectorFacade({
15
- transport,
16
- createLocalPeerDescriptor: async () => localPeerDescriptor
17
- }),
18
- metricsContext: new MetricsContext(),
19
- allowIncomingPrivateConnections: false
20
- })
21
- }
22
-
23
- describe('WebRTC Connection Management', () => {
24
-
25
- let manager1: ConnectionManager
26
- let manager2: ConnectionManager
27
- let simulator: Simulator
28
- const peerDescriptor1 = createMockPeerDescriptor()
29
- const peerDescriptor2 = createMockPeerDescriptor()
30
- let connectorTransport1: SimulatorTransport
31
- let connectorTransport2: SimulatorTransport
32
-
33
- beforeEach(async () => {
34
- simulator = new Simulator(LatencyType.FIXED, 20)
35
- connectorTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
36
- await connectorTransport1.start()
37
- manager1 = createConnectionManager(peerDescriptor1, connectorTransport1)
38
- connectorTransport2 = new SimulatorTransport(peerDescriptor2, simulator)
39
- await connectorTransport2.start()
40
- manager2 = createConnectionManager(peerDescriptor2, connectorTransport2)
41
- await manager1.start()
42
- await manager2.start()
43
- })
44
-
45
- afterEach(async () => {
46
- await Promise.all([
47
- manager1.stop(),
48
- manager2.stop(),
49
- connectorTransport1.stop(),
50
- connectorTransport2.stop()
51
- ])
52
- simulator.stop()
53
- })
54
-
55
- const serviceId = 'dummy'
56
-
57
- // TODO: fix flaky test, ticket NET-911
58
- it('Peer1 can open WebRTC Datachannels', (done) => {
59
- const dummyMessage: Message = {
60
- serviceId: 'unknown',
61
- body: {
62
- oneofKind: 'rpcMessage',
63
- rpcMessage: RpcMessage.create()
64
- },
65
- messageId: 'mockerer'
66
- }
67
-
68
- manager2.on('message', (message: Message) => {
69
- expect(message.messageId).toEqual('mockerer')
70
-
71
- done()
72
- })
73
- dummyMessage.targetDescriptor = peerDescriptor2
74
- manager1.send(dummyMessage).catch((e) => {
75
- throw e
76
- })
77
- }, 15000)
78
-
79
- it('Peer2 can open WebRTC Datachannel', (done) => {
80
- const dummyMessage: Message = {
81
- serviceId,
82
- body: {
83
- oneofKind: 'rpcMessage',
84
- rpcMessage: RpcMessage.create()
85
- },
86
- messageId: 'mockerer'
87
- }
88
- manager1.on('message', (message: Message) => {
89
- expect(message.messageId).toEqual('mockerer')
90
- done()
91
- })
92
- dummyMessage.targetDescriptor = peerDescriptor1
93
- manager2.send(dummyMessage)
94
- }, 60000)
95
-
96
- it('Connecting to self throws', async () => {
97
- const dummyMessage: Message = {
98
- serviceId,
99
- body: {
100
- oneofKind: 'rpcMessage',
101
- rpcMessage: RpcMessage.create()
102
- },
103
- messageId: 'mockerer'
104
- }
105
- dummyMessage.targetDescriptor = peerDescriptor1
106
- await expect(manager1.send(dummyMessage))
107
- .rejects
108
- .toEqual(new Err.CannotConnectToSelf('Cannot send to self'))
109
- })
110
-
111
- it('Connects and disconnects webrtc connections', async () => {
112
- const msg: Message = {
113
- serviceId,
114
- messageId: '1',
115
- body: {
116
- oneofKind: 'rpcMessage',
117
- rpcMessage: RpcMessage.create()
118
- }
119
- }
120
-
121
- const dataPromise = new Promise<void>((resolve, _reject) => {
122
- manager2.on('message', async (message: Message) => {
123
- expect(message.body.oneofKind).toBe('rpcMessage')
124
- resolve()
125
- })
126
- })
127
-
128
- const connectedPromise1 = new Promise<void>((resolve, _reject) => {
129
- manager1.on('connected', () => {
130
- //expect(message.body.oneofKind).toBe('rpcMessage')
131
- resolve()
132
- })
133
- })
134
-
135
- const connectedPromise2 = new Promise<void>((resolve, _reject) => {
136
- manager2.on('connected', () => {
137
- resolve()
138
- })
139
- })
140
-
141
- const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
142
- manager1.on('disconnected', () => {
143
- resolve()
144
- })
145
- })
146
-
147
- const disconnectedPromise2 = new Promise<void>((resolve, _reject) => {
148
- manager2.on('disconnected', () => {
149
- resolve()
150
- })
151
- })
152
-
153
- msg.targetDescriptor = peerDescriptor2
154
- manager1.send(msg).catch((_e) => { })
155
-
156
- await Promise.all([dataPromise, connectedPromise1, connectedPromise2])
157
-
158
- // @ts-expect-error private field
159
- manager1.closeConnection(peerDescriptor2)
160
-
161
- await Promise.all([disconnectedPromise1, disconnectedPromise2])
162
-
163
- }, 20000)
164
-
165
- it('Disconnects webrtcconnection while being connected', async () => {
166
- const msg: Message = {
167
- serviceId,
168
- messageId: '1',
169
- body: {
170
- oneofKind: 'rpcMessage',
171
- rpcMessage: RpcMessage.create()
172
- },
173
- }
174
-
175
- const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
176
- manager1.on('disconnected', () => {
177
- resolve()
178
- })
179
- })
180
-
181
- msg.targetDescriptor = peerDescriptor2
182
- manager1.send(msg).catch((e) => {
183
- expect(e.code).toEqual('SEND_FAILED')
184
- })
185
-
186
- // @ts-expect-error private field
187
- manager1.closeConnection(peerDescriptor2)
188
-
189
- await disconnectedPromise1
190
-
191
- }, 20000)
192
-
193
- it('failed connections are cleaned up', async () => {
194
- const msg: Message = {
195
- serviceId,
196
- messageId: '1',
197
- body: {
198
- oneofKind: 'rpcMessage',
199
- rpcMessage: RpcMessage.create()
200
- },
201
- }
202
-
203
- const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
204
- manager1.on('disconnected', () => {
205
- resolve()
206
- })
207
- })
208
-
209
- msg.targetDescriptor = {
210
- nodeId: new Uint8Array([0, 0, 0, 0, 0]),
211
- type: NodeType.NODEJS,
212
- }
213
-
214
- await Promise.allSettled([
215
- manager1.send(msg),
216
- disconnectedPromise1
217
- ])
218
- }, 20000)
219
- })
@@ -1,125 +0,0 @@
1
- import { ProtoRpcClient, RpcCommunicator, toProtoRpcClient } from '@streamr/proto-rpc'
2
- import { WebrtcConnectorRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client'
3
- import {
4
- IceCandidate,
5
- RtcAnswer,
6
- RtcOffer,
7
- WebrtcConnectionRequest
8
- } from '../../generated/packages/dht/protos/DhtRpc'
9
- import { Empty } from '../../generated/google/protobuf/empty'
10
- import { createMockPeerDescriptor } from '../utils/utils'
11
- import { IWebrtcConnectorRpc } from '../../generated/packages/dht/protos/DhtRpc.server'
12
- import { waitForCondition } from '@streamr/utils'
13
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
14
- import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
15
-
16
- describe('WebRTC rpc messages', () => {
17
-
18
- let rpcCommunicator1: RpcCommunicator<DhtCallContext>
19
- let rpcCommunicator2: RpcCommunicator<DhtCallContext>
20
- let client: ProtoRpcClient<WebrtcConnectorRpcClient>
21
- let requestConnectionCounter: number
22
- let rtcOfferCounter: number
23
- let rtcAnswerCounter: number
24
- let iceCandidateCounter: number
25
- const targetDescriptor = createMockPeerDescriptor()
26
-
27
- beforeEach(() => {
28
- requestConnectionCounter = 0
29
- rtcOfferCounter = 0
30
- rtcAnswerCounter = 0
31
- iceCandidateCounter = 0
32
-
33
- rpcCommunicator1 = new RpcCommunicator()
34
- const serverFunctions: IWebrtcConnectorRpc = {
35
-
36
- requestConnection: async (): Promise<Empty> => {
37
- requestConnectionCounter += 1
38
- const res: Empty = {}
39
- return res
40
- },
41
-
42
- rtcOffer: async (): Promise<Empty> => {
43
- rtcOfferCounter += 1
44
- const res: Empty = {}
45
- return res
46
- },
47
-
48
- rtcAnswer: async (): Promise<Empty> => {
49
- rtcAnswerCounter += 1
50
- const res: Empty = {}
51
- return res
52
- },
53
-
54
- iceCandidate: async (): Promise<Empty> => {
55
- iceCandidateCounter += 1
56
- const res: Empty = {}
57
- return res
58
- }
59
- }
60
-
61
- rpcCommunicator2 = new RpcCommunicator()
62
- rpcCommunicator2.registerRpcNotification(RtcOffer, 'rtcOffer', serverFunctions.rtcOffer)
63
- rpcCommunicator2.registerRpcNotification(RtcAnswer, 'rtcAnswer', serverFunctions.rtcAnswer)
64
- rpcCommunicator2.registerRpcNotification(IceCandidate, 'iceCandidate', serverFunctions.iceCandidate)
65
- rpcCommunicator2.registerRpcNotification(WebrtcConnectionRequest, 'requestConnection', serverFunctions.requestConnection)
66
-
67
- rpcCommunicator1.setOutgoingMessageListener(async (message: RpcMessage) => {
68
- rpcCommunicator2.handleIncomingMessage(message, new DhtCallContext())
69
- })
70
-
71
- rpcCommunicator2.setOutgoingMessageListener(async (message: RpcMessage) => {
72
- rpcCommunicator1.handleIncomingMessage(message, new DhtCallContext())
73
- })
74
-
75
- client = toProtoRpcClient(new WebrtcConnectorRpcClient(rpcCommunicator1.getRpcClientTransport()))
76
- })
77
-
78
- afterEach(async () => {
79
- rpcCommunicator1.stop()
80
- rpcCommunicator2.stop()
81
- })
82
-
83
- it('send connectionRequest', async () => {
84
- client.requestConnection({
85
- },
86
- { targetDescriptor, notification: true }
87
- )
88
-
89
- await waitForCondition(() => requestConnectionCounter === 1)
90
- })
91
-
92
- it('send rtcOffer', async () => {
93
- client.rtcOffer({
94
- connectionId: 'rtcOffer',
95
- description: 'aaaaaa'
96
- },
97
- { targetDescriptor, notification: true }
98
- )
99
-
100
- await waitForCondition(() => rtcOfferCounter === 1)
101
- })
102
-
103
- it('send rtcAnswer', async () => {
104
- client.rtcAnswer({
105
- connectionId: 'rtcOffer',
106
- description: 'aaaaaa'
107
- },
108
- { targetDescriptor, notification: true }
109
- )
110
-
111
- await waitForCondition(() => rtcAnswerCounter === 1)
112
- })
113
-
114
- it('send iceCandidate', async () => {
115
- client.iceCandidate({
116
- connectionId: 'rtcOffer',
117
- candidate: 'aaaaaa',
118
- mid: 'asdasdasdasdasd'
119
- },
120
- { targetDescriptor, notification: true }
121
- )
122
-
123
- await waitForCondition(() => iceCandidateCounter === 1)
124
- })
125
- })
@@ -1,65 +0,0 @@
1
- import { WebsocketServer } from '../../src/connection/websocket/WebsocketServer'
2
- import { IConnection } from '../../src/connection/IConnection'
3
- import { WebsocketClientConnection } from '../../src/connection/websocket/NodeWebsocketClientConnection'
4
- import { Logger } from '@streamr/utils'
5
-
6
- const logger = new Logger(module)
7
-
8
- describe('Websocket', () => {
9
-
10
- const websocketServer = new WebsocketServer({
11
- portRange: { min: 9977, max: 9977 },
12
- enableTls: false
13
- })
14
- const clientWebsocket = new WebsocketClientConnection()
15
-
16
- beforeAll(async () => {
17
- await websocketServer.start()
18
- })
19
-
20
- it('Happy path', (done) => {
21
-
22
- websocketServer.on('connected', (serverConnection: IConnection) => {
23
- const time = Date.now()
24
- logger.info('server side sendind msg at ' + time)
25
- serverConnection.send(Uint8Array.from([1, 2, 3, 4]))
26
-
27
- const time2 = Date.now()
28
- logger.info('server side setting listeners at ' + time2)
29
-
30
- serverConnection.on('data', (bytes: Uint8Array) => {
31
- const time = Date.now()
32
- logger.info('server side receiving message at ' + time)
33
-
34
- logger.info('server received:' + JSON.stringify(bytes))
35
-
36
- expect(bytes.toString()).toBe('1,2,3,4')
37
- logger.info('calling done()')
38
- done()
39
- })
40
- })
41
-
42
- clientWebsocket.on('connected', () => {
43
- const time = Date.now()
44
- logger.info('client side setting listeners at ' + time)
45
-
46
- clientWebsocket.on('data', (bytes: Uint8Array) => {
47
- const time = Date.now()
48
- logger.info('client side receiving message at ' + time)
49
-
50
- logger.info('client received: ' + JSON.stringify(bytes))
51
- expect(bytes.toString()).toBe('1,2,3,4')
52
-
53
- const time2 = Date.now()
54
- logger.info('client side sendind msg at ' + time2)
55
- clientWebsocket.send(Uint8Array.from([1, 2, 3, 4]))
56
- })
57
- })
58
-
59
- clientWebsocket.connect('ws://127.0.0.1:9977', false)
60
- })
61
-
62
- afterAll(async () => {
63
- await websocketServer.stop()
64
- })
65
- })
@@ -1,69 +0,0 @@
1
- import { ProtoRpcClient, RpcCommunicator, toProtoRpcClient } from '@streamr/proto-rpc'
2
- import { WebsocketClientConnectorRpcClient } from '../../generated/packages/dht/protos/DhtRpc.client'
3
- import { createMockPeerDescriptor, mockWebsocketClientConnectorRpc } from '../utils/utils'
4
- import { WebsocketConnectionRequest } from '../../generated/packages/dht/protos/DhtRpc'
5
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
6
- import { Empty } from '../../generated/google/protobuf/empty'
7
- import { DhtCallContext } from '../../src/rpc-protocol/DhtCallContext'
8
-
9
- describe('WebsocketClientConnectorRpc', () => {
10
-
11
- let rpcCommunicator1: RpcCommunicator<DhtCallContext>
12
- let rpcCommunicator2: RpcCommunicator<DhtCallContext>
13
- let client1: ProtoRpcClient<WebsocketClientConnectorRpcClient>
14
- let client2: ProtoRpcClient<WebsocketClientConnectorRpcClient>
15
- const peerDescriptor1 = createMockPeerDescriptor()
16
- const peerDescriptor2 = createMockPeerDescriptor()
17
-
18
- beforeEach(() => {
19
- rpcCommunicator1 = new RpcCommunicator()
20
- rpcCommunicator1.registerRpcMethod(
21
- WebsocketConnectionRequest,
22
- Empty,
23
- 'requestConnection',
24
- mockWebsocketClientConnectorRpc.requestConnection
25
- )
26
-
27
- rpcCommunicator2 = new RpcCommunicator()
28
- rpcCommunicator2.registerRpcMethod(
29
- WebsocketConnectionRequest,
30
- Empty,
31
- 'requestConnection',
32
- mockWebsocketClientConnectorRpc.requestConnection
33
- )
34
-
35
- rpcCommunicator1.setOutgoingMessageListener(async (message: RpcMessage) => {
36
- rpcCommunicator2.handleIncomingMessage(message, new DhtCallContext())
37
- })
38
-
39
- rpcCommunicator2.setOutgoingMessageListener(async (message: RpcMessage) => {
40
- rpcCommunicator1.handleIncomingMessage(message, new DhtCallContext())
41
- })
42
-
43
- client1 = toProtoRpcClient(new WebsocketClientConnectorRpcClient(rpcCommunicator1.getRpcClientTransport()))
44
- client2 = toProtoRpcClient(new WebsocketClientConnectorRpcClient(rpcCommunicator2.getRpcClientTransport()))
45
- })
46
-
47
- afterEach(async () => {
48
- rpcCommunicator1.stop()
49
- rpcCommunicator2.stop()
50
- })
51
-
52
- it('Happy path', async () => {
53
- const response1 = client1.requestConnection({
54
- ip: '127.0.0.1',
55
- port: 9099
56
- },
57
- { targetDescriptor: peerDescriptor2 },
58
- )
59
- await response1
60
-
61
- const response2 = client2.requestConnection({
62
- ip: '127.0.0.1',
63
- port: 9111
64
- },
65
- { targetDescriptor: peerDescriptor1 },
66
- )
67
- await response2
68
- })
69
- })
@@ -1,191 +0,0 @@
1
- import { MetricsContext, waitForCondition, waitForEvent3 } from '@streamr/utils'
2
- import { ConnectionManager } from '../../src/connection/ConnectionManager'
3
- import { DefaultConnectorFacade, DefaultConnectorFacadeOptions } from '../../src/connection/ConnectorFacade'
4
- import { Simulator } from '../../src/connection/simulator/Simulator'
5
- import { SimulatorTransport } from '../../src/connection/simulator/SimulatorTransport'
6
- import * as Err from '../../src/helpers/errors'
7
- import { Message, NodeType, PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
8
- import { RpcMessage } from '../../generated/packages/proto-rpc/protos/ProtoRpc'
9
- import { TransportEvents } from '../../src/transport/ITransport'
10
- import { toNodeId } from '../../src/identifiers'
11
-
12
- const SERVICE_ID = 'test'
13
-
14
- const createOptions = (localPeerDescriptor: PeerDescriptor, opts: Omit<DefaultConnectorFacadeOptions, 'createLocalPeerDescriptor'>) => {
15
- return {
16
- createConnectorFacade: () => new DefaultConnectorFacade({
17
- createLocalPeerDescriptor: async () => localPeerDescriptor,
18
- ...opts
19
- }),
20
- metricsContext: new MetricsContext(),
21
- allowIncomingPrivateConnections: false
22
- }
23
- }
24
-
25
- describe('Websocket Connection Management', () => {
26
-
27
- let wsServerManager: ConnectionManager
28
- let noWsServerManager: ConnectionManager
29
- let biggerNoWsServerManager: ConnectionManager
30
- const simulator = new Simulator()
31
- const wsServerConnectorPeerDescriptor: PeerDescriptor = {
32
- nodeId: new Uint8Array([2]),
33
- type: NodeType.NODEJS,
34
- websocket: {
35
- host: '127.0.0.1',
36
- port: 12223,
37
- tls: false
38
- }
39
- }
40
- const noWsServerConnectorPeerDescriptor: PeerDescriptor = {
41
- nodeId: new Uint8Array([1]),
42
- type: NodeType.NODEJS,
43
- }
44
- const biggerNoWsServerConnectorPeerDescriptor: PeerDescriptor = {
45
- nodeId: new Uint8Array([3]),
46
- type: NodeType.NODEJS,
47
- }
48
-
49
- let connectorTransport1: SimulatorTransport
50
- let connectorTransport2: SimulatorTransport
51
- let connectorTransport3: SimulatorTransport
52
-
53
- beforeEach(async () => {
54
-
55
- connectorTransport1 = new SimulatorTransport(wsServerConnectorPeerDescriptor, simulator)
56
- await connectorTransport1.start()
57
- connectorTransport2 = new SimulatorTransport(noWsServerConnectorPeerDescriptor, simulator)
58
- await connectorTransport2.start()
59
- connectorTransport3 = new SimulatorTransport(biggerNoWsServerConnectorPeerDescriptor, simulator)
60
- await connectorTransport3.start()
61
-
62
- const options1 = createOptions(wsServerConnectorPeerDescriptor, {
63
- transport: connectorTransport1,
64
- websocketHost: '127.0.0.1',
65
- websocketPortRange: { min: 12223, max: 12223 }
66
- })
67
- const options2 = createOptions(noWsServerConnectorPeerDescriptor, {
68
- transport: connectorTransport2
69
- })
70
- const options3 = createOptions(biggerNoWsServerConnectorPeerDescriptor, {
71
- transport: connectorTransport3
72
- })
73
-
74
- wsServerManager = new ConnectionManager(options1)
75
- noWsServerManager = new ConnectionManager(options2)
76
- biggerNoWsServerManager = new ConnectionManager(options3)
77
-
78
- await wsServerManager.start()
79
- await noWsServerManager.start()
80
- await biggerNoWsServerManager.start()
81
- })
82
-
83
- afterEach(async () => {
84
- await wsServerManager.stop()
85
- await noWsServerManager.stop()
86
- await biggerNoWsServerManager.stop()
87
- await connectorTransport1.stop()
88
- await connectorTransport2.stop()
89
- await connectorTransport3.stop()
90
- })
91
-
92
- it('Can open connections to serverless peer with smaller nodeId', (done) => {
93
- const dummyMessage: Message = {
94
- serviceId: SERVICE_ID,
95
- body: {
96
- oneofKind: 'rpcMessage',
97
- rpcMessage: RpcMessage.create()
98
- },
99
- messageId: 'mockerer',
100
- targetDescriptor: noWsServerConnectorPeerDescriptor
101
- }
102
- noWsServerManager.on('message', (message: Message) => {
103
- expect(message.messageId).toEqual('mockerer')
104
-
105
- done()
106
- })
107
-
108
- wsServerManager.send(dummyMessage)
109
- })
110
-
111
- it('Can open connections to serverless peer with bigger nodeId', (done) => {
112
- const dummyMessage: Message = {
113
- serviceId: SERVICE_ID,
114
- body: {
115
- oneofKind: 'rpcMessage',
116
- rpcMessage: RpcMessage.create()
117
- },
118
- messageId: 'mockerer',
119
- targetDescriptor: biggerNoWsServerConnectorPeerDescriptor
120
- }
121
- biggerNoWsServerManager.on('message', (message: Message) => {
122
- expect(message.messageId).toEqual('mockerer')
123
- done()
124
- })
125
-
126
- wsServerManager.send(dummyMessage)
127
- })
128
-
129
- it('Failed connection requests are cleaned up', async () => {
130
- const dummyMessage: Message = {
131
- serviceId: SERVICE_ID,
132
- body: {
133
- oneofKind: 'rpcMessage',
134
- rpcMessage: RpcMessage.create()
135
- },
136
- messageId: 'mockerer',
137
- targetDescriptor: {
138
- nodeId: new Uint8Array([1, 2, 4]),
139
- type: NodeType.NODEJS
140
- }
141
- }
142
-
143
- await Promise.allSettled([
144
- waitForEvent3<TransportEvents>(wsServerManager, 'disconnected', 15000),
145
- wsServerManager.send(dummyMessage)
146
- ])
147
- expect(wsServerManager.hasConnection(toNodeId(dummyMessage.targetDescriptor!))).toBeFalse()
148
- }, 20000)
149
-
150
- it('Can open connections to peer with server', async () => {
151
- const dummyMessage: Message = {
152
- serviceId: SERVICE_ID,
153
- body: {
154
- oneofKind: 'rpcMessage',
155
- rpcMessage: RpcMessage.create()
156
- },
157
- messageId: 'mockerer',
158
- targetDescriptor: wsServerConnectorPeerDescriptor
159
- }
160
- await noWsServerManager.send(dummyMessage)
161
- await waitForCondition(
162
- () => {
163
- const nodeId = toNodeId(noWsServerConnectorPeerDescriptor)
164
- return wsServerManager.hasConnection(nodeId)
165
- }
166
- )
167
- await waitForCondition(
168
- () => noWsServerManager.hasConnection(toNodeId(wsServerConnectorPeerDescriptor))
169
- )
170
- })
171
-
172
- it('Connecting to self throws', async () => {
173
- const dummyMessage: Message = {
174
- serviceId: SERVICE_ID,
175
- body: {
176
- oneofKind: 'rpcMessage',
177
- rpcMessage: RpcMessage.create()
178
- },
179
- messageId: 'mockerer',
180
- targetDescriptor: noWsServerConnectorPeerDescriptor
181
- }
182
- await expect(noWsServerManager.send(dummyMessage))
183
- .rejects
184
- .toEqual(new Err.CannotConnectToSelf('Cannot send to self'))
185
-
186
- dummyMessage.targetDescriptor = wsServerConnectorPeerDescriptor
187
- await expect(wsServerManager.send(dummyMessage))
188
- .rejects
189
- .toEqual(new Err.CannotConnectToSelf('Cannot send to self'))
190
- })
191
- })