@streamr/trackerless-network 0.0.1-tatum.6 → 0.0.1-tatum.8
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/dist/package.json +10 -8
- package/dist/src/NetworkNode.js +2 -2
- package/dist/src/NetworkNode.js.map +1 -1
- package/dist/src/NetworkStack.d.ts +5 -6
- package/dist/src/NetworkStack.js +27 -56
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/identifiers.js +2 -2
- package/dist/src/identifiers.js.map +1 -1
- package/dist/src/logic/{StreamNodeServer.d.ts → DeliveryRpcLocal.d.ts} +6 -5
- package/dist/src/logic/{StreamNodeServer.js → DeliveryRpcLocal.js} +5 -5
- package/dist/src/logic/{StreamNodeServer.js.map → DeliveryRpcLocal.js.map} +1 -1
- package/dist/src/logic/{RemoteRandomGraphNode.d.ts → DeliveryRpcRemote.d.ts} +2 -2
- package/dist/src/logic/{RemoteRandomGraphNode.js → DeliveryRpcRemote.js} +5 -5
- package/dist/src/logic/DeliveryRpcRemote.js.map +1 -0
- package/dist/src/logic/{StreamPartEntryPointDiscovery.d.ts → EntryPointDiscovery.d.ts} +10 -12
- package/dist/src/logic/{StreamPartEntryPointDiscovery.js → EntryPointDiscovery.js} +18 -40
- package/dist/src/logic/EntryPointDiscovery.js.map +1 -0
- package/dist/src/logic/Layer0Node.d.ts +14 -0
- package/dist/src/logic/{ILayer1.js → Layer0Node.js} +1 -1
- package/dist/src/logic/Layer0Node.js.map +1 -0
- package/dist/src/logic/{ILayer1.d.ts → Layer1Node.d.ts} +5 -5
- package/dist/src/logic/{ILayer0.js → Layer1Node.js} +1 -1
- package/dist/src/logic/Layer1Node.js.map +1 -0
- package/dist/src/logic/NodeList.d.ts +10 -10
- package/dist/src/logic/NodeList.js.map +1 -1
- package/dist/src/logic/RandomGraphNode.d.ts +11 -15
- package/dist/src/logic/RandomGraphNode.js +46 -45
- package/dist/src/logic/RandomGraphNode.js.map +1 -1
- package/dist/src/logic/StreamrNode.d.ts +15 -18
- package/dist/src/logic/StreamrNode.js +78 -87
- package/dist/src/logic/StreamrNode.js.map +1 -1
- package/dist/src/logic/createRandomGraphNode.d.ts +6 -1
- package/dist/src/logic/createRandomGraphNode.js +17 -23
- package/dist/src/logic/createRandomGraphNode.js.map +1 -1
- package/dist/src/logic/formStreamPartDeliveryServiceId.d.ts +2 -0
- package/dist/src/logic/formStreamPartDeliveryServiceId.js +8 -0
- package/dist/src/logic/formStreamPartDeliveryServiceId.js.map +1 -0
- package/dist/src/logic/inspect/Inspector.d.ts +3 -2
- package/dist/src/logic/inspect/Inspector.js +5 -5
- package/dist/src/logic/inspect/Inspector.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/{HandshakerServer.d.ts → HandshakeRpcLocal.d.ts} +10 -10
- package/dist/src/logic/neighbor-discovery/{HandshakerServer.js → HandshakeRpcLocal.js} +13 -13
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -0
- package/dist/src/logic/neighbor-discovery/{RemoteHandshaker.d.ts → HandshakeRpcRemote.d.ts} +1 -1
- package/dist/src/logic/neighbor-discovery/{RemoteHandshaker.js → HandshakeRpcRemote.js} +8 -7
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -0
- package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +8 -7
- package/dist/src/logic/neighbor-discovery/Handshaker.js +23 -24
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +3 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +5 -5
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/{NeighborUpdateManagerServer.d.ts → NeighborUpdateRpcLocal.d.ts} +6 -6
- package/dist/src/logic/neighbor-discovery/{NeighborUpdateManagerServer.js → NeighborUpdateRpcLocal.js} +9 -9
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -0
- package/dist/src/logic/neighbor-discovery/{RemoteNeighborUpdateManager.d.ts → NeighborUpdateRpcRemote.d.ts} +1 -1
- package/dist/src/logic/neighbor-discovery/{RemoteNeighborUpdateManager.js → NeighborUpdateRpcRemote.js} +5 -5
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -0
- package/dist/src/logic/propagation/Propagation.js +2 -2
- package/dist/src/logic/propagation/Propagation.js.map +1 -1
- package/dist/src/logic/proxy/{ProxyStreamConnectionClient.d.ts → ProxyClient.d.ts} +7 -10
- package/dist/src/logic/proxy/{ProxyStreamConnectionClient.js → ProxyClient.js} +24 -22
- package/dist/src/logic/proxy/ProxyClient.js.map +1 -0
- package/dist/src/logic/proxy/{ProxyStreamConnectionServer.d.ts → ProxyConnectionRpcLocal.d.ts} +5 -5
- package/dist/src/logic/proxy/{ProxyStreamConnectionServer.js → ProxyConnectionRpcLocal.js} +6 -6
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -0
- package/dist/src/logic/proxy/{RemoteProxyServer.d.ts → ProxyConnectionRpcRemote.d.ts} +1 -1
- package/dist/src/logic/proxy/{RemoteProxyServer.js → ProxyConnectionRpcRemote.js} +4 -4
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -0
- package/dist/src/logic/temporary-connection/{TemporaryConnectionRpcServer.d.ts → TemporaryConnectionRpcLocal.d.ts} +5 -4
- package/dist/src/logic/temporary-connection/{TemporaryConnectionRpcServer.js → TemporaryConnectionRpcLocal.js} +6 -6
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -0
- package/dist/src/logic/temporary-connection/{RemoteTemporaryConnectionRpcServer.d.ts → TemporaryConnectionRpcRemote.d.ts} +1 -1
- package/dist/src/logic/temporary-connection/{RemoteTemporaryConnectionRpcServer.js → TemporaryConnectionRpcRemote.js} +4 -4
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.d.ts +10 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js +7 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +54 -118
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +50 -49
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +6 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +4 -4
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +7 -7
- 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 +10 -10
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +7 -7
- 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 +2 -2
- package/dist/test/benchmark/first-message.js +16 -17
- package/dist/test/benchmark/first-message.js.map +1 -1
- package/dist/test/utils/utils.d.ts +7 -6
- package/dist/test/utils/utils.js +18 -17
- package/dist/test/utils/utils.js.map +1 -1
- package/package.json +10 -8
- package/protos/NetworkRpc.proto +5 -5
- package/src/NetworkNode.ts +2 -2
- package/src/NetworkStack.ts +31 -72
- package/src/identifiers.ts +3 -3
- package/src/logic/{StreamNodeServer.ts → DeliveryRpcLocal.ts} +8 -7
- package/src/logic/{RemoteRandomGraphNode.ts → DeliveryRpcRemote.ts} +3 -3
- package/src/logic/{StreamPartEntryPointDiscovery.ts → EntryPointDiscovery.ts} +24 -48
- package/src/logic/Layer0Node.ts +15 -0
- package/src/logic/{ILayer1.ts → Layer1Node.ts} +5 -5
- package/src/logic/NodeList.ts +12 -12
- package/src/logic/RandomGraphNode.ts +73 -74
- package/src/logic/StreamrNode.ts +90 -103
- package/src/logic/createRandomGraphNode.ts +28 -26
- package/src/logic/formStreamPartDeliveryServiceId.ts +5 -0
- package/src/logic/inspect/Inspector.ts +8 -7
- package/src/logic/neighbor-discovery/{HandshakerServer.ts → HandshakeRpcLocal.ts} +20 -20
- package/src/logic/neighbor-discovery/{RemoteHandshaker.ts → HandshakeRpcRemote.ts} +6 -5
- package/src/logic/neighbor-discovery/Handshaker.ts +38 -38
- package/src/logic/neighbor-discovery/NeighborFinder.ts +2 -2
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +13 -10
- package/src/logic/neighbor-discovery/{NeighborUpdateManagerServer.ts → NeighborUpdateRpcLocal.ts} +15 -15
- package/src/logic/neighbor-discovery/{RemoteNeighborUpdateManager.ts → NeighborUpdateRpcRemote.ts} +2 -2
- package/src/logic/propagation/Propagation.ts +2 -2
- package/src/logic/proxy/{ProxyStreamConnectionClient.ts → ProxyClient.ts} +29 -29
- package/src/logic/proxy/{ProxyStreamConnectionServer.ts → ProxyConnectionRpcLocal.ts} +10 -11
- package/src/logic/proxy/{RemoteProxyServer.ts → ProxyConnectionRpcRemote.ts} +1 -1
- package/src/logic/temporary-connection/{TemporaryConnectionRpcServer.ts → TemporaryConnectionRpcLocal.ts} +11 -10
- package/src/logic/temporary-connection/{RemoteTemporaryConnectionRpcServer.ts → TemporaryConnectionRpcRemote.ts} +1 -1
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +13 -0
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +6 -0
- package/src/proto/packages/dht/protos/DhtRpc.ts +88 -166
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +8 -8
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +2 -2
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +14 -14
- package/test/benchmark/first-message.ts +19 -20
- package/test/end-to-end/inspect.test.ts +12 -12
- package/test/end-to-end/proxy-and-full-node.test.ts +17 -18
- package/test/end-to-end/proxy-connections.test.ts +9 -11
- package/test/end-to-end/proxy-key-exchange.test.ts +12 -13
- package/test/end-to-end/random-graph-with-real-connections.test.ts +27 -22
- package/test/end-to-end/webrtc-full-node-network.test.ts +8 -8
- package/test/end-to-end/websocket-full-node-network.test.ts +8 -10
- package/test/integration/{RemoteRandomGraphNode.test.ts → DeliveryRpcRemote.test.ts} +17 -14
- package/test/integration/{RemoteHandshaker.test.ts → HandshakeRpcRemote.test.ts} +10 -9
- package/test/integration/Handshakes.test.ts +23 -20
- package/test/integration/Inspect.test.ts +4 -3
- package/test/integration/{RemoteNeighborUpdateManager.test.ts → NeighborUpdateRpcRemote.test.ts} +12 -10
- package/test/integration/NetworkNode.test.ts +9 -8
- package/test/integration/NetworkRpc.test.ts +5 -7
- package/test/integration/NetworkStack.test.ts +13 -15
- package/test/integration/Propagation.test.ts +14 -13
- package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +23 -20
- package/test/integration/RandomGraphNode-Layer1Node.test.ts +30 -29
- package/test/integration/StreamrNode.test.ts +16 -13
- package/test/integration/joining-streams-on-offline-peers.test.ts +16 -18
- package/test/integration/stream-without-default-entrypoints.test.ts +12 -14
- package/test/unit/{StreamNodeServer.test.ts → DeliveryRpcLocal.test.ts} +8 -8
- package/test/unit/{StreamPartEntrypointDiscovery.test.ts → EntrypointDiscovery.test.ts} +27 -44
- package/test/unit/{HandshakerServer.test.ts → HandshakeRpcLocal.test.ts} +26 -24
- package/test/unit/Handshaker.test.ts +10 -8
- package/test/unit/Inspector.test.ts +4 -3
- package/test/unit/NeighborFinder.test.ts +5 -5
- package/test/unit/NodeList.test.ts +22 -13
- package/test/unit/{RemoteProxyServer.test.ts → ProxyConnectionRpcRemote.test.ts} +4 -4
- package/test/unit/RandomGraphNode.test.ts +15 -13
- package/test/unit/StreamMessageTranslator.test.ts +10 -9
- package/test/unit/StreamrNode.test.ts +10 -10
- package/test/utils/mock/{MockLayer0.ts → MockLayer0Node.ts} +23 -26
- package/test/utils/mock/{MockLayer1.ts → MockLayer1Node.ts} +5 -10
- package/test/utils/mock/MockNeighborFinder.ts +1 -2
- package/test/utils/mock/MockNeighborUpdateManager.ts +1 -2
- package/test/utils/mock/Transport.ts +2 -2
- package/test/utils/utils.ts +18 -16
- package/dist/src/logic/ILayer0.d.ts +0 -13
- package/dist/src/logic/ILayer0.js.map +0 -1
- package/dist/src/logic/ILayer1.js.map +0 -1
- package/dist/src/logic/RemoteRandomGraphNode.js.map +0 -1
- package/dist/src/logic/StreamPartEntryPointDiscovery.js.map +0 -1
- package/dist/src/logic/neighbor-discovery/HandshakerServer.js.map +0 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManagerServer.js.map +0 -1
- package/dist/src/logic/neighbor-discovery/RemoteHandshaker.js.map +0 -1
- package/dist/src/logic/neighbor-discovery/RemoteNeighborUpdateManager.js.map +0 -1
- package/dist/src/logic/proxy/ProxyStreamConnectionClient.js.map +0 -1
- package/dist/src/logic/proxy/ProxyStreamConnectionServer.js.map +0 -1
- package/dist/src/logic/proxy/RemoteProxyServer.js.map +0 -1
- package/dist/src/logic/temporary-connection/RemoteTemporaryConnectionRpcServer.js.map +0 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcServer.js.map +0 -1
- package/src/logic/ILayer0.ts +0 -14
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Simulator } 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 { RandomGraphNode } from '../../src/logic/RandomGraphNode'
|
|
7
7
|
import { createMockPeerDescriptor, createMockRandomGraphNodeAndDhtNode, createStreamMessage } from '../utils/utils'
|
|
8
|
+
import { Layer1Node } from '../../src/logic/Layer1Node'
|
|
8
9
|
|
|
9
10
|
describe('Propagation', () => {
|
|
10
11
|
const entryPointDescriptor = createMockPeerDescriptor()
|
|
11
|
-
let
|
|
12
|
+
let layer1Nodes: Layer1Node[]
|
|
12
13
|
let randomGraphNodes: RandomGraphNode[]
|
|
13
14
|
const STREAM_PART_ID = StreamPartIDUtils.parse('testingtesting#0')
|
|
14
15
|
let totalReceived: number
|
|
@@ -17,38 +18,38 @@ describe('Propagation', () => {
|
|
|
17
18
|
beforeEach(async () => {
|
|
18
19
|
totalReceived = 0
|
|
19
20
|
const simulator = new Simulator()
|
|
20
|
-
|
|
21
|
+
layer1Nodes = []
|
|
21
22
|
randomGraphNodes = []
|
|
22
|
-
const [entryPoint, node1] = createMockRandomGraphNodeAndDhtNode(entryPointDescriptor, entryPointDescriptor, STREAM_PART_ID, simulator)
|
|
23
|
+
const [entryPoint, node1] = await createMockRandomGraphNodeAndDhtNode(entryPointDescriptor, entryPointDescriptor, STREAM_PART_ID, simulator)
|
|
23
24
|
await entryPoint.start()
|
|
24
25
|
await entryPoint.joinDht([entryPointDescriptor])
|
|
25
26
|
await node1.start()
|
|
26
27
|
node1.on('message', () => {totalReceived += 1})
|
|
27
|
-
|
|
28
|
+
layer1Nodes.push(entryPoint)
|
|
28
29
|
randomGraphNodes.push(node1)
|
|
29
30
|
|
|
30
31
|
await Promise.all(range(NUM_OF_NODES).map(async (_i) => {
|
|
31
32
|
const descriptor = createMockPeerDescriptor()
|
|
32
|
-
const [
|
|
33
|
+
const [layer1, randomGraphNode] = await createMockRandomGraphNodeAndDhtNode(
|
|
33
34
|
descriptor,
|
|
34
35
|
entryPointDescriptor,
|
|
35
36
|
STREAM_PART_ID,
|
|
36
37
|
simulator
|
|
37
38
|
)
|
|
38
|
-
await
|
|
39
|
-
await
|
|
39
|
+
await layer1.start()
|
|
40
|
+
await randomGraphNode.start()
|
|
40
41
|
// eslint-disable-next-line promise/always-return
|
|
41
|
-
await
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
randomGraphNodes.push(
|
|
42
|
+
await layer1.joinDht([entryPointDescriptor]).then(() => {
|
|
43
|
+
randomGraphNode.on('message', () => { totalReceived += 1 })
|
|
44
|
+
layer1Nodes.push(layer1)
|
|
45
|
+
randomGraphNodes.push(randomGraphNode)
|
|
45
46
|
})
|
|
46
47
|
}))
|
|
47
48
|
}, 45000)
|
|
48
49
|
|
|
49
50
|
afterEach(async () => {
|
|
50
51
|
await Promise.all(randomGraphNodes.map((node) => node.stop()))
|
|
51
|
-
await Promise.all(
|
|
52
|
+
await Promise.all(layer1Nodes.map((node) => node.stop()))
|
|
52
53
|
})
|
|
53
54
|
|
|
54
55
|
it('All nodes receive messages', async () => {
|
|
@@ -5,11 +5,12 @@ import { RandomGraphNode } from '../../src/logic/RandomGraphNode'
|
|
|
5
5
|
import { createRandomGraphNode } from '../../src/logic/createRandomGraphNode'
|
|
6
6
|
import { createMockPeerDescriptor } from '../utils/utils'
|
|
7
7
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
8
|
+
import { Layer1Node } from '../../src/logic/Layer1Node'
|
|
8
9
|
|
|
9
10
|
describe('RandomGraphNode-DhtNode-Latencies', () => {
|
|
10
11
|
const numOfNodes = 64
|
|
11
|
-
let
|
|
12
|
-
let dhtEntryPoint:
|
|
12
|
+
let layer1Nodes: Layer1Node[]
|
|
13
|
+
let dhtEntryPoint: Layer1Node
|
|
13
14
|
let entryPointRandomGraphNode: RandomGraphNode
|
|
14
15
|
let graphNodes: RandomGraphNode[]
|
|
15
16
|
|
|
@@ -24,47 +25,49 @@ describe('RandomGraphNode-DhtNode-Latencies', () => {
|
|
|
24
25
|
const cms: SimulatorTransport[] = range(numOfNodes).map((i) =>
|
|
25
26
|
new SimulatorTransport(peerDescriptors[i], simulator)
|
|
26
27
|
)
|
|
28
|
+
await entrypointCm.start()
|
|
29
|
+
await Promise.all(cms.map((cm) => cm.start()))
|
|
27
30
|
|
|
28
31
|
dhtEntryPoint = new DhtNode({
|
|
29
|
-
|
|
32
|
+
transport: entrypointCm,
|
|
30
33
|
peerDescriptor: entrypointDescriptor,
|
|
31
34
|
serviceId: streamPartId
|
|
32
35
|
})
|
|
33
|
-
|
|
34
|
-
|
|
36
|
+
layer1Nodes = range(numOfNodes).map((i) => new DhtNode({
|
|
37
|
+
transport: cms[i],
|
|
35
38
|
peerDescriptor: peerDescriptors[i],
|
|
36
39
|
serviceId: streamPartId
|
|
37
40
|
}))
|
|
38
41
|
graphNodes = range(numOfNodes).map((i) => createRandomGraphNode({
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
streamPartId,
|
|
43
|
+
layer1Node: layer1Nodes[i],
|
|
44
|
+
transport: cms[i],
|
|
42
45
|
connectionLocker: cms[i],
|
|
43
46
|
ownPeerDescriptor: peerDescriptors[i]
|
|
44
47
|
}))
|
|
45
48
|
entryPointRandomGraphNode = createRandomGraphNode({
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
streamPartId,
|
|
50
|
+
layer1Node: dhtEntryPoint,
|
|
51
|
+
transport: entrypointCm,
|
|
49
52
|
connectionLocker: entrypointCm,
|
|
50
53
|
ownPeerDescriptor: entrypointDescriptor
|
|
51
54
|
})
|
|
52
55
|
|
|
53
56
|
await dhtEntryPoint.start()
|
|
54
57
|
await dhtEntryPoint.joinDht([entrypointDescriptor])
|
|
55
|
-
await Promise.all(
|
|
58
|
+
await Promise.all(layer1Nodes.map((node) => node.start()))
|
|
56
59
|
})
|
|
57
60
|
|
|
58
61
|
afterEach(async () => {
|
|
59
62
|
dhtEntryPoint.stop()
|
|
60
63
|
entryPointRandomGraphNode.stop()
|
|
61
|
-
await Promise.all(
|
|
64
|
+
await Promise.all(layer1Nodes.map((node) => node.stop()))
|
|
62
65
|
await Promise.all(graphNodes.map((node) => node.stop()))
|
|
63
66
|
Simulator.useFakeTimers(false)
|
|
64
67
|
})
|
|
65
68
|
|
|
66
69
|
it('happy path single node', async () => {
|
|
67
|
-
await
|
|
70
|
+
await layer1Nodes[0].joinDht([entrypointDescriptor])
|
|
68
71
|
entryPointRandomGraphNode.start()
|
|
69
72
|
await graphNodes[0].start()
|
|
70
73
|
await Promise.all([
|
|
@@ -77,23 +80,23 @@ describe('RandomGraphNode-DhtNode-Latencies', () => {
|
|
|
77
80
|
|
|
78
81
|
it('happy path 5 nodes', async () => {
|
|
79
82
|
entryPointRandomGraphNode.start()
|
|
80
|
-
range(4).
|
|
83
|
+
range(4).forEach((i) => graphNodes[i].start())
|
|
81
84
|
await Promise.all(range(4).map(async (i) => {
|
|
82
|
-
await
|
|
85
|
+
await layer1Nodes[i].joinDht([entrypointDescriptor])
|
|
83
86
|
}))
|
|
84
87
|
await Promise.all(range(4).map((i) => {
|
|
85
88
|
return waitForCondition(() => {
|
|
86
89
|
return graphNodes[i].getTargetNeighborIds().length >= 4
|
|
87
|
-
},
|
|
90
|
+
}, 15000, 2000)
|
|
88
91
|
}))
|
|
89
|
-
range(4).
|
|
92
|
+
range(4).forEach((i) => {
|
|
90
93
|
expect(graphNodes[i].getNearbyNodeView().getIds().length).toBeGreaterThanOrEqual(4)
|
|
91
94
|
expect(graphNodes[i].getTargetNeighborIds().length).toBeGreaterThanOrEqual(4)
|
|
92
95
|
})
|
|
93
96
|
// Check bidirectionality
|
|
94
97
|
const allNodes = graphNodes
|
|
95
98
|
allNodes.push(entryPointRandomGraphNode)
|
|
96
|
-
range(5).
|
|
99
|
+
range(5).forEach((i) => {
|
|
97
100
|
const ownNodeId = allNodes[i].getOwnNodeId()
|
|
98
101
|
allNodes[i].getNearbyNodeView().getIds().forEach((nodeId) => {
|
|
99
102
|
const neighbor = allNodes.find((node) => {
|
|
@@ -107,7 +110,7 @@ describe('RandomGraphNode-DhtNode-Latencies', () => {
|
|
|
107
110
|
it('happy path 64 nodes', async () => {
|
|
108
111
|
await Promise.all(range(numOfNodes).map((i) => graphNodes[i].start()))
|
|
109
112
|
await Promise.all(range(numOfNodes).map((i) => {
|
|
110
|
-
|
|
113
|
+
layer1Nodes[i].joinDht([entrypointDescriptor])
|
|
111
114
|
}))
|
|
112
115
|
await Promise.all(graphNodes.map((node) =>
|
|
113
116
|
waitForCondition(() => node.getTargetNeighborIds().length >= 4, 10000)
|
|
@@ -1,29 +1,28 @@
|
|
|
1
|
-
import { ConnectionManager, DhtNode, PeerDescriptor, Simulator, getRandomRegion } from '@streamr/dht'
|
|
1
|
+
import { ConnectionManager, DhtNode, PeerDescriptor, Simulator, SimulatorTransport, getRandomRegion } from '@streamr/dht'
|
|
2
2
|
import { Logger, waitForCondition } from '@streamr/utils'
|
|
3
3
|
import { range } from 'lodash'
|
|
4
4
|
import { RandomGraphNode } from '../../src/logic/RandomGraphNode'
|
|
5
5
|
import { createRandomGraphNode } from '../../src/logic/createRandomGraphNode'
|
|
6
6
|
import { createMockPeerDescriptor } from '../utils/utils'
|
|
7
7
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
8
|
+
import { Layer1Node } from '../../src/logic/Layer1Node'
|
|
8
9
|
|
|
9
10
|
const logger = new Logger(module)
|
|
10
11
|
|
|
11
12
|
describe('RandomGraphNode-DhtNode', () => {
|
|
12
13
|
const numOfNodes = 64
|
|
13
|
-
let
|
|
14
|
-
let dhtEntryPoint:
|
|
14
|
+
let layer1Nodes: Layer1Node[]
|
|
15
|
+
let dhtEntryPoint: Layer1Node
|
|
15
16
|
let entryPointRandomGraphNode: RandomGraphNode
|
|
16
17
|
let graphNodes: RandomGraphNode[]
|
|
17
18
|
|
|
18
19
|
const streamPartId = StreamPartIDUtils.parse('stream#0')
|
|
19
20
|
const entrypointDescriptor = createMockPeerDescriptor({
|
|
20
|
-
nodeName: 'entrypoint',
|
|
21
21
|
region: getRandomRegion()
|
|
22
22
|
})
|
|
23
23
|
|
|
24
|
-
const peerDescriptors: PeerDescriptor[] = range(numOfNodes).map((
|
|
24
|
+
const peerDescriptors: PeerDescriptor[] = range(numOfNodes).map(() => {
|
|
25
25
|
return createMockPeerDescriptor({
|
|
26
|
-
nodeName: `node${i}`,
|
|
27
26
|
region: getRandomRegion()
|
|
28
27
|
})
|
|
29
28
|
})
|
|
@@ -31,43 +30,45 @@ describe('RandomGraphNode-DhtNode', () => {
|
|
|
31
30
|
|
|
32
31
|
Simulator.useFakeTimers()
|
|
33
32
|
const simulator = new Simulator()
|
|
34
|
-
const entrypointCm = new
|
|
35
|
-
|
|
33
|
+
const entrypointCm = new SimulatorTransport(
|
|
34
|
+
entrypointDescriptor,
|
|
36
35
|
simulator
|
|
37
|
-
|
|
36
|
+
)
|
|
37
|
+
await entrypointCm.start()
|
|
38
38
|
|
|
39
39
|
const cms: ConnectionManager[] = range(numOfNodes).map((i) =>
|
|
40
|
-
new
|
|
41
|
-
|
|
40
|
+
new SimulatorTransport(
|
|
41
|
+
peerDescriptors[i],
|
|
42
42
|
simulator
|
|
43
|
-
|
|
43
|
+
)
|
|
44
44
|
)
|
|
45
|
+
await Promise.all(cms.map((cm) => cm.start()))
|
|
45
46
|
|
|
46
47
|
dhtEntryPoint = new DhtNode({
|
|
47
|
-
|
|
48
|
+
transport: entrypointCm,
|
|
48
49
|
peerDescriptor: entrypointDescriptor,
|
|
49
50
|
serviceId: streamPartId
|
|
50
51
|
})
|
|
51
52
|
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
layer1Nodes = range(numOfNodes).map((i) => new DhtNode({
|
|
54
|
+
transport: cms[i],
|
|
54
55
|
peerDescriptor: peerDescriptors[i],
|
|
55
56
|
serviceId: streamPartId
|
|
56
57
|
}))
|
|
57
58
|
|
|
58
59
|
graphNodes = range(numOfNodes).map((i) => createRandomGraphNode({
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
streamPartId,
|
|
61
|
+
layer1Node: layer1Nodes[i],
|
|
62
|
+
transport: cms[i],
|
|
62
63
|
connectionLocker: cms[i],
|
|
63
64
|
ownPeerDescriptor: peerDescriptors[i],
|
|
64
65
|
neighborUpdateInterval: 2000
|
|
65
66
|
}))
|
|
66
67
|
|
|
67
68
|
entryPointRandomGraphNode = createRandomGraphNode({
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
streamPartId,
|
|
70
|
+
layer1Node: dhtEntryPoint,
|
|
71
|
+
transport: entrypointCm,
|
|
71
72
|
connectionLocker: entrypointCm,
|
|
72
73
|
ownPeerDescriptor: entrypointDescriptor,
|
|
73
74
|
neighborUpdateInterval: 2000
|
|
@@ -75,20 +76,20 @@ describe('RandomGraphNode-DhtNode', () => {
|
|
|
75
76
|
|
|
76
77
|
await dhtEntryPoint.start()
|
|
77
78
|
await dhtEntryPoint.joinDht([entrypointDescriptor])
|
|
78
|
-
await Promise.all(
|
|
79
|
+
await Promise.all(layer1Nodes.map((node) => node.start()))
|
|
79
80
|
})
|
|
80
81
|
|
|
81
82
|
afterEach(async () => {
|
|
82
83
|
await dhtEntryPoint.stop()
|
|
83
84
|
entryPointRandomGraphNode.stop()
|
|
84
|
-
await Promise.all(
|
|
85
|
+
await Promise.all(layer1Nodes.map((node) => node.stop()))
|
|
85
86
|
await Promise.all(graphNodes.map((node) => node.stop()))
|
|
86
87
|
Simulator.useFakeTimers(false)
|
|
87
88
|
})
|
|
88
89
|
|
|
89
90
|
it('happy path single node ', async () => {
|
|
90
91
|
await entryPointRandomGraphNode.start()
|
|
91
|
-
await
|
|
92
|
+
await layer1Nodes[0].joinDht([entrypointDescriptor])
|
|
92
93
|
|
|
93
94
|
await graphNodes[0].start()
|
|
94
95
|
|
|
@@ -99,13 +100,13 @@ describe('RandomGraphNode-DhtNode', () => {
|
|
|
99
100
|
|
|
100
101
|
it('happy path 4 nodes', async () => {
|
|
101
102
|
entryPointRandomGraphNode.start()
|
|
102
|
-
range(4).
|
|
103
|
+
range(4).forEach((i) => graphNodes[i].start())
|
|
103
104
|
await Promise.all(range(4).map(async (i) => {
|
|
104
|
-
await
|
|
105
|
+
await layer1Nodes[i].joinDht([entrypointDescriptor])
|
|
105
106
|
}))
|
|
106
107
|
|
|
107
108
|
await waitForCondition(() => range(4).every((i) => graphNodes[i].getTargetNeighborIds().length === 4))
|
|
108
|
-
range(4).
|
|
109
|
+
range(4).forEach((i) => {
|
|
109
110
|
expect(graphNodes[i].getNearbyNodeView().getIds().length).toBeGreaterThanOrEqual(4)
|
|
110
111
|
expect(graphNodes[i].getTargetNeighborIds().length).toBeGreaterThanOrEqual(4)
|
|
111
112
|
})
|
|
@@ -113,7 +114,7 @@ describe('RandomGraphNode-DhtNode', () => {
|
|
|
113
114
|
// Check bidirectionality
|
|
114
115
|
const allNodes = graphNodes
|
|
115
116
|
allNodes.push(entryPointRandomGraphNode)
|
|
116
|
-
range(5).
|
|
117
|
+
range(5).forEach((i) => {
|
|
117
118
|
allNodes[i].getNearbyNodeView().getIds().forEach((nodeId) => {
|
|
118
119
|
const neighbor = allNodes.find((node) => {
|
|
119
120
|
return node.getOwnNodeId() === nodeId
|
|
@@ -126,7 +127,7 @@ describe('RandomGraphNode-DhtNode', () => {
|
|
|
126
127
|
it('happy path 64 nodes', async () => {
|
|
127
128
|
await Promise.all(range(numOfNodes).map((i) => graphNodes[i].start()))
|
|
128
129
|
await Promise.all(range(numOfNodes).map((i) => {
|
|
129
|
-
|
|
130
|
+
layer1Nodes[i].joinDht([entrypointDescriptor])
|
|
130
131
|
}))
|
|
131
132
|
await Promise.all(graphNodes.map((node) =>
|
|
132
133
|
waitForCondition(() => node.getTargetNeighborIds().length >= 4, 10000)
|
|
@@ -10,11 +10,12 @@ import { waitForEvent3, waitForCondition } from '@streamr/utils'
|
|
|
10
10
|
import { createStreamMessage } from '../utils/utils'
|
|
11
11
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
12
12
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
13
|
+
import { Layer0Node } from '../../src/logic/Layer0Node'
|
|
13
14
|
|
|
14
15
|
describe('StreamrNode', () => {
|
|
15
16
|
|
|
16
|
-
let
|
|
17
|
-
let
|
|
17
|
+
let layer0Node1: Layer0Node
|
|
18
|
+
let layer0Node2: Layer0Node
|
|
18
19
|
let transport1: SimulatorTransport
|
|
19
20
|
let transport2: SimulatorTransport
|
|
20
21
|
let node1: StreamrNode
|
|
@@ -46,31 +47,33 @@ describe('StreamrNode', () => {
|
|
|
46
47
|
beforeEach(async () => {
|
|
47
48
|
const simulator = new Simulator()
|
|
48
49
|
transport1 = new SimulatorTransport(peerDescriptor1, simulator)
|
|
50
|
+
await transport1.start()
|
|
49
51
|
transport2 = new SimulatorTransport(peerDescriptor2, simulator)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
await transport2.start()
|
|
53
|
+
layer0Node1 = new DhtNode({
|
|
54
|
+
transport: transport1,
|
|
52
55
|
peerDescriptor: peerDescriptor1,
|
|
53
56
|
entryPoints: [peerDescriptor1]
|
|
54
57
|
})
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
layer0Node2 = new DhtNode({
|
|
59
|
+
transport: transport2,
|
|
57
60
|
peerDescriptor: peerDescriptor2,
|
|
58
61
|
entryPoints: [peerDescriptor1]
|
|
59
62
|
})
|
|
60
63
|
await Promise.all([
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
layer0Node1.start(),
|
|
65
|
+
layer0Node2.start()
|
|
63
66
|
])
|
|
64
67
|
await Promise.all([
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
layer0Node1.joinDht([peerDescriptor1]),
|
|
69
|
+
layer0Node2.joinDht([peerDescriptor1])
|
|
67
70
|
])
|
|
68
71
|
|
|
69
72
|
node1 = new StreamrNode({})
|
|
70
73
|
node2 = new StreamrNode({})
|
|
71
|
-
await node1.start(
|
|
74
|
+
await node1.start(layer0Node1, transport1, transport1)
|
|
72
75
|
node1.setStreamPartEntryPoints(STREAM_PART_ID, [peerDescriptor1])
|
|
73
|
-
await node2.start(
|
|
76
|
+
await node2.start(layer0Node2, transport2, transport2)
|
|
74
77
|
node2.setStreamPartEntryPoints(STREAM_PART_ID, [peerDescriptor1])
|
|
75
78
|
})
|
|
76
79
|
|
|
@@ -126,7 +129,7 @@ describe('StreamrNode', () => {
|
|
|
126
129
|
])
|
|
127
130
|
})
|
|
128
131
|
|
|
129
|
-
it('leaving
|
|
132
|
+
it('leaving stream parts', async () => {
|
|
130
133
|
node1.joinStreamPart(STREAM_PART_ID)
|
|
131
134
|
node2.joinStreamPart(STREAM_PART_ID)
|
|
132
135
|
await Promise.all([
|
|
@@ -1,42 +1,38 @@
|
|
|
1
1
|
import { NodeType, PeerDescriptor, Simulator, SimulatorTransport, LatencyType } from '@streamr/dht'
|
|
2
2
|
import { NetworkStack } from '../../src/NetworkStack'
|
|
3
|
-
import { streamPartIdToDataKey } from '../../src/logic/
|
|
3
|
+
import { streamPartIdToDataKey } from '../../src/logic/EntryPointDiscovery'
|
|
4
4
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
5
5
|
import { Any } from '../../src/proto/google/protobuf/any'
|
|
6
6
|
import { createStreamMessage } from '../utils/utils'
|
|
7
7
|
import { waitForCondition } from '@streamr/utils'
|
|
8
8
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const STREAM_PART_ID = StreamPartIDUtils.parse('stream#0')
|
|
11
|
+
|
|
12
|
+
describe('Joining stream parts on offline nodes', () => {
|
|
12
13
|
|
|
13
14
|
const entryPointPeerDescriptor: PeerDescriptor = {
|
|
14
15
|
kademliaId: new Uint8Array([1, 2, 3]),
|
|
15
|
-
nodeName: 'entrypoint',
|
|
16
16
|
type: NodeType.NODEJS
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
const node1PeerDescriptor: PeerDescriptor = {
|
|
20
20
|
kademliaId: new Uint8Array([1, 1, 1]),
|
|
21
|
-
nodeName: 'node1',
|
|
22
21
|
type: NodeType.NODEJS
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
const node2PeerDescriptor: PeerDescriptor = {
|
|
26
25
|
kademliaId: new Uint8Array([2, 2, 2]),
|
|
27
|
-
nodeName: 'node2',
|
|
28
26
|
type: NodeType.NODEJS
|
|
29
27
|
}
|
|
30
28
|
|
|
31
29
|
const offlineDescriptor1: PeerDescriptor = {
|
|
32
30
|
kademliaId: new Uint8Array([3, 3, 3]),
|
|
33
|
-
nodeName: 'offline',
|
|
34
31
|
type: NodeType.NODEJS
|
|
35
32
|
}
|
|
36
33
|
|
|
37
34
|
const offlineDescriptor2: PeerDescriptor = {
|
|
38
35
|
kademliaId: new Uint8Array([4, 4, 4]),
|
|
39
|
-
nodeName: 'offline',
|
|
40
36
|
type: NodeType.NODEJS
|
|
41
37
|
}
|
|
42
38
|
|
|
@@ -50,28 +46,30 @@ describe('Joining streams on offline nodes', () => {
|
|
|
50
46
|
const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
|
|
51
47
|
entryPoint = new NetworkStack({
|
|
52
48
|
layer0: {
|
|
53
|
-
|
|
49
|
+
transport: entryPointTransport,
|
|
54
50
|
peerDescriptor: entryPointPeerDescriptor,
|
|
55
51
|
entryPoints: [entryPointPeerDescriptor]
|
|
56
52
|
}
|
|
57
53
|
})
|
|
58
|
-
|
|
54
|
+
const node1Transport = new SimulatorTransport(node1PeerDescriptor, simulator)
|
|
59
55
|
node1 = new NetworkStack({
|
|
60
56
|
layer0: {
|
|
61
|
-
|
|
57
|
+
transport: node1Transport,
|
|
62
58
|
peerDescriptor: node1PeerDescriptor,
|
|
63
59
|
entryPoints: [entryPointPeerDescriptor]
|
|
64
60
|
}
|
|
65
61
|
})
|
|
66
|
-
|
|
62
|
+
const node2Transport = new SimulatorTransport(node2PeerDescriptor, simulator)
|
|
67
63
|
node2 = new NetworkStack({
|
|
68
64
|
layer0: {
|
|
69
|
-
|
|
65
|
+
transport: node2Transport,
|
|
70
66
|
peerDescriptor: node2PeerDescriptor,
|
|
71
67
|
entryPoints: [entryPointPeerDescriptor]
|
|
72
68
|
}
|
|
73
69
|
})
|
|
74
|
-
|
|
70
|
+
await entryPointTransport.start()
|
|
71
|
+
await node1Transport.start()
|
|
72
|
+
await node2Transport.start()
|
|
75
73
|
await entryPoint.start()
|
|
76
74
|
await node1.start()
|
|
77
75
|
await node2.start()
|
|
@@ -88,12 +86,12 @@ describe('Joining streams on offline nodes', () => {
|
|
|
88
86
|
let messageReceived = false
|
|
89
87
|
|
|
90
88
|
// store offline peer descriptors to DHT
|
|
91
|
-
await entryPoint.
|
|
92
|
-
await entryPoint.
|
|
89
|
+
await entryPoint.getLayer0Node().storeDataToDht(streamPartIdToDataKey(STREAM_PART_ID), Any.pack(offlineDescriptor1, PeerDescriptor))
|
|
90
|
+
await entryPoint.getLayer0Node().storeDataToDht(streamPartIdToDataKey(STREAM_PART_ID), Any.pack(offlineDescriptor2, PeerDescriptor))
|
|
93
91
|
|
|
94
|
-
node1.getStreamrNode().joinStreamPart(
|
|
92
|
+
node1.getStreamrNode().joinStreamPart(STREAM_PART_ID)
|
|
95
93
|
node1.getStreamrNode().on('newMessage', () => { messageReceived = true })
|
|
96
|
-
const msg = createStreamMessage(JSON.stringify({ hello: 'WORLD' }),
|
|
94
|
+
const msg = createStreamMessage(JSON.stringify({ hello: 'WORLD' }), STREAM_PART_ID, randomEthereumAddress())
|
|
97
95
|
node2.getStreamrNode().broadcast(msg)
|
|
98
96
|
await waitForCondition(() => messageReceived, 40000)
|
|
99
97
|
}, 60000)
|
|
@@ -4,13 +4,12 @@ import {
|
|
|
4
4
|
MessageRef,
|
|
5
5
|
StreamMessage,
|
|
6
6
|
StreamMessageType,
|
|
7
|
-
StreamPartIDUtils
|
|
8
|
-
toStreamID
|
|
7
|
+
StreamPartIDUtils
|
|
9
8
|
} from '@streamr/protocol'
|
|
10
9
|
import { EthereumAddress, hexToBinary, utf8ToBinary, waitForCondition } from '@streamr/utils'
|
|
11
10
|
import { range } from 'lodash'
|
|
12
11
|
import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
|
|
13
|
-
import { streamPartIdToDataKey } from '../../src/logic/
|
|
12
|
+
import { streamPartIdToDataKey } from '../../src/logic/EntryPointDiscovery'
|
|
14
13
|
import { createMockPeerDescriptor } from '../utils/utils'
|
|
15
14
|
|
|
16
15
|
const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
|
|
@@ -22,14 +21,13 @@ describe('stream without default entrypoints', () => {
|
|
|
22
21
|
let numOfReceivedMessages: number
|
|
23
22
|
const entryPointPeerDescriptor: PeerDescriptor = {
|
|
24
23
|
kademliaId: new Uint8Array([1, 2, 3]),
|
|
25
|
-
nodeName: 'entrypoint',
|
|
26
24
|
type: NodeType.NODEJS
|
|
27
25
|
}
|
|
28
26
|
|
|
29
27
|
const streamMessage = new StreamMessage({
|
|
30
28
|
messageId: new MessageID(
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
StreamPartIDUtils.getStreamID(STREAM_PART_ID),
|
|
30
|
+
StreamPartIDUtils.getStreamPartition(STREAM_PART_ID),
|
|
33
31
|
666,
|
|
34
32
|
0,
|
|
35
33
|
'0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as EthereumAddress,
|
|
@@ -49,23 +47,23 @@ describe('stream without default entrypoints', () => {
|
|
|
49
47
|
nodes = []
|
|
50
48
|
numOfReceivedMessages = 0
|
|
51
49
|
const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
|
|
50
|
+
await entryPointTransport.start()
|
|
52
51
|
entrypoint = createNetworkNode({
|
|
53
52
|
layer0: {
|
|
54
|
-
|
|
53
|
+
transport: entryPointTransport,
|
|
55
54
|
peerDescriptor: entryPointPeerDescriptor,
|
|
56
55
|
entryPoints: [entryPointPeerDescriptor]
|
|
57
56
|
}
|
|
58
57
|
})
|
|
59
58
|
await entrypoint.start()
|
|
60
|
-
await Promise.all(range(20).map(async (
|
|
61
|
-
const peerDescriptor = createMockPeerDescriptor(
|
|
62
|
-
nodeName: `${i}`
|
|
63
|
-
})
|
|
59
|
+
await Promise.all(range(20).map(async () => {
|
|
60
|
+
const peerDescriptor = createMockPeerDescriptor()
|
|
64
61
|
const transport = new SimulatorTransport(peerDescriptor, simulator)
|
|
62
|
+
await transport.start()
|
|
65
63
|
const node = createNetworkNode({
|
|
66
64
|
layer0: {
|
|
67
65
|
peerDescriptor,
|
|
68
|
-
|
|
66
|
+
transport,
|
|
69
67
|
entryPoints: [entryPointPeerDescriptor]
|
|
70
68
|
}
|
|
71
69
|
})
|
|
@@ -121,8 +119,8 @@ describe('stream without default entrypoints', () => {
|
|
|
121
119
|
await nodes[i].join(STREAM_PART_ID, { minCount: (i > 0) ? 1 : 0, timeout: 15000 })
|
|
122
120
|
}
|
|
123
121
|
await waitForCondition(async () => {
|
|
124
|
-
const entryPointData = await nodes[15].stack.
|
|
125
|
-
return entryPointData.
|
|
122
|
+
const entryPointData = await nodes[15].stack.getLayer0Node().getDataFromDht(streamPartIdToDataKey(STREAM_PART_ID))
|
|
123
|
+
return entryPointData.length >= 7
|
|
126
124
|
}, 15000)
|
|
127
125
|
|
|
128
126
|
}, 90000)
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { ListeningRpcCommunicator } from '@streamr/dht'
|
|
2
2
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
3
3
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
4
|
-
import {
|
|
4
|
+
import { DeliveryRpcLocal } from '../../src/logic/DeliveryRpcLocal'
|
|
5
5
|
import { LeaveStreamPartNotice } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
6
6
|
import { MockTransport } from '../utils/mock/Transport'
|
|
7
7
|
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
8
8
|
|
|
9
|
-
describe('
|
|
9
|
+
describe('DeliveryRpcLocal', () => {
|
|
10
10
|
|
|
11
|
-
let
|
|
11
|
+
let rpcLocal: DeliveryRpcLocal
|
|
12
12
|
const peerDescriptor = createMockPeerDescriptor()
|
|
13
13
|
|
|
14
14
|
const mockSender = createMockPeerDescriptor()
|
|
@@ -30,19 +30,19 @@ describe('StreamNodeServer', () => {
|
|
|
30
30
|
mockOnLeaveNotice = jest.fn((_m) => {})
|
|
31
31
|
mockMarkForInspection = jest.fn((_m) => {})
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
rpcLocal = new DeliveryRpcLocal({
|
|
34
34
|
markAndCheckDuplicate: mockDuplicateCheck,
|
|
35
35
|
broadcast: mockBroadcast,
|
|
36
36
|
onLeaveNotice: mockOnLeaveNotice,
|
|
37
37
|
markForInspection: mockMarkForInspection,
|
|
38
38
|
ownPeerDescriptor: peerDescriptor,
|
|
39
|
-
|
|
39
|
+
streamPartId: StreamPartIDUtils.parse('stream#0'),
|
|
40
40
|
rpcCommunicator: new ListeningRpcCommunicator('random-graph-node', new MockTransport())
|
|
41
41
|
})
|
|
42
42
|
})
|
|
43
43
|
|
|
44
44
|
it('Server sendStreamMessage()', async () => {
|
|
45
|
-
await
|
|
45
|
+
await rpcLocal.sendStreamMessage(message, { incomingSourceDescriptor: mockSender } as any)
|
|
46
46
|
expect(mockDuplicateCheck).toHaveBeenCalledTimes(1)
|
|
47
47
|
expect(mockBroadcast).toHaveBeenCalledTimes(1)
|
|
48
48
|
expect(mockMarkForInspection).toHaveBeenCalledTimes(1)
|
|
@@ -50,9 +50,9 @@ describe('StreamNodeServer', () => {
|
|
|
50
50
|
|
|
51
51
|
it('Server leaveStreamPartNotice()', async () => {
|
|
52
52
|
const leaveNotice: LeaveStreamPartNotice = {
|
|
53
|
-
|
|
53
|
+
streamPartId: StreamPartIDUtils.parse('stream#0')
|
|
54
54
|
}
|
|
55
|
-
await
|
|
55
|
+
await rpcLocal.leaveStreamPartNotice(leaveNotice, { incomingSourceDescriptor: mockSender } as any)
|
|
56
56
|
expect(mockOnLeaveNotice).toHaveBeenCalledTimes(1)
|
|
57
57
|
})
|
|
58
58
|
|