@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,191 +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('failed connections are cleaned up', 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 = {
182
- nodeId: new Uint8Array([0, 0, 0, 0, 0]),
183
- type: NodeType.NODEJS,
184
- }
185
-
186
- await Promise.allSettled([
187
- manager1.send(msg),
188
- disconnectedPromise1
189
- ])
190
- }, 20000)
191
- })
@@ -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 { until } 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 until(() => 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 until(() => 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 until(() => 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 until(() => 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, until, 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 until(
162
- () => {
163
- const nodeId = toNodeId(noWsServerConnectorPeerDescriptor)
164
- return wsServerManager.hasConnection(nodeId)
165
- }
166
- )
167
- await until(
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
- })