@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 +0,0 @@
1
- import 'jest-extended'
@@ -1,44 +0,0 @@
1
- import { getAddressFromIceCandidate, isPrivateIPv4 } from '../../src/helpers/AddressTools'
2
-
3
- describe('getAddressFromIceCandidate', () => {
4
- it('extract IPv4 address from ICE host candidate', () => {
5
- expect(getAddressFromIceCandidate('candidate:1 1 udp 2122262783 203.0.113.180 4444 typ host'))
6
- .toEqual('203.0.113.180')
7
- })
8
-
9
- it('extract IPv4 address from ICE server reflexive candidate', () => {
10
- expect(getAddressFromIceCandidate('candidate:1 1 udp 2122262783 198.51.100.130 4445 typ srflx raddr 0.0.0.0 rport 0'))
11
- .toEqual('198.51.100.130')
12
- })
13
-
14
- it('extract IPv6 address from ICE candidate', () => {
15
- expect(getAddressFromIceCandidate('candidate:1 1 udp 3756231458 2001:db8::4125:918c:4402:cc54 6666 typ host'))
16
- .toEqual('2001:db8::4125:918c:4402:cc54')
17
- })
18
-
19
- it('fail on mDNS ICE candidate', () => {
20
- expect(getAddressFromIceCandidate('candidate:1 1 udp 2122296321 9b36eaac-bb2e-49bb-bb78-21c41c499900.local 7000 typ host')).toBeUndefined()
21
- })
22
- })
23
-
24
- describe('isPrivateIPv4', () => {
25
- it('return true for range 10.0.0.0/8', () => {
26
- expect(isPrivateIPv4('10.11.12.13')).toBe(true)
27
- })
28
-
29
- it('return true for range 172.16.0.0/12', () => {
30
- expect(isPrivateIPv4('172.16.130.131')).toBe(true)
31
- })
32
-
33
- it('return true for range 192.168.0.0/16', () => {
34
- expect(isPrivateIPv4('192.168.1.1')).toBe(true)
35
- })
36
-
37
- it('return false for a public address', () => {
38
- expect(isPrivateIPv4('203.0.113.181')).toBe(false)
39
- })
40
-
41
- it('return true for localhost IP address', () => {
42
- expect(isPrivateIPv4('127.0.0.1')).toBe(true)
43
- })
44
- })
@@ -1,58 +0,0 @@
1
- import EventEmitter from 'eventemitter3'
2
- import { AutoCertifierClientFacade, IAutoCertifierClient } from '../../src/connection/websocket/AutoCertifierClientFacade'
3
- import { MockTransport } from '../utils/mock/MockTransport'
4
-
5
- class MockAutoCertifierClient extends EventEmitter {
6
- start = async () => {
7
- this.emit('updatedCertificate', {})
8
- }
9
- // eslint-disable-next-line class-methods-use-this
10
- stop = () => {}
11
- emitUpdateSubdomain = () => {
12
- this.emit('updatedCertificate', {})
13
- }
14
- }
15
-
16
- describe('AutoCertifierClientFacade', () => {
17
-
18
- let client: AutoCertifierClientFacade
19
- let mockClient: IAutoCertifierClient
20
- let setHost: jest.Mock
21
- let updateCertificate: jest.Mock
22
-
23
- beforeEach(() => {
24
- mockClient = new MockAutoCertifierClient()
25
- const mockClientFactory = (): IAutoCertifierClient => mockClient
26
- setHost = jest.fn()
27
- updateCertificate = jest.fn()
28
- client = new AutoCertifierClientFacade({
29
- url: '',
30
- configFile: '',
31
- transport: new MockTransport(),
32
- wsServerPort: 0,
33
- setHost,
34
- updateCertificate,
35
- createClientFactory: mockClientFactory
36
- })
37
- })
38
-
39
- afterEach(() => {
40
- client.stop()
41
- })
42
-
43
- it('start', async () => {
44
- await client.start()
45
- expect(setHost).toHaveBeenCalled()
46
- expect(updateCertificate).toHaveBeenCalled()
47
- })
48
-
49
- it('updated events are processed', async () => {
50
- await client.start()
51
- expect(setHost).toHaveBeenCalledTimes(1)
52
- expect(updateCertificate).toHaveBeenCalledTimes(1);
53
- (mockClient as MockAutoCertifierClient).emitUpdateSubdomain()
54
- expect(setHost).toHaveBeenCalledTimes(2)
55
- expect(updateCertificate).toHaveBeenCalledTimes(2)
56
- })
57
-
58
- })
@@ -1,65 +0,0 @@
1
- import { MetricsContext } from '@streamr/utils'
2
- import { ConnectionManager } from '../../src/connection/ConnectionManager'
3
- import { toNodeId, PendingConnection } from '../../src/exports'
4
- import { FakeConnectorFacade } from '../utils/FakeConnectorFacade'
5
- import { MockConnection } from '../utils/mock/MockConnection'
6
- import { createMockPeerDescriptor } from '../utils/utils'
7
- import { getOfferer } from '../../src/helpers/offering'
8
-
9
- describe('ConnetionManager', () => {
10
-
11
- let connectionManager: ConnectionManager
12
- let fakeConnectorFacade: FakeConnectorFacade
13
- const localPeerDescriptor = createMockPeerDescriptor()
14
-
15
- beforeEach(async () => {
16
- connectionManager = new ConnectionManager({
17
- metricsContext: new MetricsContext(),
18
- allowIncomingPrivateConnections: false,
19
- createConnectorFacade: () => {
20
- fakeConnectorFacade = new FakeConnectorFacade(localPeerDescriptor)
21
- return fakeConnectorFacade
22
- }
23
- })
24
- await connectionManager.start()
25
- })
26
-
27
- afterEach(async () => {
28
- await connectionManager.stop()
29
- })
30
-
31
- it('should replace a duplicate connecting connection', () => {
32
- const remotePeerDescriptor = createMockPeerDescriptor()
33
- const pendingConnection1 = new PendingConnection(remotePeerDescriptor)
34
- const offerer = getOfferer(toNodeId(localPeerDescriptor), toNodeId(remotePeerDescriptor))
35
- const accepted1 = fakeConnectorFacade.callOnNewConnection(pendingConnection1)
36
- expect(accepted1).toBeTrue()
37
- const pendingConnection2 = new PendingConnection(remotePeerDescriptor)
38
- const accepted2 = fakeConnectorFacade.callOnNewConnection(pendingConnection2)
39
-
40
- expect(accepted2).toBe(offerer === 'remote')
41
-
42
- pendingConnection1.close(true)
43
- pendingConnection2.close(true)
44
- })
45
-
46
- it('should replace a duplicate connected connection', () => {
47
- const remotePeerDescriptor = createMockPeerDescriptor()
48
- const pendingConnection1 = new PendingConnection(remotePeerDescriptor)
49
- const offerer = getOfferer(toNodeId(localPeerDescriptor), toNodeId(remotePeerDescriptor))
50
- const accepted1 = fakeConnectorFacade.callOnNewConnection(pendingConnection1)
51
- expect(accepted1).toBeTrue()
52
- pendingConnection1.onHandshakeCompleted(new MockConnection())
53
- const pendingConnection2 = new PendingConnection(remotePeerDescriptor)
54
- const accepted2 = fakeConnectorFacade.callOnNewConnection(pendingConnection2)
55
- if (accepted2) {
56
- pendingConnection1.onHandshakeCompleted(new MockConnection())
57
- }
58
- expect(accepted2).toBe(offerer === 'remote')
59
-
60
- pendingConnection1.close(true)
61
- pendingConnection2.close(true)
62
- })
63
-
64
- })
65
-
@@ -1,61 +0,0 @@
1
- import { NodeType } from '../../generated/packages/dht/protos/DhtRpc'
2
- import { expectedConnectionType } from '../../src/helpers/Connectivity'
3
- import { ConnectionType } from '../../src/connection/IConnection'
4
- import { createMockPeerDescriptor } from '../utils/utils'
5
-
6
- describe('Connectivity helpers', () => {
7
-
8
- const tlsServerPeerDescriptor = createMockPeerDescriptor({
9
- websocket: {
10
- host: 'mock',
11
- port: 1234,
12
- tls: true
13
- }
14
- })
15
- const noTlsServerPeerDescriptor = createMockPeerDescriptor({
16
- websocket: {
17
- host: 'mock',
18
- port: 1234,
19
- tls: false
20
- }
21
- })
22
- const browserPeerDescriptor = createMockPeerDescriptor({
23
- type: NodeType.BROWSER
24
- })
25
- const noServerPeerDescriptor = createMockPeerDescriptor({
26
- type: NodeType.NODEJS
27
- })
28
-
29
- it('two server peers', () => {
30
- expect(expectedConnectionType(tlsServerPeerDescriptor, tlsServerPeerDescriptor)).toBe(ConnectionType.WEBSOCKET_CLIENT)
31
- })
32
-
33
- it('server to noServer', () => {
34
- expect(expectedConnectionType(tlsServerPeerDescriptor, noServerPeerDescriptor)).toBe(ConnectionType.WEBSOCKET_SERVER)
35
- })
36
-
37
- it('no server to server', () => {
38
- expect(expectedConnectionType(noServerPeerDescriptor, tlsServerPeerDescriptor)).toBe(ConnectionType.WEBSOCKET_CLIENT)
39
- })
40
-
41
- it('no server to no server', () => {
42
- expect(expectedConnectionType(noServerPeerDescriptor, noServerPeerDescriptor)).toBe(ConnectionType.WEBRTC)
43
- })
44
-
45
- it('browser to tls server', () => {
46
- expect(expectedConnectionType(browserPeerDescriptor, tlsServerPeerDescriptor)).toBe(ConnectionType.WEBSOCKET_CLIENT)
47
- })
48
-
49
- it('tls server to browser', () => {
50
- expect(expectedConnectionType(tlsServerPeerDescriptor, browserPeerDescriptor)).toBe(ConnectionType.WEBSOCKET_SERVER)
51
- })
52
-
53
- it('browser to no tls server', () => {
54
- expect(expectedConnectionType(browserPeerDescriptor, noTlsServerPeerDescriptor)).toBe(ConnectionType.WEBRTC)
55
- })
56
-
57
- it('no tls server to browser', () => {
58
- expect(expectedConnectionType(noTlsServerPeerDescriptor, browserPeerDescriptor)).toBe(ConnectionType.WEBRTC)
59
- })
60
-
61
- })
@@ -1,87 +0,0 @@
1
- import { Multimap, wait } from '@streamr/utils'
2
- import { sampleSize } from 'lodash'
3
- import { DhtNodeRpcRemote } from '../../src/dht/DhtNodeRpcRemote'
4
- import { PeerManager, getDistance } from '../../src/dht/PeerManager'
5
- import { DiscoverySession } from '../../src/dht/discovery/DiscoverySession'
6
- import { DhtAddress, toNodeId, toDhtAddressRaw } from '../../src/identifiers'
7
- import { NodeType, PeerDescriptor } from '../../generated/packages/dht/protos/DhtRpc'
8
- import { createTestTopology } from '../utils/topology'
9
- import { getClosestNodes } from '../../src/dht/contact/getClosestNodes'
10
-
11
- const NODE_COUNT = 40
12
- const MIN_NEIGHBOR_COUNT = 2 // nodes can get more neighbors when we merge network partitions
13
- const PARALLELISM = 1
14
- const NO_PROGRESS_LIMIT = 1
15
- const QUERY_BATCH_SIZE = 5 // the default value in DhtNode's options, not relevant in this test
16
-
17
- const createPeerDescriptor = (nodeId: DhtAddress): PeerDescriptor => {
18
- return {
19
- nodeId: toDhtAddressRaw(nodeId),
20
- type: NodeType.NODEJS
21
- }
22
- }
23
-
24
- describe('DiscoverySession', () => {
25
-
26
- let topology: Multimap<DhtAddress, DhtAddress>
27
- const queriedNodes: DhtAddress[] = []
28
-
29
- beforeAll(() => {
30
- topology = createTestTopology(NODE_COUNT, MIN_NEIGHBOR_COUNT)
31
- })
32
-
33
- const createPeerManager = (localNodeId: DhtAddress): PeerManager => {
34
- const peerManager = new PeerManager({
35
- localNodeId,
36
- localPeerDescriptor: createPeerDescriptor(localNodeId),
37
- isLayer0: true,
38
- createDhtNodeRpcRemote: (peerDescriptor: PeerDescriptor) => createMockRpcRemote(peerDescriptor) as any,
39
- hasConnection: () => true
40
- } as any)
41
- for (const neighbor of topology.get(localNodeId)) {
42
- peerManager.addContact(createPeerDescriptor(neighbor))
43
- }
44
- return peerManager
45
- }
46
-
47
- const createMockRpcRemote = (peerDescriptor: PeerDescriptor): Partial<DhtNodeRpcRemote> => {
48
- const nodeId = toNodeId(peerDescriptor)
49
- return {
50
- id: toDhtAddressRaw(nodeId),
51
- getPeerDescriptor: () => peerDescriptor,
52
- getNodeId: () => nodeId,
53
- getClosestPeers: async (referenceId: DhtAddress) => {
54
- queriedNodes.push(nodeId)
55
- await wait(10)
56
- const peerManager = createPeerManager(nodeId)
57
- return getClosestNodes(referenceId, peerManager.getNeighbors().map((n) => n.getPeerDescriptor()), { maxCount: QUERY_BATCH_SIZE })
58
- },
59
- ping: async () => true
60
- }
61
- }
62
-
63
- it('happy path', async () => {
64
- const nodeIds = [...topology.keys()]
65
- const [localNodeId, targetId] = sampleSize(nodeIds, 2)
66
- const contactedPeers = new Set<DhtAddress>()
67
- const peerManager = createPeerManager(localNodeId)
68
- const session = new DiscoverySession({
69
- targetId,
70
- parallelism: PARALLELISM,
71
- noProgressLimit: NO_PROGRESS_LIMIT,
72
- peerManager,
73
- contactedPeers,
74
- abortSignal: new AbortController().signal,
75
- createDhtNodeRpcRemote: (peerDescriptor: PeerDescriptor) => createMockRpcRemote(peerDescriptor) as any
76
- })
77
- await session.findClosestNodes(1000)
78
- expect(queriedNodes.length).toBeGreaterThanOrEqual(1)
79
- // Each queried node should closer to the target than the previous queried node, because we
80
- // use parallelism=1 and noProgressLimit=1
81
- const distancesToTarget = queriedNodes
82
- .map((nodeId) => getDistance(toDhtAddressRaw(nodeId), toDhtAddressRaw(targetId)))
83
- for (let i = 1; i < distancesToTarget.length ; i++) {
84
- expect(distancesToTarget[i]).toBeLessThan(distancesToTarget[i - 1])
85
- }
86
- })
87
- })
@@ -1,31 +0,0 @@
1
- import { DuplicateDetector } from '../../src/dht/routing/DuplicateDetector'
2
-
3
- const MAX_VALUE_COUNT = 10
4
-
5
- describe('Duplicate Detector', () => {
6
-
7
- let detector: DuplicateDetector
8
-
9
- beforeEach(async () => {
10
- detector = new DuplicateDetector(MAX_VALUE_COUNT)
11
- })
12
-
13
- it('detects duplicates', async () => {
14
- detector.add('test')
15
- expect(detector.size()).toEqual(1)
16
- expect(detector.isMostLikelyDuplicate('test')).toEqual(true)
17
- })
18
-
19
- it('removes from tail when full', () => {
20
- for (let i = 0; i < MAX_VALUE_COUNT; i++) {
21
- detector.add(`test${i}`)
22
- }
23
- for (let i = 0; i < MAX_VALUE_COUNT; i++) {
24
- expect(detector.isMostLikelyDuplicate(`test${i}`)).toEqual(true)
25
- }
26
- detector.add('test10')
27
- expect(detector.size()).toEqual(10)
28
- expect(detector.isMostLikelyDuplicate('test0')).toEqual(false)
29
- expect(detector.isMostLikelyDuplicate('test10')).toEqual(true)
30
- })
31
- })
@@ -1,169 +0,0 @@
1
- import EventEmitter from 'eventemitter3'
2
- import {
3
- acceptHandshake,
4
- createHandshakeRequest,
5
- createHandshakeResponse,
6
- createIncomingHandshaker,
7
- createOutgoingHandshaker,
8
- Handshaker,
9
- rejectHandshake
10
- } from '../../src/connection/Handshaker'
11
- import { ConnectionEvents, IConnection } from '../../src/connection/IConnection'
12
- import { createMockPeerDescriptor } from '../utils/utils'
13
- import { HandshakeError, Message } from '../../generated/packages/dht/protos/DhtRpc'
14
- import { PendingConnection } from '../../src/connection/PendingConnection'
15
-
16
- describe('Handshaker', () => {
17
-
18
- let handshaker: Handshaker
19
- let pendingConnection: PendingConnection
20
- let connection: IConnection
21
-
22
- let mockOnHandshakeCompleted: () => void
23
- let mockSend: () => void
24
- let mockConnectionClose: () => void
25
- let mockPendingConnectionClose: () => void
26
- let mockPendingConnectionDestroy: () => void
27
- let mockConnectionDestroy: () => void
28
-
29
- beforeEach(() => {
30
- mockOnHandshakeCompleted = jest.fn()
31
- mockPendingConnectionClose = jest.fn()
32
- mockPendingConnectionDestroy = jest.fn()
33
- mockConnectionDestroy = jest.fn()
34
- pendingConnection = new class extends EventEmitter {
35
- // eslint-disable-next-line class-methods-use-this
36
- attachConnection() {
37
- mockOnHandshakeCompleted()
38
- }
39
- // eslint-disable-next-line class-methods-use-this
40
- close() {
41
- mockPendingConnectionClose()
42
- }
43
-
44
- // eslint-disable-next-line class-methods-use-this
45
- destroy() {
46
- mockPendingConnectionDestroy()
47
- }
48
-
49
- // eslint-disable-next-line class-methods-use-this
50
- onHandshakeCompleted(_connection: IConnection) {
51
- mockOnHandshakeCompleted()
52
- }
53
- } as any
54
-
55
- mockSend = jest.fn()
56
- mockConnectionClose = jest.fn()
57
- connection = new class extends EventEmitter<ConnectionEvents> {
58
- // eslint-disable-next-line class-methods-use-this
59
- send(_message: any) {
60
- mockSend()
61
- }
62
- // eslint-disable-next-line class-methods-use-this
63
- close() {
64
- mockConnectionClose()
65
- }
66
-
67
- // eslint-disable-next-line class-methods-use-this
68
- destroy() {
69
- mockConnectionDestroy()
70
- }
71
- } as any
72
- })
73
-
74
- describe('Outgoing', () => {
75
-
76
- beforeEach(() => {
77
- handshaker = createOutgoingHandshaker(
78
- createMockPeerDescriptor(),
79
- pendingConnection,
80
- connection,
81
- createMockPeerDescriptor()
82
- )
83
- })
84
-
85
- afterEach(() => {
86
- handshaker.stop()
87
- })
88
-
89
- it('sends request after connected', () => {
90
- (connection as any).emit('connected')
91
- expect(mockSend).toHaveBeenCalledTimes(1)
92
- })
93
-
94
- it('onHandshakeCompleted', () => {
95
- const message = createHandshakeResponse(createMockPeerDescriptor());
96
- (connection as any).emit('data', Message.toBinary(message))
97
- handshaker.emit('handshakeCompleted', createMockPeerDescriptor())
98
- expect(mockOnHandshakeCompleted).toHaveBeenCalledTimes(1)
99
- })
100
-
101
- it('onHandshakeFailed invalid PeerDescriptor', () => {
102
- handshaker.emit('handshakeFailed', HandshakeError.INVALID_TARGET_PEER_DESCRIPTOR)
103
- expect(mockOnHandshakeCompleted).not.toHaveBeenCalled()
104
- })
105
-
106
- it('onHandshakeFailed unsupported version', () => {
107
- handshaker.emit('handshakeFailed', HandshakeError.UNSUPPORTED_PROTOCOL_VERSION)
108
- expect(mockOnHandshakeCompleted).not.toHaveBeenCalled()
109
- expect(mockPendingConnectionClose).toHaveBeenCalledTimes(1)
110
- })
111
-
112
- it('onHandShakeFailed ', () => {
113
- handshaker.emit('handshakeFailed', HandshakeError.DUPLICATE_CONNECTION)
114
- expect(mockPendingConnectionDestroy).not.toHaveBeenCalled()
115
- expect(mockOnHandshakeCompleted).not.toHaveBeenCalled()
116
- })
117
-
118
- it('calls pending connection close if connection closes', () => {
119
- (connection as any).emit('disconnected')
120
- expect(mockPendingConnectionClose).toHaveBeenCalledTimes(1)
121
- })
122
-
123
- it('closes connection if managed connection closes', () => {
124
- (pendingConnection as any).emit('disconnected')
125
- expect(mockConnectionClose).toHaveBeenCalledTimes(1)
126
- })
127
-
128
- })
129
-
130
- describe('Incoming', () => {
131
-
132
- beforeEach(() => {
133
- handshaker = createIncomingHandshaker(createMockPeerDescriptor(), pendingConnection, connection)
134
- })
135
-
136
- afterEach(() => {
137
- handshaker.stop()
138
- })
139
-
140
- it('onHandshakeRequest', () => {
141
- const message = createHandshakeRequest(createMockPeerDescriptor(), createMockPeerDescriptor());
142
- (connection as any).emit('data', Message.toBinary(message))
143
- handshaker.emit('handshakeRequest', createMockPeerDescriptor(), '1.0')
144
- })
145
-
146
- it('calls pending connection onDisconnected if connection closes', () => {
147
- (connection as any).emit('disconnected')
148
- expect(mockPendingConnectionClose).toHaveBeenCalledTimes(1)
149
- })
150
-
151
- it('closes connection if managed connection closes', () => {
152
- (pendingConnection as any).emit('disconnected')
153
- expect(mockConnectionClose).toHaveBeenCalledTimes(1)
154
- })
155
-
156
- it('destroys connection if handshake is rejected', () => {
157
- rejectHandshake(pendingConnection, connection, handshaker, HandshakeError.DUPLICATE_CONNECTION)
158
- expect(mockPendingConnectionDestroy).toHaveBeenCalled()
159
- expect(mockConnectionDestroy).toHaveBeenCalled()
160
- })
161
-
162
- it('calls onHandshakeCompleted if handshake is accepted', () => {
163
- acceptHandshake(handshaker, pendingConnection, connection)
164
- expect(mockOnHandshakeCompleted).toHaveBeenCalled()
165
- })
166
-
167
- })
168
-
169
- })
@@ -1,52 +0,0 @@
1
- import { until } from '@streamr/utils'
2
- import { ListeningRpcCommunicator } from '../../src/transport/ListeningRpcCommunicator'
3
- import { MockTransport } from '../utils/mock/MockTransport'
4
- import { createMockPeerDescriptor } from '../utils/utils'
5
- import { RpcMessage } from '@streamr/proto-rpc'
6
- import { Deferred, RpcMetadata, RpcStatus } from '@protobuf-ts/runtime-rpc'
7
-
8
- const createDeferredPromises = () => {
9
-
10
- const defHeader = new Deferred<RpcMetadata>()
11
- const defMessage = new Deferred<any>()
12
- const defStatus = new Deferred<RpcStatus>()
13
- const defTrailer = new Deferred<RpcMetadata>()
14
-
15
- const deferredParser = () => {}
16
- return {
17
- message: defMessage,
18
- header: defHeader,
19
- trailer: defTrailer,
20
- status: defStatus,
21
- messageParser: deferredParser as any
22
- }
23
- }
24
-
25
- describe('ListeningRpcCommunicator', () => {
26
- const SERVICE_ID = 'test'
27
- let rpcCommunicator: ListeningRpcCommunicator
28
- let transport: MockTransport
29
-
30
- beforeEach(() => {
31
- transport = new MockTransport()
32
- rpcCommunicator = new ListeningRpcCommunicator(SERVICE_ID, transport)
33
- })
34
-
35
- afterEach(() => {
36
- rpcCommunicator.destroy()
37
- transport.stop()
38
- })
39
-
40
- it('rejects requests on disconnect event to the target', async () => {
41
- const peerDescriptor = createMockPeerDescriptor()
42
- rpcCommunicator.getRpcClientTransport().emit(
43
- 'rpcRequest',
44
- RpcMessage.create(),
45
- { targetDescriptor: peerDescriptor }, createDeferredPromises()
46
- )
47
- await until(() => rpcCommunicator.getRequestIds(() => true).length > 0)
48
- transport.emit('disconnected', peerDescriptor, false)
49
- await until(() => rpcCommunicator.getRequestIds(() => true).length === 0)
50
- }, 10000)
51
-
52
- })
@@ -1,108 +0,0 @@
1
- import { wait } from '@streamr/utils'
2
- import { LocalDataStore } from '../../src/dht/store/LocalDataStore'
3
- import { createMockPeerDescriptor } from '../utils/utils'
4
- import { createMockDataEntry } from '../utils/mock/mockDataEntry'
5
- import { randomDhtAddress, toDhtAddress, toNodeId } from '../../src/identifiers'
6
-
7
- describe('LocalDataStore', () => {
8
-
9
- let localDataStore: LocalDataStore
10
-
11
- beforeEach(() => {
12
- localDataStore = new LocalDataStore(30 * 1000)
13
- })
14
-
15
- afterEach(() => {
16
- localDataStore.clear()
17
- })
18
-
19
- it('can store', () => {
20
- const storedEntry = createMockDataEntry()
21
- localDataStore.storeEntry(storedEntry)
22
- const fetchedEntries = Array.from(localDataStore.values(toDhtAddress(storedEntry.key)))
23
- expect(fetchedEntries).toIncludeSameMembers([storedEntry])
24
- })
25
-
26
- it('multiple storers behind one key', () => {
27
- const creator1 = randomDhtAddress()
28
- const creator2 = randomDhtAddress()
29
- const key = randomDhtAddress()
30
- const storedEntry1 = createMockDataEntry({ key, creator: creator1 })
31
- const storedEntry2 = createMockDataEntry({ key, creator: creator2 })
32
- localDataStore.storeEntry(storedEntry1)
33
- localDataStore.storeEntry(storedEntry2)
34
- const fetchedEntries = Array.from(localDataStore.values(key))
35
- expect(fetchedEntries).toIncludeSameMembers([storedEntry1, storedEntry2])
36
- })
37
-
38
- it('can remove data entries', () => {
39
- const creator1 = randomDhtAddress()
40
- const creator2 = randomDhtAddress()
41
- const key = randomDhtAddress()
42
- const storedEntry1 = createMockDataEntry({ key, creator: creator1 })
43
- const storedEntry2 = createMockDataEntry({ key, creator: creator2 })
44
- localDataStore.storeEntry(storedEntry1)
45
- localDataStore.storeEntry(storedEntry2)
46
- localDataStore.deleteEntry(key, creator1)
47
- const fetchedEntries = Array.from(localDataStore.values(key))
48
- expect(fetchedEntries).toIncludeSameMembers([storedEntry2])
49
- })
50
-
51
- it('can remove all data entries', () => {
52
- const creator1 = randomDhtAddress()
53
- const creator2 = randomDhtAddress()
54
- const key = randomDhtAddress()
55
- const storedEntry1 = createMockDataEntry({ key, creator: creator1 })
56
- const storedEntry2 = createMockDataEntry({ key, creator: creator2 })
57
- localDataStore.storeEntry(storedEntry1)
58
- localDataStore.storeEntry(storedEntry2)
59
- localDataStore.deleteEntry(key, creator1)
60
- localDataStore.deleteEntry(key, creator2)
61
- expect(Array.from(localDataStore.values(key))).toHaveLength(0)
62
- })
63
-
64
- it('data is deleted after TTL', async () => {
65
- const storedEntry = createMockDataEntry({ ttl: 1000 })
66
- localDataStore.storeEntry(storedEntry)
67
- expect(Array.from(localDataStore.values(toDhtAddress(storedEntry.key)))).toHaveLength(1)
68
- await wait(1100)
69
- expect(Array.from(localDataStore.values(toDhtAddress(storedEntry.key)))).toHaveLength(0)
70
- })
71
-
72
- describe('mark data as deleted', () => {
73
-
74
- it('happy path', () => {
75
- const creator1 = randomDhtAddress()
76
- const storedEntry = createMockDataEntry({ creator: creator1 })
77
- localDataStore.storeEntry(storedEntry)
78
- const notDeletedData = Array.from(localDataStore.values(toDhtAddress(storedEntry.key)))
79
- expect(notDeletedData[0].deleted).toBeFalse()
80
- const returnValue = localDataStore.markAsDeleted(
81
- toDhtAddress(storedEntry.key),
82
- creator1
83
- )
84
- expect(returnValue).toBe(true)
85
- const deletedData = Array.from(localDataStore.values(toDhtAddress(storedEntry.key)))
86
- expect(deletedData[0].deleted).toBeTrue()
87
- })
88
-
89
- it('data not stored', () => {
90
- const key = randomDhtAddress()
91
- const returnValue = localDataStore.markAsDeleted(
92
- key,
93
- toNodeId(createMockPeerDescriptor())
94
- )
95
- expect(returnValue).toBe(false)
96
- })
97
-
98
- it('data not stored by the given creator', () => {
99
- const storedEntry = createMockDataEntry()
100
- localDataStore.storeEntry(storedEntry)
101
- const returnValue = localDataStore.markAsDeleted(
102
- toDhtAddress(storedEntry.key),
103
- toNodeId(createMockPeerDescriptor())
104
- )
105
- expect(returnValue).toBe(false)
106
- })
107
- })
108
- })