@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,139 +0,0 @@
1
- import { DhtNode, LatencyType, PeerDescriptor, Simulator, SimulatorTransport, toNodeId } from '@streamr/dht'
2
- import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
3
- import { range } from 'lodash'
4
- import { ContentDeliveryLayerNode } from '../../src/logic/ContentDeliveryLayerNode'
5
- import { DiscoveryLayerNode } from '../../src/logic/DiscoveryLayerNode'
6
- import { createContentDeliveryLayerNode } from '../../src/logic/createContentDeliveryLayerNode'
7
- import { createMockPeerDescriptor } from '../utils/utils'
8
-
9
- describe('ContentDeliveryLayerNode-DhtNode-Latencies', () => {
10
- const otherNodeCount = 64
11
- let otherDiscoveryLayerNodes: DiscoveryLayerNode[]
12
- let entryPointDiscoveryLayerNode: DiscoveryLayerNode
13
- let entryPointContentDeliveryLayerNode: ContentDeliveryLayerNode
14
- let otherContentDeliveryLayerNodes: ContentDeliveryLayerNode[]
15
-
16
- const streamPartId = StreamPartIDUtils.parse('stream#0')
17
- const entrypointDescriptor = createMockPeerDescriptor()
18
-
19
- const peerDescriptors: PeerDescriptor[] = range(otherNodeCount).map(() => createMockPeerDescriptor())
20
- beforeEach(async () => {
21
- const simulator = new Simulator(LatencyType.FIXED, 50)
22
- const entrypointCm = new SimulatorTransport(entrypointDescriptor, simulator)
23
- const cms: SimulatorTransport[] = range(otherNodeCount).map((i) =>
24
- new SimulatorTransport(peerDescriptors[i], simulator)
25
- )
26
- await entrypointCm.start()
27
- await Promise.all(cms.map((cm) => cm.start()))
28
-
29
- entryPointDiscoveryLayerNode = new DhtNode({
30
- transport: entrypointCm,
31
- connectionsView: entrypointCm,
32
- peerDescriptor: entrypointDescriptor,
33
- serviceId: streamPartId
34
- })
35
- otherDiscoveryLayerNodes = range(otherNodeCount).map((i) => new DhtNode({
36
- transport: cms[i],
37
- connectionsView: cms[i],
38
- peerDescriptor: peerDescriptors[i],
39
- serviceId: streamPartId
40
- }))
41
- otherContentDeliveryLayerNodes = range(otherNodeCount).map((i) => createContentDeliveryLayerNode({
42
- streamPartId,
43
- discoveryLayerNode: otherDiscoveryLayerNodes[i],
44
- transport: cms[i],
45
- connectionLocker: cms[i],
46
- localPeerDescriptor: peerDescriptors[i],
47
- isLocalNodeEntryPoint: () => false
48
- }))
49
- entryPointContentDeliveryLayerNode = createContentDeliveryLayerNode({
50
- streamPartId,
51
- discoveryLayerNode: entryPointDiscoveryLayerNode,
52
- transport: entrypointCm,
53
- connectionLocker: entrypointCm,
54
- localPeerDescriptor: entrypointDescriptor,
55
- isLocalNodeEntryPoint: () => false
56
- })
57
-
58
- await entryPointDiscoveryLayerNode.start()
59
- entryPointContentDeliveryLayerNode.start()
60
- await entryPointDiscoveryLayerNode.joinDht([entrypointDescriptor])
61
- await Promise.all(otherDiscoveryLayerNodes.map((node) => node.start()))
62
- })
63
-
64
- afterEach(async () => {
65
- entryPointDiscoveryLayerNode.stop()
66
- entryPointContentDeliveryLayerNode.stop()
67
- await Promise.all(otherDiscoveryLayerNodes.map((node) => node.stop()))
68
- await Promise.all(otherContentDeliveryLayerNodes.map((node) => node.stop()))
69
- })
70
-
71
- it('happy path single node', async () => {
72
- await otherContentDeliveryLayerNodes[0].start()
73
- await otherDiscoveryLayerNodes[0].joinDht([entrypointDescriptor])
74
- await Promise.all([
75
- waitForCondition(() => otherContentDeliveryLayerNodes[0].getNearbyNodeView().getIds().length === 1),
76
- waitForCondition(() => otherContentDeliveryLayerNodes[0].getNeighbors().length === 1)
77
- ])
78
- expect(otherContentDeliveryLayerNodes[0].getNearbyNodeView().getIds().length).toEqual(1)
79
- expect(otherContentDeliveryLayerNodes[0].getNeighbors().length).toEqual(1)
80
- })
81
-
82
- it('happy path 5 nodes', async () => {
83
- range(4).forEach((i) => otherContentDeliveryLayerNodes[i].start())
84
- await Promise.all(range(4).map(async (i) => {
85
- await otherDiscoveryLayerNodes[i].joinDht([entrypointDescriptor])
86
- }))
87
- await waitForCondition(() => range(4).every((i) => otherContentDeliveryLayerNodes[i].getNeighbors().length >= 4), 15000, 1000)
88
- range(4).forEach((i) => {
89
- expect(otherContentDeliveryLayerNodes[i].getNearbyNodeView().getIds().length).toBeGreaterThanOrEqual(4)
90
- expect(otherContentDeliveryLayerNodes[i].getNeighbors().length).toBeGreaterThanOrEqual(4)
91
- })
92
- // Check bidirectionality
93
- const allNodes = otherContentDeliveryLayerNodes
94
- allNodes.push(entryPointContentDeliveryLayerNode)
95
- range(5).forEach((i) => {
96
- const ownNodeId = allNodes[i].getOwnNodeId()
97
- allNodes[i].getNearbyNodeView().getIds().forEach((nodeId) => {
98
- const neighbor = allNodes.find((node) => {
99
- return node.getOwnNodeId() === ownNodeId
100
- })
101
- const neighborNodeIds = neighbor!.getNeighbors().map((n) => toNodeId(n))
102
- expect(neighborNodeIds).toContain(nodeId)
103
- })
104
- })
105
- }, 60000)
106
-
107
- it('happy path 64 nodes', async () => {
108
- await Promise.all(range(otherNodeCount).map((i) => otherContentDeliveryLayerNodes[i].start()))
109
- await Promise.all(range(otherNodeCount).map((i) => {
110
- otherDiscoveryLayerNodes[i].joinDht([entrypointDescriptor])
111
- }))
112
- await Promise.all(otherContentDeliveryLayerNodes.map((node) =>
113
- waitForCondition(() => node.getNeighbors().length >= 4, 10000)
114
- ))
115
-
116
- await Promise.all(otherContentDeliveryLayerNodes.map((node) =>
117
- waitForCondition(() => node.getOutgoingHandshakeCount() === 0)
118
- ))
119
-
120
- await waitForCondition(() => {
121
- let mismatchCounter = 0
122
- otherContentDeliveryLayerNodes.forEach((node) => {
123
- const nodeId = node.getOwnNodeId()
124
- node.getNeighbors().forEach((neighbor) => {
125
- const neighborId = toNodeId(neighbor)
126
- if (neighborId !== entryPointContentDeliveryLayerNode.getOwnNodeId()) {
127
- const neighbor = otherContentDeliveryLayerNodes.find((n) => n.getOwnNodeId() === neighborId)
128
- const neighborNodeIds = neighbor!.getNeighbors().map((n) => toNodeId(n))
129
- if (!neighborNodeIds.includes(nodeId)) {
130
- mismatchCounter += 1
131
- }
132
- }
133
- })
134
- })
135
- // NET-1074 Investigate why sometimes unidirectional connections remain.
136
- return mismatchCounter <= 2
137
- }, 20000, 1000)
138
- }, 90000)
139
- })
@@ -1,162 +0,0 @@
1
- import { ConnectionManager, DhtNode, PeerDescriptor, Simulator, SimulatorTransport, toNodeId, getRandomRegion } from '@streamr/dht'
2
- import { Logger, StreamPartIDUtils, waitForCondition } from '@streamr/utils'
3
- import { range } from 'lodash'
4
- import { ContentDeliveryLayerNode } from '../../src/logic/ContentDeliveryLayerNode'
5
- import { DiscoveryLayerNode } from '../../src/logic/DiscoveryLayerNode'
6
- import { createContentDeliveryLayerNode } from '../../src/logic/createContentDeliveryLayerNode'
7
- import { createMockPeerDescriptor } from '../utils/utils'
8
-
9
- const logger = new Logger(module)
10
-
11
- describe('ContentDeliveryLayerNode-DhtNode', () => {
12
- const otherNodeCount = 64
13
- let entryPointDiscoveryLayerNode: DiscoveryLayerNode
14
- let otherDiscoveryLayerNodes: DiscoveryLayerNode[]
15
- let entryPointContentDeliveryLayerNode: ContentDeliveryLayerNode
16
- let otherContentDeliveryLayerNodes: ContentDeliveryLayerNode[]
17
-
18
- const streamPartId = StreamPartIDUtils.parse('stream#0')
19
- const entrypointDescriptor = createMockPeerDescriptor({
20
- region: getRandomRegion()
21
- })
22
-
23
- const peerDescriptors: PeerDescriptor[] = range(otherNodeCount).map(() => {
24
- return createMockPeerDescriptor({
25
- region: getRandomRegion()
26
- })
27
- })
28
- beforeEach(async () => {
29
- const simulator = new Simulator()
30
- const entrypointCm = new SimulatorTransport(
31
- entrypointDescriptor,
32
- simulator
33
- )
34
- await entrypointCm.start()
35
-
36
- const cms: ConnectionManager[] = range(otherNodeCount).map((i) =>
37
- new SimulatorTransport(
38
- peerDescriptors[i],
39
- simulator
40
- )
41
- )
42
- await Promise.all(cms.map((cm) => cm.start()))
43
-
44
- entryPointDiscoveryLayerNode = new DhtNode({
45
- transport: entrypointCm,
46
- connectionsView: entrypointCm,
47
- peerDescriptor: entrypointDescriptor,
48
- serviceId: streamPartId
49
- })
50
-
51
- otherDiscoveryLayerNodes = range(otherNodeCount).map((i) => new DhtNode({
52
- transport: cms[i],
53
- connectionsView: cms[i],
54
- peerDescriptor: peerDescriptors[i],
55
- serviceId: streamPartId
56
- }))
57
-
58
- otherContentDeliveryLayerNodes = range(otherNodeCount).map((i) => createContentDeliveryLayerNode({
59
- streamPartId,
60
- discoveryLayerNode: otherDiscoveryLayerNodes[i],
61
- transport: cms[i],
62
- connectionLocker: cms[i],
63
- localPeerDescriptor: peerDescriptors[i],
64
- neighborUpdateInterval: 2000,
65
- isLocalNodeEntryPoint: () => false
66
- }))
67
-
68
- entryPointContentDeliveryLayerNode = createContentDeliveryLayerNode({
69
- streamPartId,
70
- discoveryLayerNode: entryPointDiscoveryLayerNode,
71
- transport: entrypointCm,
72
- connectionLocker: entrypointCm,
73
- localPeerDescriptor: entrypointDescriptor,
74
- neighborUpdateInterval: 2000,
75
- isLocalNodeEntryPoint: () => false
76
- })
77
-
78
- await entryPointDiscoveryLayerNode.start()
79
- await entryPointContentDeliveryLayerNode.start()
80
- await entryPointDiscoveryLayerNode.joinDht([entrypointDescriptor])
81
- await Promise.all(otherDiscoveryLayerNodes.map((node) => node.start()))
82
- })
83
-
84
- afterEach(async () => {
85
- await entryPointDiscoveryLayerNode.stop()
86
- entryPointContentDeliveryLayerNode.stop()
87
- await Promise.all(otherDiscoveryLayerNodes.map((node) => node.stop()))
88
- await Promise.all(otherContentDeliveryLayerNodes.map((node) => node.stop()))
89
- })
90
-
91
- it('happy path single node ', async () => {
92
- await otherContentDeliveryLayerNodes[0].start()
93
- await otherDiscoveryLayerNodes[0].joinDht([entrypointDescriptor])
94
-
95
- await waitForCondition(() => otherContentDeliveryLayerNodes[0].getNeighbors().length === 1)
96
- expect(otherContentDeliveryLayerNodes[0].getNearbyNodeView().getIds().length).toEqual(1)
97
- expect(otherContentDeliveryLayerNodes[0].getNeighbors().length).toEqual(1)
98
- })
99
-
100
- it('happy path 4 nodes', async () => {
101
- range(4).forEach((i) => otherContentDeliveryLayerNodes[i].start())
102
- await Promise.all(range(4).map(async (i) => {
103
- await otherDiscoveryLayerNodes[i].joinDht([entrypointDescriptor])
104
- }))
105
-
106
- await waitForCondition(() => range(4).every((i) => otherContentDeliveryLayerNodes[i].getNeighbors().length === 4))
107
- range(4).forEach((i) => {
108
- expect(otherContentDeliveryLayerNodes[i].getNearbyNodeView().getIds().length).toBeGreaterThanOrEqual(4)
109
- expect(otherContentDeliveryLayerNodes[i].getNeighbors().length).toBeGreaterThanOrEqual(4)
110
- })
111
-
112
- // Check bidirectionality
113
- const allNodes = otherContentDeliveryLayerNodes
114
- allNodes.push(entryPointContentDeliveryLayerNode)
115
- range(5).forEach((i) => {
116
- allNodes[i].getNearbyNodeView().getIds().forEach((nodeId) => {
117
- const neighbor = allNodes.find((node) => {
118
- return node.getOwnNodeId() === nodeId
119
- })
120
- const neighborNodeIds = neighbor!.getNeighbors().map((n) => toNodeId(n))
121
- expect(neighborNodeIds.includes(allNodes[i].getOwnNodeId())).toEqual(true)
122
- })
123
- })
124
- }, 10000)
125
-
126
- it('happy path 64 nodes', async () => {
127
- await Promise.all(range(otherNodeCount).map((i) => otherContentDeliveryLayerNodes[i].start()))
128
- await Promise.all(range(otherNodeCount).map((i) => {
129
- otherDiscoveryLayerNodes[i].joinDht([entrypointDescriptor])
130
- }))
131
- await Promise.all(otherContentDeliveryLayerNodes.map((node) =>
132
- waitForCondition(() => node.getNeighbors().length >= 4, 10000)
133
- ))
134
-
135
- const avg = otherContentDeliveryLayerNodes.reduce((acc, curr) => {
136
- return acc + curr.getNeighbors().length
137
- }, 0) / otherNodeCount
138
-
139
- logger.info(`AVG Number of neighbors: ${avg}`)
140
- await Promise.all(otherContentDeliveryLayerNodes.map((node) =>
141
- waitForCondition(() => node.getOutgoingHandshakeCount() === 0)
142
- ))
143
- await waitForCondition(() => {
144
- let mismatchCounter = 0
145
- otherContentDeliveryLayerNodes.forEach((node) => {
146
- const nodeId = node.getOwnNodeId()
147
- node.getNeighbors().forEach((neighbor) => {
148
- const neighborId = toNodeId(neighbor)
149
- if (neighborId !== entryPointContentDeliveryLayerNode.getOwnNodeId()) {
150
- const neighbor = otherContentDeliveryLayerNodes.find((n) => n.getOwnNodeId() === neighborId)
151
- const neighborNodeIds = neighbor!.getNeighbors().map((n) => toNodeId(n))
152
- if (!neighborNodeIds.includes(nodeId)) {
153
- mismatchCounter += 1
154
- }
155
- }
156
- })
157
- })
158
- // NET-1074 Investigate why sometimes unidirectional connections remain.
159
- return mismatchCounter <= 2
160
- }, 20000, 1000)
161
- }, 95000)
162
- })
@@ -1,157 +0,0 @@
1
- import {
2
- DhtNode,
3
- Simulator,
4
- SimulatorTransport
5
- } from '@streamr/dht'
6
- import { StreamPartIDUtils, waitForCondition, waitForEvent3, wait } from '@streamr/utils'
7
- import { ContentDeliveryManager, Events } from '../../src/logic/ContentDeliveryManager'
8
- import { ControlLayerNode } from '../../src/logic/ControlLayerNode'
9
- import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
10
- import { randomUserId } from '@streamr/test-utils'
11
-
12
- describe('ContentDeliveryManager', () => {
13
-
14
- let controlLayerNode1: ControlLayerNode
15
- let controlLayerNode2: ControlLayerNode
16
- let transport1: SimulatorTransport
17
- let transport2: SimulatorTransport
18
- let manager1: ContentDeliveryManager
19
- let manager2: ContentDeliveryManager
20
-
21
- const peerDescriptor1 = createMockPeerDescriptor()
22
- const peerDescriptor2 = createMockPeerDescriptor()
23
- const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
24
-
25
- const msg = createStreamMessage(
26
- JSON.stringify({ hello: 'WORLD' }),
27
- STREAM_PART_ID,
28
- randomUserId()
29
- )
30
- let simulator: Simulator
31
-
32
- beforeEach(async () => {
33
- simulator = new Simulator()
34
- transport1 = new SimulatorTransport(peerDescriptor1, simulator)
35
- await transport1.start()
36
- transport2 = new SimulatorTransport(peerDescriptor2, simulator)
37
- await transport2.start()
38
- controlLayerNode1 = new DhtNode({
39
- transport: transport1,
40
- connectionsView: transport1,
41
- peerDescriptor: peerDescriptor1,
42
- entryPoints: [peerDescriptor1]
43
- })
44
- controlLayerNode2 = new DhtNode({
45
- transport: transport2,
46
- connectionsView: transport2,
47
- peerDescriptor: peerDescriptor2,
48
- entryPoints: [peerDescriptor1]
49
- })
50
- await Promise.all([
51
- controlLayerNode1.start(),
52
- controlLayerNode2.start()
53
- ])
54
- await Promise.all([
55
- controlLayerNode1.joinDht([peerDescriptor1]),
56
- controlLayerNode2.joinDht([peerDescriptor1])
57
- ])
58
-
59
- manager1 = new ContentDeliveryManager({ neighborUpdateInterval: 100 })
60
- manager2 = new ContentDeliveryManager({ neighborUpdateInterval: 100 })
61
- await manager1.start(controlLayerNode1, transport1, transport1)
62
- manager1.setStreamPartEntryPoints(STREAM_PART_ID, [peerDescriptor1])
63
- await manager2.start(controlLayerNode2, transport2, transport2)
64
- manager2.setStreamPartEntryPoints(STREAM_PART_ID, [peerDescriptor1])
65
- })
66
-
67
- afterEach(async () => {
68
- await Promise.all([
69
- manager1.destroy(),
70
- manager2.destroy(),
71
- controlLayerNode1.stop(),
72
- controlLayerNode2.stop(),
73
- transport1.stop(),
74
- transport2.stop()
75
- ])
76
- simulator.stop()
77
- })
78
-
79
- it('starts', async () => {
80
- expect(manager1.getPeerDescriptor()).toEqual(peerDescriptor1)
81
- expect(manager2.getPeerDescriptor()).toEqual(peerDescriptor2)
82
- })
83
-
84
- it('Joining stream', async () => {
85
- manager1.joinStreamPart(STREAM_PART_ID)
86
- manager2.joinStreamPart(STREAM_PART_ID)
87
- await waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1)
88
- await waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
89
- expect(manager1.getNeighbors(STREAM_PART_ID).length).toEqual(1)
90
- expect(manager2.getNeighbors(STREAM_PART_ID).length).toEqual(1)
91
- })
92
-
93
- it('Publishing after joining and waiting for neighbors', async () => {
94
- manager1.joinStreamPart(STREAM_PART_ID)
95
- manager2.joinStreamPart(STREAM_PART_ID)
96
- await waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1)
97
- await waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
98
- await Promise.all([
99
- waitForEvent3<Events>(manager1, 'newMessage'),
100
- manager2.broadcast(msg)
101
- ])
102
- })
103
-
104
- it('multi-stream pub/sub', async () => {
105
- const streamPartId2 = StreamPartIDUtils.parse('test2#0')
106
- manager1.setStreamPartEntryPoints(streamPartId2, [peerDescriptor1])
107
- manager2.setStreamPartEntryPoints(streamPartId2, [peerDescriptor1])
108
- manager1.joinStreamPart(STREAM_PART_ID)
109
- manager1.joinStreamPart(streamPartId2)
110
- manager2.joinStreamPart(STREAM_PART_ID)
111
- manager2.joinStreamPart(streamPartId2)
112
- await Promise.all([
113
- waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1),
114
- waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1),
115
- waitForCondition(() => manager1.getNeighbors(streamPartId2).length === 1),
116
- waitForCondition(() => manager2.getNeighbors(streamPartId2).length === 1)
117
- ])
118
- const msg2 = createStreamMessage(
119
- JSON.stringify({ hello: 'WORLD' }),
120
- streamPartId2,
121
- randomUserId()
122
- )
123
- await Promise.all([
124
- waitForEvent3<Events>(manager1, 'newMessage'),
125
- waitForEvent3<Events>(manager2, 'newMessage'),
126
- manager1.broadcast(msg2),
127
- manager2.broadcast(msg)
128
- ])
129
- })
130
-
131
- it('leaving stream parts', async () => {
132
- manager1.joinStreamPart(STREAM_PART_ID)
133
- manager2.joinStreamPart(STREAM_PART_ID)
134
- await Promise.all([
135
- waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1),
136
- waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
137
- ])
138
- await manager2.leaveStreamPart(STREAM_PART_ID)
139
- await waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 0)
140
- })
141
-
142
- it('RTTs are updated for node info', async () => {
143
- manager1.joinStreamPart(STREAM_PART_ID)
144
- manager2.joinStreamPart(STREAM_PART_ID)
145
- await Promise.all([
146
- waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1),
147
- waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
148
- ])
149
- // Wait for RTTs to be updated
150
- await wait(500)
151
- const nodeInfo1 = manager1.getNodeInfo()
152
- const nodeInfo2 = manager2.getNodeInfo()
153
- expect(nodeInfo1[0].contentDeliveryLayerNeighbors[0].rtt).toBeGreaterThanOrEqual(0)
154
- expect(nodeInfo2[0].contentDeliveryLayerNeighbors[0].rtt).toBeGreaterThanOrEqual(0)
155
- })
156
-
157
- })
@@ -1,100 +0,0 @@
1
- import {
2
- ListeningRpcCommunicator,
3
- NodeType,
4
- PeerDescriptor,
5
- Simulator,
6
- SimulatorTransport
7
- } from '@streamr/dht'
8
- import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
9
- import { ContentDeliveryRpcRemote } from '../../src/logic/ContentDeliveryRpcRemote'
10
- import { Empty } from '../../src/proto/google/protobuf/empty'
11
- import {
12
- LeaveStreamPartNotice,
13
- StreamMessage
14
- } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
15
- import { ContentDeliveryRpcClient } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
16
- import { createStreamMessage } from '../utils/utils'
17
- import { randomUserId } from '@streamr/test-utils'
18
-
19
- describe('ContentDeliveryRpcRemote', () => {
20
- let mockServerRpc: ListeningRpcCommunicator
21
- let clientRpc: ListeningRpcCommunicator
22
- let rpcRemote: ContentDeliveryRpcRemote
23
-
24
- const clientNode: PeerDescriptor = {
25
- nodeId: new Uint8Array([1, 1, 1]),
26
- type: NodeType.NODEJS
27
- }
28
- const serverNode: PeerDescriptor = {
29
- nodeId: new Uint8Array([2, 2, 2]),
30
- type: NodeType.NODEJS
31
- }
32
-
33
- let recvCounter: number
34
-
35
- let simulator: Simulator
36
- let mockConnectionManager1: SimulatorTransport
37
- let mockConnectionManager2: SimulatorTransport
38
-
39
- beforeEach(async () => {
40
- recvCounter = 0
41
- simulator = new Simulator()
42
- mockConnectionManager1 = new SimulatorTransport(serverNode, simulator)
43
- await mockConnectionManager1.start()
44
- mockConnectionManager2 = new SimulatorTransport(clientNode, simulator)
45
- await mockConnectionManager2.start()
46
-
47
- mockServerRpc = new ListeningRpcCommunicator('test', mockConnectionManager1)
48
- clientRpc = new ListeningRpcCommunicator('test', mockConnectionManager2)
49
-
50
- mockServerRpc.registerRpcNotification(
51
- StreamMessage,
52
- 'sendStreamMessage',
53
- async (): Promise<Empty> => {
54
- recvCounter += 1
55
- return Empty
56
- }
57
- )
58
-
59
- mockServerRpc.registerRpcNotification(
60
- LeaveStreamPartNotice,
61
- 'leaveStreamPartNotice',
62
- async (): Promise<Empty> => {
63
- recvCounter += 1
64
- return Empty
65
- }
66
- )
67
-
68
- rpcRemote = new ContentDeliveryRpcRemote(
69
- clientNode,
70
- serverNode,
71
- clientRpc,
72
- ContentDeliveryRpcClient
73
- )
74
- })
75
-
76
- afterEach(async () => {
77
- clientRpc.stop()
78
- mockServerRpc.stop()
79
- await mockConnectionManager1.stop()
80
- await mockConnectionManager2.stop()
81
- simulator.stop()
82
- })
83
-
84
- it('sendStreamMessage', async () => {
85
- const msg = createStreamMessage(
86
- JSON.stringify({ hello: 'WORLD' }),
87
- StreamPartIDUtils.parse('test-stream#0'),
88
- randomUserId()
89
- )
90
-
91
- await rpcRemote.sendStreamMessage(msg)
92
- await waitForCondition(() => recvCounter === 1)
93
- })
94
-
95
- it('leaveNotice', async () => {
96
- rpcRemote.leaveStreamPartNotice(StreamPartIDUtils.parse('test#0'), false)
97
- await waitForCondition(() => recvCounter === 1)
98
- })
99
-
100
- })
@@ -1,79 +0,0 @@
1
- import {
2
- ListeningRpcCommunicator,
3
- NodeType,
4
- PeerDescriptor,
5
- Simulator,
6
- SimulatorTransport
7
- } from '@streamr/dht'
8
- import { StreamPartIDUtils } from '@streamr/utils'
9
- import { HandshakeRpcRemote } from '../../src/logic/neighbor-discovery/HandshakeRpcRemote'
10
- import {
11
- StreamPartHandshakeRequest,
12
- StreamPartHandshakeResponse
13
- } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
14
- import {
15
- HandshakeRpcClient,
16
- } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
17
-
18
- describe('HandshakeRpcRemote', () => {
19
- let mockServerRpc: ListeningRpcCommunicator
20
- let clientRpc: ListeningRpcCommunicator
21
- let rpcRemote: HandshakeRpcRemote
22
-
23
- const clientNode: PeerDescriptor = {
24
- nodeId: new Uint8Array([1, 1, 1]),
25
- type: NodeType.NODEJS
26
- }
27
- const serverNode: PeerDescriptor = {
28
- nodeId: new Uint8Array([2, 2, 2]),
29
- type: NodeType.NODEJS
30
- }
31
-
32
- let simulator: Simulator
33
- let mockConnectionManager1: SimulatorTransport
34
- let mockConnectionManager2: SimulatorTransport
35
-
36
- beforeEach(async () => {
37
- simulator = new Simulator()
38
- mockConnectionManager1 = new SimulatorTransport(serverNode, simulator)
39
- await mockConnectionManager1.start()
40
- mockConnectionManager2 = new SimulatorTransport(clientNode, simulator)
41
- await mockConnectionManager2.start()
42
-
43
- mockServerRpc = new ListeningRpcCommunicator('test', mockConnectionManager1)
44
- clientRpc = new ListeningRpcCommunicator('test', mockConnectionManager2)
45
-
46
- mockServerRpc.registerRpcMethod(
47
- StreamPartHandshakeRequest,
48
- StreamPartHandshakeResponse,
49
- 'handshake',
50
- async (msg: StreamPartHandshakeRequest): Promise<StreamPartHandshakeResponse> => {
51
- const res: StreamPartHandshakeResponse = {
52
- requestId: msg.requestId,
53
- accepted: true
54
- }
55
- return res
56
- }
57
- )
58
-
59
- rpcRemote = new HandshakeRpcRemote(
60
- clientNode,
61
- serverNode,
62
- clientRpc,
63
- HandshakeRpcClient
64
- )
65
- })
66
-
67
- afterEach(async () => {
68
- clientRpc.stop()
69
- mockServerRpc.stop()
70
- await mockConnectionManager1.stop()
71
- await mockConnectionManager2.stop()
72
- simulator.stop()
73
- })
74
-
75
- it('handshake', async () => {
76
- const result = await rpcRemote.handshake(StreamPartIDUtils.parse('test#0'), [])
77
- expect(result.accepted).toEqual(true)
78
- })
79
- })