@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,109 +0,0 @@
1
- import { ListeningRpcCommunicator, PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
2
- import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
3
- import { NetworkStack } from '../../src/NetworkStack'
4
- import { NodeInfoClient } from '../../src/logic/node-info/NodeInfoClient'
5
- import { NODE_INFO_RPC_SERVICE_ID } from '../../src/logic/node-info/NodeInfoRpcLocal'
6
- import { createMockPeerDescriptor } from '../utils/utils'
7
-
8
- // TODO add Jest utility so that the normalization is not needed (NET-1254)
9
- const normalizePeerDescriptor = (peerDescriptor: PeerDescriptor) => {
10
- return {
11
- ...peerDescriptor,
12
- nodeId: new Uint8Array(peerDescriptor.nodeId)
13
- }
14
- }
15
-
16
- describe('NetworkStack NodeInfoRpc', () => {
17
-
18
- let requesteStack: NetworkStack
19
- let otherStack: NetworkStack
20
- let nodeInfoClient: NodeInfoClient
21
- let requesteeTransport1: SimulatorTransport
22
- let otherTransport: SimulatorTransport
23
- let requestorTransport: SimulatorTransport
24
-
25
- let simulator: Simulator
26
-
27
- const requesteePeerDescriptor = createMockPeerDescriptor()
28
- const otherPeerDescriptor = createMockPeerDescriptor()
29
- const requestorPeerDescriptor = createMockPeerDescriptor()
30
-
31
- beforeEach(async () => {
32
- simulator = new Simulator()
33
- requesteeTransport1 = new SimulatorTransport(requesteePeerDescriptor, simulator)
34
- otherTransport = new SimulatorTransport(otherPeerDescriptor, simulator)
35
- requestorTransport = new SimulatorTransport(requestorPeerDescriptor, simulator)
36
- await requesteeTransport1.start()
37
- await otherTransport.start()
38
- await requestorTransport.start()
39
- requesteStack = new NetworkStack({
40
- layer0: {
41
- transport: requesteeTransport1,
42
- connectionsView: requesteeTransport1,
43
- peerDescriptor: requesteePeerDescriptor,
44
- entryPoints: [requesteePeerDescriptor]
45
- }
46
- })
47
- otherStack = new NetworkStack({
48
- layer0: {
49
- transport: otherTransport,
50
- connectionsView: otherTransport,
51
- peerDescriptor: otherPeerDescriptor,
52
- entryPoints: [requesteePeerDescriptor]
53
- }
54
- })
55
- await requesteStack.start()
56
- await otherStack.start()
57
- nodeInfoClient = new NodeInfoClient(requestorPeerDescriptor, new ListeningRpcCommunicator(NODE_INFO_RPC_SERVICE_ID, requestorTransport))
58
- })
59
-
60
- afterEach(async () => {
61
- await requesteStack.stop()
62
- await otherStack.stop()
63
- await requesteeTransport1.stop()
64
- await otherTransport.stop()
65
- await requestorTransport.stop()
66
- })
67
-
68
- it('happy path', async () => {
69
- const streamPartId1 = StreamPartIDUtils.parse('stream1#0')
70
- const streamPartId2 = StreamPartIDUtils.parse('stream2#0')
71
- requesteStack.getContentDeliveryManager().joinStreamPart(streamPartId1)
72
- otherStack.getContentDeliveryManager().joinStreamPart(streamPartId1)
73
- requesteStack.getContentDeliveryManager().joinStreamPart(streamPartId2)
74
- otherStack.getContentDeliveryManager().joinStreamPart(streamPartId2)
75
- await waitForCondition(() =>
76
- requesteStack.getContentDeliveryManager().getNeighbors(streamPartId1).length === 1
77
- && otherStack.getContentDeliveryManager().getNeighbors(streamPartId1).length === 1
78
- && requesteStack.getContentDeliveryManager().getNeighbors(streamPartId2).length === 1
79
- && otherStack.getContentDeliveryManager().getNeighbors(streamPartId2).length === 1
80
- )
81
- const result = await nodeInfoClient.getInfo(requesteePeerDescriptor)
82
- expect(result).toMatchObject({
83
- peerDescriptor: normalizePeerDescriptor(requesteePeerDescriptor),
84
- controlLayer: {
85
- neighbors: [normalizePeerDescriptor(otherPeerDescriptor)],
86
- connections: [normalizePeerDescriptor(otherPeerDescriptor), normalizePeerDescriptor(requestorPeerDescriptor)]
87
- },
88
- streamPartitions: [
89
- {
90
- id: streamPartId1,
91
- controlLayerNeighbors: [normalizePeerDescriptor(otherPeerDescriptor)],
92
- contentDeliveryLayerNeighbors: [{
93
- peerDescriptor: normalizePeerDescriptor(otherPeerDescriptor)
94
- }]
95
- },
96
- {
97
- id: streamPartId2,
98
- controlLayerNeighbors: [normalizePeerDescriptor(otherPeerDescriptor)],
99
- contentDeliveryLayerNeighbors: [{
100
- peerDescriptor: normalizePeerDescriptor(otherPeerDescriptor)
101
- }]
102
- }
103
- ],
104
- version: expect.any(String)
105
- })
106
- expect(result.streamPartitions.length).toEqual(2)
107
- })
108
-
109
- })
@@ -1,76 +0,0 @@
1
- import { Simulator } 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 { createMockContentDeliveryLayerNodeAndDhtNode, createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
7
- import { randomUserId } from '@streamr/test-utils'
8
-
9
- describe('Propagation', () => {
10
- const entryPointDescriptor = createMockPeerDescriptor()
11
- let discoveryLayerNodes: DiscoveryLayerNode[]
12
- let contentDeliveryLayerNodes: ContentDeliveryLayerNode[]
13
- const STREAM_PART_ID = StreamPartIDUtils.parse('testingtesting#0')
14
- let totalReceived: number
15
- const NUM_OF_NODES = 256
16
-
17
- beforeEach(async () => {
18
- const simulator = new Simulator()
19
- totalReceived = 0
20
- discoveryLayerNodes = []
21
- contentDeliveryLayerNodes = []
22
- const [entryPoint, node1] = await createMockContentDeliveryLayerNodeAndDhtNode(
23
- entryPointDescriptor,
24
- entryPointDescriptor,
25
- STREAM_PART_ID,
26
- simulator
27
- )
28
- await entryPoint.start()
29
- await entryPoint.joinDht([entryPointDescriptor])
30
- await node1.start()
31
- node1.on('message', () => {totalReceived += 1})
32
- discoveryLayerNodes.push(entryPoint)
33
- contentDeliveryLayerNodes.push(node1)
34
-
35
- await Promise.all(range(NUM_OF_NODES).map(async (_i) => {
36
- const descriptor = createMockPeerDescriptor()
37
- const [layer1, contentDeliveryLayerNode] = await createMockContentDeliveryLayerNodeAndDhtNode(
38
- descriptor,
39
- entryPointDescriptor,
40
- STREAM_PART_ID,
41
- simulator
42
- )
43
- await layer1.start()
44
- await contentDeliveryLayerNode.start()
45
- await layer1.joinDht([entryPointDescriptor]).then(() => {
46
- contentDeliveryLayerNode.on('message', () => { totalReceived += 1 })
47
- discoveryLayerNodes.push(layer1)
48
- contentDeliveryLayerNodes.push(contentDeliveryLayerNode)
49
- })
50
- }))
51
- }, 45000)
52
-
53
- afterEach(async () => {
54
- await Promise.all(contentDeliveryLayerNodes.map((node) => node.stop()))
55
- await Promise.all(discoveryLayerNodes.map((node) => node.stop()))
56
- })
57
-
58
- it('All nodes receive messages', async () => {
59
- await waitForCondition(
60
- () => contentDeliveryLayerNodes.every((node) => node.getNeighbors().length >= 3), 30000
61
- )
62
- await waitForCondition(() => {
63
- const avg = contentDeliveryLayerNodes.reduce((acc, curr) => {
64
- return acc + curr.getNeighbors().length
65
- }, 0) / contentDeliveryLayerNodes.length
66
- return avg >= 4
67
- }, 20000)
68
- const msg = createStreamMessage(
69
- JSON.stringify({ hello: 'WORLD' }),
70
- STREAM_PART_ID,
71
- randomUserId()
72
- )
73
- contentDeliveryLayerNodes[0].broadcast(msg)
74
- await waitForCondition(() => totalReceived >= NUM_OF_NODES, 10000)
75
- }, 45000)
76
- })
@@ -1,82 +0,0 @@
1
- import { LatencyType, PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
2
- import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
3
- import { NetworkStack } from '../../src/NetworkStack'
4
- import { streamPartIdToDataKey } from '../../src/logic/ContentDeliveryManager'
5
- import { Any } from '../../src/proto/google/protobuf/any'
6
- import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
7
- import { randomUserId } from '@streamr/test-utils'
8
-
9
- const STREAM_PART_ID = StreamPartIDUtils.parse('stream#0')
10
-
11
- describe('Joining stream parts on offline nodes', () => {
12
-
13
- const entryPointPeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
14
- const node1PeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
15
- const node2PeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
16
- const offlineDescriptor1: PeerDescriptor = createMockPeerDescriptor()
17
- const offlineDescriptor2: PeerDescriptor = createMockPeerDescriptor()
18
-
19
- let entryPoint: NetworkStack
20
- let node1: NetworkStack
21
- let node2: NetworkStack
22
- let simulator: Simulator
23
-
24
- beforeEach(async () => {
25
- simulator = new Simulator(LatencyType.REAL)
26
- const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
27
- entryPoint = new NetworkStack({
28
- layer0: {
29
- transport: entryPointTransport,
30
- connectionsView: entryPointTransport,
31
- peerDescriptor: entryPointPeerDescriptor,
32
- entryPoints: [entryPointPeerDescriptor]
33
- }
34
- })
35
- const node1Transport = new SimulatorTransport(node1PeerDescriptor, simulator)
36
- node1 = new NetworkStack({
37
- layer0: {
38
- transport: node1Transport,
39
- connectionsView: node1Transport,
40
- peerDescriptor: node1PeerDescriptor,
41
- entryPoints: [entryPointPeerDescriptor]
42
- }
43
- })
44
- const node2Transport = new SimulatorTransport(node2PeerDescriptor, simulator)
45
- node2 = new NetworkStack({
46
- layer0: {
47
- transport: node2Transport,
48
- connectionsView: node2Transport,
49
- peerDescriptor: node2PeerDescriptor,
50
- entryPoints: [entryPointPeerDescriptor]
51
- }
52
- })
53
- await entryPointTransport.start()
54
- await node1Transport.start()
55
- await node2Transport.start()
56
- await entryPoint.start()
57
- await node1.start()
58
- await node2.start()
59
- })
60
-
61
- afterEach(async () => {
62
- await entryPoint.stop()
63
- await node1.stop()
64
- await node2.stop()
65
- simulator.stop()
66
- })
67
-
68
- it('should recover if discovered nodes are offline', async () => {
69
- let messageReceived = false
70
-
71
- // store offline peer descriptors to DHT
72
- await entryPoint.getControlLayerNode().storeDataToDht(streamPartIdToDataKey(STREAM_PART_ID), Any.pack(offlineDescriptor1, PeerDescriptor))
73
- await entryPoint.getControlLayerNode().storeDataToDht(streamPartIdToDataKey(STREAM_PART_ID), Any.pack(offlineDescriptor2, PeerDescriptor))
74
-
75
- node1.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
76
- node1.getContentDeliveryManager().on('newMessage', () => { messageReceived = true })
77
- const msg = createStreamMessage(JSON.stringify({ hello: 'WORLD' }), STREAM_PART_ID, randomUserId())
78
- node2.getContentDeliveryManager().broadcast(msg)
79
- await waitForCondition(() => messageReceived, 40000)
80
- }, 60000)
81
-
82
- })
@@ -1,128 +0,0 @@
1
- import { LatencyType, PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
2
- import { StreamPartIDUtils, hexToBinary, utf8ToBinary, waitForCondition } from '@streamr/utils'
3
- import { range } from 'lodash'
4
- import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
5
- import { streamPartIdToDataKey } from '../../src/logic/ContentDeliveryManager'
6
- import { ContentType, EncryptionType, SignatureType, StreamMessage } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
7
- import { createMockPeerDescriptor } from '../utils/utils'
8
- import { randomUserId } from '@streamr/test-utils'
9
-
10
- const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
11
-
12
- describe('stream without default entrypoints', () => {
13
-
14
- let entrypoint: NetworkNode
15
- let nodes: NetworkNode[]
16
- let receivedMessageCount: number
17
- const entryPointPeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
18
-
19
- const streamMessage: StreamMessage = {
20
- messageId: {
21
- streamId: StreamPartIDUtils.getStreamID(STREAM_PART_ID),
22
- streamPartition: StreamPartIDUtils.getStreamPartition(STREAM_PART_ID),
23
- timestamp: 666,
24
- sequenceNumber: 0,
25
- publisherId: hexToBinary(randomUserId()),
26
- messageChainId: 'msgChainId'
27
- },
28
- previousMessageRef: {
29
- timestamp: 665,
30
- sequenceNumber: 0
31
- },
32
- body: {
33
- oneofKind: 'contentMessage',
34
- contentMessage: {
35
- content: utf8ToBinary(JSON.stringify({
36
- hello: 'world'
37
- })),
38
- contentType: ContentType.JSON,
39
- encryptionType: EncryptionType.NONE
40
- }
41
- },
42
- signatureType: SignatureType.SECP256K1,
43
- signature: hexToBinary('0x1234'),
44
- }
45
-
46
- beforeEach(async () => {
47
- const simulator = new Simulator(LatencyType.REAL)
48
- nodes = []
49
- receivedMessageCount = 0
50
- const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
51
- await entryPointTransport.start()
52
- entrypoint = createNetworkNode({
53
- layer0: {
54
- transport: entryPointTransport,
55
- connectionsView: entryPointTransport,
56
- peerDescriptor: entryPointPeerDescriptor,
57
- entryPoints: [entryPointPeerDescriptor]
58
- }
59
- })
60
- await entrypoint.start()
61
- await Promise.all(range(20).map(async () => {
62
- const peerDescriptor = createMockPeerDescriptor()
63
- const transport = new SimulatorTransport(peerDescriptor, simulator)
64
- await transport.start()
65
- const node = createNetworkNode({
66
- layer0: {
67
- peerDescriptor,
68
- transport,
69
- connectionsView: transport,
70
- entryPoints: [entryPointPeerDescriptor]
71
- }
72
- })
73
- nodes.push(node)
74
- await node.start()
75
- }))
76
- })
77
-
78
- afterEach(async () => {
79
- await entrypoint.stop()
80
- await Promise.all(nodes.map((node) => node.stop()))
81
- })
82
-
83
- it('can join stream without configured entrypoints one by one', async () => {
84
- await nodes[0].join(STREAM_PART_ID)
85
- nodes[0].addMessageListener((_msg) => {
86
- receivedMessageCount += 1
87
- })
88
- await Promise.all([
89
- waitForCondition(() => receivedMessageCount === 1, 10000),
90
- nodes[1].broadcast(streamMessage)
91
- ])
92
- })
93
-
94
- it('can join without configured entrypoints simultaneously', async () => {
95
- nodes[0].addMessageListener((_msg) => {
96
- receivedMessageCount += 1
97
- })
98
- await Promise.all([
99
- waitForCondition(() => receivedMessageCount === 1, 15000),
100
- nodes[0].join(STREAM_PART_ID),
101
- nodes[1].broadcast(streamMessage),
102
- ])
103
- })
104
-
105
- it('multiple nodes can join without configured entrypoints simultaneously', async () => {
106
- const subscriberCount = 8
107
- await Promise.all(range(subscriberCount).map(async (i) => {
108
- await nodes[i].join(STREAM_PART_ID, { minCount: 4, timeout: 15000 })
109
- nodes[i].addMessageListener(() => {
110
- receivedMessageCount += 1
111
- })
112
- }))
113
- const nonjoinedNode = nodes[subscriberCount]
114
- await nonjoinedNode.broadcast(streamMessage)
115
- await waitForCondition(() => receivedMessageCount === subscriberCount, 15000)
116
- }, 45000)
117
-
118
- it('nodes store themselves as entrypoints on streamPart if number of entrypoints is low', async () => {
119
- for (let i = 0; i < 10; i++) {
120
- await nodes[i].join(STREAM_PART_ID, { minCount: (i > 0) ? 1 : 0, timeout: 15000 })
121
- }
122
- await waitForCondition(async () => {
123
- const entryPointData = await nodes[15].stack.getControlLayerNode().fetchDataFromDht(streamPartIdToDataKey(STREAM_PART_ID))
124
- return entryPointData.length >= 7
125
- }, 15000)
126
-
127
- }, 90000)
128
- })
@@ -1,97 +0,0 @@
1
- import { LatencyType, Simulator, SimulatorTransport } from '@streamr/dht'
2
- import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
3
- import { range } from 'lodash'
4
- import { NetworkStack } from '../../src/NetworkStack'
5
- import { MAX_NODE_COUNT } from '../../src/logic/PeerDescriptorStoreManager'
6
- import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
7
- import { randomUserId } from '@streamr/test-utils'
8
-
9
- describe('Stream Entry Points are replaced when known entry points leave streams', () => {
10
-
11
- let simulator: Simulator
12
- let layer0EntryPoint: NetworkStack
13
- const entryPointPeerDescriptor = createMockPeerDescriptor()
14
- let initialNodesOnStream: NetworkStack[]
15
- let laterNodesOnStream: NetworkStack[]
16
- let newNodeInStream: NetworkStack
17
-
18
- const NUM_OF_LATER_NODES = 16
19
-
20
- const STREAM_PART_ID = StreamPartIDUtils.parse('stream#0')
21
-
22
- const startNode = async () => {
23
- const peerDescriptor = createMockPeerDescriptor()
24
- const transport = new SimulatorTransport(peerDescriptor, simulator)
25
- await transport.start()
26
- const node = new NetworkStack({
27
- layer0: {
28
- transport,
29
- connectionsView: transport,
30
- peerDescriptor,
31
- entryPoints: [entryPointPeerDescriptor]
32
- }
33
- })
34
- await node.start()
35
- return node
36
- }
37
-
38
- beforeEach(async () => {
39
- simulator = new Simulator(LatencyType.REAL)
40
- const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
41
- layer0EntryPoint = new NetworkStack({
42
- layer0: {
43
- transport: entryPointTransport,
44
- connectionsView: entryPointTransport,
45
- peerDescriptor: entryPointPeerDescriptor,
46
- entryPoints: [entryPointPeerDescriptor]
47
- }
48
- })
49
- await entryPointTransport.start()
50
- await layer0EntryPoint.start()
51
-
52
- initialNodesOnStream = await Promise.all(range(MAX_NODE_COUNT).map(async () => {
53
- return await startNode()
54
- }))
55
-
56
- laterNodesOnStream = await Promise.all(range(NUM_OF_LATER_NODES).map(async () => {
57
- return await startNode()
58
- }))
59
- newNodeInStream = await startNode()
60
- })
61
-
62
- afterEach(async () => {
63
- await Promise.all([
64
- layer0EntryPoint.stop(),
65
- ...initialNodesOnStream.map((node) => node.stop()),
66
- ...laterNodesOnStream.map((node) => node.stop()),
67
- newNodeInStream.stop()
68
- ])
69
- simulator.stop()
70
- })
71
-
72
- // TODO: Investigate why 60 second timeouts are needed
73
- it('stream entry points are replaced when nodes leave streams', async () => {
74
- await Promise.all(initialNodesOnStream.map((node) => node.joinStreamPart(STREAM_PART_ID, { minCount: 4, timeout: 60000 })))
75
-
76
- let receivedMessages = 0
77
- for (const node of laterNodesOnStream) {
78
- await node.joinStreamPart(STREAM_PART_ID, { minCount: 4, timeout: 60000 })
79
- node.getContentDeliveryManager().on('newMessage', () => {
80
- receivedMessages += 1
81
- })
82
- }
83
-
84
- await Promise.all(initialNodesOnStream.map((node) => node.getContentDeliveryManager().leaveStreamPart(STREAM_PART_ID)))
85
- await waitForCondition(() =>
86
- laterNodesOnStream.every((node) => node.getContentDeliveryManager().getNeighbors(STREAM_PART_ID).length >= 4), 60000, 1000
87
- )
88
-
89
- const msg = createStreamMessage(
90
- JSON.stringify({ hello: 'WORLD' }),
91
- STREAM_PART_ID,
92
- randomUserId()
93
- )
94
- newNodeInStream.getContentDeliveryManager().broadcast(msg)
95
- await waitForCondition(() => receivedMessages === NUM_OF_LATER_NODES, 30000)
96
- }, 200000)
97
- })
@@ -1,2 +0,0 @@
1
- // eslint-disable-next-line import/no-unresolved
2
- import '@streamr/test-utils/customMatcherTypes'
@@ -1,112 +0,0 @@
1
- import { toNodeId } from '@streamr/dht'
2
- import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
3
- import { ContentDeliveryLayerNode } from '../../src/logic/ContentDeliveryLayerNode'
4
- import { NodeList } from '../../src/logic/NodeList'
5
- import { createContentDeliveryLayerNode } from '../../src/logic/createContentDeliveryLayerNode'
6
- import { MockDiscoveryLayerNode } from '../utils/mock/MockDiscoveryLayerNode'
7
- import { MockHandshaker } from '../utils/mock/MockHandshaker'
8
- import { MockNeighborFinder } from '../utils/mock/MockNeighborFinder'
9
- import { MockNeighborUpdateManager } from '../utils/mock/MockNeighborUpdateManager'
10
- import { MockTransport } from '../utils/mock/MockTransport'
11
- import { createMockContentDeliveryRpcRemote, createMockPeerDescriptor, mockConnectionLocker } from '../utils/utils'
12
-
13
- describe('ContentDeliveryLayerNode', () => {
14
-
15
- let contentDeliveryLayerNode: ContentDeliveryLayerNode
16
- const peerDescriptor = createMockPeerDescriptor()
17
-
18
- let neighbors: NodeList
19
- let nearbyNodeView: NodeList
20
- let randomNodeView: NodeList
21
-
22
- let discoveryLayerNode: MockDiscoveryLayerNode
23
-
24
- beforeEach(async () => {
25
- const nodeId = toNodeId(peerDescriptor)
26
-
27
- neighbors = new NodeList(nodeId, 10)
28
- randomNodeView = new NodeList(nodeId, 10)
29
- nearbyNodeView = new NodeList(nodeId, 10)
30
- discoveryLayerNode = new MockDiscoveryLayerNode()
31
-
32
- contentDeliveryLayerNode = createContentDeliveryLayerNode({
33
- neighbors,
34
- randomNodeView,
35
- nearbyNodeView,
36
- transport: new MockTransport(),
37
- localPeerDescriptor: peerDescriptor,
38
- discoveryLayerNode,
39
- connectionLocker: mockConnectionLocker,
40
- handshaker: new MockHandshaker() as any,
41
- neighborUpdateManager: new MockNeighborUpdateManager() as any,
42
- neighborFinder: new MockNeighborFinder() as any,
43
- streamPartId: StreamPartIDUtils.parse('stream#0'),
44
- isLocalNodeEntryPoint: () => false
45
- })
46
- await contentDeliveryLayerNode.start()
47
- })
48
-
49
- afterEach(() => {
50
- contentDeliveryLayerNode.stop()
51
- })
52
-
53
- it('getNeighbors', () => {
54
- const mockRemote = createMockContentDeliveryRpcRemote()
55
- neighbors.add(mockRemote)
56
- const result = contentDeliveryLayerNode.getNeighbors()
57
- expect(toNodeId(result[0])).toEqual(toNodeId(mockRemote.getPeerDescriptor()))
58
- })
59
-
60
- it('getNearbyNodeView', () => {
61
- const mockRemote = createMockContentDeliveryRpcRemote()
62
- nearbyNodeView.add(mockRemote)
63
- const ids = contentDeliveryLayerNode.getNearbyNodeView().getIds()
64
- expect(ids[0]).toEqual(toNodeId(mockRemote.getPeerDescriptor()))
65
- })
66
-
67
- it('Adds Closest Nodes from layer1 nearbyContactAdded event to nearbyNodeView', async () => {
68
- const peerDescriptor1 = createMockPeerDescriptor()
69
- const peerDescriptor2 = createMockPeerDescriptor()
70
- discoveryLayerNode.setClosestContacts([peerDescriptor1, peerDescriptor2])
71
- discoveryLayerNode.emit('nearbyContactAdded', peerDescriptor1)
72
- await waitForCondition(() => nearbyNodeView.size() === 2)
73
- expect(nearbyNodeView.get(toNodeId(peerDescriptor1))).toBeTruthy()
74
- expect(nearbyNodeView.get(toNodeId(peerDescriptor2))).toBeTruthy()
75
- })
76
-
77
- it('Adds Random Nodes from layer1 randomContactAdded event to randomNodeView', async () => {
78
- const peerDescriptor1 = createMockPeerDescriptor()
79
- const peerDescriptor2 = createMockPeerDescriptor()
80
- discoveryLayerNode.setRandomContacts([peerDescriptor1, peerDescriptor2])
81
- discoveryLayerNode.emit('randomContactAdded', peerDescriptor1)
82
- await waitForCondition(() => randomNodeView.size() === 2)
83
- expect(randomNodeView.get(toNodeId(peerDescriptor1))).toBeTruthy()
84
- expect(randomNodeView.get(toNodeId(peerDescriptor2))).toBeTruthy()
85
- })
86
-
87
- it('Adds Nodes from layer1 neighbors to nearbyNodeView if its size is below nodeViewSize', async () => {
88
- const peerDescriptor1 = createMockPeerDescriptor()
89
- const peerDescriptor2 = createMockPeerDescriptor()
90
- discoveryLayerNode.addNewRandomPeerToKBucket()
91
- discoveryLayerNode.setClosestContacts([peerDescriptor1, peerDescriptor2])
92
- discoveryLayerNode.emit('nearbyContactAdded', peerDescriptor1)
93
- await waitForCondition(() => {
94
- return nearbyNodeView.size() === 3
95
- }, 20000)
96
- expect(nearbyNodeView.get(toNodeId(peerDescriptor1))).toBeTruthy()
97
- expect(nearbyNodeView.get(toNodeId(peerDescriptor2))).toBeTruthy()
98
- }, 25000)
99
-
100
- it('getInfo', () => {
101
- const nodeWithRtt = createMockContentDeliveryRpcRemote()
102
- neighbors.add(nodeWithRtt)
103
- const nodeWithoutRtt = createMockContentDeliveryRpcRemote()
104
- neighbors.add(nodeWithoutRtt)
105
- nodeWithRtt.setRtt(100)
106
- const info = contentDeliveryLayerNode.getInfos()
107
- expect(info[0].rtt).toEqual(100)
108
- expect(info[0].peerDescriptor).toEqual(nodeWithRtt.getPeerDescriptor())
109
- expect(info[1].rtt).toBeUndefined()
110
- expect(info[1].peerDescriptor).toEqual(nodeWithoutRtt.getPeerDescriptor())
111
- })
112
- })