@streamr/trackerless-network 100.0.0-pretestnet.6 → 100.0.0-rc.1
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 +12 -12
- 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 +19 -16
- package/dist/src/logic/NodeList.js.map +1 -1
- package/dist/src/logic/RandomGraphNode.d.ts +26 -22
- package/dist/src/logic/RandomGraphNode.js +85 -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 +12 -12
- 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 +26 -27
- package/src/logic/RandomGraphNode.ts +158 -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
|
@@ -3,12 +3,12 @@ import { randomEthereumAddress } from '@streamr/test-utils'
|
|
|
3
3
|
import { waitForCondition } from '@streamr/utils'
|
|
4
4
|
import { range } from 'lodash'
|
|
5
5
|
import { NetworkStack } from '../../src/NetworkStack'
|
|
6
|
-
import { getNodeIdFromPeerDescriptor } from '../../src/identifiers'
|
|
7
6
|
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
7
|
+
import { getNodeIdFromPeerDescriptor } from '@streamr/dht'
|
|
8
8
|
|
|
9
9
|
describe('Full node network with WebSocket connections only', () => {
|
|
10
10
|
|
|
11
|
-
const NUM_OF_NODES =
|
|
11
|
+
const NUM_OF_NODES = 32
|
|
12
12
|
const epPeerDescriptor = createMockPeerDescriptor({
|
|
13
13
|
websocket: { host: '127.0.0.1', port: 15555, tls: false }
|
|
14
14
|
})
|
|
@@ -30,8 +30,8 @@ describe('Full node network with WebSocket connections only', () => {
|
|
|
30
30
|
}
|
|
31
31
|
})
|
|
32
32
|
await entryPoint.start()
|
|
33
|
-
entryPoint.getStreamrNode()
|
|
34
|
-
entryPoint.getStreamrNode()
|
|
33
|
+
entryPoint.getStreamrNode().setStreamPartEntryPoints(streamPartId, [epPeerDescriptor])
|
|
34
|
+
entryPoint.getStreamrNode().joinStreamPart(streamPartId)
|
|
35
35
|
|
|
36
36
|
await Promise.all(range(NUM_OF_NODES).map(async (i) => {
|
|
37
37
|
const node = new NetworkStack({
|
|
@@ -60,16 +60,16 @@ describe('Full node network with WebSocket connections only', () => {
|
|
|
60
60
|
it('happy path', async () => {
|
|
61
61
|
await Promise.all(nodes.map((node) =>
|
|
62
62
|
waitForCondition(() => {
|
|
63
|
-
return node.getStreamrNode()
|
|
63
|
+
return node.getStreamrNode().getNeighbors(streamPartId).length >= 4
|
|
64
64
|
}
|
|
65
|
-
,
|
|
65
|
+
, 30000)
|
|
66
66
|
))
|
|
67
|
-
let
|
|
67
|
+
let receivedMessageCount = 0
|
|
68
68
|
const successIds: string[] = []
|
|
69
69
|
nodes.forEach((node) => {
|
|
70
|
-
node.getStreamrNode()
|
|
71
|
-
successIds.push(getNodeIdFromPeerDescriptor(node.getStreamrNode()
|
|
72
|
-
|
|
70
|
+
node.getStreamrNode().on('newMessage', () => {
|
|
71
|
+
successIds.push(getNodeIdFromPeerDescriptor(node.getStreamrNode().getPeerDescriptor()))
|
|
72
|
+
receivedMessageCount += 1
|
|
73
73
|
})
|
|
74
74
|
})
|
|
75
75
|
|
|
@@ -78,8 +78,8 @@ describe('Full node network with WebSocket connections only', () => {
|
|
|
78
78
|
streamPartId,
|
|
79
79
|
randomEthereumAddress()
|
|
80
80
|
)
|
|
81
|
-
entryPoint.getStreamrNode()
|
|
82
|
-
await waitForCondition(() =>
|
|
81
|
+
entryPoint.getStreamrNode().broadcast(msg)
|
|
82
|
+
await waitForCondition(() => receivedMessageCount === NUM_OF_NODES)
|
|
83
83
|
}, 220000)
|
|
84
84
|
|
|
85
85
|
})
|
|
@@ -13,24 +13,21 @@ import {
|
|
|
13
13
|
} from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
14
14
|
import { Empty } from '../../src/proto/google/protobuf/empty'
|
|
15
15
|
import { waitForCondition } from '@streamr/utils'
|
|
16
|
-
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
17
16
|
import { createStreamMessage } from '../utils/utils'
|
|
18
17
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
19
18
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
20
19
|
|
|
21
|
-
const STREAM_PART_ID = StreamPartIDUtils.parse('test-stream#0')
|
|
22
|
-
|
|
23
20
|
describe('DeliveryRpcRemote', () => {
|
|
24
21
|
let mockServerRpc: ListeningRpcCommunicator
|
|
25
22
|
let clientRpc: ListeningRpcCommunicator
|
|
26
23
|
let rpcRemote: DeliveryRpcRemote
|
|
27
24
|
|
|
28
25
|
const clientNode: PeerDescriptor = {
|
|
29
|
-
|
|
26
|
+
nodeId: new Uint8Array([1, 1, 1]),
|
|
30
27
|
type: NodeType.NODEJS
|
|
31
28
|
}
|
|
32
29
|
const serverNode: PeerDescriptor = {
|
|
33
|
-
|
|
30
|
+
nodeId: new Uint8Array([2, 2, 2]),
|
|
34
31
|
type: NodeType.NODEJS
|
|
35
32
|
}
|
|
36
33
|
|
|
@@ -72,8 +69,8 @@ describe('DeliveryRpcRemote', () => {
|
|
|
72
69
|
rpcRemote = new DeliveryRpcRemote(
|
|
73
70
|
clientNode,
|
|
74
71
|
serverNode,
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
clientRpc,
|
|
73
|
+
DeliveryRpcClient
|
|
77
74
|
)
|
|
78
75
|
})
|
|
79
76
|
|
|
@@ -88,7 +85,7 @@ describe('DeliveryRpcRemote', () => {
|
|
|
88
85
|
it('sendStreamMessage', async () => {
|
|
89
86
|
const msg = createStreamMessage(
|
|
90
87
|
JSON.stringify({ hello: 'WORLD' }),
|
|
91
|
-
|
|
88
|
+
StreamPartIDUtils.parse('test-stream#0'),
|
|
92
89
|
randomEthereumAddress()
|
|
93
90
|
)
|
|
94
91
|
|
|
@@ -97,7 +94,7 @@ describe('DeliveryRpcRemote', () => {
|
|
|
97
94
|
})
|
|
98
95
|
|
|
99
96
|
it('leaveNotice', async () => {
|
|
100
|
-
rpcRemote.leaveStreamPartNotice()
|
|
97
|
+
rpcRemote.leaveStreamPartNotice(StreamPartIDUtils.parse('test#0'), false)
|
|
101
98
|
await waitForCondition(() => recvCounter === 1)
|
|
102
99
|
})
|
|
103
100
|
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
Simulator,
|
|
10
10
|
SimulatorTransport
|
|
11
11
|
} from '@streamr/dht'
|
|
12
|
-
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
13
12
|
import {
|
|
14
13
|
HandshakeRpcClient,
|
|
15
14
|
} from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
16
15
|
import { HandshakeRpcRemote } from '../../src/logic/neighbor-discovery/HandshakeRpcRemote'
|
|
16
|
+
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
17
17
|
|
|
18
18
|
describe('HandshakeRpcRemote', () => {
|
|
19
19
|
let mockServerRpc: ListeningRpcCommunicator
|
|
@@ -21,11 +21,11 @@ describe('HandshakeRpcRemote', () => {
|
|
|
21
21
|
let rpcRemote: HandshakeRpcRemote
|
|
22
22
|
|
|
23
23
|
const clientNode: PeerDescriptor = {
|
|
24
|
-
|
|
24
|
+
nodeId: new Uint8Array([1, 1, 1]),
|
|
25
25
|
type: NodeType.NODEJS
|
|
26
26
|
}
|
|
27
27
|
const serverNode: PeerDescriptor = {
|
|
28
|
-
|
|
28
|
+
nodeId: new Uint8Array([2, 2, 2]),
|
|
29
29
|
type: NodeType.NODEJS
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -34,7 +34,6 @@ describe('HandshakeRpcRemote', () => {
|
|
|
34
34
|
let mockConnectionManager2: SimulatorTransport
|
|
35
35
|
|
|
36
36
|
beforeEach(async () => {
|
|
37
|
-
Simulator.useFakeTimers()
|
|
38
37
|
simulator = new Simulator()
|
|
39
38
|
mockConnectionManager1 = new SimulatorTransport(serverNode, simulator)
|
|
40
39
|
await mockConnectionManager1.start()
|
|
@@ -60,8 +59,8 @@ describe('HandshakeRpcRemote', () => {
|
|
|
60
59
|
rpcRemote = new HandshakeRpcRemote(
|
|
61
60
|
clientNode,
|
|
62
61
|
serverNode,
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
clientRpc,
|
|
63
|
+
HandshakeRpcClient
|
|
65
64
|
)
|
|
66
65
|
})
|
|
67
66
|
|
|
@@ -71,11 +70,10 @@ describe('HandshakeRpcRemote', () => {
|
|
|
71
70
|
await mockConnectionManager1.stop()
|
|
72
71
|
await mockConnectionManager2.stop()
|
|
73
72
|
simulator.stop()
|
|
74
|
-
Simulator.useFakeTimers(false)
|
|
75
73
|
})
|
|
76
74
|
|
|
77
75
|
it('handshake', async () => {
|
|
78
|
-
const result = await rpcRemote.handshake([])
|
|
76
|
+
const result = await rpcRemote.handshake(StreamPartIDUtils.parse('test#0'), [])
|
|
79
77
|
expect(result.accepted).toEqual(true)
|
|
80
78
|
})
|
|
81
79
|
})
|
|
@@ -4,38 +4,38 @@ import {
|
|
|
4
4
|
PeerDescriptor,
|
|
5
5
|
ListeningRpcCommunicator,
|
|
6
6
|
Simulator,
|
|
7
|
-
SimulatorTransport
|
|
7
|
+
SimulatorTransport,
|
|
8
|
+
getNodeIdFromPeerDescriptor
|
|
8
9
|
} from '@streamr/dht'
|
|
9
|
-
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
10
10
|
import {
|
|
11
11
|
HandshakeRpcClient
|
|
12
12
|
} from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
13
13
|
import { NodeList } from '../../src/logic/NodeList'
|
|
14
|
-
import { mockConnectionLocker } from '../utils/utils'
|
|
15
14
|
import { StreamPartHandshakeRequest, StreamPartHandshakeResponse } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
16
15
|
import { HandshakeRpcRemote } from '../../src/logic/neighbor-discovery/HandshakeRpcRemote'
|
|
17
|
-
import { getNodeIdFromPeerDescriptor } from '../../src/identifiers'
|
|
18
16
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
19
17
|
|
|
20
18
|
describe('Handshakes', () => {
|
|
21
19
|
|
|
22
20
|
const peerDescriptor1: PeerDescriptor = {
|
|
23
|
-
|
|
21
|
+
nodeId: new Uint8Array([1, 1, 1]),
|
|
24
22
|
type: NodeType.NODEJS
|
|
25
23
|
}
|
|
26
24
|
const peerDescriptor2: PeerDescriptor = {
|
|
27
|
-
|
|
25
|
+
nodeId: new Uint8Array([2, 1, 1]),
|
|
28
26
|
type: NodeType.NODEJS
|
|
29
27
|
}
|
|
30
28
|
const peerDescriptor3: PeerDescriptor = {
|
|
31
|
-
|
|
29
|
+
nodeId: new Uint8Array([3, 1, 1]),
|
|
32
30
|
type: NodeType.NODEJS
|
|
33
31
|
}
|
|
34
32
|
let rpcCommunicator1: ListeningRpcCommunicator
|
|
35
33
|
let rpcCommunicator2: ListeningRpcCommunicator
|
|
36
34
|
let rpcCommunicator3: ListeningRpcCommunicator
|
|
35
|
+
let neighbors: NodeList
|
|
36
|
+
let leftNodeView: NodeList
|
|
37
|
+
let rightNodeView: NodeList
|
|
37
38
|
let nodeView: NodeList
|
|
38
|
-
let targetNeighbors: NodeList
|
|
39
39
|
let handshaker: Handshaker
|
|
40
40
|
const streamPartId = StreamPartIDUtils.parse('stream#0')
|
|
41
41
|
|
|
@@ -70,7 +70,6 @@ describe('Handshakes', () => {
|
|
|
70
70
|
let simulatorTransport3: SimulatorTransport
|
|
71
71
|
|
|
72
72
|
beforeEach(async () => {
|
|
73
|
-
Simulator.useFakeTimers()
|
|
74
73
|
simulator = new Simulator()
|
|
75
74
|
simulatorTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
|
|
76
75
|
await simulatorTransport1.start()
|
|
@@ -84,17 +83,21 @@ describe('Handshakes', () => {
|
|
|
84
83
|
rpcCommunicator3 = new ListeningRpcCommunicator(streamPartId, simulatorTransport3)
|
|
85
84
|
|
|
86
85
|
const handshakerNodeId = getNodeIdFromPeerDescriptor(peerDescriptor2)
|
|
86
|
+
leftNodeView = new NodeList(handshakerNodeId, 10)
|
|
87
|
+
rightNodeView = new NodeList(handshakerNodeId, 10)
|
|
87
88
|
nodeView = new NodeList(handshakerNodeId, 10)
|
|
88
|
-
|
|
89
|
+
neighbors = new NodeList(handshakerNodeId, 4)
|
|
89
90
|
handshaker = new Handshaker({
|
|
90
91
|
localPeerDescriptor: peerDescriptor2,
|
|
91
92
|
streamPartId,
|
|
92
93
|
nearbyNodeView: nodeView,
|
|
93
94
|
randomNodeView: nodeView,
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
leftNodeView,
|
|
96
|
+
rightNodeView,
|
|
97
|
+
neighbors,
|
|
96
98
|
rpcCommunicator: rpcCommunicator2,
|
|
97
|
-
maxNeighborCount: 4
|
|
99
|
+
maxNeighborCount: 4,
|
|
100
|
+
ongoingHandshakes: new Set()
|
|
98
101
|
})
|
|
99
102
|
|
|
100
103
|
})
|
|
@@ -107,7 +110,6 @@ describe('Handshakes', () => {
|
|
|
107
110
|
await simulatorTransport2.stop()
|
|
108
111
|
await simulatorTransport3.stop()
|
|
109
112
|
simulator.stop()
|
|
110
|
-
Simulator.useFakeTimers(false)
|
|
111
113
|
})
|
|
112
114
|
|
|
113
115
|
it('Two nodes can handshake', async () => {
|
|
@@ -117,12 +119,12 @@ describe('Handshakes', () => {
|
|
|
117
119
|
new HandshakeRpcRemote(
|
|
118
120
|
peerDescriptor2,
|
|
119
121
|
peerDescriptor1,
|
|
120
|
-
|
|
121
|
-
|
|
122
|
+
rpcCommunicator2,
|
|
123
|
+
HandshakeRpcClient
|
|
122
124
|
)
|
|
123
125
|
)
|
|
124
126
|
expect(res).toEqual(true)
|
|
125
|
-
expect(
|
|
127
|
+
expect(neighbors.has(getNodeIdFromPeerDescriptor(peerDescriptor1))).toEqual(true)
|
|
126
128
|
})
|
|
127
129
|
|
|
128
130
|
it('Handshake accepted', async () => {
|
|
@@ -132,12 +134,12 @@ describe('Handshakes', () => {
|
|
|
132
134
|
new HandshakeRpcRemote(
|
|
133
135
|
peerDescriptor2,
|
|
134
136
|
peerDescriptor1,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
rpcCommunicator2,
|
|
138
|
+
HandshakeRpcClient
|
|
137
139
|
)
|
|
138
140
|
)
|
|
139
141
|
expect(res).toEqual(true)
|
|
140
|
-
expect(
|
|
142
|
+
expect(neighbors.has(getNodeIdFromPeerDescriptor(peerDescriptor1))).toEqual(true)
|
|
141
143
|
})
|
|
142
144
|
|
|
143
145
|
it('Handshake rejected', async () => {
|
|
@@ -147,12 +149,12 @@ describe('Handshakes', () => {
|
|
|
147
149
|
new HandshakeRpcRemote(
|
|
148
150
|
peerDescriptor2,
|
|
149
151
|
peerDescriptor1,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
+
rpcCommunicator2,
|
|
153
|
+
HandshakeRpcClient
|
|
152
154
|
)
|
|
153
155
|
)
|
|
154
156
|
expect(res).toEqual(false)
|
|
155
|
-
expect(
|
|
157
|
+
expect(neighbors.has(getNodeIdFromPeerDescriptor(peerDescriptor1))).toEqual(false)
|
|
156
158
|
})
|
|
157
159
|
|
|
158
160
|
it('Handshake with Interleaving', async () => {
|
|
@@ -163,12 +165,12 @@ describe('Handshakes', () => {
|
|
|
163
165
|
new HandshakeRpcRemote(
|
|
164
166
|
peerDescriptor2,
|
|
165
167
|
peerDescriptor1,
|
|
166
|
-
|
|
167
|
-
|
|
168
|
+
rpcCommunicator2,
|
|
169
|
+
HandshakeRpcClient
|
|
168
170
|
)
|
|
169
171
|
)
|
|
170
172
|
expect(res).toEqual(true)
|
|
171
|
-
expect(
|
|
172
|
-
expect(
|
|
173
|
+
expect(neighbors.has(getNodeIdFromPeerDescriptor(peerDescriptor1))).toEqual(true)
|
|
174
|
+
expect(neighbors.has(getNodeIdFromPeerDescriptor(peerDescriptor3))).toEqual(true)
|
|
173
175
|
})
|
|
174
176
|
})
|
|
@@ -38,7 +38,6 @@ describe('inspect', () => {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
beforeEach(async () => {
|
|
41
|
-
Simulator.useFakeTimers()
|
|
42
41
|
simulator = new Simulator(LatencyType.REAL)
|
|
43
42
|
|
|
44
43
|
publisherNode = await initiateNode(publisherDescriptor, simulator)
|
|
@@ -65,7 +64,6 @@ describe('inspect', () => {
|
|
|
65
64
|
inspectorNode.stop(),
|
|
66
65
|
...inspectedNodes.map((node) => node.stop())
|
|
67
66
|
])
|
|
68
|
-
Simulator.useFakeTimers(false)
|
|
69
67
|
})
|
|
70
68
|
|
|
71
69
|
it('gets successful inspections from all suspects', async () => {
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
Simulator,
|
|
6
6
|
SimulatorTransport
|
|
7
7
|
} from '@streamr/dht'
|
|
8
|
-
import { toProtoRpcClient } from '@streamr/proto-rpc'
|
|
9
8
|
import { NeighborUpdateRpcRemote } from '../../src/logic/neighbor-discovery/NeighborUpdateRpcRemote'
|
|
10
9
|
import { NeighborUpdate } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
11
10
|
import {
|
|
@@ -19,11 +18,11 @@ describe('NeighborUpdateRpcRemote', () => {
|
|
|
19
18
|
let rpcRemote: NeighborUpdateRpcRemote
|
|
20
19
|
|
|
21
20
|
const clientNode: PeerDescriptor = {
|
|
22
|
-
|
|
21
|
+
nodeId: new Uint8Array([1, 1, 1]),
|
|
23
22
|
type: NodeType.NODEJS
|
|
24
23
|
}
|
|
25
24
|
const serverNode: PeerDescriptor = {
|
|
26
|
-
|
|
25
|
+
nodeId: new Uint8Array([2, 2, 2]),
|
|
27
26
|
type: NodeType.NODEJS
|
|
28
27
|
}
|
|
29
28
|
|
|
@@ -47,7 +46,7 @@ describe('NeighborUpdateRpcRemote', () => {
|
|
|
47
46
|
'neighborUpdate',
|
|
48
47
|
async (): Promise<NeighborUpdate> => {
|
|
49
48
|
const node: PeerDescriptor = {
|
|
50
|
-
|
|
49
|
+
nodeId: new Uint8Array([4, 2, 4]),
|
|
51
50
|
type: NodeType.NODEJS
|
|
52
51
|
}
|
|
53
52
|
const update: NeighborUpdate = {
|
|
@@ -63,8 +62,8 @@ describe('NeighborUpdateRpcRemote', () => {
|
|
|
63
62
|
rpcRemote = new NeighborUpdateRpcRemote(
|
|
64
63
|
clientNode,
|
|
65
64
|
serverNode,
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
clientRpc,
|
|
66
|
+
NeighborUpdateRpcClient
|
|
68
67
|
)
|
|
69
68
|
})
|
|
70
69
|
|
|
@@ -77,7 +76,7 @@ describe('NeighborUpdateRpcRemote', () => {
|
|
|
77
76
|
})
|
|
78
77
|
|
|
79
78
|
it('updateNeighbors', async () => {
|
|
80
|
-
const res = await rpcRemote.updateNeighbors([])
|
|
79
|
+
const res = await rpcRemote.updateNeighbors(StreamPartIDUtils.parse('test#0'), [])
|
|
81
80
|
expect(res.peerDescriptors.length).toEqual(1)
|
|
82
81
|
})
|
|
83
82
|
})
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
|
|
2
2
|
import {
|
|
3
|
+
ContentType,
|
|
4
|
+
EncryptionType,
|
|
3
5
|
MessageID,
|
|
4
|
-
MessageRef,
|
|
6
|
+
MessageRef, SignatureType,
|
|
5
7
|
StreamMessage,
|
|
6
8
|
StreamMessageType,
|
|
7
9
|
StreamPartIDUtils
|
|
8
10
|
} from '@streamr/protocol'
|
|
9
11
|
import { EthereumAddress, hexToBinary, utf8ToBinary, waitForCondition } from '@streamr/utils'
|
|
10
12
|
import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
|
|
13
|
+
import { createMockPeerDescriptor } from '../utils/utils'
|
|
11
14
|
|
|
12
15
|
const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
|
|
13
16
|
|
|
@@ -19,18 +22,11 @@ describe('NetworkNode', () => {
|
|
|
19
22
|
let node1: NetworkNode
|
|
20
23
|
let node2: NetworkNode
|
|
21
24
|
|
|
22
|
-
const pd1: PeerDescriptor =
|
|
23
|
-
kademliaId: new Uint8Array([1, 2, 3]),
|
|
24
|
-
type: NodeType.NODEJS
|
|
25
|
-
}
|
|
25
|
+
const pd1: PeerDescriptor = createMockPeerDescriptor()
|
|
26
26
|
|
|
27
|
-
const pd2: PeerDescriptor =
|
|
28
|
-
kademliaId: new Uint8Array([1, 1, 1]),
|
|
29
|
-
type: NodeType.NODEJS
|
|
30
|
-
}
|
|
27
|
+
const pd2: PeerDescriptor = createMockPeerDescriptor()
|
|
31
28
|
|
|
32
29
|
beforeEach(async () => {
|
|
33
|
-
Simulator.useFakeTimers()
|
|
34
30
|
const simulator = new Simulator()
|
|
35
31
|
transport1 = new SimulatorTransport(pd1, simulator)
|
|
36
32
|
await transport1.start()
|
|
@@ -63,7 +59,6 @@ describe('NetworkNode', () => {
|
|
|
63
59
|
node1.stop(),
|
|
64
60
|
node2.stop()
|
|
65
61
|
])
|
|
66
|
-
Simulator.useFakeTimers(false)
|
|
67
62
|
})
|
|
68
63
|
|
|
69
64
|
it('wait for join + broadcast and subscribe', async () => {
|
|
@@ -80,7 +75,10 @@ describe('NetworkNode', () => {
|
|
|
80
75
|
content: utf8ToBinary(JSON.stringify({
|
|
81
76
|
hello: 'world'
|
|
82
77
|
})),
|
|
78
|
+
contentType: ContentType.JSON,
|
|
83
79
|
messageType: StreamMessageType.MESSAGE,
|
|
80
|
+
encryptionType: EncryptionType.NONE,
|
|
81
|
+
signatureType: SignatureType.SECP256K1,
|
|
84
82
|
signature: hexToBinary('0x1234'),
|
|
85
83
|
})
|
|
86
84
|
|
|
@@ -95,4 +93,21 @@ describe('NetworkNode', () => {
|
|
|
95
93
|
await waitForCondition(() => msgCount === 1)
|
|
96
94
|
})
|
|
97
95
|
|
|
96
|
+
it('fetchNodeInfo', async () => {
|
|
97
|
+
await node1.join(STREAM_PART_ID)
|
|
98
|
+
await node2.join(STREAM_PART_ID)
|
|
99
|
+
const result1 = await node1.fetchNodeInfo(pd2)
|
|
100
|
+
const result2 = await node2.fetchNodeInfo(pd1)
|
|
101
|
+
const result3 = await node1.fetchNodeInfo(node1.getPeerDescriptor())
|
|
102
|
+
expect(result1.streamPartitions.length).toEqual(1)
|
|
103
|
+
expect(result2.streamPartitions.length).toEqual(1)
|
|
104
|
+
expect(result3.streamPartitions.length).toEqual(1)
|
|
105
|
+
expect(result1.controlLayer.connections.length).toEqual(1)
|
|
106
|
+
expect(result2.controlLayer.connections.length).toEqual(1)
|
|
107
|
+
expect(result3.controlLayer.connections.length).toEqual(1)
|
|
108
|
+
expect(result1.controlLayer.neighbors.length).toEqual(1)
|
|
109
|
+
expect(result2.controlLayer.neighbors.length).toEqual(1)
|
|
110
|
+
expect(result3.controlLayer.neighbors.length).toEqual(1)
|
|
111
|
+
})
|
|
112
|
+
|
|
98
113
|
})
|
|
@@ -9,18 +9,17 @@ import { waitForCondition } from '@streamr/utils'
|
|
|
9
9
|
import { Empty } from '../../src/proto/google/protobuf/empty'
|
|
10
10
|
import { createStreamMessage } from '../utils/utils'
|
|
11
11
|
import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
|
|
12
|
-
import {
|
|
12
|
+
import { DhtCallContext } from '@streamr/dht'
|
|
13
13
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
14
14
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
15
15
|
|
|
16
16
|
describe('Network RPC', () => {
|
|
17
|
-
let rpcCommunicator1: RpcCommunicator
|
|
18
|
-
let rpcCommunicator2: RpcCommunicator
|
|
17
|
+
let rpcCommunicator1: RpcCommunicator<DhtCallContext>
|
|
18
|
+
let rpcCommunicator2: RpcCommunicator<DhtCallContext>
|
|
19
19
|
let client: ProtoRpcClient<DeliveryRpcClient>
|
|
20
20
|
let recvCounter = 0
|
|
21
21
|
|
|
22
22
|
beforeEach(() => {
|
|
23
|
-
Simulator.useFakeTimers()
|
|
24
23
|
rpcCommunicator1 = new RpcCommunicator()
|
|
25
24
|
rpcCommunicator2 = new RpcCommunicator()
|
|
26
25
|
rpcCommunicator1.on('outgoingMessage', (message: RpcMessage) => {
|
|
@@ -40,7 +39,6 @@ describe('Network RPC', () => {
|
|
|
40
39
|
afterEach(() => {
|
|
41
40
|
rpcCommunicator1.stop()
|
|
42
41
|
rpcCommunicator2.stop()
|
|
43
|
-
Simulator.useFakeTimers(false)
|
|
44
42
|
})
|
|
45
43
|
|
|
46
44
|
it('sends Data', async () => {
|
|
@@ -34,9 +34,9 @@ describe('NetworkStack', () => {
|
|
|
34
34
|
})
|
|
35
35
|
|
|
36
36
|
await stack1.start()
|
|
37
|
-
stack1.getStreamrNode()
|
|
37
|
+
stack1.getStreamrNode().setStreamPartEntryPoints(STREAM_PART_ID, [epDescriptor])
|
|
38
38
|
await stack2.start()
|
|
39
|
-
stack2.getStreamrNode()
|
|
39
|
+
stack2.getStreamrNode().setStreamPartEntryPoints(STREAM_PART_ID, [epDescriptor])
|
|
40
40
|
})
|
|
41
41
|
|
|
42
42
|
afterEach(async () => {
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Simulator, SimulatorTransport, ListeningRpcCommunicator, PeerDescriptor } from '@streamr/dht'
|
|
2
|
+
import { NetworkStack } from '../../src/NetworkStack'
|
|
3
|
+
import { createMockPeerDescriptor } from '../utils/utils'
|
|
4
|
+
import { NodeInfoClient } from '../../src/logic/node-info/NodeInfoClient'
|
|
5
|
+
import { NODE_INFO_RPC_SERVICE_ID } from '../../src/logic/node-info/NodeInfoRpcLocal'
|
|
6
|
+
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
7
|
+
import { waitForCondition } from '@streamr/utils'
|
|
8
|
+
|
|
9
|
+
// TODO add Jest utility so that the normalization is not needed (NET-1254)
|
|
10
|
+
const normalizePeerDescriptor = (peerDescriptor: PeerDescriptor) => {
|
|
11
|
+
return {
|
|
12
|
+
...peerDescriptor,
|
|
13
|
+
nodeId: new Uint8Array(peerDescriptor.nodeId)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
describe('NetworkStack NodeInfoRpc', () => {
|
|
18
|
+
|
|
19
|
+
let requesteStack: NetworkStack
|
|
20
|
+
let otherStack: NetworkStack
|
|
21
|
+
let nodeInfoClient: NodeInfoClient
|
|
22
|
+
let requesteeTransport1: SimulatorTransport
|
|
23
|
+
let otherTransport: SimulatorTransport
|
|
24
|
+
let requestorTransport: SimulatorTransport
|
|
25
|
+
|
|
26
|
+
let simulator: Simulator
|
|
27
|
+
|
|
28
|
+
const requesteePeerDescriptor = createMockPeerDescriptor()
|
|
29
|
+
const otherPeerDescriptor = createMockPeerDescriptor()
|
|
30
|
+
const requestorPeerDescriptor = createMockPeerDescriptor()
|
|
31
|
+
|
|
32
|
+
beforeEach(async () => {
|
|
33
|
+
simulator = new Simulator()
|
|
34
|
+
requesteeTransport1 = new SimulatorTransport(requesteePeerDescriptor, simulator)
|
|
35
|
+
otherTransport = new SimulatorTransport(otherPeerDescriptor, simulator)
|
|
36
|
+
requestorTransport = new SimulatorTransport(requestorPeerDescriptor, simulator)
|
|
37
|
+
await requesteeTransport1.start()
|
|
38
|
+
await otherTransport.start()
|
|
39
|
+
await requestorTransport.start()
|
|
40
|
+
requesteStack = new NetworkStack({
|
|
41
|
+
layer0: {
|
|
42
|
+
transport: requesteeTransport1,
|
|
43
|
+
peerDescriptor: requesteePeerDescriptor,
|
|
44
|
+
entryPoints: [requesteePeerDescriptor]
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
otherStack = new NetworkStack({
|
|
48
|
+
layer0: {
|
|
49
|
+
transport: otherTransport,
|
|
50
|
+
peerDescriptor: otherPeerDescriptor,
|
|
51
|
+
entryPoints: [requesteePeerDescriptor]
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
await requesteStack.start()
|
|
55
|
+
await otherStack.start()
|
|
56
|
+
nodeInfoClient = new NodeInfoClient(requestorPeerDescriptor, new ListeningRpcCommunicator(NODE_INFO_RPC_SERVICE_ID, requestorTransport))
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
afterEach(async () => {
|
|
60
|
+
await requesteStack.stop()
|
|
61
|
+
await otherStack.stop()
|
|
62
|
+
await requesteeTransport1.stop()
|
|
63
|
+
await otherTransport.stop()
|
|
64
|
+
await requestorTransport.stop()
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
it('happy path', async () => {
|
|
68
|
+
const streamPartId1 = StreamPartIDUtils.parse('stream1#0')
|
|
69
|
+
const streamPartId2 = StreamPartIDUtils.parse('stream2#0')
|
|
70
|
+
requesteStack.getStreamrNode().joinStreamPart(streamPartId1)
|
|
71
|
+
otherStack.getStreamrNode().joinStreamPart(streamPartId1)
|
|
72
|
+
requesteStack.getStreamrNode().joinStreamPart(streamPartId2)
|
|
73
|
+
otherStack.getStreamrNode().joinStreamPart(streamPartId2)
|
|
74
|
+
await waitForCondition(() =>
|
|
75
|
+
requesteStack.getStreamrNode().getNeighbors(streamPartId1).length === 1
|
|
76
|
+
&& otherStack.getStreamrNode().getNeighbors(streamPartId1).length === 1
|
|
77
|
+
&& requesteStack.getStreamrNode().getNeighbors(streamPartId2).length === 1
|
|
78
|
+
&& otherStack.getStreamrNode().getNeighbors(streamPartId2).length === 1
|
|
79
|
+
)
|
|
80
|
+
const result = await nodeInfoClient.getInfo(requesteePeerDescriptor)
|
|
81
|
+
expect(result).toMatchObject({
|
|
82
|
+
peerDescriptor: normalizePeerDescriptor(requesteePeerDescriptor),
|
|
83
|
+
controlLayer: {
|
|
84
|
+
neighbors: [normalizePeerDescriptor(otherPeerDescriptor)],
|
|
85
|
+
connections: [normalizePeerDescriptor(otherPeerDescriptor), normalizePeerDescriptor(requestorPeerDescriptor)]
|
|
86
|
+
},
|
|
87
|
+
streamPartitions: [
|
|
88
|
+
{
|
|
89
|
+
id: streamPartId1,
|
|
90
|
+
controlLayerNeighbors: [normalizePeerDescriptor(otherPeerDescriptor)],
|
|
91
|
+
deliveryLayerNeighbors: [normalizePeerDescriptor(otherPeerDescriptor)]
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: streamPartId2,
|
|
95
|
+
controlLayerNeighbors: [normalizePeerDescriptor(otherPeerDescriptor)],
|
|
96
|
+
deliveryLayerNeighbors: [normalizePeerDescriptor(otherPeerDescriptor)]
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
version: expect.any(String)
|
|
100
|
+
})
|
|
101
|
+
expect(result.streamPartitions.length).toEqual(2)
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
})
|
|
@@ -16,8 +16,8 @@ describe('Propagation', () => {
|
|
|
16
16
|
const NUM_OF_NODES = 256
|
|
17
17
|
|
|
18
18
|
beforeEach(async () => {
|
|
19
|
-
totalReceived = 0
|
|
20
19
|
const simulator = new Simulator()
|
|
20
|
+
totalReceived = 0
|
|
21
21
|
layer1Nodes = []
|
|
22
22
|
randomGraphNodes = []
|
|
23
23
|
const [entryPoint, node1] = await createMockRandomGraphNodeAndDhtNode(entryPointDescriptor, entryPointDescriptor, STREAM_PART_ID, simulator)
|
|
@@ -54,11 +54,11 @@ describe('Propagation', () => {
|
|
|
54
54
|
|
|
55
55
|
it('All nodes receive messages', async () => {
|
|
56
56
|
await waitForCondition(
|
|
57
|
-
() => randomGraphNodes.every((node) => node.
|
|
57
|
+
() => randomGraphNodes.every((node) => node.getNeighbors().length >= 3), 30000
|
|
58
58
|
)
|
|
59
59
|
await waitForCondition(() => {
|
|
60
60
|
const avg = randomGraphNodes.reduce((acc, curr) => {
|
|
61
|
-
return acc + curr.
|
|
61
|
+
return acc + curr.getNeighbors().length
|
|
62
62
|
}, 0) / randomGraphNodes.length
|
|
63
63
|
return avg >= 4
|
|
64
64
|
}, 20000)
|