@streamr/trackerless-network 0.0.1-tatum.7 → 100.0.0-pretestnet.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/dist/package.json +6 -6
- package/dist/src/NetworkNode.js +1 -1
- package/dist/src/NetworkNode.js.map +1 -1
- package/dist/src/NetworkStack.d.ts +4 -3
- package/dist/src/NetworkStack.js +12 -12
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/logic/EntryPointDiscovery.d.ts +2 -2
- package/dist/src/logic/EntryPointDiscovery.js +4 -4
- package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
- package/dist/src/logic/{ILayer0.d.ts → Layer0Node.d.ts} +5 -1
- 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/RandomGraphNode.d.ts +3 -3
- package/dist/src/logic/RandomGraphNode.js +9 -9
- package/dist/src/logic/RandomGraphNode.js.map +1 -1
- package/dist/src/logic/StreamrNode.d.ts +6 -6
- package/dist/src/logic/StreamrNode.js +29 -28
- package/dist/src/logic/StreamrNode.js.map +1 -1
- package/dist/src/logic/createRandomGraphNode.js +1 -1
- package/dist/src/logic/createRandomGraphNode.js.map +1 -1
- package/dist/src/logic/proxy/ProxyClient.d.ts +1 -1
- package/dist/src/logic/proxy/ProxyClient.js +2 -2
- package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
- 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 -114
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +49 -47
- 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/test/benchmark/first-message.js +9 -7
- package/dist/test/benchmark/first-message.js.map +1 -1
- package/dist/test/utils/utils.d.ts +3 -2
- package/dist/test/utils/utils.js +4 -4
- package/dist/test/utils/utils.js.map +1 -1
- package/package.json +6 -6
- package/src/NetworkNode.ts +1 -1
- package/src/NetworkStack.ts +14 -13
- package/src/logic/EntryPointDiscovery.ts +6 -6
- package/src/logic/{ILayer0.ts → Layer0Node.ts} +5 -1
- package/src/logic/{ILayer1.ts → Layer1Node.ts} +5 -5
- package/src/logic/RandomGraphNode.ts +12 -12
- package/src/logic/StreamrNode.ts +35 -34
- package/src/logic/createRandomGraphNode.ts +1 -1
- package/src/logic/proxy/ProxyClient.ts +3 -3
- 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 +87 -160
- package/test/benchmark/first-message.ts +11 -9
- package/test/end-to-end/proxy-and-full-node.test.ts +4 -4
- package/test/end-to-end/random-graph-with-real-connections.test.ts +20 -15
- package/test/integration/Inspect.test.ts +1 -1
- package/test/integration/Propagation.test.ts +13 -12
- package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +13 -12
- package/test/integration/RandomGraphNode-Layer1Node.test.ts +13 -12
- package/test/integration/StreamrNode.test.ts +11 -10
- package/test/integration/joining-streams-on-offline-peers.test.ts +2 -2
- package/test/integration/stream-without-default-entrypoints.test.ts +1 -1
- package/test/unit/EntrypointDiscovery.test.ts +7 -7
- package/test/unit/RandomGraphNode.test.ts +10 -9
- package/test/unit/StreamrNode.test.ts +2 -2
- package/test/utils/mock/{MockLayer0.ts → MockLayer0Node.ts} +21 -5
- package/test/utils/mock/{MockLayer1.ts → MockLayer1Node.ts} +2 -2
- package/test/utils/utils.ts +6 -5
- package/dist/src/logic/ILayer0.js.map +0 -1
- package/dist/src/logic/ILayer1.js.map +0 -1
|
@@ -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
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
|
|
|
@@ -32,41 +33,41 @@ describe('RandomGraphNode-DhtNode-Latencies', () => {
|
|
|
32
33
|
peerDescriptor: entrypointDescriptor,
|
|
33
34
|
serviceId: streamPartId
|
|
34
35
|
})
|
|
35
|
-
|
|
36
|
+
layer1Nodes = range(numOfNodes).map((i) => new DhtNode({
|
|
36
37
|
transport: cms[i],
|
|
37
38
|
peerDescriptor: peerDescriptors[i],
|
|
38
39
|
serviceId: streamPartId
|
|
39
40
|
}))
|
|
40
41
|
graphNodes = range(numOfNodes).map((i) => createRandomGraphNode({
|
|
41
42
|
streamPartId,
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
layer1Node: layer1Nodes[i],
|
|
44
|
+
transport: cms[i],
|
|
44
45
|
connectionLocker: cms[i],
|
|
45
46
|
ownPeerDescriptor: peerDescriptors[i]
|
|
46
47
|
}))
|
|
47
48
|
entryPointRandomGraphNode = createRandomGraphNode({
|
|
48
49
|
streamPartId,
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
layer1Node: dhtEntryPoint,
|
|
51
|
+
transport: entrypointCm,
|
|
51
52
|
connectionLocker: entrypointCm,
|
|
52
53
|
ownPeerDescriptor: entrypointDescriptor
|
|
53
54
|
})
|
|
54
55
|
|
|
55
56
|
await dhtEntryPoint.start()
|
|
56
57
|
await dhtEntryPoint.joinDht([entrypointDescriptor])
|
|
57
|
-
await Promise.all(
|
|
58
|
+
await Promise.all(layer1Nodes.map((node) => node.start()))
|
|
58
59
|
})
|
|
59
60
|
|
|
60
61
|
afterEach(async () => {
|
|
61
62
|
dhtEntryPoint.stop()
|
|
62
63
|
entryPointRandomGraphNode.stop()
|
|
63
|
-
await Promise.all(
|
|
64
|
+
await Promise.all(layer1Nodes.map((node) => node.stop()))
|
|
64
65
|
await Promise.all(graphNodes.map((node) => node.stop()))
|
|
65
66
|
Simulator.useFakeTimers(false)
|
|
66
67
|
})
|
|
67
68
|
|
|
68
69
|
it('happy path single node', async () => {
|
|
69
|
-
await
|
|
70
|
+
await layer1Nodes[0].joinDht([entrypointDescriptor])
|
|
70
71
|
entryPointRandomGraphNode.start()
|
|
71
72
|
await graphNodes[0].start()
|
|
72
73
|
await Promise.all([
|
|
@@ -81,7 +82,7 @@ describe('RandomGraphNode-DhtNode-Latencies', () => {
|
|
|
81
82
|
entryPointRandomGraphNode.start()
|
|
82
83
|
range(4).forEach((i) => graphNodes[i].start())
|
|
83
84
|
await Promise.all(range(4).map(async (i) => {
|
|
84
|
-
await
|
|
85
|
+
await layer1Nodes[i].joinDht([entrypointDescriptor])
|
|
85
86
|
}))
|
|
86
87
|
await Promise.all(range(4).map((i) => {
|
|
87
88
|
return waitForCondition(() => {
|
|
@@ -109,7 +110,7 @@ describe('RandomGraphNode-DhtNode-Latencies', () => {
|
|
|
109
110
|
it('happy path 64 nodes', async () => {
|
|
110
111
|
await Promise.all(range(numOfNodes).map((i) => graphNodes[i].start()))
|
|
111
112
|
await Promise.all(range(numOfNodes).map((i) => {
|
|
112
|
-
|
|
113
|
+
layer1Nodes[i].joinDht([entrypointDescriptor])
|
|
113
114
|
}))
|
|
114
115
|
await Promise.all(graphNodes.map((node) =>
|
|
115
116
|
waitForCondition(() => node.getTargetNeighborIds().length >= 4, 10000)
|
|
@@ -5,13 +5,14 @@ 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
|
|
|
@@ -49,7 +50,7 @@ describe('RandomGraphNode-DhtNode', () => {
|
|
|
49
50
|
serviceId: streamPartId
|
|
50
51
|
})
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
layer1Nodes = range(numOfNodes).map((i) => new DhtNode({
|
|
53
54
|
transport: cms[i],
|
|
54
55
|
peerDescriptor: peerDescriptors[i],
|
|
55
56
|
serviceId: streamPartId
|
|
@@ -57,8 +58,8 @@ describe('RandomGraphNode-DhtNode', () => {
|
|
|
57
58
|
|
|
58
59
|
graphNodes = range(numOfNodes).map((i) => createRandomGraphNode({
|
|
59
60
|
streamPartId,
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
layer1Node: layer1Nodes[i],
|
|
62
|
+
transport: cms[i],
|
|
62
63
|
connectionLocker: cms[i],
|
|
63
64
|
ownPeerDescriptor: peerDescriptors[i],
|
|
64
65
|
neighborUpdateInterval: 2000
|
|
@@ -66,8 +67,8 @@ describe('RandomGraphNode-DhtNode', () => {
|
|
|
66
67
|
|
|
67
68
|
entryPointRandomGraphNode = createRandomGraphNode({
|
|
68
69
|
streamPartId,
|
|
69
|
-
|
|
70
|
-
|
|
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
|
|
|
@@ -101,7 +102,7 @@ describe('RandomGraphNode-DhtNode', () => {
|
|
|
101
102
|
entryPointRandomGraphNode.start()
|
|
102
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))
|
|
@@ -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
|
|
@@ -49,30 +50,30 @@ describe('StreamrNode', () => {
|
|
|
49
50
|
await transport1.start()
|
|
50
51
|
transport2 = new SimulatorTransport(peerDescriptor2, simulator)
|
|
51
52
|
await transport2.start()
|
|
52
|
-
|
|
53
|
+
layer0Node1 = new DhtNode({
|
|
53
54
|
transport: transport1,
|
|
54
55
|
peerDescriptor: peerDescriptor1,
|
|
55
56
|
entryPoints: [peerDescriptor1]
|
|
56
57
|
})
|
|
57
|
-
|
|
58
|
+
layer0Node2 = new DhtNode({
|
|
58
59
|
transport: transport2,
|
|
59
60
|
peerDescriptor: peerDescriptor2,
|
|
60
61
|
entryPoints: [peerDescriptor1]
|
|
61
62
|
})
|
|
62
63
|
await Promise.all([
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
layer0Node1.start(),
|
|
65
|
+
layer0Node2.start()
|
|
65
66
|
])
|
|
66
67
|
await Promise.all([
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
layer0Node1.joinDht([peerDescriptor1]),
|
|
69
|
+
layer0Node2.joinDht([peerDescriptor1])
|
|
69
70
|
])
|
|
70
71
|
|
|
71
72
|
node1 = new StreamrNode({})
|
|
72
73
|
node2 = new StreamrNode({})
|
|
73
|
-
await node1.start(
|
|
74
|
+
await node1.start(layer0Node1, transport1, transport1)
|
|
74
75
|
node1.setStreamPartEntryPoints(STREAM_PART_ID, [peerDescriptor1])
|
|
75
|
-
await node2.start(
|
|
76
|
+
await node2.start(layer0Node2, transport2, transport2)
|
|
76
77
|
node2.setStreamPartEntryPoints(STREAM_PART_ID, [peerDescriptor1])
|
|
77
78
|
})
|
|
78
79
|
|
|
@@ -86,8 +86,8 @@ describe('Joining stream parts on offline nodes', () => {
|
|
|
86
86
|
let messageReceived = false
|
|
87
87
|
|
|
88
88
|
// store offline peer descriptors to DHT
|
|
89
|
-
await entryPoint.
|
|
90
|
-
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))
|
|
91
91
|
|
|
92
92
|
node1.getStreamrNode().joinStreamPart(STREAM_PART_ID)
|
|
93
93
|
node1.getStreamrNode().on('newMessage', () => { messageReceived = true })
|
|
@@ -119,7 +119,7 @@ describe('stream without default entrypoints', () => {
|
|
|
119
119
|
await nodes[i].join(STREAM_PART_ID, { minCount: (i > 0) ? 1 : 0, timeout: 15000 })
|
|
120
120
|
}
|
|
121
121
|
await waitForCondition(async () => {
|
|
122
|
-
const entryPointData = await nodes[15].stack.
|
|
122
|
+
const entryPointData = await nodes[15].stack.getLayer0Node().getDataFromDht(streamPartIdToDataKey(STREAM_PART_ID))
|
|
123
123
|
return entryPointData.length >= 7
|
|
124
124
|
}, 15000)
|
|
125
125
|
|
|
@@ -5,7 +5,7 @@ import { range } from 'lodash'
|
|
|
5
5
|
import { EntryPointDiscovery } from '../../src/logic/EntryPointDiscovery'
|
|
6
6
|
import { Any } from '../../src/proto/google/protobuf/any'
|
|
7
7
|
import { DataEntry } from '../../src/proto/packages/dht/protos/DhtRpc'
|
|
8
|
-
import {
|
|
8
|
+
import { MockLayer1Node } from '../utils/mock/MockLayer1Node'
|
|
9
9
|
import { createMockPeerDescriptor } from '../utils/utils'
|
|
10
10
|
|
|
11
11
|
const STREAM_PART_ID = StreamPartIDUtils.parse('stream#0')
|
|
@@ -52,7 +52,7 @@ describe('EntryPointDiscovery', () => {
|
|
|
52
52
|
|
|
53
53
|
const fakeDeleteEntryPointData = async (): Promise<void> => {}
|
|
54
54
|
|
|
55
|
-
const addNodesToStreamPart = (layer1:
|
|
55
|
+
const addNodesToStreamPart = (layer1: MockLayer1Node, count: number) => {
|
|
56
56
|
range(count).forEach(() => {
|
|
57
57
|
layer1.addNewRandomPeerToKBucket()
|
|
58
58
|
layer1.addNewRandomPeerToKBucket()
|
|
@@ -61,15 +61,15 @@ describe('EntryPointDiscovery', () => {
|
|
|
61
61
|
})
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
let
|
|
64
|
+
let layer1Node: MockLayer1Node
|
|
65
65
|
|
|
66
66
|
beforeEach(() => {
|
|
67
67
|
storeCalled = 0
|
|
68
|
-
|
|
68
|
+
layer1Node = new MockLayer1Node()
|
|
69
69
|
entryPointDiscoveryWithData = new EntryPointDiscovery({
|
|
70
70
|
ownPeerDescriptor: peerDescriptor,
|
|
71
71
|
streamPartId: STREAM_PART_ID,
|
|
72
|
-
|
|
72
|
+
layer1Node,
|
|
73
73
|
getEntryPointData: fakeGetEntryPointData,
|
|
74
74
|
storeEntryPointData: fakeStoreEntryPointData,
|
|
75
75
|
deleteEntryPointData: fakeDeleteEntryPointData,
|
|
@@ -78,7 +78,7 @@ describe('EntryPointDiscovery', () => {
|
|
|
78
78
|
entryPointDiscoveryWithoutData = new EntryPointDiscovery({
|
|
79
79
|
ownPeerDescriptor: peerDescriptor,
|
|
80
80
|
streamPartId: STREAM_PART_ID,
|
|
81
|
-
|
|
81
|
+
layer1Node,
|
|
82
82
|
getEntryPointData: fakeEmptyGetEntryPointData,
|
|
83
83
|
storeEntryPointData: fakeStoreEntryPointData,
|
|
84
84
|
deleteEntryPointData: fakeDeleteEntryPointData,
|
|
@@ -115,7 +115,7 @@ describe('EntryPointDiscovery', () => {
|
|
|
115
115
|
})
|
|
116
116
|
|
|
117
117
|
it('store on stream without saturated entrypoint count', async () => {
|
|
118
|
-
addNodesToStreamPart(
|
|
118
|
+
addNodesToStreamPart(layer1Node, 4)
|
|
119
119
|
await entryPointDiscoveryWithData.storeSelfAsEntryPointIfNecessary(0)
|
|
120
120
|
expect(storeCalled).toEqual(1)
|
|
121
121
|
})
|
|
@@ -4,7 +4,7 @@ import { NodeList } from '../../src/logic/NodeList'
|
|
|
4
4
|
import { RandomGraphNode } from '../../src/logic/RandomGraphNode'
|
|
5
5
|
import { createRandomGraphNode } from '../../src/logic/createRandomGraphNode'
|
|
6
6
|
import { MockHandshaker } from '../utils/mock/MockHandshaker'
|
|
7
|
-
import {
|
|
7
|
+
import { MockLayer1Node } from '../utils/mock/MockLayer1Node'
|
|
8
8
|
import { MockNeighborFinder } from '../utils/mock/MockNeighborFinder'
|
|
9
9
|
import { MockNeighborUpdateManager } from '../utils/mock/MockNeighborUpdateManager'
|
|
10
10
|
import { MockTransport } from '../utils/mock/Transport'
|
|
@@ -20,22 +20,23 @@ describe('RandomGraphNode', () => {
|
|
|
20
20
|
let nearbyNodeView: NodeList
|
|
21
21
|
let randomNodeView: NodeList
|
|
22
22
|
|
|
23
|
-
let
|
|
23
|
+
let layer1Node: MockLayer1Node
|
|
24
|
+
|
|
24
25
|
beforeEach(async () => {
|
|
25
26
|
const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
|
|
26
27
|
|
|
27
28
|
targetNeighbors = new NodeList(nodeId, 10)
|
|
28
29
|
randomNodeView = new NodeList(nodeId, 10)
|
|
29
30
|
nearbyNodeView = new NodeList(nodeId, 10)
|
|
30
|
-
|
|
31
|
+
layer1Node = new MockLayer1Node()
|
|
31
32
|
|
|
32
33
|
randomGraphNode = createRandomGraphNode({
|
|
33
34
|
targetNeighbors,
|
|
34
35
|
randomNodeView,
|
|
35
36
|
nearbyNodeView,
|
|
36
|
-
|
|
37
|
+
transport: new MockTransport(),
|
|
37
38
|
ownPeerDescriptor: peerDescriptor,
|
|
38
|
-
|
|
39
|
+
layer1Node,
|
|
39
40
|
connectionLocker: mockConnectionLocker,
|
|
40
41
|
handshaker: new MockHandshaker(),
|
|
41
42
|
neighborUpdateManager: new MockNeighborUpdateManager(),
|
|
@@ -67,7 +68,7 @@ describe('RandomGraphNode', () => {
|
|
|
67
68
|
it('Adds Closest Nodes from layer1 newContact event to nearbyNodeView', async () => {
|
|
68
69
|
const peerDescriptor1 = createMockPeerDescriptor()
|
|
69
70
|
const peerDescriptor2 = createMockPeerDescriptor()
|
|
70
|
-
|
|
71
|
+
layer1Node.emit('newContact', peerDescriptor1, [peerDescriptor1, peerDescriptor2])
|
|
71
72
|
await waitForCondition(() => nearbyNodeView.size() === 2)
|
|
72
73
|
expect(nearbyNodeView.get(getNodeIdFromPeerDescriptor(peerDescriptor1))).toBeTruthy()
|
|
73
74
|
expect(nearbyNodeView.get(getNodeIdFromPeerDescriptor(peerDescriptor2))).toBeTruthy()
|
|
@@ -76,7 +77,7 @@ describe('RandomGraphNode', () => {
|
|
|
76
77
|
it('Adds Random Nodes from layer1 newRandomContact event to randomNodeView', async () => {
|
|
77
78
|
const peerDescriptor1 = createMockPeerDescriptor()
|
|
78
79
|
const peerDescriptor2 = createMockPeerDescriptor()
|
|
79
|
-
|
|
80
|
+
layer1Node.emit('newRandomContact', peerDescriptor1, [peerDescriptor1, peerDescriptor2])
|
|
80
81
|
await waitForCondition(() => randomNodeView.size() === 2)
|
|
81
82
|
expect(randomNodeView.get(getNodeIdFromPeerDescriptor(peerDescriptor1))).toBeTruthy()
|
|
82
83
|
expect(randomNodeView.get(getNodeIdFromPeerDescriptor(peerDescriptor2))).toBeTruthy()
|
|
@@ -85,8 +86,8 @@ describe('RandomGraphNode', () => {
|
|
|
85
86
|
it('Adds Nodes from layer1 KBucket to nearbyNodeView if its size is below nodeViewSize', async () => {
|
|
86
87
|
const peerDescriptor1 = createMockPeerDescriptor()
|
|
87
88
|
const peerDescriptor2 = createMockPeerDescriptor()
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
layer1Node.addNewRandomPeerToKBucket()
|
|
90
|
+
layer1Node.emit('newContact', peerDescriptor1, [peerDescriptor1, peerDescriptor2])
|
|
90
91
|
await waitForCondition(() => nearbyNodeView.size() === 3)
|
|
91
92
|
expect(nearbyNodeView.get(getNodeIdFromPeerDescriptor(peerDescriptor1))).toBeTruthy()
|
|
92
93
|
expect(nearbyNodeView.get(getNodeIdFromPeerDescriptor(peerDescriptor2))).toBeTruthy()
|
|
@@ -3,7 +3,7 @@ import { StreamPartIDUtils } from '@streamr/protocol'
|
|
|
3
3
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
4
4
|
import { waitForCondition } from '@streamr/utils'
|
|
5
5
|
import { StreamrNode } from '../../src/logic/StreamrNode'
|
|
6
|
-
import {
|
|
6
|
+
import { MockLayer0Node } from '../utils/mock/MockLayer0Node'
|
|
7
7
|
import { MockTransport } from '../utils/mock/Transport'
|
|
8
8
|
import { createMockPeerDescriptor, createStreamMessage, mockConnectionLocker } from '../utils/utils'
|
|
9
9
|
import { ProxyDirection } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
@@ -15,7 +15,7 @@ describe('StreamrNode', () => {
|
|
|
15
15
|
|
|
16
16
|
beforeEach(async () => {
|
|
17
17
|
node = new StreamrNode({})
|
|
18
|
-
const mockLayer0 = new
|
|
18
|
+
const mockLayer0 = new MockLayer0Node(peerDescriptor)
|
|
19
19
|
await node.start(mockLayer0, new MockTransport(), mockConnectionLocker)
|
|
20
20
|
})
|
|
21
21
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { PeerDescriptor, DataEntry } from '@streamr/dht'
|
|
2
|
-
import {
|
|
1
|
+
import { PeerDescriptor, DataEntry, ITransport } from '@streamr/dht'
|
|
2
|
+
import { Layer0Node } from '../../../src/logic/Layer0Node'
|
|
3
3
|
import { EventEmitter } from 'eventemitter3'
|
|
4
4
|
|
|
5
|
-
export class
|
|
5
|
+
export class MockLayer0Node extends EventEmitter implements Layer0Node {
|
|
6
6
|
|
|
7
7
|
private readonly peerDescriptor: PeerDescriptor
|
|
8
8
|
|
|
@@ -11,6 +11,16 @@ export class MockLayer0 extends EventEmitter implements ILayer0 {
|
|
|
11
11
|
this.peerDescriptor = peerDescriptor
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
// eslint-disable-next-line class-methods-use-this
|
|
15
|
+
joinDht(): Promise<void> {
|
|
16
|
+
throw new Error('not implemented')
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// eslint-disable-next-line class-methods-use-this
|
|
20
|
+
hasJoined(): boolean {
|
|
21
|
+
throw new Error('not implemented')
|
|
22
|
+
}
|
|
23
|
+
|
|
14
24
|
getPeerDescriptor(): PeerDescriptor {
|
|
15
25
|
return this.peerDescriptor
|
|
16
26
|
}
|
|
@@ -22,7 +32,6 @@ export class MockLayer0 extends EventEmitter implements ILayer0 {
|
|
|
22
32
|
|
|
23
33
|
// eslint-disable-next-line class-methods-use-this
|
|
24
34
|
async deleteDataFromDht(): Promise<void> {
|
|
25
|
-
|
|
26
35
|
}
|
|
27
36
|
|
|
28
37
|
// eslint-disable-next-line class-methods-use-this
|
|
@@ -45,8 +54,15 @@ export class MockLayer0 extends EventEmitter implements ILayer0 {
|
|
|
45
54
|
}
|
|
46
55
|
|
|
47
56
|
// eslint-disable-next-line class-methods-use-this
|
|
48
|
-
|
|
57
|
+
getTransport(): ITransport {
|
|
58
|
+
throw new Error('not implemented')
|
|
59
|
+
}
|
|
49
60
|
|
|
61
|
+
// eslint-disable-next-line class-methods-use-this
|
|
62
|
+
async start(): Promise<void> {
|
|
50
63
|
}
|
|
51
64
|
|
|
65
|
+
// eslint-disable-next-line class-methods-use-this
|
|
66
|
+
async stop(): Promise<void> {
|
|
67
|
+
}
|
|
52
68
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { PeerDescriptor } from '@streamr/dht'
|
|
2
2
|
import { EventEmitter } from 'eventemitter3'
|
|
3
|
-
import {
|
|
3
|
+
import { Layer1Node } from '../../../src/logic/Layer1Node'
|
|
4
4
|
import { createMockPeerDescriptor } from '../utils'
|
|
5
5
|
|
|
6
|
-
export class
|
|
6
|
+
export class MockLayer1Node extends EventEmitter implements Layer1Node {
|
|
7
7
|
|
|
8
8
|
private readonly kbucketPeers: PeerDescriptor[] = []
|
|
9
9
|
|
package/test/utils/utils.ts
CHANGED
|
@@ -15,6 +15,7 @@ import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
|
|
|
15
15
|
import { EthereumAddress, hexToBinary, utf8ToBinary } from '@streamr/utils'
|
|
16
16
|
import { StreamPartID, StreamPartIDUtils } from '@streamr/protocol'
|
|
17
17
|
import { NodeID } from '../../src/identifiers'
|
|
18
|
+
import { Layer1Node } from '../../src/logic/Layer1Node'
|
|
18
19
|
|
|
19
20
|
export const mockConnectionLocker: ConnectionLocker = {
|
|
20
21
|
lockConnection: () => {},
|
|
@@ -28,10 +29,10 @@ export const createMockRandomGraphNodeAndDhtNode = async (
|
|
|
28
29
|
entryPointDescriptor: PeerDescriptor,
|
|
29
30
|
streamPartId: StreamPartID,
|
|
30
31
|
simulator: Simulator
|
|
31
|
-
): Promise<[
|
|
32
|
+
): Promise<[ Layer1Node, RandomGraphNode ]> => {
|
|
32
33
|
const mockCm = new SimulatorTransport(ownPeerDescriptor, simulator)
|
|
33
34
|
await mockCm.start()
|
|
34
|
-
const
|
|
35
|
+
const layer1Node = new DhtNode({
|
|
35
36
|
transport: mockCm,
|
|
36
37
|
peerDescriptor: ownPeerDescriptor,
|
|
37
38
|
numberOfNodesPerKBucket: 4,
|
|
@@ -39,12 +40,12 @@ export const createMockRandomGraphNodeAndDhtNode = async (
|
|
|
39
40
|
})
|
|
40
41
|
const randomGraphNode = createRandomGraphNode({
|
|
41
42
|
streamPartId,
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
transport: mockCm,
|
|
44
|
+
layer1Node,
|
|
44
45
|
connectionLocker: mockCm,
|
|
45
46
|
ownPeerDescriptor
|
|
46
47
|
})
|
|
47
|
-
return [
|
|
48
|
+
return [layer1Node, randomGraphNode]
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
export const createStreamMessage = (
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ILayer0.js","sourceRoot":"","sources":["../../../src/logic/ILayer0.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ILayer1.js","sourceRoot":"","sources":["../../../src/logic/ILayer1.ts"],"names":[],"mappings":""}
|