@streamr/trackerless-network 102.0.0-beta.1 → 102.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/package.json +5 -5
  2. package/package.json +5 -5
  3. package/src/NetworkNode.ts +0 -142
  4. package/src/NetworkStack.ts +0 -197
  5. package/src/exports.ts +0 -18
  6. package/src/logic/ContentDeliveryLayerNode.ts +0 -424
  7. package/src/logic/ContentDeliveryManager.ts +0 -401
  8. package/src/logic/ContentDeliveryRpcLocal.ts +0 -48
  9. package/src/logic/ContentDeliveryRpcRemote.ts +0 -44
  10. package/src/logic/ControlLayerNode.ts +0 -17
  11. package/src/logic/DiscoveryLayerNode.ts +0 -30
  12. package/src/logic/DuplicateMessageDetector.ts +0 -167
  13. package/src/logic/ExternalNetworkRpc.ts +0 -42
  14. package/src/logic/NodeList.ts +0 -114
  15. package/src/logic/PeerDescriptorStoreManager.ts +0 -96
  16. package/src/logic/StreamPartNetworkSplitAvoidance.ts +0 -90
  17. package/src/logic/StreamPartReconnect.ts +0 -38
  18. package/src/logic/createContentDeliveryLayerNode.ts +0 -130
  19. package/src/logic/formStreamPartDeliveryServiceId.ts +0 -7
  20. package/src/logic/inspect/InspectSession.ts +0 -55
  21. package/src/logic/inspect/Inspector.ts +0 -100
  22. package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +0 -138
  23. package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +0 -66
  24. package/src/logic/neighbor-discovery/Handshaker.ts +0 -215
  25. package/src/logic/neighbor-discovery/NeighborFinder.ts +0 -77
  26. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +0 -69
  27. package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +0 -75
  28. package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +0 -35
  29. package/src/logic/node-info/NodeInfoClient.ts +0 -23
  30. package/src/logic/node-info/NodeInfoRpcLocal.ts +0 -28
  31. package/src/logic/node-info/NodeInfoRpcRemote.ts +0 -11
  32. package/src/logic/propagation/FifoMapWithTTL.ts +0 -116
  33. package/src/logic/propagation/Propagation.ts +0 -84
  34. package/src/logic/propagation/PropagationTaskStore.ts +0 -41
  35. package/src/logic/proxy/ProxyClient.ts +0 -286
  36. package/src/logic/proxy/ProxyConnectionRpcLocal.ts +0 -106
  37. package/src/logic/proxy/ProxyConnectionRpcRemote.ts +0 -26
  38. package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +0 -73
  39. package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +0 -29
  40. package/src/logic/utils.ts +0 -18
  41. package/src/types.ts +0 -13
  42. package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +0 -60
  43. package/test/benchmark/first-message.ts +0 -171
  44. package/test/end-to-end/content-delivery-layer-node-with-real-connections.test.ts +0 -165
  45. package/test/end-to-end/external-network-rpc.test.ts +0 -67
  46. package/test/end-to-end/inspect.test.ts +0 -124
  47. package/test/end-to-end/proxy-and-full-node.test.ts +0 -143
  48. package/test/end-to-end/proxy-connections.test.ts +0 -226
  49. package/test/end-to-end/proxy-key-exchange.test.ts +0 -126
  50. package/test/end-to-end/webrtc-full-node-network.test.ts +0 -83
  51. package/test/end-to-end/websocket-full-node-network.test.ts +0 -82
  52. package/test/integration/ContentDeliveryLayerNode-Layer1Node-Latencies.test.ts +0 -139
  53. package/test/integration/ContentDeliveryLayerNode-Layer1Node.test.ts +0 -162
  54. package/test/integration/ContentDeliveryManager.test.ts +0 -160
  55. package/test/integration/ContentDeliveryRpcRemote.test.ts +0 -100
  56. package/test/integration/HandshakeRpcRemote.test.ts +0 -79
  57. package/test/integration/Handshakes.test.ts +0 -141
  58. package/test/integration/Inspect.test.ts +0 -89
  59. package/test/integration/NeighborUpdateRpcRemote.test.ts +0 -82
  60. package/test/integration/NetworkNode.test.ts +0 -115
  61. package/test/integration/NetworkRpc.test.ts +0 -52
  62. package/test/integration/NetworkStack.test.ts +0 -72
  63. package/test/integration/NodeInfoRpc.test.ts +0 -109
  64. package/test/integration/Propagation.test.ts +0 -76
  65. package/test/integration/joining-streams-on-offline-peers.test.ts +0 -82
  66. package/test/integration/stream-without-default-entrypoints.test.ts +0 -128
  67. package/test/integration/streamEntryPointReplacing.test.ts +0 -97
  68. package/test/types/global.d.ts +0 -1
  69. package/test/unit/ContentDeliveryLayerNode.test.ts +0 -112
  70. package/test/unit/ContentDeliveryManager.test.ts +0 -96
  71. package/test/unit/ContentDeliveryRpcLocal.test.ts +0 -60
  72. package/test/unit/DuplicateMessageDetector.test.ts +0 -192
  73. package/test/unit/ExternalNetworkRpc.test.ts +0 -48
  74. package/test/unit/FifoMapWithTtl.test.ts +0 -253
  75. package/test/unit/HandshakeRpcLocal.test.ts +0 -155
  76. package/test/unit/Handshaker.test.ts +0 -69
  77. package/test/unit/InspectSession.test.ts +0 -83
  78. package/test/unit/Inspector.test.ts +0 -51
  79. package/test/unit/NeighborFinder.test.ts +0 -51
  80. package/test/unit/NeighborUpdateRpcLocal.test.ts +0 -139
  81. package/test/unit/NetworkNode.test.ts +0 -42
  82. package/test/unit/NodeList.test.ts +0 -164
  83. package/test/unit/NumberPair.test.ts +0 -22
  84. package/test/unit/PeerDescriptorStoreManager.test.ts +0 -103
  85. package/test/unit/Propagation.test.ts +0 -151
  86. package/test/unit/ProxyConnectionRpcRemote.test.ts +0 -39
  87. package/test/unit/StreamPartIDDataKey.test.ts +0 -12
  88. package/test/unit/StreamPartNetworkSplitAvoidance.test.ts +0 -31
  89. package/test/unit/StreamPartReconnect.test.ts +0 -30
  90. package/test/unit/TemporaryConnectionRpcLocal.test.ts +0 -38
  91. package/test/utils/fake/FakePeerDescriptorStoreManager.ts +0 -29
  92. package/test/utils/mock/MockConnectionsView.ts +0 -18
  93. package/test/utils/mock/MockControlLayerNode.ts +0 -78
  94. package/test/utils/mock/MockDiscoveryLayerNode.ts +0 -60
  95. package/test/utils/mock/MockHandshaker.ts +0 -17
  96. package/test/utils/mock/MockNeighborFinder.ts +0 -20
  97. package/test/utils/mock/MockNeighborUpdateManager.ts +0 -21
  98. package/test/utils/mock/MockTransport.ts +0 -30
  99. package/test/utils/utils.ts +0 -144
  100. package/tsconfig.browser.json +0 -13
  101. package/tsconfig.jest.json +0 -17
  102. package/tsconfig.json +0 -3
  103. package/tsconfig.node.json +0 -17
@@ -1,171 +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
- toUserId,
18
- toUserIdRaw,
19
- utf8ToBinary, waitForEvent3
20
- } from '@streamr/utils'
21
- import fs from 'fs'
22
- import { ContentDeliveryLayerNode } from '../../src/logic/ContentDeliveryLayerNode'
23
- import { streamPartIdToDataKey } from '../../src/logic/ContentDeliveryManager'
24
- import { DiscoveryLayerNode } from '../../src/logic/DiscoveryLayerNode'
25
- import { NetworkNode } from '../../src/NetworkNode'
26
- import { ContentType, EncryptionType, SignatureType } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
27
- import { createMockPeerDescriptor, createNetworkNodeWithSimulator } from '../utils/utils'
28
-
29
- const numNodes = 10000
30
-
31
- let nodes: NetworkNode[]
32
- let simulator: Simulator
33
- let layer0Ep: PeerDescriptor
34
- const publishIntervals: NodeJS.Timeout[] = []
35
- const streamParts: Map<StreamPartID, NetworkNode> = new Map()
36
- let currentNode: NetworkNode
37
- let publishInterval: NodeJS.Timeout | undefined
38
- let i = 0
39
-
40
- const prepareLayer0 = async () => {
41
- console.log('Preparing network')
42
- nodes = []
43
- simulator = new Simulator(LatencyType.REAL)
44
- const peerDescriptor = createMockPeerDescriptor({
45
- region: getRandomRegion()
46
- })
47
- layer0Ep = peerDescriptor
48
- const entryPoint = await createNetworkNodeWithSimulator(peerDescriptor, simulator, [peerDescriptor])
49
- await entryPoint.start()
50
- nodes.push(entryPoint)
51
-
52
- console.log('Entrypoint ready')
53
- }
54
-
55
- const prepareStream = async (streamId: string) => {
56
- console.log('Preparing stream ')
57
- const peerDescriptor = createMockPeerDescriptor({
58
- region: getRandomRegion()
59
- })
60
- const streamPartId = toStreamPartID(toStreamID(streamId), 0)
61
- const streamPublisher = await createNetworkNodeWithSimulator(peerDescriptor, simulator, [layer0Ep])
62
- await streamPublisher.start()
63
- streamPublisher.join(streamPartId)
64
- nodes.push(streamPublisher)
65
- streamParts.set(streamPartId, streamPublisher)
66
- }
67
-
68
- const shutdownNetwork = async () => {
69
- publishIntervals.forEach((interval) => clearInterval(interval))
70
- await Promise.all([
71
- ...nodes.map((node) => node.stop())
72
- ])
73
- simulator.stop()
74
- }
75
-
76
- const measureJoiningTime = async () => {
77
- const peerDescriptor = createMockPeerDescriptor({
78
- region: getRandomRegion()
79
- })
80
- console.log('starting node with id ', toNodeId(peerDescriptor))
81
-
82
- // start publishing ons stream
83
- const stream = Array.from(streamParts.keys())[Math.floor(Math.random() * streamParts.size)]
84
- console.log(stream)
85
- publishInterval = setInterval(() => {
86
- i += 1
87
- const streamMessage = {
88
- messageId: {
89
- streamId: StreamPartIDUtils.getStreamID(stream),
90
- streamPartition: 0,
91
- timestamp: i,
92
- sequenceNumber: Math.floor(Math.random() * 20000),
93
- publisherId: toUserIdRaw(toUserId('0x2222')),
94
- messageChainId: 'msgChainId'
95
- },
96
- body: {
97
- oneofKind: 'contentMessage' as const,
98
- contentMessage: {
99
- content: utf8ToBinary(JSON.stringify({
100
- hello: 'world'
101
- })),
102
- contentType: ContentType.JSON,
103
- encryptionType: EncryptionType.NONE,
104
- }
105
- },
106
- signature: hexToBinary('0x1234'),
107
- signatureType: SignatureType.SECP256K1,
108
- }
109
- streamParts.get(stream)!.broadcast(streamMessage)
110
- }, 1000)
111
- // get random node from network to use as entrypoint
112
- const randomNode = nodes[Math.floor(Math.random() * nodes.length)]
113
- const streamSubscriber = await createNetworkNodeWithSimulator(
114
- peerDescriptor,
115
- simulator,
116
- [randomNode.stack.getControlLayerNode().getLocalPeerDescriptor()]
117
- )
118
- currentNode = streamSubscriber
119
- const start = performance.now()
120
- await streamSubscriber.start()
121
-
122
- await Promise.all([
123
- waitForEvent3(streamSubscriber.stack.getContentDeliveryManager() as any, 'newMessage', 60000),
124
- streamSubscriber.join(stream)
125
- ])
126
-
127
- const end = performance.now()
128
-
129
- nodes.push(streamSubscriber)
130
- clearInterval(publishInterval)
131
- publishInterval = undefined
132
- return end - start
133
- }
134
-
135
- const run = async () => {
136
- await prepareLayer0()
137
- for (let i = 0; i < 20; i++) {
138
- await prepareStream(`stream-${i}`)
139
- }
140
- const logFile = fs.openSync('FirstMessageTime.log', 'w')
141
-
142
- fs.writeSync(logFile, 'Network size' + '\t' + 'Time to receive first message time (ms)' + '\n')
143
- for (let i = 0; i < numNodes; i++) {
144
- const time = await measureJoiningTime()
145
- console.log(`Time to receive first message for ${i + 1} nodes network: ${time}ms`)
146
- fs.writeSync(logFile, `${i + 1}` + '\t' + `${Math.round(time)}\n`)
147
- }
148
- fs.closeSync(logFile)
149
- await shutdownNetwork()
150
- }
151
-
152
- run().then(() => {
153
- console.log('done')
154
- }).catch((err) => {
155
- console.error(err)
156
- const contentDeliveryManager = currentNode.stack.getContentDeliveryManager()
157
- const streamParts = contentDeliveryManager.getStreamParts()
158
- const foundData = nodes[0].stack.getControlLayerNode().fetchDataFromDht(streamPartIdToDataKey(streamParts[0]))
159
- console.log(foundData)
160
- const controlLayerNode = currentNode.stack.getControlLayerNode() as DhtNode
161
- console.log(controlLayerNode.getNeighbors().length)
162
- console.log(controlLayerNode.getConnectionsView().getConnectionCount())
163
- const streamPartDelivery = contentDeliveryManager
164
- .getStreamPartDelivery(streamParts[0])! as { discoveryLayerNode: DiscoveryLayerNode, node: ContentDeliveryLayerNode }
165
- console.log(streamPartDelivery.discoveryLayerNode.getNeighbors())
166
- console.log(streamPartDelivery.node.getNeighbors())
167
- console.log(nodes[nodes.length - 1])
168
- if (publishInterval) {
169
- clearInterval(publishInterval)
170
- }
171
- })
@@ -1,165 +0,0 @@
1
- import { ConnectionManager, DhtNode, PeerDescriptor } from '@streamr/dht'
2
- import { StreamPartIDUtils, until } 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
- // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
110
- contentDeliveryLayerNode1.stop(),
111
- // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
112
- contentDeliveryLayerNode2.stop(),
113
- // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
114
- contentDeliveryLayerNode3.stop(),
115
- // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
116
- contentDeliveryLayerNode4.stop(),
117
- // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
118
- contentDeliveryLayerNode5.stop(),
119
- (epDhtNode.getTransport() as ConnectionManager).stop(),
120
- (dhtNode1.getTransport() as ConnectionManager).stop(),
121
- (dhtNode2.getTransport() as ConnectionManager).stop(),
122
- (dhtNode3.getTransport() as ConnectionManager).stop(),
123
- (dhtNode4.getTransport() as ConnectionManager).stop()
124
- ])
125
- })
126
-
127
- it('can fully connected topologies ', async () => {
128
- await until(() => {
129
- return contentDeliveryLayerNode1.getNeighbors().length >= 3
130
- && contentDeliveryLayerNode2.getNeighbors().length >= 3
131
- && contentDeliveryLayerNode3.getNeighbors().length >= 3
132
- && contentDeliveryLayerNode4.getNeighbors().length >= 3
133
- && contentDeliveryLayerNode5.getNeighbors().length >= 3
134
- }, 10000)
135
- expect(contentDeliveryLayerNode1.getNeighbors().length).toBeGreaterThanOrEqual(3)
136
- expect(contentDeliveryLayerNode2.getNeighbors().length).toBeGreaterThanOrEqual(3)
137
- expect(contentDeliveryLayerNode3.getNeighbors().length).toBeGreaterThanOrEqual(3)
138
- expect(contentDeliveryLayerNode4.getNeighbors().length).toBeGreaterThanOrEqual(3)
139
- expect(contentDeliveryLayerNode5.getNeighbors().length).toBeGreaterThanOrEqual(3)
140
- })
141
-
142
- it('can propagate messages', async () => {
143
- let receivedMessageCount = 0
144
- contentDeliveryLayerNode2.on('message', () => receivedMessageCount += 1)
145
- contentDeliveryLayerNode3.on('message', () => receivedMessageCount += 1)
146
- contentDeliveryLayerNode4.on('message', () => receivedMessageCount += 1)
147
- contentDeliveryLayerNode5.on('message', () => receivedMessageCount += 1)
148
-
149
- await until(() => {
150
- return contentDeliveryLayerNode1.getNeighbors().length >= 3
151
- && contentDeliveryLayerNode2.getNeighbors().length >= 3
152
- && contentDeliveryLayerNode3.getNeighbors().length >= 3
153
- && contentDeliveryLayerNode4.getNeighbors().length >= 3
154
- && contentDeliveryLayerNode5.getNeighbors().length >= 3
155
- }, 10000)
156
-
157
- const msg = createStreamMessage(
158
- JSON.stringify({ hello: 'WORLD' }),
159
- streamPartId,
160
- randomUserId()
161
- )
162
- contentDeliveryLayerNode1.broadcast(msg)
163
- await until(() => receivedMessageCount >= 4)
164
- })
165
- })
@@ -1,67 +0,0 @@
1
- import { NetworkNode } from '../../src/NetworkNode'
2
- import { NetworkStack } from '../../src/NetworkStack'
3
- import { StreamPartHandshakeRequest, StreamPartHandshakeResponse } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
4
- import { HandshakeRpcClient } from '../../generated/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, toUserIdRaw, utf8ToBinary, until } from '@streamr/utils'
3
- import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
4
- import { ContentType, EncryptionType, SignatureType, StreamMessage } from '../../generated/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: toUserIdRaw(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 until(() =>
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
- })
@@ -1,143 +0,0 @@
1
- import { randomUserId } from '@streamr/test-utils'
2
- import { StreamPartID, StreamPartIDUtils, hexToBinary, toUserIdRaw, utf8ToBinary, waitForEvent3 } from '@streamr/utils'
3
- import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
4
- import {
5
- ContentType,
6
- EncryptionType,
7
- ProxyDirection,
8
- SignatureType,
9
- StreamMessage
10
- } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
11
- import { createMockPeerDescriptor } from '../utils/utils'
12
-
13
- const PROXIED_NODE_USER_ID = randomUserId()
14
-
15
- const createMessage = (streamPartId: StreamPartID): StreamMessage => {
16
- return {
17
- messageId: {
18
- streamId: StreamPartIDUtils.getStreamID(streamPartId),
19
- streamPartition: StreamPartIDUtils.getStreamPartition(streamPartId),
20
- timestamp: 666,
21
- sequenceNumber: 0,
22
- publisherId: toUserIdRaw(randomUserId()),
23
- messageChainId: 'msgChainId'
24
- },
25
- previousMessageRef: {
26
- timestamp: 665,
27
- sequenceNumber: 0
28
- },
29
- body: {
30
- oneofKind: 'contentMessage',
31
- contentMessage: {
32
- content: utf8ToBinary(JSON.stringify({
33
- hello: 'world'
34
- })),
35
- contentType: ContentType.JSON,
36
- encryptionType: EncryptionType.NONE,
37
- }
38
- },
39
- signatureType: SignatureType.SECP256K1,
40
- signature: hexToBinary('0x1234'),
41
- }
42
- }
43
-
44
- describe('proxy and full node', () => {
45
-
46
- const proxyNodeDescriptor = createMockPeerDescriptor({
47
- websocket: { host: '127.0.0.1', port: 23135, tls: false }
48
- })
49
- const proxiedNodeDescriptor = createMockPeerDescriptor()
50
- const proxiedStreamPart = StreamPartIDUtils.parse('proxy-stream#0')
51
- const regularStreamPart1 = StreamPartIDUtils.parse('regular-stream1#0')
52
- const regularStreamPart2 = StreamPartIDUtils.parse('regular-stream2#0')
53
- const regularStreamPart3 = StreamPartIDUtils.parse('regular-stream3#0')
54
- const regularStreamPart4 = StreamPartIDUtils.parse('regular-stream4#0')
55
- let proxyNode: NetworkNode
56
- let proxiedNode: NetworkNode
57
-
58
- beforeEach(async () => {
59
- proxyNode = createNetworkNode({
60
- layer0: {
61
- entryPoints: [proxyNodeDescriptor],
62
- peerDescriptor: proxyNodeDescriptor,
63
- websocketServerEnableTls: false
64
- },
65
- networkNode: {
66
- acceptProxyConnections: true
67
- }
68
- })
69
- await proxyNode.start()
70
- proxyNode.stack.getContentDeliveryManager().joinStreamPart(proxiedStreamPart)
71
- proxyNode.stack.getContentDeliveryManager().joinStreamPart(regularStreamPart1)
72
- proxyNode.stack.getContentDeliveryManager().joinStreamPart(regularStreamPart2)
73
- proxyNode.stack.getContentDeliveryManager().joinStreamPart(regularStreamPart3)
74
- proxyNode.stack.getContentDeliveryManager().joinStreamPart(regularStreamPart4)
75
-
76
- proxiedNode = createNetworkNode({
77
- layer0: {
78
- entryPoints: [proxyNodeDescriptor],
79
- peerDescriptor: proxiedNodeDescriptor,
80
- }
81
- })
82
- await proxiedNode.start(false)
83
- })
84
-
85
- afterEach(async () => {
86
- await proxyNode.stop()
87
- await proxiedNode.stop()
88
- })
89
-
90
- it('proxied node can act as full node on another stream part', async () => {
91
- await proxiedNode.setProxies(proxiedStreamPart, [proxyNodeDescriptor], ProxyDirection.PUBLISH, PROXIED_NODE_USER_ID, 1)
92
- expect(proxiedNode.stack.getControlLayerNode().hasJoined()).toBe(false)
93
-
94
- await Promise.all([
95
- waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage'),
96
- proxiedNode.broadcast(createMessage(regularStreamPart1))
97
- ])
98
-
99
- expect(proxiedNode.stack.getControlLayerNode().hasJoined()).toBe(true)
100
-
101
- await Promise.all([
102
- waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage'),
103
- proxiedNode.broadcast(createMessage(proxiedStreamPart))
104
- ])
105
-
106
- expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(proxiedStreamPart)!.proxied).toBe(true)
107
- expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(regularStreamPart1)!.proxied).toBe(false)
108
- })
109
-
110
- it('proxied node can act as full node on multiple stream parts', async () => {
111
- await proxiedNode.setProxies(proxiedStreamPart, [proxyNodeDescriptor], ProxyDirection.PUBLISH, PROXIED_NODE_USER_ID, 1)
112
- expect(proxiedNode.stack.getControlLayerNode().hasJoined()).toBe(false)
113
-
114
- await Promise.all([
115
- waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage', 5000,
116
- (streamMessage: StreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart1)),
117
- waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage', 5000,
118
- (streamMessage: StreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart2)),
119
- waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage', 5000,
120
- (streamMessage: StreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart3)),
121
- waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage', 5000,
122
- (streamMessage: StreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart4)),
123
- proxiedNode.broadcast(createMessage(regularStreamPart1)),
124
- proxiedNode.broadcast(createMessage(regularStreamPart2)),
125
- proxiedNode.broadcast(createMessage(regularStreamPart3)),
126
- proxiedNode.broadcast(createMessage(regularStreamPart4))
127
- ])
128
-
129
- expect(proxiedNode.stack.getControlLayerNode().hasJoined()).toBe(true)
130
-
131
- await Promise.all([
132
- waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage'),
133
- proxiedNode.broadcast(createMessage(proxiedStreamPart))
134
- ])
135
-
136
- expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(proxiedStreamPart)!.proxied).toBe(true)
137
- expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(regularStreamPart1)!.proxied).toBe(false)
138
- expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(regularStreamPart2)!.proxied).toBe(false)
139
- expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(regularStreamPart3)!.proxied).toBe(false)
140
- expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(regularStreamPart4)!.proxied).toBe(false)
141
- })
142
-
143
- })