@streamr/trackerless-network 100.0.0-pretestnet.4 → 100.0.0-rc.0
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.
- package/README.md +57 -0
- package/dist/package.json +11 -11
- package/dist/src/NetworkNode.d.ts +6 -5
- package/dist/src/NetworkNode.js +9 -2
- package/dist/src/NetworkNode.js.map +1 -1
- package/dist/src/NetworkStack.d.ts +13 -9
- package/dist/src/NetworkStack.js +80 -12
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/exports.d.ts +4 -3
- package/dist/src/exports.js +12 -1
- package/dist/src/exports.js.map +1 -1
- package/dist/src/logic/DeliveryRpcLocal.d.ts +4 -5
- package/dist/src/logic/DeliveryRpcLocal.js +6 -5
- package/dist/src/logic/DeliveryRpcLocal.js.map +1 -1
- package/dist/src/logic/DeliveryRpcRemote.d.ts +5 -4
- package/dist/src/logic/DeliveryRpcRemote.js +4 -3
- package/dist/src/logic/DeliveryRpcRemote.js.map +1 -1
- package/dist/src/logic/DuplicateMessageDetector.d.ts +3 -3
- package/dist/src/logic/DuplicateMessageDetector.js +10 -6
- package/dist/src/logic/DuplicateMessageDetector.js.map +1 -1
- package/dist/src/logic/EntryPointDiscovery.d.ts +8 -5
- package/dist/src/logic/EntryPointDiscovery.js +24 -15
- package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
- package/dist/src/logic/Layer0Node.d.ts +6 -4
- package/dist/src/logic/Layer1Node.d.ts +12 -6
- package/dist/src/logic/NodeList.d.ts +13 -15
- package/dist/src/logic/NodeList.js +18 -15
- package/dist/src/logic/NodeList.js.map +1 -1
- package/dist/src/logic/RandomGraphNode.d.ts +26 -22
- package/dist/src/logic/RandomGraphNode.js +82 -52
- package/dist/src/logic/RandomGraphNode.js.map +1 -1
- package/dist/src/logic/StreamrNode.d.ts +6 -6
- package/dist/src/logic/StreamrNode.js +53 -37
- package/dist/src/logic/StreamrNode.js.map +1 -1
- package/dist/src/logic/createRandomGraphNode.d.ts +2 -2
- package/dist/src/logic/createRandomGraphNode.js +33 -21
- package/dist/src/logic/createRandomGraphNode.js.map +1 -1
- package/dist/src/logic/formStreamPartDeliveryServiceId.d.ts +2 -1
- package/dist/src/logic/formStreamPartDeliveryServiceId.js.map +1 -1
- package/dist/src/logic/inspect/InspectSession.d.ts +4 -3
- package/dist/src/logic/inspect/InspectSession.js +6 -2
- package/dist/src/logic/inspect/InspectSession.js.map +1 -1
- package/dist/src/logic/inspect/Inspector.d.ts +11 -16
- package/dist/src/logic/inspect/Inspector.js +21 -9
- package/dist/src/logic/inspect/Inspector.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +7 -9
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +55 -32
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.d.ts +8 -6
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js +25 -16
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +9 -15
- package/dist/src/logic/neighbor-discovery/Handshaker.js +68 -44
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +8 -10
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js +12 -2
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +7 -10
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +11 -9
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +8 -4
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +33 -24
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +5 -4
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js +4 -5
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
- package/dist/src/logic/node-info/NodeInfoClient.d.ts +9 -0
- package/dist/src/logic/node-info/NodeInfoClient.js +21 -0
- package/dist/src/logic/node-info/NodeInfoClient.js.map +1 -0
- package/dist/src/logic/node-info/NodeInfoRpcLocal.d.ts +12 -0
- package/dist/src/logic/node-info/NodeInfoRpcLocal.js +22 -0
- package/dist/src/logic/node-info/NodeInfoRpcLocal.js.map +1 -0
- package/dist/src/logic/node-info/NodeInfoRpcRemote.d.ts +6 -0
- package/dist/src/logic/node-info/NodeInfoRpcRemote.js +11 -0
- package/dist/src/logic/node-info/NodeInfoRpcRemote.js.map +1 -0
- package/dist/src/logic/propagation/FifoMapWithTTL.js +7 -3
- package/dist/src/logic/propagation/FifoMapWithTTL.js.map +1 -1
- package/dist/src/logic/propagation/Propagation.d.ts +4 -4
- package/dist/src/logic/propagation/Propagation.js +4 -0
- package/dist/src/logic/propagation/Propagation.js.map +1 -1
- package/dist/src/logic/propagation/PropagationTaskStore.d.ts +2 -2
- package/dist/src/logic/propagation/PropagationTaskStore.js +1 -0
- package/dist/src/logic/propagation/PropagationTaskStore.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js +1 -1
- package/dist/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js +87 -53
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.d.ts +7 -0
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js +32 -0
- package/dist/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.js.map +1 -0
- package/dist/src/logic/proxy/ProxyClient.d.ts +8 -6
- package/dist/src/logic/proxy/ProxyClient.js +40 -28
- package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.d.ts +6 -7
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +8 -8
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.d.ts +3 -3
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +9 -4
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +21 -6
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.d.ts +4 -3
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js +13 -3
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
- package/dist/src/logic/utils.js.map +1 -1
- package/dist/src/proto/google/protobuf/any.js +8 -8
- package/dist/src/proto/google/protobuf/any.js.map +1 -1
- package/dist/src/proto/google/protobuf/empty.js +2 -4
- package/dist/src/proto/google/protobuf/empty.js.map +1 -1
- package/dist/src/proto/google/protobuf/timestamp.js +10 -10
- package/dist/src/proto/google/protobuf/timestamp.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +36 -49
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +54 -52
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +184 -234
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +118 -168
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +20 -29
- package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +42 -5
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +52 -19
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +193 -28
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +129 -20
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.d.ts +20 -3
- package/dist/test/benchmark/first-message.js +14 -15
- package/dist/test/benchmark/first-message.js.map +1 -1
- package/dist/test/utils/utils.d.ts +2 -4
- package/dist/test/utils/utils.js +20 -19
- package/dist/test/utils/utils.js.map +1 -1
- package/jest.config.js +3 -38
- package/package.json +11 -11
- package/protos/NetworkRpc.proto +57 -12
- package/src/NetworkNode.ts +13 -6
- package/src/NetworkStack.ts +94 -16
- package/src/exports.ts +11 -3
- package/src/logic/DeliveryRpcLocal.ts +7 -8
- package/src/logic/DeliveryRpcRemote.ts +7 -5
- package/src/logic/DuplicateMessageDetector.ts +7 -7
- package/src/logic/EntryPointDiscovery.ts +26 -19
- package/src/logic/Layer0Node.ts +6 -4
- package/src/logic/Layer1Node.ts +21 -6
- package/src/logic/NodeList.ts +25 -26
- package/src/logic/RandomGraphNode.ts +148 -78
- package/src/logic/StreamrNode.ts +58 -41
- package/src/logic/createRandomGraphNode.ts +37 -25
- package/src/logic/formStreamPartDeliveryServiceId.ts +2 -1
- package/src/logic/inspect/InspectSession.ts +8 -4
- package/src/logic/inspect/Inspector.ts +34 -24
- package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +72 -38
- package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +32 -20
- package/src/logic/neighbor-discovery/Handshaker.ts +90 -75
- package/src/logic/neighbor-discovery/NeighborFinder.ts +18 -13
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +19 -20
- package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +43 -33
- package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +6 -6
- package/src/logic/node-info/NodeInfoClient.ts +23 -0
- package/src/logic/node-info/NodeInfoRpcLocal.ts +28 -0
- package/src/logic/node-info/NodeInfoRpcRemote.ts +11 -0
- package/src/logic/propagation/Propagation.ts +7 -6
- package/src/logic/propagation/PropagationTaskStore.ts +2 -2
- package/src/logic/protocol-integration/stream-message/GroupKeyRequestTranslator.ts +1 -1
- package/src/logic/protocol-integration/stream-message/GroupKeyResponseTranslator.ts +1 -2
- package/src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts +95 -69
- package/src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils.ts +37 -0
- package/src/logic/proxy/ProxyClient.ts +60 -40
- package/src/logic/proxy/ProxyConnectionRpcLocal.ts +15 -19
- package/src/logic/proxy/ProxyConnectionRpcRemote.ts +3 -3
- package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +30 -10
- package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +14 -4
- package/src/proto/google/protobuf/any.ts +4 -4
- package/src/proto/google/protobuf/empty.ts +2 -4
- package/src/proto/google/protobuf/timestamp.ts +4 -4
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +50 -66
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +21 -30
- package/src/proto/packages/dht/protos/DhtRpc.ts +242 -316
- package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +1 -1
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +49 -7
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +21 -4
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +251 -44
- package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +60 -0
- package/test/benchmark/first-message.ts +38 -17
- package/test/end-to-end/inspect.test.ts +16 -4
- package/test/end-to-end/proxy-and-full-node.test.ts +26 -13
- package/test/end-to-end/proxy-connections.test.ts +23 -11
- package/test/end-to-end/proxy-key-exchange.test.ts +25 -15
- package/test/end-to-end/random-graph-with-real-connections.test.ts +35 -32
- package/test/end-to-end/webrtc-full-node-network.test.ts +11 -12
- package/test/end-to-end/websocket-full-node-network.test.ts +12 -12
- package/test/integration/DeliveryRpcRemote.test.ts +6 -9
- package/test/integration/HandshakeRpcRemote.test.ts +6 -8
- package/test/integration/Handshakes.test.ts +29 -27
- package/test/integration/Inspect.test.ts +0 -2
- package/test/integration/NeighborUpdateRpcRemote.test.ts +6 -7
- package/test/integration/NetworkNode.test.ts +27 -12
- package/test/integration/NetworkRpc.test.ts +3 -5
- package/test/integration/NetworkStack.test.ts +2 -2
- package/test/integration/NodeInfoRpc.test.ts +104 -0
- package/test/integration/Propagation.test.ts +3 -3
- package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +24 -25
- package/test/integration/RandomGraphNode-Layer1Node.test.ts +26 -24
- package/test/integration/StreamrNode.test.ts +4 -16
- package/test/integration/joining-streams-on-offline-peers.test.ts +7 -31
- package/test/integration/stream-without-default-entrypoints.test.ts +22 -23
- package/test/integration/streamEntryPointReplacing.test.ts +94 -0
- package/test/unit/DeliveryRpcLocal.test.ts +2 -1
- package/test/unit/EntrypointDiscovery.test.ts +11 -8
- package/test/unit/GroupKeyResponseTranslator.test.ts +1 -1
- package/test/unit/HandshakeRpcLocal.test.ts +80 -28
- package/test/unit/Handshaker.test.ts +14 -9
- package/test/unit/InspectSession.test.ts +5 -6
- package/test/unit/Inspector.test.ts +3 -4
- package/test/unit/NeighborFinder.test.ts +12 -9
- package/test/unit/NeighborUpdateRpcLocal.test.ts +139 -0
- package/test/unit/NodeList.test.ts +77 -80
- package/test/unit/Propagation.test.ts +21 -16
- package/test/unit/ProxyConnectionRpcRemote.test.ts +18 -12
- package/test/unit/RandomGraphNode.test.ts +23 -20
- package/test/unit/StreamMessageTranslator.test.ts +10 -8
- package/test/unit/StreamPartIDDataKey.test.ts +12 -0
- package/test/unit/StreamrNode.test.ts +2 -0
- package/test/unit/TemporaryConnectionRpcLocal.test.ts +38 -0
- package/test/unit/oldStreamMessageBinaryUtils.test.ts +39 -0
- package/test/utils/mock/MockHandshaker.ts +6 -5
- package/test/utils/mock/MockLayer0Node.ts +7 -2
- package/test/utils/mock/MockLayer1Node.ts +5 -2
- package/test/utils/mock/MockNeighborFinder.ts +3 -2
- package/test/utils/mock/MockNeighborUpdateManager.ts +3 -2
- package/test/utils/mock/Transport.ts +1 -1
- package/test/utils/utils.ts +40 -25
- package/tsconfig.jest.json +5 -4
- package/tsconfig.node.json +2 -2
- package/dist/src/identifiers.d.ts +0 -4
- package/dist/src/identifiers.js +0 -9
- package/dist/src/identifiers.js.map +0 -1
- package/src/identifiers.ts +0 -8
- package/test/unit/GroupKeyRequestTranslator.test.ts +0 -36
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
DhtNode,
|
|
5
|
+
getNodeIdFromPeerDescriptor,
|
|
6
|
+
getRandomRegion,
|
|
7
|
+
LatencyType,
|
|
8
|
+
PeerDescriptor,
|
|
9
|
+
Simulator
|
|
10
|
+
} from '@streamr/dht'
|
|
11
|
+
import {
|
|
12
|
+
ContentType,
|
|
13
|
+
EncryptionType,
|
|
14
|
+
MessageID,
|
|
15
|
+
SignatureType,
|
|
16
|
+
StreamMessage,
|
|
17
|
+
StreamMessageType,
|
|
18
|
+
StreamPartID,
|
|
19
|
+
StreamPartIDUtils,
|
|
20
|
+
toStreamID,
|
|
21
|
+
toStreamPartID
|
|
22
|
+
} from '@streamr/protocol'
|
|
5
23
|
import { hexToBinary, utf8ToBinary, waitForEvent3 } from '@streamr/utils'
|
|
6
24
|
import fs from 'fs'
|
|
7
|
-
import { PeerDescriptor } from '@streamr/dht'
|
|
8
25
|
import { NetworkNode } from '../../src/NetworkNode'
|
|
9
|
-
import { getNodeIdFromPeerDescriptor } from '../../src/identifiers'
|
|
10
26
|
import { streamPartIdToDataKey } from '../../src/logic/EntryPointDiscovery'
|
|
11
27
|
import { createMockPeerDescriptor, createNetworkNodeWithSimulator } from '../utils/utils'
|
|
12
28
|
import { Layer1Node } from '../../src/logic/Layer1Node'
|
|
@@ -31,7 +47,7 @@ const prepareLayer0 = async () => {
|
|
|
31
47
|
region: getRandomRegion()
|
|
32
48
|
})
|
|
33
49
|
layer0Ep = peerDescriptor
|
|
34
|
-
const entryPoint = createNetworkNodeWithSimulator(peerDescriptor, simulator, [peerDescriptor])
|
|
50
|
+
const entryPoint = await createNetworkNodeWithSimulator(peerDescriptor, simulator, [peerDescriptor])
|
|
35
51
|
await entryPoint.start()
|
|
36
52
|
nodes.push(entryPoint)
|
|
37
53
|
|
|
@@ -44,7 +60,7 @@ const prepareStream = async (streamId: string) => {
|
|
|
44
60
|
region: getRandomRegion()
|
|
45
61
|
})
|
|
46
62
|
const streamPartId = toStreamPartID(toStreamID(streamId), 0)
|
|
47
|
-
const streamPublisher = createNetworkNodeWithSimulator(peerDescriptor, simulator, [layer0Ep])
|
|
63
|
+
const streamPublisher = await createNetworkNodeWithSimulator(peerDescriptor, simulator, [layer0Ep])
|
|
48
64
|
await streamPublisher.start()
|
|
49
65
|
streamPublisher.join(streamPartId)
|
|
50
66
|
nodes.push(streamPublisher)
|
|
@@ -52,7 +68,7 @@ const prepareStream = async (streamId: string) => {
|
|
|
52
68
|
}
|
|
53
69
|
|
|
54
70
|
const shutdownNetwork = async () => {
|
|
55
|
-
publishIntervals.
|
|
71
|
+
publishIntervals.forEach((interval) => clearInterval(interval))
|
|
56
72
|
await Promise.all([
|
|
57
73
|
...nodes.map((node) => node.stop())
|
|
58
74
|
])
|
|
@@ -76,21 +92,28 @@ const measureJoiningTime = async () => {
|
|
|
76
92
|
0,
|
|
77
93
|
i,
|
|
78
94
|
Math.floor(Math.random() * 20000),
|
|
79
|
-
'
|
|
95
|
+
'2222' as any,
|
|
80
96
|
'msgChainId'
|
|
81
97
|
),
|
|
82
|
-
prevMsgRef: null,
|
|
83
98
|
content: utf8ToBinary(JSON.stringify({
|
|
84
99
|
hello: 'world'
|
|
85
100
|
})),
|
|
86
101
|
messageType: StreamMessageType.MESSAGE,
|
|
102
|
+
contentType: ContentType.JSON,
|
|
103
|
+
encryptionType: EncryptionType.NONE,
|
|
87
104
|
signature: hexToBinary('0x1234'),
|
|
105
|
+
signatureType: SignatureType.SECP256K1,
|
|
106
|
+
|
|
88
107
|
})
|
|
89
108
|
streamParts.get(stream)!.broadcast(streamMessage)
|
|
90
109
|
}, 1000)
|
|
91
110
|
// get random node from network to use as entrypoint
|
|
92
111
|
const randomNode = nodes[Math.floor(Math.random() * nodes.length)]
|
|
93
|
-
const streamSubscriber = createNetworkNodeWithSimulator(
|
|
112
|
+
const streamSubscriber = await createNetworkNodeWithSimulator(
|
|
113
|
+
peerDescriptor,
|
|
114
|
+
simulator,
|
|
115
|
+
[randomNode.stack.getLayer0Node().getLocalPeerDescriptor()]
|
|
116
|
+
)
|
|
94
117
|
currentNode = streamSubscriber
|
|
95
118
|
const start = performance.now()
|
|
96
119
|
await streamSubscriber.start()
|
|
@@ -109,7 +132,6 @@ const measureJoiningTime = async () => {
|
|
|
109
132
|
}
|
|
110
133
|
|
|
111
134
|
const run = async () => {
|
|
112
|
-
Simulator.useFakeTimers()
|
|
113
135
|
await prepareLayer0()
|
|
114
136
|
for (let i = 0; i < 20; i++) {
|
|
115
137
|
await prepareStream(`stream-${i}`)
|
|
@@ -124,7 +146,6 @@ const run = async () => {
|
|
|
124
146
|
}
|
|
125
147
|
fs.closeSync(logFile)
|
|
126
148
|
await shutdownNetwork()
|
|
127
|
-
Simulator.useFakeTimers(false)
|
|
128
149
|
}
|
|
129
150
|
|
|
130
151
|
// eslint-disable-next-line promise/catch-or-return, promise/always-return
|
|
@@ -134,14 +155,14 @@ run().then(() => {
|
|
|
134
155
|
console.error(err)
|
|
135
156
|
const streamrNode = currentNode.stack.getStreamrNode()
|
|
136
157
|
const streamParts = streamrNode.getStreamParts()
|
|
137
|
-
const foundData = nodes[0].stack.getLayer0Node().
|
|
158
|
+
const foundData = nodes[0].stack.getLayer0Node().fetchDataFromDht(streamPartIdToDataKey(streamParts[0]))
|
|
138
159
|
console.log(foundData)
|
|
139
160
|
const layer0Node = currentNode.stack.getLayer0Node() as DhtNode
|
|
140
|
-
console.log(layer0Node.
|
|
141
|
-
console.log(layer0Node.
|
|
161
|
+
console.log(layer0Node.getNeighbors().length)
|
|
162
|
+
console.log(layer0Node.getConnectionCount())
|
|
142
163
|
const streamPartDelivery = streamrNode.getStreamPartDelivery(streamParts[0])! as { layer1Node: Layer1Node, node: RandomGraphNode }
|
|
143
|
-
console.log(streamPartDelivery.layer1Node.
|
|
144
|
-
console.log(streamPartDelivery.node.
|
|
164
|
+
console.log(streamPartDelivery.layer1Node.getNeighbors())
|
|
165
|
+
console.log(streamPartDelivery.node.getNeighbors())
|
|
145
166
|
console.log(nodes[nodes.length - 1])
|
|
146
167
|
if (publishInterval) {
|
|
147
168
|
clearInterval(publishInterval)
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ContentType,
|
|
3
|
+
EncryptionType,
|
|
4
|
+
MessageID,
|
|
5
|
+
MessageRef,
|
|
6
|
+
SignatureType,
|
|
7
|
+
StreamMessage,
|
|
8
|
+
StreamMessageType,
|
|
9
|
+
StreamPartIDUtils
|
|
10
|
+
} from '@streamr/protocol'
|
|
2
11
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
3
12
|
import { hexToBinary, utf8ToBinary, waitForCondition } from '@streamr/utils'
|
|
4
13
|
import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
|
|
@@ -52,6 +61,9 @@ describe('inspect', () => {
|
|
|
52
61
|
hello: 'world'
|
|
53
62
|
})),
|
|
54
63
|
messageType: StreamMessageType.MESSAGE,
|
|
64
|
+
contentType: ContentType.JSON,
|
|
65
|
+
encryptionType: EncryptionType.NONE,
|
|
66
|
+
signatureType: SignatureType.SECP256K1,
|
|
55
67
|
signature: hexToBinary('0x1234'),
|
|
56
68
|
})
|
|
57
69
|
|
|
@@ -84,9 +96,9 @@ describe('inspect', () => {
|
|
|
84
96
|
await inspectedNode.start()
|
|
85
97
|
await inspectorNode.start()
|
|
86
98
|
|
|
87
|
-
publisherNode.stack.getStreamrNode()
|
|
88
|
-
inspectedNode.stack.getStreamrNode()
|
|
89
|
-
inspectorNode.stack.getStreamrNode()
|
|
99
|
+
publisherNode.stack.getStreamrNode().joinStreamPart(STREAM_PART_ID)
|
|
100
|
+
inspectedNode.stack.getStreamrNode().joinStreamPart(STREAM_PART_ID)
|
|
101
|
+
inspectorNode.stack.getStreamrNode().joinStreamPart(STREAM_PART_ID)
|
|
90
102
|
|
|
91
103
|
await waitForCondition(() =>
|
|
92
104
|
publisherNode.stack.getStreamrNode().getNeighbors(STREAM_PART_ID).length === 2
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ContentType,
|
|
3
|
+
EncryptionType,
|
|
4
|
+
MessageID,
|
|
5
|
+
MessageRef,
|
|
6
|
+
SignatureType,
|
|
7
|
+
StreamMessage,
|
|
8
|
+
StreamMessageType,
|
|
9
|
+
StreamPartID,
|
|
10
|
+
StreamPartIDUtils
|
|
11
|
+
} from '@streamr/protocol'
|
|
2
12
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
3
13
|
import { hexToBinary, utf8ToBinary, waitForEvent3 } from '@streamr/utils'
|
|
4
14
|
import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
|
|
@@ -22,6 +32,9 @@ const createMessage = (streamPartId: StreamPartID): StreamMessage => {
|
|
|
22
32
|
hello: 'world'
|
|
23
33
|
})),
|
|
24
34
|
messageType: StreamMessageType.MESSAGE,
|
|
35
|
+
contentType: ContentType.JSON,
|
|
36
|
+
encryptionType: EncryptionType.NONE,
|
|
37
|
+
signatureType: SignatureType.SECP256K1,
|
|
25
38
|
signature: hexToBinary('0x1234'),
|
|
26
39
|
})
|
|
27
40
|
}
|
|
@@ -52,11 +65,11 @@ describe('proxy and full node', () => {
|
|
|
52
65
|
}
|
|
53
66
|
})
|
|
54
67
|
await proxyNode.start()
|
|
55
|
-
proxyNode.stack.getStreamrNode()
|
|
56
|
-
proxyNode.stack.getStreamrNode()
|
|
57
|
-
proxyNode.stack.getStreamrNode()
|
|
58
|
-
proxyNode.stack.getStreamrNode()
|
|
59
|
-
proxyNode.stack.getStreamrNode()
|
|
68
|
+
proxyNode.stack.getStreamrNode().joinStreamPart(proxiedStreamPart)
|
|
69
|
+
proxyNode.stack.getStreamrNode().joinStreamPart(regularStreamPart1)
|
|
70
|
+
proxyNode.stack.getStreamrNode().joinStreamPart(regularStreamPart2)
|
|
71
|
+
proxyNode.stack.getStreamrNode().joinStreamPart(regularStreamPart3)
|
|
72
|
+
proxyNode.stack.getStreamrNode().joinStreamPart(regularStreamPart4)
|
|
60
73
|
|
|
61
74
|
proxiedNode = createNetworkNode({
|
|
62
75
|
layer0: {
|
|
@@ -77,14 +90,14 @@ describe('proxy and full node', () => {
|
|
|
77
90
|
expect(proxiedNode.stack.getLayer0Node().hasJoined()).toBe(false)
|
|
78
91
|
|
|
79
92
|
await Promise.all([
|
|
80
|
-
waitForEvent3(proxyNode.stack.getStreamrNode()
|
|
93
|
+
waitForEvent3(proxyNode.stack.getStreamrNode() as any, 'newMessage'),
|
|
81
94
|
proxiedNode.broadcast(createMessage(regularStreamPart1))
|
|
82
95
|
])
|
|
83
96
|
|
|
84
97
|
expect(proxiedNode.stack.getLayer0Node().hasJoined()).toBe(true)
|
|
85
98
|
|
|
86
99
|
await Promise.all([
|
|
87
|
-
waitForEvent3(proxyNode.stack.getStreamrNode()
|
|
100
|
+
waitForEvent3(proxyNode.stack.getStreamrNode() as any, 'newMessage'),
|
|
88
101
|
proxiedNode.broadcast(createMessage(proxiedStreamPart))
|
|
89
102
|
])
|
|
90
103
|
|
|
@@ -97,13 +110,13 @@ describe('proxy and full node', () => {
|
|
|
97
110
|
expect(proxiedNode.stack.getLayer0Node().hasJoined()).toBe(false)
|
|
98
111
|
|
|
99
112
|
await Promise.all([
|
|
100
|
-
waitForEvent3(proxyNode.stack.getStreamrNode()
|
|
113
|
+
waitForEvent3(proxyNode.stack.getStreamrNode() as any, 'newMessage', 5000,
|
|
101
114
|
(streamMessage: InternalStreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart1)),
|
|
102
|
-
waitForEvent3(proxyNode.stack.getStreamrNode()
|
|
115
|
+
waitForEvent3(proxyNode.stack.getStreamrNode() as any, 'newMessage', 5000,
|
|
103
116
|
(streamMessage: InternalStreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart2)),
|
|
104
|
-
waitForEvent3(proxyNode.stack.getStreamrNode()
|
|
117
|
+
waitForEvent3(proxyNode.stack.getStreamrNode() as any, 'newMessage', 5000,
|
|
105
118
|
(streamMessage: InternalStreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart3)),
|
|
106
|
-
waitForEvent3(proxyNode.stack.getStreamrNode()
|
|
119
|
+
waitForEvent3(proxyNode.stack.getStreamrNode() as any, 'newMessage', 5000,
|
|
107
120
|
(streamMessage: InternalStreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart4)),
|
|
108
121
|
proxiedNode.broadcast(createMessage(regularStreamPart1)),
|
|
109
122
|
proxiedNode.broadcast(createMessage(regularStreamPart2)),
|
|
@@ -114,7 +127,7 @@ describe('proxy and full node', () => {
|
|
|
114
127
|
expect(proxiedNode.stack.getLayer0Node().hasJoined()).toBe(true)
|
|
115
128
|
|
|
116
129
|
await Promise.all([
|
|
117
|
-
waitForEvent3(proxyNode.stack.getStreamrNode()
|
|
130
|
+
waitForEvent3(proxyNode.stack.getStreamrNode() as any, 'newMessage'),
|
|
118
131
|
proxiedNode.broadcast(createMessage(proxiedStreamPart))
|
|
119
132
|
])
|
|
120
133
|
|
|
@@ -1,12 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ContentType,
|
|
3
|
+
EncryptionType,
|
|
4
|
+
MessageID,
|
|
5
|
+
MessageRef,
|
|
6
|
+
SignatureType,
|
|
7
|
+
StreamMessage,
|
|
8
|
+
StreamMessageType,
|
|
9
|
+
StreamPartIDUtils
|
|
10
|
+
} from '@streamr/protocol'
|
|
2
11
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
3
12
|
import { hexToBinary, utf8ToBinary, wait, waitForCondition, waitForEvent3 } from '@streamr/utils'
|
|
4
13
|
import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
|
|
5
|
-
import { NodeID } from '../../src/identifiers'
|
|
6
14
|
import { RandomGraphNode } from '../../src/logic/RandomGraphNode'
|
|
7
15
|
import { ProxyClient } from '../../src/logic/proxy/ProxyClient'
|
|
8
16
|
import { ProxyDirection } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
9
17
|
import { createMockPeerDescriptor } from '../utils/utils'
|
|
18
|
+
import { DhtAddress } from '@streamr/dht'
|
|
10
19
|
|
|
11
20
|
const PROXIED_NODE_USER_ID = randomEthereumAddress()
|
|
12
21
|
const STREAM_PART_ID = StreamPartIDUtils.parse('proxy-test#0')
|
|
@@ -24,7 +33,10 @@ const MESSAGE = new StreamMessage({
|
|
|
24
33
|
hello: 'world'
|
|
25
34
|
})),
|
|
26
35
|
messageType: StreamMessageType.MESSAGE,
|
|
27
|
-
|
|
36
|
+
encryptionType: EncryptionType.NONE,
|
|
37
|
+
signatureType: SignatureType.SECP256K1,
|
|
38
|
+
signature: hexToBinary('0x1234'),
|
|
39
|
+
contentType: ContentType.JSON
|
|
28
40
|
})
|
|
29
41
|
|
|
30
42
|
describe('Proxy connections', () => {
|
|
@@ -34,14 +46,14 @@ describe('Proxy connections', () => {
|
|
|
34
46
|
let proxiedNode: NetworkNode
|
|
35
47
|
|
|
36
48
|
const hasConnectionFromProxy = (proxyNode: NetworkNode): boolean => {
|
|
37
|
-
const delivery = proxyNode.stack.getStreamrNode()
|
|
49
|
+
const delivery = proxyNode.stack.getStreamrNode().getStreamPartDelivery(STREAM_PART_ID)
|
|
38
50
|
return (delivery !== undefined)
|
|
39
51
|
? ((delivery as { node: RandomGraphNode }).node).hasProxyConnection(proxiedNode.getNodeId())
|
|
40
52
|
: false
|
|
41
53
|
}
|
|
42
54
|
|
|
43
|
-
const hasConnectionToProxy = (proxyNodeId:
|
|
44
|
-
const client = (proxiedNode.stack.getStreamrNode()
|
|
55
|
+
const hasConnectionToProxy = (proxyNodeId: DhtAddress, direction: ProxyDirection): boolean => {
|
|
56
|
+
const client = (proxiedNode.stack.getStreamrNode().getStreamPartDelivery(STREAM_PART_ID) as { client: ProxyClient }).client
|
|
45
57
|
return client.hasConnection(proxyNodeId, direction)
|
|
46
58
|
}
|
|
47
59
|
|
|
@@ -65,7 +77,7 @@ describe('Proxy connections', () => {
|
|
|
65
77
|
})
|
|
66
78
|
await proxyNode1.start()
|
|
67
79
|
proxyNode1.setStreamPartEntryPoints(STREAM_PART_ID, [proxyNodeDescriptor1])
|
|
68
|
-
proxyNode1.stack.getStreamrNode()
|
|
80
|
+
proxyNode1.stack.getStreamrNode().joinStreamPart(STREAM_PART_ID)
|
|
69
81
|
proxyNode2 = createNetworkNode({
|
|
70
82
|
layer0: {
|
|
71
83
|
entryPoints: [proxyNodeDescriptor1],
|
|
@@ -78,7 +90,7 @@ describe('Proxy connections', () => {
|
|
|
78
90
|
})
|
|
79
91
|
await proxyNode2.start()
|
|
80
92
|
proxyNode2.setStreamPartEntryPoints(STREAM_PART_ID, [proxyNodeDescriptor1])
|
|
81
|
-
proxyNode2.stack.getStreamrNode()
|
|
93
|
+
proxyNode2.stack.getStreamrNode().joinStreamPart(STREAM_PART_ID)
|
|
82
94
|
proxiedNode = createNetworkNode({
|
|
83
95
|
layer0: {
|
|
84
96
|
entryPoints: [proxyNode1.getPeerDescriptor()],
|
|
@@ -97,7 +109,7 @@ describe('Proxy connections', () => {
|
|
|
97
109
|
it('happy path publishing', async () => {
|
|
98
110
|
await proxiedNode.setProxies(STREAM_PART_ID, [proxyNode1.getPeerDescriptor()], ProxyDirection.PUBLISH, PROXIED_NODE_USER_ID, 1)
|
|
99
111
|
await Promise.all([
|
|
100
|
-
waitForEvent3(proxyNode1.stack.getStreamrNode()
|
|
112
|
+
waitForEvent3(proxyNode1.stack.getStreamrNode() as any, 'newMessage'),
|
|
101
113
|
proxiedNode.broadcast(MESSAGE)
|
|
102
114
|
])
|
|
103
115
|
})
|
|
@@ -105,7 +117,7 @@ describe('Proxy connections', () => {
|
|
|
105
117
|
it('happy path subscribing', async () => {
|
|
106
118
|
await proxiedNode.setProxies(STREAM_PART_ID, [proxyNode1.getPeerDescriptor()], ProxyDirection.SUBSCRIBE, PROXIED_NODE_USER_ID, 1)
|
|
107
119
|
await Promise.all([
|
|
108
|
-
waitForEvent3(proxiedNode.stack.getStreamrNode()
|
|
120
|
+
waitForEvent3(proxiedNode.stack.getStreamrNode() as any, 'newMessage'),
|
|
109
121
|
proxyNode1.broadcast(MESSAGE)
|
|
110
122
|
])
|
|
111
123
|
})
|
|
@@ -184,7 +196,7 @@ describe('Proxy connections', () => {
|
|
|
184
196
|
await proxyNode1.leave(STREAM_PART_ID)
|
|
185
197
|
await waitForCondition(() => hasConnectionToProxy(proxyNode1.getNodeId(), ProxyDirection.SUBSCRIBE))
|
|
186
198
|
expect(hasConnectionFromProxy(proxyNode1)).toBe(false)
|
|
187
|
-
proxyNode1.stack.getStreamrNode()
|
|
199
|
+
proxyNode1.stack.getStreamrNode().joinStreamPart(STREAM_PART_ID)
|
|
188
200
|
await waitForCondition(() => hasConnectionToProxy(proxyNode1.getNodeId(), ProxyDirection.SUBSCRIBE), 25000)
|
|
189
201
|
// TODO why wait is needed?
|
|
190
202
|
await wait(100)
|
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
|
+
ContentType,
|
|
2
3
|
EncryptionType,
|
|
3
|
-
GroupKeyRequest,
|
|
4
|
-
GroupKeyResponse,
|
|
5
4
|
MessageID,
|
|
5
|
+
GroupKeyRequest as OldGroupKeyRequest,
|
|
6
|
+
GroupKeyResponse as OldGroupKeyResponse,
|
|
7
|
+
SignatureType,
|
|
6
8
|
StreamMessage,
|
|
7
9
|
StreamMessageType,
|
|
8
10
|
StreamPartIDUtils
|
|
9
11
|
} from '@streamr/protocol'
|
|
10
|
-
import { hexToBinary, toEthereumAddress,
|
|
12
|
+
import { hexToBinary, toEthereumAddress, waitForEvent3 } from '@streamr/utils'
|
|
11
13
|
import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
|
|
14
|
+
import {
|
|
15
|
+
convertGroupKeyRequestToBytes,
|
|
16
|
+
convertGroupKeyResponseToBytes
|
|
17
|
+
} from '../../src/logic/protocol-integration/stream-message/oldStreamMessageBinaryUtils'
|
|
12
18
|
import { ProxyDirection } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
13
19
|
import { createMockPeerDescriptor } from '../utils/utils'
|
|
14
20
|
|
|
@@ -41,10 +47,10 @@ describe('proxy group key exchange', () => {
|
|
|
41
47
|
})
|
|
42
48
|
await proxyNode.start()
|
|
43
49
|
proxyNode.setStreamPartEntryPoints(STREAM_PART_ID, [proxyNodeDescriptor])
|
|
44
|
-
proxyNode.stack.getStreamrNode()
|
|
50
|
+
proxyNode.stack.getStreamrNode().joinStreamPart(STREAM_PART_ID)
|
|
45
51
|
publisher = createNetworkNode({
|
|
46
52
|
layer0: {
|
|
47
|
-
entryPoints: [
|
|
53
|
+
entryPoints: [proxyNodeDescriptor],
|
|
48
54
|
peerDescriptor: publisherDescriptor,
|
|
49
55
|
}
|
|
50
56
|
})
|
|
@@ -52,7 +58,7 @@ describe('proxy group key exchange', () => {
|
|
|
52
58
|
|
|
53
59
|
subscriber = createNetworkNode({
|
|
54
60
|
layer0: {
|
|
55
|
-
entryPoints: [
|
|
61
|
+
entryPoints: [proxyNodeDescriptor],
|
|
56
62
|
peerDescriptor: subscriberDescriptor,
|
|
57
63
|
}
|
|
58
64
|
})
|
|
@@ -69,14 +75,14 @@ describe('proxy group key exchange', () => {
|
|
|
69
75
|
await publisher.setProxies(STREAM_PART_ID, [proxyNodeDescriptor], ProxyDirection.PUBLISH, publisherUserId)
|
|
70
76
|
await subscriber.setProxies(STREAM_PART_ID, [proxyNodeDescriptor], ProxyDirection.SUBSCRIBE, subscriberUserId)
|
|
71
77
|
|
|
72
|
-
const
|
|
78
|
+
const groupKeyRequest = new OldGroupKeyRequest({
|
|
73
79
|
recipient: publisherUserId,
|
|
74
80
|
requestId: 'requestId',
|
|
75
81
|
rsaPublicKey: 'mockKey',
|
|
76
82
|
groupKeyIds: [
|
|
77
83
|
'mock'
|
|
78
84
|
],
|
|
79
|
-
})
|
|
85
|
+
})
|
|
80
86
|
const request = new StreamMessage({
|
|
81
87
|
messageId: new MessageID(
|
|
82
88
|
StreamPartIDUtils.getStreamID(STREAM_PART_ID),
|
|
@@ -87,13 +93,15 @@ describe('proxy group key exchange', () => {
|
|
|
87
93
|
'0'
|
|
88
94
|
),
|
|
89
95
|
messageType: StreamMessageType.GROUP_KEY_REQUEST,
|
|
96
|
+
contentType: ContentType.BINARY,
|
|
90
97
|
encryptionType: EncryptionType.NONE,
|
|
91
|
-
content:
|
|
98
|
+
content: convertGroupKeyRequestToBytes(groupKeyRequest),
|
|
99
|
+
signatureType: SignatureType.SECP256K1,
|
|
92
100
|
signature: hexToBinary('1234')
|
|
93
101
|
})
|
|
94
102
|
|
|
95
103
|
await Promise.all([
|
|
96
|
-
waitForEvent3(publisher.stack.getStreamrNode()
|
|
104
|
+
waitForEvent3(publisher.stack.getStreamrNode() as any, 'newMessage'),
|
|
97
105
|
subscriber.broadcast(request)
|
|
98
106
|
])
|
|
99
107
|
})
|
|
@@ -102,11 +110,11 @@ describe('proxy group key exchange', () => {
|
|
|
102
110
|
await publisher.setProxies(STREAM_PART_ID, [proxyNodeDescriptor], ProxyDirection.PUBLISH, publisherUserId)
|
|
103
111
|
await subscriber.setProxies(STREAM_PART_ID, [proxyNodeDescriptor], ProxyDirection.SUBSCRIBE, subscriberUserId)
|
|
104
112
|
|
|
105
|
-
const
|
|
113
|
+
const groupKeyResponse = new OldGroupKeyResponse({
|
|
106
114
|
recipient: publisherUserId,
|
|
107
115
|
requestId: 'requestId',
|
|
108
116
|
encryptedGroupKeys: []
|
|
109
|
-
})
|
|
117
|
+
})
|
|
110
118
|
const response = new StreamMessage({
|
|
111
119
|
messageId: new MessageID(
|
|
112
120
|
StreamPartIDUtils.getStreamID(STREAM_PART_ID),
|
|
@@ -117,13 +125,15 @@ describe('proxy group key exchange', () => {
|
|
|
117
125
|
'0'
|
|
118
126
|
),
|
|
119
127
|
messageType: StreamMessageType.GROUP_KEY_RESPONSE,
|
|
120
|
-
|
|
121
|
-
|
|
128
|
+
contentType: ContentType.BINARY,
|
|
129
|
+
encryptionType: EncryptionType.NONE,
|
|
130
|
+
content: convertGroupKeyResponseToBytes(groupKeyResponse),
|
|
131
|
+
signatureType: SignatureType.SECP256K1,
|
|
122
132
|
signature: hexToBinary('1234')
|
|
123
133
|
})
|
|
124
134
|
|
|
125
135
|
await Promise.all([
|
|
126
|
-
waitForEvent3(subscriber.stack.getStreamrNode()
|
|
136
|
+
waitForEvent3(subscriber.stack.getStreamrNode() as any, 'newMessage'),
|
|
127
137
|
publisher.broadcast(response)
|
|
128
138
|
])
|
|
129
139
|
})
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ConnectionManager, DhtNode, PeerDescriptor
|
|
1
|
+
import { ConnectionManager, DhtNode, PeerDescriptor } from '@streamr/dht'
|
|
2
2
|
import { RandomGraphNode } from '../../src/logic/RandomGraphNode'
|
|
3
3
|
import { waitForCondition } from '@streamr/utils'
|
|
4
|
-
import { createStreamMessage } from '../utils/utils'
|
|
4
|
+
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
5
5
|
import { createRandomGraphNode } from '../../src/logic/createRandomGraphNode'
|
|
6
6
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
7
7
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
@@ -10,11 +10,9 @@ import { Layer1Node } from '../../src/logic/Layer1Node'
|
|
|
10
10
|
|
|
11
11
|
describe('random graph with real connections', () => {
|
|
12
12
|
|
|
13
|
-
const epPeerDescriptor: PeerDescriptor = {
|
|
14
|
-
kademliaId: Uint8Array.from([1, 2, 3]),
|
|
15
|
-
type: NodeType.NODEJS,
|
|
13
|
+
const epPeerDescriptor: PeerDescriptor = createMockPeerDescriptor({
|
|
16
14
|
websocket: { host: '127.0.0.1', port: 12221, tls: false }
|
|
17
|
-
}
|
|
15
|
+
})
|
|
18
16
|
|
|
19
17
|
const streamPartId = StreamPartIDUtils.parse('random-graph#0')
|
|
20
18
|
// Currently the nodes here are practically layer0 nodes acting as layer1 nodes, for the purpose of this test
|
|
@@ -50,7 +48,8 @@ describe('random graph with real connections', () => {
|
|
|
50
48
|
layer1Node: epDhtNode,
|
|
51
49
|
transport: epDhtNode.getTransport(),
|
|
52
50
|
connectionLocker: epDhtNode.getTransport() as ConnectionManager,
|
|
53
|
-
localPeerDescriptor: epPeerDescriptor
|
|
51
|
+
localPeerDescriptor: epPeerDescriptor,
|
|
52
|
+
isLocalNodeEntryPoint: () => false
|
|
54
53
|
}
|
|
55
54
|
)
|
|
56
55
|
randomGraphNode2 = createRandomGraphNode({
|
|
@@ -58,28 +57,32 @@ describe('random graph with real connections', () => {
|
|
|
58
57
|
layer1Node: dhtNode1,
|
|
59
58
|
transport: dhtNode1.getTransport(),
|
|
60
59
|
connectionLocker: dhtNode1.getTransport() as ConnectionManager,
|
|
61
|
-
localPeerDescriptor: dhtNode1.getLocalPeerDescriptor()
|
|
60
|
+
localPeerDescriptor: dhtNode1.getLocalPeerDescriptor(),
|
|
61
|
+
isLocalNodeEntryPoint: () => false
|
|
62
62
|
})
|
|
63
63
|
randomGraphNode3 = createRandomGraphNode({
|
|
64
64
|
streamPartId,
|
|
65
65
|
layer1Node: dhtNode2,
|
|
66
66
|
transport: dhtNode2.getTransport(),
|
|
67
67
|
connectionLocker: dhtNode2.getTransport() as ConnectionManager,
|
|
68
|
-
localPeerDescriptor: dhtNode2.getLocalPeerDescriptor()
|
|
68
|
+
localPeerDescriptor: dhtNode2.getLocalPeerDescriptor(),
|
|
69
|
+
isLocalNodeEntryPoint: () => false
|
|
69
70
|
})
|
|
70
71
|
randomGraphNode4 = createRandomGraphNode({
|
|
71
72
|
streamPartId,
|
|
72
73
|
layer1Node: dhtNode3,
|
|
73
74
|
transport: dhtNode3.getTransport(),
|
|
74
75
|
connectionLocker: dhtNode3.getTransport() as ConnectionManager,
|
|
75
|
-
localPeerDescriptor: dhtNode3.getLocalPeerDescriptor()
|
|
76
|
+
localPeerDescriptor: dhtNode3.getLocalPeerDescriptor(),
|
|
77
|
+
isLocalNodeEntryPoint: () => false
|
|
76
78
|
})
|
|
77
79
|
randomGraphNode5 = createRandomGraphNode({
|
|
78
80
|
streamPartId,
|
|
79
81
|
layer1Node: dhtNode4,
|
|
80
82
|
transport: dhtNode4.getTransport(),
|
|
81
83
|
connectionLocker: dhtNode4.getTransport() as ConnectionManager,
|
|
82
|
-
localPeerDescriptor: dhtNode4.getLocalPeerDescriptor()
|
|
84
|
+
localPeerDescriptor: dhtNode4.getLocalPeerDescriptor(),
|
|
85
|
+
isLocalNodeEntryPoint: () => false
|
|
83
86
|
})
|
|
84
87
|
await epDhtNode.joinDht([epPeerDescriptor])
|
|
85
88
|
await Promise.all([
|
|
@@ -119,32 +122,32 @@ describe('random graph with real connections', () => {
|
|
|
119
122
|
|
|
120
123
|
it('can fully connected topologies ', async () => {
|
|
121
124
|
await waitForCondition(() => {
|
|
122
|
-
return randomGraphNode1.
|
|
123
|
-
&& randomGraphNode2.
|
|
124
|
-
&& randomGraphNode3.
|
|
125
|
-
&& randomGraphNode4.
|
|
126
|
-
&& randomGraphNode5.
|
|
125
|
+
return randomGraphNode1.getNeighbors().length >= 3
|
|
126
|
+
&& randomGraphNode2.getNeighbors().length >= 3
|
|
127
|
+
&& randomGraphNode3.getNeighbors().length >= 3
|
|
128
|
+
&& randomGraphNode4.getNeighbors().length >= 3
|
|
129
|
+
&& randomGraphNode5.getNeighbors().length >= 3
|
|
127
130
|
}, 10000)
|
|
128
|
-
expect(randomGraphNode1.
|
|
129
|
-
expect(randomGraphNode2.
|
|
130
|
-
expect(randomGraphNode3.
|
|
131
|
-
expect(randomGraphNode4.
|
|
132
|
-
expect(randomGraphNode5.
|
|
131
|
+
expect(randomGraphNode1.getNeighbors().length).toBeGreaterThanOrEqual(3)
|
|
132
|
+
expect(randomGraphNode2.getNeighbors().length).toBeGreaterThanOrEqual(3)
|
|
133
|
+
expect(randomGraphNode3.getNeighbors().length).toBeGreaterThanOrEqual(3)
|
|
134
|
+
expect(randomGraphNode4.getNeighbors().length).toBeGreaterThanOrEqual(3)
|
|
135
|
+
expect(randomGraphNode5.getNeighbors().length).toBeGreaterThanOrEqual(3)
|
|
133
136
|
})
|
|
134
137
|
|
|
135
138
|
it('can propagate messages', async () => {
|
|
136
|
-
let
|
|
137
|
-
randomGraphNode2.on('message', () =>
|
|
138
|
-
randomGraphNode3.on('message', () =>
|
|
139
|
-
randomGraphNode4.on('message', () =>
|
|
140
|
-
randomGraphNode5.on('message', () =>
|
|
139
|
+
let receivedMessageCount = 0
|
|
140
|
+
randomGraphNode2.on('message', () => receivedMessageCount += 1)
|
|
141
|
+
randomGraphNode3.on('message', () => receivedMessageCount += 1)
|
|
142
|
+
randomGraphNode4.on('message', () => receivedMessageCount += 1)
|
|
143
|
+
randomGraphNode5.on('message', () => receivedMessageCount += 1)
|
|
141
144
|
|
|
142
145
|
await waitForCondition(() => {
|
|
143
|
-
return randomGraphNode1.
|
|
144
|
-
&& randomGraphNode2.
|
|
145
|
-
&& randomGraphNode3.
|
|
146
|
-
&& randomGraphNode4.
|
|
147
|
-
&& randomGraphNode5.
|
|
146
|
+
return randomGraphNode1.getNeighbors().length >= 3
|
|
147
|
+
&& randomGraphNode2.getNeighbors().length >= 3
|
|
148
|
+
&& randomGraphNode3.getNeighbors().length >= 3
|
|
149
|
+
&& randomGraphNode4.getNeighbors().length >= 3
|
|
150
|
+
&& randomGraphNode5.getNeighbors().length >= 3
|
|
148
151
|
}, 10000)
|
|
149
152
|
|
|
150
153
|
const msg = createStreamMessage(
|
|
@@ -153,6 +156,6 @@ describe('random graph with real connections', () => {
|
|
|
153
156
|
randomEthereumAddress()
|
|
154
157
|
)
|
|
155
158
|
randomGraphNode1.broadcast(msg)
|
|
156
|
-
await waitForCondition(() =>
|
|
159
|
+
await waitForCondition(() => receivedMessageCount >= 4)
|
|
157
160
|
})
|
|
158
161
|
})
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { getRandomRegion } from '@streamr/dht'
|
|
1
|
+
import { getNodeIdFromPeerDescriptor, getRandomRegion } from '@streamr/dht'
|
|
2
2
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
3
3
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
4
4
|
import { waitForCondition } from '@streamr/utils'
|
|
5
5
|
import { range } from 'lodash'
|
|
6
6
|
import { NetworkStack } from '../../src/NetworkStack'
|
|
7
|
-
import { getNodeIdFromPeerDescriptor } from '../../src/identifiers'
|
|
8
7
|
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
9
8
|
|
|
10
9
|
describe('Full node network with WebRTC connections', () => {
|
|
@@ -34,8 +33,8 @@ describe('Full node network with WebRTC connections', () => {
|
|
|
34
33
|
}
|
|
35
34
|
})
|
|
36
35
|
await entryPoint.start()
|
|
37
|
-
entryPoint.getStreamrNode()
|
|
38
|
-
entryPoint.getStreamrNode()
|
|
36
|
+
entryPoint.getStreamrNode().setStreamPartEntryPoints(streamPartId, [epPeerDescriptor])
|
|
37
|
+
entryPoint.getStreamrNode().joinStreamPart(streamPartId)
|
|
39
38
|
|
|
40
39
|
await Promise.all(range(NUM_OF_NODES).map(async () => {
|
|
41
40
|
const peerDescriptor = createMockPeerDescriptor()
|
|
@@ -63,16 +62,16 @@ describe('Full node network with WebRTC connections', () => {
|
|
|
63
62
|
it('happy path', async () => {
|
|
64
63
|
await Promise.all(nodes.map((node) =>
|
|
65
64
|
waitForCondition(() => {
|
|
66
|
-
return node.getStreamrNode()
|
|
65
|
+
return node.getStreamrNode().getNeighbors(streamPartId).length >= 3
|
|
67
66
|
}
|
|
68
|
-
,
|
|
67
|
+
, 30000)
|
|
69
68
|
))
|
|
70
|
-
let
|
|
69
|
+
let receivedMessageCount = 0
|
|
71
70
|
const successIds: string[] = []
|
|
72
71
|
nodes.forEach((node) => {
|
|
73
|
-
node.getStreamrNode()
|
|
74
|
-
successIds.push(getNodeIdFromPeerDescriptor(node.getStreamrNode()
|
|
75
|
-
|
|
72
|
+
node.getStreamrNode().on('newMessage', () => {
|
|
73
|
+
successIds.push(getNodeIdFromPeerDescriptor(node.getStreamrNode().getPeerDescriptor()))
|
|
74
|
+
receivedMessageCount += 1
|
|
76
75
|
})
|
|
77
76
|
})
|
|
78
77
|
const msg = createStreamMessage(
|
|
@@ -80,8 +79,8 @@ describe('Full node network with WebRTC connections', () => {
|
|
|
80
79
|
streamPartId,
|
|
81
80
|
randomEthereumAddress()
|
|
82
81
|
)
|
|
83
|
-
entryPoint.getStreamrNode()
|
|
84
|
-
await waitForCondition(() =>
|
|
82
|
+
entryPoint.getStreamrNode().broadcast(msg)
|
|
83
|
+
await waitForCondition(() => receivedMessageCount === NUM_OF_NODES)
|
|
85
84
|
}, 120000)
|
|
86
85
|
|
|
87
86
|
})
|