@streamr/trackerless-network 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 (231) hide show
  1. package/dist/generated/google/protobuf/any.js.map +1 -0
  2. package/dist/generated/google/protobuf/empty.js.map +1 -0
  3. package/dist/generated/google/protobuf/timestamp.js.map +1 -0
  4. package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.client.d.ts +9 -0
  5. package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.client.js +7 -0
  6. package/dist/generated/packages/dht/protos/DhtRpc.client.js.map +1 -0
  7. package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.d.ts +32 -8
  8. package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.js +23 -7
  9. package/dist/generated/packages/dht/protos/DhtRpc.js.map +1 -0
  10. package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.server.d.ts +5 -0
  11. package/dist/generated/packages/dht/protos/DhtRpc.server.js.map +1 -0
  12. package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js.map +1 -0
  13. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -0
  14. package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.d.ts +3 -3
  15. package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.js +1 -1
  16. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.js.map +1 -0
  17. package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.js.map +1 -0
  18. package/dist/package.json +9 -10
  19. package/dist/src/NetworkNode.d.ts +4 -3
  20. package/dist/src/NetworkNode.js.map +1 -1
  21. package/dist/src/NetworkStack.d.ts +2 -2
  22. package/dist/src/NetworkStack.js +4 -4
  23. package/dist/src/NetworkStack.js.map +1 -1
  24. package/dist/src/exports.d.ts +3 -2
  25. package/dist/src/exports.js +3 -2
  26. package/dist/src/exports.js.map +1 -1
  27. package/dist/src/logic/ContentDeliveryLayerNode.d.ts +2 -1
  28. package/dist/src/logic/ContentDeliveryLayerNode.js +5 -5
  29. package/dist/src/logic/ContentDeliveryLayerNode.js.map +1 -1
  30. package/dist/src/logic/ContentDeliveryManager.d.ts +2 -1
  31. package/dist/src/logic/ContentDeliveryManager.js +2 -1
  32. package/dist/src/logic/ContentDeliveryManager.js.map +1 -1
  33. package/dist/src/logic/ContentDeliveryRpcLocal.d.ts +3 -3
  34. package/dist/src/logic/ContentDeliveryRpcLocal.js +1 -1
  35. package/dist/src/logic/ContentDeliveryRpcLocal.js.map +1 -1
  36. package/dist/src/logic/ContentDeliveryRpcRemote.d.ts +2 -2
  37. package/dist/src/logic/ControlLayerNode.d.ts +1 -1
  38. package/dist/src/logic/DiscoveryLayerNode.d.ts +3 -3
  39. package/dist/src/logic/DuplicateMessageDetector.js +1 -1
  40. package/dist/src/logic/DuplicateMessageDetector.js.map +1 -1
  41. package/dist/src/logic/PeerDescriptorStoreManager.d.ts +1 -1
  42. package/dist/src/logic/PeerDescriptorStoreManager.js +1 -1
  43. package/dist/src/logic/PeerDescriptorStoreManager.js.map +1 -1
  44. package/dist/src/logic/inspect/InspectSession.d.ts +2 -2
  45. package/dist/src/logic/inspect/InspectSession.js +2 -2
  46. package/dist/src/logic/inspect/InspectSession.js.map +1 -1
  47. package/dist/src/logic/inspect/Inspector.d.ts +1 -1
  48. package/dist/src/logic/inspect/Inspector.js +1 -1
  49. package/dist/src/logic/inspect/Inspector.js.map +1 -1
  50. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +2 -2
  51. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.d.ts +2 -2
  52. package/dist/src/logic/neighbor-discovery/Handshaker.js +2 -2
  53. package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
  54. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +2 -2
  55. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
  56. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +2 -2
  57. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +1 -1
  58. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
  59. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +1 -1
  60. package/dist/src/logic/node-info/NodeInfoClient.d.ts +1 -1
  61. package/dist/src/logic/node-info/NodeInfoClient.js +1 -1
  62. package/dist/src/logic/node-info/NodeInfoClient.js.map +1 -1
  63. package/dist/src/logic/node-info/NodeInfoRpcLocal.d.ts +2 -2
  64. package/dist/src/logic/node-info/NodeInfoRpcLocal.js +1 -1
  65. package/dist/src/logic/node-info/NodeInfoRpcLocal.js.map +1 -1
  66. package/dist/src/logic/node-info/NodeInfoRpcRemote.d.ts +2 -2
  67. package/dist/src/logic/propagation/Propagation.d.ts +1 -1
  68. package/dist/src/logic/propagation/PropagationTaskStore.d.ts +1 -1
  69. package/dist/src/logic/proxy/ProxyClient.d.ts +1 -2
  70. package/dist/src/logic/proxy/ProxyClient.js +2 -3
  71. package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
  72. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.d.ts +2 -2
  73. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +4 -4
  74. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
  75. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.d.ts +2 -2
  76. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js +1 -1
  77. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +4 -4
  78. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +1 -1
  79. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
  80. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.d.ts +1 -1
  81. package/dist/src/logic/utils.d.ts +1 -1
  82. package/dist/src/logic/utils.js +2 -2
  83. package/dist/src/logic/utils.js.map +1 -1
  84. package/dist/src/types.d.ts +6 -0
  85. package/dist/src/types.js +3 -0
  86. package/dist/src/types.js.map +1 -0
  87. package/dist/test/benchmark/first-message.js +2 -2
  88. package/dist/test/benchmark/first-message.js.map +1 -1
  89. package/dist/test/utils/utils.d.ts +2 -2
  90. package/dist/test/utils/utils.js +5 -4
  91. package/dist/test/utils/utils.js.map +1 -1
  92. package/jest.config.ts +13 -0
  93. package/package.json +9 -10
  94. package/proto.sh +2 -2
  95. package/protos/NetworkRpc.proto +2 -3
  96. package/.eslintignore +0 -7
  97. package/.eslintrc +0 -3
  98. package/dist/src/proto/google/protobuf/any.js.map +0 -1
  99. package/dist/src/proto/google/protobuf/empty.js.map +0 -1
  100. package/dist/src/proto/google/protobuf/timestamp.js.map +0 -1
  101. package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +0 -1
  102. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +0 -1
  103. package/dist/src/proto/packages/dht/protos/DhtRpc.server.js.map +0 -1
  104. package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js.map +0 -1
  105. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +0 -1
  106. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +0 -1
  107. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.js.map +0 -1
  108. package/jest.config.js +0 -8
  109. package/src/NetworkNode.ts +0 -141
  110. package/src/NetworkStack.ts +0 -198
  111. package/src/exports.ts +0 -16
  112. package/src/logic/ContentDeliveryLayerNode.ts +0 -424
  113. package/src/logic/ContentDeliveryManager.ts +0 -399
  114. package/src/logic/ContentDeliveryRpcLocal.ts +0 -48
  115. package/src/logic/ContentDeliveryRpcRemote.ts +0 -44
  116. package/src/logic/ControlLayerNode.ts +0 -17
  117. package/src/logic/DiscoveryLayerNode.ts +0 -30
  118. package/src/logic/DuplicateMessageDetector.ts +0 -167
  119. package/src/logic/ExternalNetworkRpc.ts +0 -42
  120. package/src/logic/NodeList.ts +0 -114
  121. package/src/logic/PeerDescriptorStoreManager.ts +0 -96
  122. package/src/logic/StreamPartNetworkSplitAvoidance.ts +0 -90
  123. package/src/logic/StreamPartReconnect.ts +0 -38
  124. package/src/logic/createContentDeliveryLayerNode.ts +0 -130
  125. package/src/logic/formStreamPartDeliveryServiceId.ts +0 -7
  126. package/src/logic/inspect/InspectSession.ts +0 -54
  127. package/src/logic/inspect/Inspector.ts +0 -100
  128. package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +0 -138
  129. package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +0 -66
  130. package/src/logic/neighbor-discovery/Handshaker.ts +0 -215
  131. package/src/logic/neighbor-discovery/NeighborFinder.ts +0 -77
  132. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +0 -69
  133. package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +0 -75
  134. package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +0 -35
  135. package/src/logic/node-info/NodeInfoClient.ts +0 -23
  136. package/src/logic/node-info/NodeInfoRpcLocal.ts +0 -28
  137. package/src/logic/node-info/NodeInfoRpcRemote.ts +0 -11
  138. package/src/logic/propagation/FifoMapWithTTL.ts +0 -116
  139. package/src/logic/propagation/Propagation.ts +0 -84
  140. package/src/logic/propagation/PropagationTaskStore.ts +0 -41
  141. package/src/logic/proxy/ProxyClient.ts +0 -287
  142. package/src/logic/proxy/ProxyConnectionRpcLocal.ts +0 -106
  143. package/src/logic/proxy/ProxyConnectionRpcRemote.ts +0 -26
  144. package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +0 -73
  145. package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +0 -29
  146. package/src/logic/utils.ts +0 -18
  147. package/src/proto/google/protobuf/any.ts +0 -326
  148. package/src/proto/google/protobuf/empty.ts +0 -81
  149. package/src/proto/google/protobuf/timestamp.ts +0 -287
  150. package/src/proto/packages/dht/protos/DhtRpc.client.ts +0 -407
  151. package/src/proto/packages/dht/protos/DhtRpc.server.ts +0 -160
  152. package/src/proto/packages/dht/protos/DhtRpc.ts +0 -1244
  153. package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +0 -108
  154. package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +0 -218
  155. package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +0 -85
  156. package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +0 -783
  157. package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +0 -60
  158. package/test/benchmark/first-message.ts +0 -169
  159. package/test/end-to-end/content-delivery-layer-node-with-real-connections.test.ts +0 -160
  160. package/test/end-to-end/external-network-rpc.test.ts +0 -67
  161. package/test/end-to-end/inspect.test.ts +0 -124
  162. package/test/end-to-end/proxy-and-full-node.test.ts +0 -143
  163. package/test/end-to-end/proxy-connections.test.ts +0 -228
  164. package/test/end-to-end/proxy-key-exchange.test.ts +0 -126
  165. package/test/end-to-end/webrtc-full-node-network.test.ts +0 -85
  166. package/test/end-to-end/websocket-full-node-network.test.ts +0 -84
  167. package/test/integration/ContentDeliveryLayerNode-Layer1Node-Latencies.test.ts +0 -139
  168. package/test/integration/ContentDeliveryLayerNode-Layer1Node.test.ts +0 -162
  169. package/test/integration/ContentDeliveryManager.test.ts +0 -157
  170. package/test/integration/ContentDeliveryRpcRemote.test.ts +0 -100
  171. package/test/integration/HandshakeRpcRemote.test.ts +0 -79
  172. package/test/integration/Handshakes.test.ts +0 -176
  173. package/test/integration/Inspect.test.ts +0 -89
  174. package/test/integration/NeighborUpdateRpcRemote.test.ts +0 -82
  175. package/test/integration/NetworkNode.test.ts +0 -115
  176. package/test/integration/NetworkRpc.test.ts +0 -52
  177. package/test/integration/NetworkStack.test.ts +0 -72
  178. package/test/integration/NodeInfoRpc.test.ts +0 -109
  179. package/test/integration/Propagation.test.ts +0 -76
  180. package/test/integration/joining-streams-on-offline-peers.test.ts +0 -82
  181. package/test/integration/stream-without-default-entrypoints.test.ts +0 -128
  182. package/test/integration/streamEntryPointReplacing.test.ts +0 -97
  183. package/test/types/global.d.ts +0 -2
  184. package/test/unit/ContentDeliveryLayerNode.test.ts +0 -112
  185. package/test/unit/ContentDeliveryManager.test.ts +0 -95
  186. package/test/unit/ContentDeliveryRpcLocal.test.ts +0 -60
  187. package/test/unit/DuplicateMessageDetector.test.ts +0 -192
  188. package/test/unit/ExternalNetworkRpc.test.ts +0 -48
  189. package/test/unit/FifoMapWithTtl.test.ts +0 -253
  190. package/test/unit/HandshakeRpcLocal.test.ts +0 -168
  191. package/test/unit/Handshaker.test.ts +0 -69
  192. package/test/unit/InspectSession.test.ts +0 -80
  193. package/test/unit/Inspector.test.ts +0 -51
  194. package/test/unit/NeighborFinder.test.ts +0 -51
  195. package/test/unit/NeighborUpdateRpcLocal.test.ts +0 -139
  196. package/test/unit/NetworkNode.test.ts +0 -42
  197. package/test/unit/NodeList.test.ts +0 -164
  198. package/test/unit/NumberPair.test.ts +0 -22
  199. package/test/unit/PeerDescriptorStoreManager.test.ts +0 -103
  200. package/test/unit/Propagation.test.ts +0 -151
  201. package/test/unit/ProxyConnectionRpcRemote.test.ts +0 -39
  202. package/test/unit/StreamPartIDDataKey.test.ts +0 -12
  203. package/test/unit/StreamPartNetworkSplitAvoidance.test.ts +0 -31
  204. package/test/unit/StreamPartReconnect.test.ts +0 -30
  205. package/test/unit/TemporaryConnectionRpcLocal.test.ts +0 -38
  206. package/test/utils/fake/FakePeerDescriptorStoreManager.ts +0 -29
  207. package/test/utils/mock/MockConnectionsView.ts +0 -18
  208. package/test/utils/mock/MockControlLayerNode.ts +0 -78
  209. package/test/utils/mock/MockDiscoveryLayerNode.ts +0 -60
  210. package/test/utils/mock/MockHandshaker.ts +0 -17
  211. package/test/utils/mock/MockNeighborFinder.ts +0 -20
  212. package/test/utils/mock/MockNeighborUpdateManager.ts +0 -21
  213. package/test/utils/mock/MockTransport.ts +0 -30
  214. package/test/utils/utils.ts +0 -143
  215. package/tsconfig.browser.json +0 -12
  216. package/tsconfig.jest.json +0 -16
  217. package/tsconfig.json +0 -3
  218. package/tsconfig.node.json +0 -16
  219. /package/dist/{src/proto → generated}/google/protobuf/any.d.ts +0 -0
  220. /package/dist/{src/proto → generated}/google/protobuf/any.js +0 -0
  221. /package/dist/{src/proto → generated}/google/protobuf/empty.d.ts +0 -0
  222. /package/dist/{src/proto → generated}/google/protobuf/empty.js +0 -0
  223. /package/dist/{src/proto → generated}/google/protobuf/timestamp.d.ts +0 -0
  224. /package/dist/{src/proto → generated}/google/protobuf/timestamp.js +0 -0
  225. /package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.server.js +0 -0
  226. /package/dist/{src/proto → generated}/packages/proto-rpc/protos/ProtoRpc.d.ts +0 -0
  227. /package/dist/{src/proto → generated}/packages/proto-rpc/protos/ProtoRpc.js +0 -0
  228. /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.client.d.ts +0 -0
  229. /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.client.js +0 -0
  230. /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.server.d.ts +0 -0
  231. /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.server.js +0 -0
@@ -1,60 +0,0 @@
1
- /* eslint-disable no-console */
2
-
3
- import { DhtAddress } from '@streamr/dht'
4
- import { StreamPartIDUtils } from '@streamr/utils'
5
- import { groupBy, range } from 'lodash'
6
- import { streamPartIdToDataKey } from '../../src/logic/ContentDeliveryManager'
7
-
8
- describe('StreamPartIdDataKeyDistribution', () => {
9
-
10
- it('partitions are well distributed', () => {
11
-
12
- const streamId = 'stream'
13
- const dataKeys = range(100).map((i) => {
14
- const streamPartId = StreamPartIDUtils.parse(streamId + '#' + i)
15
- return streamPartIdToDataKey(streamPartId)
16
- })
17
-
18
- const byInitials = groupBy(dataKeys, (dataKey: DhtAddress) => dataKey[0])
19
- expect(Object.keys(byInitials).length).toEqual(16)
20
- console.log(Object.values(byInitials).map((a) => a.length))
21
- })
22
-
23
- it('streamIds are well distributed', () => {
24
- const dataKeys = range(10000).map(() => {
25
- const streamPartId = StreamPartIDUtils.parse(Math.random().toString(32).substr(2, 32) + '#0')
26
- return streamPartIdToDataKey(streamPartId)
27
- })
28
- const byInitials = groupBy(dataKeys, (dataKey: DhtAddress) => dataKey[0])
29
- expect(Object.keys(byInitials).length).toEqual(16)
30
- console.log(Object.values(byInitials).map((a) => a.length))
31
- })
32
-
33
- it('streamPartIds are well distributed', () => {
34
- const streamIds = range(10000).map(() => Math.random().toString(32).substr(2, 32))
35
- const dataKeys: DhtAddress[] = []
36
- streamIds.forEach((streamId) => {
37
- range(100).forEach((i) => {
38
- const streamPartId = StreamPartIDUtils.parse(streamId + '#' + i)
39
- dataKeys.push(streamPartIdToDataKey(streamPartId))
40
- })
41
- })
42
-
43
- const byInitials = groupBy(dataKeys, (dataKey: DhtAddress) => dataKey[0])
44
- expect(Object.keys(byInitials).length).toEqual(16)
45
- console.log(Object.values(byInitials).map((a) => a.length))
46
-
47
- const byTwoInitials = groupBy(dataKeys, (dataKey: DhtAddress) => dataKey[0] + dataKey[1])
48
- expect(Object.keys(byTwoInitials).length).toEqual(16 * 16)
49
- console.log(Object.values(byTwoInitials).map((a) => a.length))
50
-
51
- const byThreeInitials = groupBy(dataKeys, (dataKey: DhtAddress) => dataKey[0] + dataKey[1] + dataKey[2])
52
- expect(Object.keys(byThreeInitials).length).toEqual(16 * 16 * 16)
53
- console.log(Object.values(byThreeInitials).map((a) => a.length))
54
-
55
- const byFourInitials = groupBy(dataKeys, (dataKey: DhtAddress) => dataKey[0] + dataKey[1] + dataKey[2] + dataKey[3])
56
- expect(Object.keys(byFourInitials).length).toEqual(16 * 16 * 16 * 16)
57
- console.log(Object.values(byFourInitials).map((a) => a.length))
58
- })
59
-
60
- })
@@ -1,169 +0,0 @@
1
- /* eslint-disable no-console */
2
-
3
- import {
4
- DhtNode,
5
- toNodeId,
6
- getRandomRegion,
7
- LatencyType,
8
- PeerDescriptor,
9
- Simulator
10
- } from '@streamr/dht'
11
- import {
12
- hexToBinary,
13
- StreamPartID,
14
- StreamPartIDUtils,
15
- toStreamID,
16
- toStreamPartID,
17
- utf8ToBinary, waitForEvent3
18
- } from '@streamr/utils'
19
- import fs from 'fs'
20
- import { ContentDeliveryLayerNode } from '../../src/logic/ContentDeliveryLayerNode'
21
- import { streamPartIdToDataKey } from '../../src/logic/ContentDeliveryManager'
22
- import { DiscoveryLayerNode } from '../../src/logic/DiscoveryLayerNode'
23
- import { NetworkNode } from '../../src/NetworkNode'
24
- import { ContentType, EncryptionType, SignatureType } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
25
- import { createMockPeerDescriptor, createNetworkNodeWithSimulator } from '../utils/utils'
26
-
27
- const numNodes = 10000
28
-
29
- let nodes: NetworkNode[]
30
- let simulator: Simulator
31
- let layer0Ep: PeerDescriptor
32
- const publishIntervals: NodeJS.Timeout[] = []
33
- const streamParts: Map<StreamPartID, NetworkNode> = new Map()
34
- let currentNode: NetworkNode
35
- let publishInterval: NodeJS.Timeout | undefined
36
- let i = 0
37
-
38
- const prepareLayer0 = async () => {
39
- console.log('Preparing network')
40
- nodes = []
41
- simulator = new Simulator(LatencyType.REAL)
42
- const peerDescriptor = createMockPeerDescriptor({
43
- region: getRandomRegion()
44
- })
45
- layer0Ep = peerDescriptor
46
- const entryPoint = await createNetworkNodeWithSimulator(peerDescriptor, simulator, [peerDescriptor])
47
- await entryPoint.start()
48
- nodes.push(entryPoint)
49
-
50
- console.log('Entrypoint ready')
51
- }
52
-
53
- const prepareStream = async (streamId: string) => {
54
- console.log('Preparing stream ')
55
- const peerDescriptor = createMockPeerDescriptor({
56
- region: getRandomRegion()
57
- })
58
- const streamPartId = toStreamPartID(toStreamID(streamId), 0)
59
- const streamPublisher = await createNetworkNodeWithSimulator(peerDescriptor, simulator, [layer0Ep])
60
- await streamPublisher.start()
61
- streamPublisher.join(streamPartId)
62
- nodes.push(streamPublisher)
63
- streamParts.set(streamPartId, streamPublisher)
64
- }
65
-
66
- const shutdownNetwork = async () => {
67
- publishIntervals.forEach((interval) => clearInterval(interval))
68
- await Promise.all([
69
- ...nodes.map((node) => node.stop())
70
- ])
71
- simulator.stop()
72
- }
73
-
74
- const measureJoiningTime = async () => {
75
- const peerDescriptor = createMockPeerDescriptor({
76
- region: getRandomRegion()
77
- })
78
- console.log('starting node with id ', toNodeId(peerDescriptor))
79
-
80
- // start publishing ons stream
81
- const stream = Array.from(streamParts.keys())[Math.floor(Math.random() * streamParts.size)]
82
- console.log(stream)
83
- publishInterval = setInterval(() => {
84
- i += 1
85
- const streamMessage = {
86
- messageId: {
87
- streamId: StreamPartIDUtils.getStreamID(stream),
88
- streamPartition: 0,
89
- timestamp: i,
90
- sequenceNumber: Math.floor(Math.random() * 20000),
91
- publisherId: hexToBinary('0x2222'),
92
- messageChainId: 'msgChainId'
93
- },
94
- body: {
95
- oneofKind: 'contentMessage' as const,
96
- contentMessage: {
97
- content: utf8ToBinary(JSON.stringify({
98
- hello: 'world'
99
- })),
100
- contentType: ContentType.JSON,
101
- encryptionType: EncryptionType.NONE,
102
- }
103
- },
104
- signature: hexToBinary('0x1234'),
105
- signatureType: SignatureType.SECP256K1,
106
- }
107
- streamParts.get(stream)!.broadcast(streamMessage)
108
- }, 1000)
109
- // get random node from network to use as entrypoint
110
- const randomNode = nodes[Math.floor(Math.random() * nodes.length)]
111
- const streamSubscriber = await createNetworkNodeWithSimulator(
112
- peerDescriptor,
113
- simulator,
114
- [randomNode.stack.getControlLayerNode().getLocalPeerDescriptor()]
115
- )
116
- currentNode = streamSubscriber
117
- const start = performance.now()
118
- await streamSubscriber.start()
119
-
120
- await Promise.all([
121
- waitForEvent3(streamSubscriber.stack.getContentDeliveryManager() as any, 'newMessage', 60000),
122
- streamSubscriber.join(stream)
123
- ])
124
-
125
- const end = performance.now()
126
-
127
- nodes.push(streamSubscriber)
128
- clearInterval(publishInterval)
129
- publishInterval = undefined
130
- return end - start
131
- }
132
-
133
- const run = async () => {
134
- await prepareLayer0()
135
- for (let i = 0; i < 20; i++) {
136
- await prepareStream(`stream-${i}`)
137
- }
138
- const logFile = fs.openSync('FirstMessageTime.log', 'w')
139
-
140
- fs.writeSync(logFile, 'Network size' + '\t' + 'Time to receive first message time (ms)' + '\n')
141
- for (let i = 0; i < numNodes; i++) {
142
- const time = await measureJoiningTime()
143
- console.log(`Time to receive first message for ${i + 1} nodes network: ${time}ms`)
144
- fs.writeSync(logFile, `${i + 1}` + '\t' + `${Math.round(time)}\n`)
145
- }
146
- fs.closeSync(logFile)
147
- await shutdownNetwork()
148
- }
149
-
150
- run().then(() => {
151
- console.log('done')
152
- }).catch((err) => {
153
- console.error(err)
154
- const contentDeliveryManager = currentNode.stack.getContentDeliveryManager()
155
- const streamParts = contentDeliveryManager.getStreamParts()
156
- const foundData = nodes[0].stack.getControlLayerNode().fetchDataFromDht(streamPartIdToDataKey(streamParts[0]))
157
- console.log(foundData)
158
- const controlLayerNode = currentNode.stack.getControlLayerNode() as DhtNode
159
- console.log(controlLayerNode.getNeighbors().length)
160
- console.log(controlLayerNode.getConnectionsView().getConnectionCount())
161
- const streamPartDelivery = contentDeliveryManager
162
- .getStreamPartDelivery(streamParts[0])! as { discoveryLayerNode: DiscoveryLayerNode, node: ContentDeliveryLayerNode }
163
- console.log(streamPartDelivery.discoveryLayerNode.getNeighbors())
164
- console.log(streamPartDelivery.node.getNeighbors())
165
- console.log(nodes[nodes.length - 1])
166
- if (publishInterval) {
167
- clearInterval(publishInterval)
168
- }
169
- })
@@ -1,160 +0,0 @@
1
- import { ConnectionManager, DhtNode, PeerDescriptor } from '@streamr/dht'
2
- import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
3
- import { ContentDeliveryLayerNode } from '../../src/logic/ContentDeliveryLayerNode'
4
- import { ControlLayerNode } from '../../src/logic/ControlLayerNode'
5
- import { DiscoveryLayerNode } from '../../src/logic/DiscoveryLayerNode'
6
- import { createContentDeliveryLayerNode } from '../../src/logic/createContentDeliveryLayerNode'
7
- import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
8
- import { randomUserId } from '@streamr/test-utils'
9
-
10
- describe('content delivery layer node with real connections', () => {
11
-
12
- const epPeerDescriptor: PeerDescriptor = createMockPeerDescriptor({
13
- websocket: { host: '127.0.0.1', port: 12221, tls: false }
14
- })
15
-
16
- const streamPartId = StreamPartIDUtils.parse('random-graph#0')
17
- // Currently the nodes here are practically layer0 nodes acting as layer1 nodes, for the purpose of this test
18
- // they are layer1 nodes as the DHT is per stream
19
- // TODO refactor the test to use normal layering style (i.e. have separate objects for layer0 and layer1 nodes)
20
- let epDhtNode: ControlLayerNode & DiscoveryLayerNode
21
- let dhtNode1: ControlLayerNode & DiscoveryLayerNode
22
- let dhtNode2: ControlLayerNode & DiscoveryLayerNode
23
- let dhtNode3: ControlLayerNode & DiscoveryLayerNode
24
- let dhtNode4: ControlLayerNode & DiscoveryLayerNode
25
- let contentDeliveryLayerNode1: ContentDeliveryLayerNode
26
- let contentDeliveryLayerNode2: ContentDeliveryLayerNode
27
- let contentDeliveryLayerNode3: ContentDeliveryLayerNode
28
- let contentDeliveryLayerNode4: ContentDeliveryLayerNode
29
- let contentDeliveryLayerNode5: ContentDeliveryLayerNode
30
- const websocketPortRange = { min: 12222, max: 12225 }
31
-
32
- beforeEach(async () => {
33
- epDhtNode = new DhtNode({ peerDescriptor: epPeerDescriptor, websocketServerEnableTls: false })
34
- await epDhtNode.start()
35
- dhtNode1 = new DhtNode({ websocketPortRange, entryPoints: [epPeerDescriptor], websocketServerEnableTls: false })
36
- dhtNode2 = new DhtNode({ websocketPortRange, entryPoints: [epPeerDescriptor], websocketServerEnableTls: false })
37
- dhtNode3 = new DhtNode({ websocketPortRange, entryPoints: [epPeerDescriptor], websocketServerEnableTls: false })
38
- dhtNode4 = new DhtNode({ websocketPortRange, entryPoints: [epPeerDescriptor], websocketServerEnableTls: false })
39
- await dhtNode1.start()
40
- await dhtNode2.start()
41
- await dhtNode3.start()
42
- await dhtNode4.start()
43
-
44
- contentDeliveryLayerNode1 = createContentDeliveryLayerNode(
45
- {
46
- streamPartId,
47
- discoveryLayerNode: epDhtNode,
48
- transport: epDhtNode.getTransport(),
49
- connectionLocker: epDhtNode.getTransport() as ConnectionManager,
50
- localPeerDescriptor: epPeerDescriptor,
51
- isLocalNodeEntryPoint: () => false
52
- }
53
- )
54
- contentDeliveryLayerNode2 = createContentDeliveryLayerNode({
55
- streamPartId,
56
- discoveryLayerNode: dhtNode1,
57
- transport: dhtNode1.getTransport(),
58
- connectionLocker: dhtNode1.getTransport() as ConnectionManager,
59
- localPeerDescriptor: dhtNode1.getLocalPeerDescriptor(),
60
- isLocalNodeEntryPoint: () => false
61
- })
62
- contentDeliveryLayerNode3 = createContentDeliveryLayerNode({
63
- streamPartId,
64
- discoveryLayerNode: dhtNode2,
65
- transport: dhtNode2.getTransport(),
66
- connectionLocker: dhtNode2.getTransport() as ConnectionManager,
67
- localPeerDescriptor: dhtNode2.getLocalPeerDescriptor(),
68
- isLocalNodeEntryPoint: () => false
69
- })
70
- contentDeliveryLayerNode4 = createContentDeliveryLayerNode({
71
- streamPartId,
72
- discoveryLayerNode: dhtNode3,
73
- transport: dhtNode3.getTransport(),
74
- connectionLocker: dhtNode3.getTransport() as ConnectionManager,
75
- localPeerDescriptor: dhtNode3.getLocalPeerDescriptor(),
76
- isLocalNodeEntryPoint: () => false
77
- })
78
- contentDeliveryLayerNode5 = createContentDeliveryLayerNode({
79
- streamPartId,
80
- discoveryLayerNode: dhtNode4,
81
- transport: dhtNode4.getTransport(),
82
- connectionLocker: dhtNode4.getTransport() as ConnectionManager,
83
- localPeerDescriptor: dhtNode4.getLocalPeerDescriptor(),
84
- isLocalNodeEntryPoint: () => false
85
- })
86
- await Promise.all([
87
- contentDeliveryLayerNode1.start(),
88
- contentDeliveryLayerNode2.start(),
89
- contentDeliveryLayerNode3.start(),
90
- contentDeliveryLayerNode4.start(),
91
- contentDeliveryLayerNode5.start()
92
- ])
93
- await epDhtNode.joinDht([epPeerDescriptor])
94
- await Promise.all([
95
- dhtNode1.joinDht([epPeerDescriptor]),
96
- dhtNode2.joinDht([epPeerDescriptor]),
97
- dhtNode3.joinDht([epPeerDescriptor]),
98
- dhtNode4.joinDht([epPeerDescriptor])
99
- ])
100
- })
101
-
102
- afterEach(async () => {
103
- await Promise.all([
104
- epDhtNode.stop(),
105
- dhtNode1.stop(),
106
- dhtNode2.stop(),
107
- dhtNode3.stop(),
108
- dhtNode4.stop(),
109
- contentDeliveryLayerNode1.stop(),
110
- contentDeliveryLayerNode2.stop(),
111
- contentDeliveryLayerNode3.stop(),
112
- contentDeliveryLayerNode4.stop(),
113
- contentDeliveryLayerNode5.stop(),
114
- (epDhtNode.getTransport() as ConnectionManager).stop(),
115
- (dhtNode1.getTransport() as ConnectionManager).stop(),
116
- (dhtNode2.getTransport() as ConnectionManager).stop(),
117
- (dhtNode3.getTransport() as ConnectionManager).stop(),
118
- (dhtNode4.getTransport() as ConnectionManager).stop()
119
- ])
120
- })
121
-
122
- it('can fully connected topologies ', async () => {
123
- await waitForCondition(() => {
124
- return contentDeliveryLayerNode1.getNeighbors().length >= 3
125
- && contentDeliveryLayerNode2.getNeighbors().length >= 3
126
- && contentDeliveryLayerNode3.getNeighbors().length >= 3
127
- && contentDeliveryLayerNode4.getNeighbors().length >= 3
128
- && contentDeliveryLayerNode5.getNeighbors().length >= 3
129
- }, 10000)
130
- expect(contentDeliveryLayerNode1.getNeighbors().length).toBeGreaterThanOrEqual(3)
131
- expect(contentDeliveryLayerNode2.getNeighbors().length).toBeGreaterThanOrEqual(3)
132
- expect(contentDeliveryLayerNode3.getNeighbors().length).toBeGreaterThanOrEqual(3)
133
- expect(contentDeliveryLayerNode4.getNeighbors().length).toBeGreaterThanOrEqual(3)
134
- expect(contentDeliveryLayerNode5.getNeighbors().length).toBeGreaterThanOrEqual(3)
135
- })
136
-
137
- it('can propagate messages', async () => {
138
- let receivedMessageCount = 0
139
- contentDeliveryLayerNode2.on('message', () => receivedMessageCount += 1)
140
- contentDeliveryLayerNode3.on('message', () => receivedMessageCount += 1)
141
- contentDeliveryLayerNode4.on('message', () => receivedMessageCount += 1)
142
- contentDeliveryLayerNode5.on('message', () => receivedMessageCount += 1)
143
-
144
- await waitForCondition(() => {
145
- return contentDeliveryLayerNode1.getNeighbors().length >= 3
146
- && contentDeliveryLayerNode2.getNeighbors().length >= 3
147
- && contentDeliveryLayerNode3.getNeighbors().length >= 3
148
- && contentDeliveryLayerNode4.getNeighbors().length >= 3
149
- && contentDeliveryLayerNode5.getNeighbors().length >= 3
150
- }, 10000)
151
-
152
- const msg = createStreamMessage(
153
- JSON.stringify({ hello: 'WORLD' }),
154
- streamPartId,
155
- randomUserId()
156
- )
157
- contentDeliveryLayerNode1.broadcast(msg)
158
- await waitForCondition(() => receivedMessageCount >= 4)
159
- })
160
- })
@@ -1,67 +0,0 @@
1
- import { NetworkNode } from '../../src/NetworkNode'
2
- import { NetworkStack } from '../../src/NetworkStack'
3
- import { StreamPartHandshakeRequest, StreamPartHandshakeResponse } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
4
- import { HandshakeRpcClient } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
5
- import { createMockPeerDescriptor } from '../utils/utils'
6
-
7
- describe('ExternalNetworkRpc', () => {
8
-
9
- let clientNode: NetworkNode
10
- let serverNode: NetworkNode
11
-
12
- const serverPeerDescriptor = createMockPeerDescriptor({
13
- websocket: {
14
- host: '127.0.0.1',
15
- port: 15499,
16
- tls: false
17
- }
18
- })
19
-
20
- const clientPeerDescriptor = createMockPeerDescriptor()
21
-
22
- beforeEach(async () => {
23
- const clientStack = new NetworkStack({
24
- layer0: {
25
- entryPoints: [serverPeerDescriptor],
26
- peerDescriptor: clientPeerDescriptor,
27
- websocketServerEnableTls: false
28
- }
29
- })
30
- const serverStack = new NetworkStack({
31
- layer0: {
32
- entryPoints: [serverPeerDescriptor],
33
- peerDescriptor: serverPeerDescriptor,
34
- websocketServerEnableTls: false
35
- }
36
- })
37
- clientNode = new NetworkNode(clientStack)
38
- serverNode = new NetworkNode(serverStack)
39
-
40
- await serverNode.start()
41
- await clientNode.start()
42
-
43
- })
44
-
45
- afterEach(() => {
46
- serverNode.stop()
47
- clientNode.stop()
48
- })
49
-
50
- it('can make queries', async () => {
51
- const requestId = 'TEST'
52
- serverNode.registerExternalNetworkRpcMethod(
53
- StreamPartHandshakeRequest,
54
- StreamPartHandshakeResponse,
55
- 'handshake',
56
- async () => StreamPartHandshakeResponse.create({ requestId })
57
- )
58
- const client = clientNode.createExternalRpcClient(HandshakeRpcClient)
59
- const response = await client.handshake(StreamPartHandshakeRequest.create(), {
60
- sourceDescriptor: clientPeerDescriptor,
61
- targetDescriptor: serverPeerDescriptor
62
- })
63
- expect(response.requestId).toEqual(requestId)
64
-
65
- })
66
-
67
- })
@@ -1,124 +0,0 @@
1
- import { randomUserId } from '@streamr/test-utils'
2
- import { StreamPartIDUtils, hexToBinary, utf8ToBinary, waitForCondition } from '@streamr/utils'
3
- import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
4
- import { ContentType, EncryptionType, SignatureType, StreamMessage } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
5
- import { createMockPeerDescriptor } from '../utils/utils'
6
-
7
- const STREAM_PART_ID = StreamPartIDUtils.parse('stream#0')
8
-
9
- describe('inspect', () => {
10
-
11
- const publisherDescriptor = createMockPeerDescriptor({
12
- websocket: {
13
- host: '127.0.0.1',
14
- port: 15478,
15
- tls: false
16
- }
17
- })
18
-
19
- const inspectedDescriptor = createMockPeerDescriptor({
20
- websocket: {
21
- host: '127.0.0.1',
22
- port: 15479,
23
- tls: false
24
- }
25
- })
26
-
27
- const inspectorDescriptor = createMockPeerDescriptor({
28
- websocket: {
29
- host: '127.0.0.1',
30
- port: 15480,
31
- tls: false
32
- }
33
- })
34
-
35
- let publisherNode: NetworkNode
36
-
37
- let inspectedNode: NetworkNode
38
-
39
- let inspectorNode: NetworkNode
40
-
41
- const message: StreamMessage = {
42
- messageId: {
43
- streamId: StreamPartIDUtils.getStreamID(STREAM_PART_ID),
44
- streamPartition: StreamPartIDUtils.getStreamPartition(STREAM_PART_ID),
45
- timestamp: 666,
46
- sequenceNumber: 0,
47
- publisherId: hexToBinary(randomUserId()),
48
- messageChainId: 'msgChainId'
49
- },
50
- previousMessageRef: {
51
- timestamp: 665,
52
- sequenceNumber: 0
53
- },
54
- body: {
55
- oneofKind: 'contentMessage',
56
- contentMessage: {
57
- content: utf8ToBinary(JSON.stringify({
58
- hello: 'world'
59
- })),
60
- contentType: ContentType.JSON,
61
- encryptionType: EncryptionType.NONE
62
- }
63
- },
64
- signatureType: SignatureType.SECP256K1,
65
- signature: hexToBinary('0x1234'),
66
- }
67
-
68
- beforeEach(async () => {
69
- publisherNode = createNetworkNode({
70
- layer0: {
71
- entryPoints: [publisherDescriptor],
72
- peerDescriptor: publisherDescriptor,
73
- websocketServerEnableTls: false
74
- }
75
- })
76
-
77
- inspectedNode = createNetworkNode({
78
- layer0: {
79
- entryPoints: [publisherDescriptor],
80
- peerDescriptor: inspectedDescriptor,
81
- websocketServerEnableTls: false
82
- }
83
- })
84
-
85
- inspectorNode = createNetworkNode({
86
- layer0: {
87
- entryPoints: [publisherDescriptor],
88
- peerDescriptor: inspectorDescriptor,
89
- websocketServerEnableTls: false
90
- }
91
- })
92
-
93
- await publisherNode.start()
94
- await inspectedNode.start()
95
- await inspectorNode.start()
96
-
97
- publisherNode.stack.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
98
- inspectedNode.stack.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
99
- inspectorNode.stack.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
100
-
101
- await waitForCondition(() =>
102
- publisherNode.stack.getContentDeliveryManager().getNeighbors(STREAM_PART_ID).length === 2
103
- && inspectedNode.stack.getContentDeliveryManager().getNeighbors(STREAM_PART_ID).length === 2
104
- && inspectorNode.stack.getContentDeliveryManager().getNeighbors(STREAM_PART_ID).length === 2
105
- )
106
- }, 30000)
107
-
108
- afterEach(async () => {
109
- await Promise.all([
110
- publisherNode.stop(),
111
- inspectedNode.stop(),
112
- inspectorNode.stop()
113
- ])
114
- })
115
-
116
- it('should inspect succesfully', async () => {
117
- setTimeout(async () => {
118
- await publisherNode.broadcast(message)
119
- }, 250)
120
- const success = await inspectorNode.inspect(inspectedDescriptor, STREAM_PART_ID)
121
- expect(success).toBe(true)
122
- })
123
-
124
- })