@streamr/trackerless-network 102.0.0-beta.0 → 102.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/google/protobuf/any.js.map +1 -0
- package/dist/generated/google/protobuf/empty.js.map +1 -0
- package/dist/generated/google/protobuf/timestamp.js.map +1 -0
- package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.client.d.ts +9 -0
- package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.client.js +7 -0
- package/dist/generated/packages/dht/protos/DhtRpc.client.js.map +1 -0
- package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.d.ts +32 -8
- package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.js +23 -7
- package/dist/generated/packages/dht/protos/DhtRpc.js.map +1 -0
- package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.server.d.ts +5 -0
- package/dist/generated/packages/dht/protos/DhtRpc.server.js.map +1 -0
- package/dist/generated/packages/proto-rpc/protos/ProtoRpc.js.map +1 -0
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -0
- package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.d.ts +3 -3
- package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.js +1 -1
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.js.map +1 -0
- package/dist/generated/packages/trackerless-network/protos/NetworkRpc.server.js.map +1 -0
- package/dist/package.json +9 -10
- package/dist/src/NetworkNode.d.ts +4 -3
- package/dist/src/NetworkNode.js.map +1 -1
- package/dist/src/NetworkStack.d.ts +2 -2
- package/dist/src/NetworkStack.js +4 -4
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/exports.d.ts +3 -2
- package/dist/src/exports.js +3 -2
- package/dist/src/exports.js.map +1 -1
- package/dist/src/logic/ContentDeliveryLayerNode.d.ts +2 -1
- package/dist/src/logic/ContentDeliveryLayerNode.js +5 -5
- package/dist/src/logic/ContentDeliveryLayerNode.js.map +1 -1
- package/dist/src/logic/ContentDeliveryManager.d.ts +2 -1
- package/dist/src/logic/ContentDeliveryManager.js +2 -1
- package/dist/src/logic/ContentDeliveryManager.js.map +1 -1
- package/dist/src/logic/ContentDeliveryRpcLocal.d.ts +3 -3
- package/dist/src/logic/ContentDeliveryRpcLocal.js +1 -1
- package/dist/src/logic/ContentDeliveryRpcLocal.js.map +1 -1
- package/dist/src/logic/ContentDeliveryRpcRemote.d.ts +2 -2
- package/dist/src/logic/ControlLayerNode.d.ts +1 -1
- package/dist/src/logic/DiscoveryLayerNode.d.ts +3 -3
- package/dist/src/logic/DuplicateMessageDetector.js +1 -1
- package/dist/src/logic/DuplicateMessageDetector.js.map +1 -1
- package/dist/src/logic/PeerDescriptorStoreManager.d.ts +1 -1
- package/dist/src/logic/PeerDescriptorStoreManager.js +1 -1
- package/dist/src/logic/PeerDescriptorStoreManager.js.map +1 -1
- package/dist/src/logic/inspect/InspectSession.d.ts +2 -2
- package/dist/src/logic/inspect/InspectSession.js +2 -2
- package/dist/src/logic/inspect/InspectSession.js.map +1 -1
- package/dist/src/logic/inspect/Inspector.d.ts +1 -1
- package/dist/src/logic/inspect/Inspector.js +1 -1
- package/dist/src/logic/inspect/Inspector.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +2 -2
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.d.ts +2 -2
- package/dist/src/logic/neighbor-discovery/Handshaker.js +2 -2
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +2 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.d.ts +2 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.d.ts +1 -1
- package/dist/src/logic/node-info/NodeInfoClient.d.ts +1 -1
- package/dist/src/logic/node-info/NodeInfoClient.js +1 -1
- package/dist/src/logic/node-info/NodeInfoClient.js.map +1 -1
- package/dist/src/logic/node-info/NodeInfoRpcLocal.d.ts +2 -2
- package/dist/src/logic/node-info/NodeInfoRpcLocal.js +1 -1
- package/dist/src/logic/node-info/NodeInfoRpcLocal.js.map +1 -1
- package/dist/src/logic/node-info/NodeInfoRpcRemote.d.ts +2 -2
- package/dist/src/logic/propagation/Propagation.d.ts +1 -1
- package/dist/src/logic/propagation/PropagationTaskStore.d.ts +1 -1
- package/dist/src/logic/proxy/ProxyClient.d.ts +1 -2
- package/dist/src/logic/proxy/ProxyClient.js +2 -3
- package/dist/src/logic/proxy/ProxyClient.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.d.ts +2 -2
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js +4 -4
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.d.ts +2 -2
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.d.ts +4 -4
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.d.ts +1 -1
- package/dist/src/logic/utils.d.ts +1 -1
- package/dist/src/logic/utils.js +2 -2
- package/dist/src/logic/utils.js.map +1 -1
- package/dist/src/types.d.ts +6 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/test/benchmark/first-message.js +2 -2
- package/dist/test/benchmark/first-message.js.map +1 -1
- package/dist/test/utils/utils.d.ts +2 -2
- package/dist/test/utils/utils.js +5 -4
- package/dist/test/utils/utils.js.map +1 -1
- package/jest.config.ts +13 -0
- package/package.json +9 -10
- package/proto.sh +2 -2
- package/protos/NetworkRpc.proto +2 -3
- package/.eslintignore +0 -7
- package/.eslintrc +0 -3
- package/dist/src/proto/google/protobuf/any.js.map +0 -1
- package/dist/src/proto/google/protobuf/empty.js.map +0 -1
- package/dist/src/proto/google/protobuf/timestamp.js.map +0 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +0 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +0 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.js.map +0 -1
- package/dist/src/proto/packages/proto-rpc/protos/ProtoRpc.js.map +0 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +0 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +0 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.js.map +0 -1
- package/jest.config.js +0 -8
- package/src/NetworkNode.ts +0 -141
- package/src/NetworkStack.ts +0 -198
- package/src/exports.ts +0 -16
- package/src/logic/ContentDeliveryLayerNode.ts +0 -424
- package/src/logic/ContentDeliveryManager.ts +0 -399
- package/src/logic/ContentDeliveryRpcLocal.ts +0 -48
- package/src/logic/ContentDeliveryRpcRemote.ts +0 -44
- package/src/logic/ControlLayerNode.ts +0 -17
- package/src/logic/DiscoveryLayerNode.ts +0 -30
- package/src/logic/DuplicateMessageDetector.ts +0 -167
- package/src/logic/ExternalNetworkRpc.ts +0 -42
- package/src/logic/NodeList.ts +0 -114
- package/src/logic/PeerDescriptorStoreManager.ts +0 -96
- package/src/logic/StreamPartNetworkSplitAvoidance.ts +0 -90
- package/src/logic/StreamPartReconnect.ts +0 -38
- package/src/logic/createContentDeliveryLayerNode.ts +0 -130
- package/src/logic/formStreamPartDeliveryServiceId.ts +0 -7
- package/src/logic/inspect/InspectSession.ts +0 -54
- package/src/logic/inspect/Inspector.ts +0 -100
- package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +0 -138
- package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +0 -66
- package/src/logic/neighbor-discovery/Handshaker.ts +0 -215
- package/src/logic/neighbor-discovery/NeighborFinder.ts +0 -77
- package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +0 -69
- package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +0 -75
- package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +0 -35
- package/src/logic/node-info/NodeInfoClient.ts +0 -23
- package/src/logic/node-info/NodeInfoRpcLocal.ts +0 -28
- package/src/logic/node-info/NodeInfoRpcRemote.ts +0 -11
- package/src/logic/propagation/FifoMapWithTTL.ts +0 -116
- package/src/logic/propagation/Propagation.ts +0 -84
- package/src/logic/propagation/PropagationTaskStore.ts +0 -41
- package/src/logic/proxy/ProxyClient.ts +0 -287
- package/src/logic/proxy/ProxyConnectionRpcLocal.ts +0 -106
- package/src/logic/proxy/ProxyConnectionRpcRemote.ts +0 -26
- package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +0 -73
- package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +0 -29
- package/src/logic/utils.ts +0 -18
- package/src/proto/google/protobuf/any.ts +0 -326
- package/src/proto/google/protobuf/empty.ts +0 -81
- package/src/proto/google/protobuf/timestamp.ts +0 -287
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +0 -407
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +0 -160
- package/src/proto/packages/dht/protos/DhtRpc.ts +0 -1244
- package/src/proto/packages/proto-rpc/protos/ProtoRpc.ts +0 -108
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +0 -218
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +0 -85
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +0 -783
- package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +0 -60
- package/test/benchmark/first-message.ts +0 -169
- package/test/end-to-end/content-delivery-layer-node-with-real-connections.test.ts +0 -160
- package/test/end-to-end/external-network-rpc.test.ts +0 -67
- package/test/end-to-end/inspect.test.ts +0 -124
- package/test/end-to-end/proxy-and-full-node.test.ts +0 -143
- package/test/end-to-end/proxy-connections.test.ts +0 -228
- package/test/end-to-end/proxy-key-exchange.test.ts +0 -126
- package/test/end-to-end/webrtc-full-node-network.test.ts +0 -85
- package/test/end-to-end/websocket-full-node-network.test.ts +0 -84
- package/test/integration/ContentDeliveryLayerNode-Layer1Node-Latencies.test.ts +0 -139
- package/test/integration/ContentDeliveryLayerNode-Layer1Node.test.ts +0 -162
- package/test/integration/ContentDeliveryManager.test.ts +0 -157
- package/test/integration/ContentDeliveryRpcRemote.test.ts +0 -100
- package/test/integration/HandshakeRpcRemote.test.ts +0 -79
- package/test/integration/Handshakes.test.ts +0 -176
- package/test/integration/Inspect.test.ts +0 -89
- package/test/integration/NeighborUpdateRpcRemote.test.ts +0 -82
- package/test/integration/NetworkNode.test.ts +0 -115
- package/test/integration/NetworkRpc.test.ts +0 -52
- package/test/integration/NetworkStack.test.ts +0 -72
- package/test/integration/NodeInfoRpc.test.ts +0 -109
- package/test/integration/Propagation.test.ts +0 -76
- package/test/integration/joining-streams-on-offline-peers.test.ts +0 -82
- package/test/integration/stream-without-default-entrypoints.test.ts +0 -128
- package/test/integration/streamEntryPointReplacing.test.ts +0 -97
- package/test/types/global.d.ts +0 -2
- package/test/unit/ContentDeliveryLayerNode.test.ts +0 -112
- package/test/unit/ContentDeliveryManager.test.ts +0 -95
- package/test/unit/ContentDeliveryRpcLocal.test.ts +0 -60
- package/test/unit/DuplicateMessageDetector.test.ts +0 -192
- package/test/unit/ExternalNetworkRpc.test.ts +0 -48
- package/test/unit/FifoMapWithTtl.test.ts +0 -253
- package/test/unit/HandshakeRpcLocal.test.ts +0 -168
- package/test/unit/Handshaker.test.ts +0 -69
- package/test/unit/InspectSession.test.ts +0 -80
- package/test/unit/Inspector.test.ts +0 -51
- package/test/unit/NeighborFinder.test.ts +0 -51
- package/test/unit/NeighborUpdateRpcLocal.test.ts +0 -139
- package/test/unit/NetworkNode.test.ts +0 -42
- package/test/unit/NodeList.test.ts +0 -164
- package/test/unit/NumberPair.test.ts +0 -22
- package/test/unit/PeerDescriptorStoreManager.test.ts +0 -103
- package/test/unit/Propagation.test.ts +0 -151
- package/test/unit/ProxyConnectionRpcRemote.test.ts +0 -39
- package/test/unit/StreamPartIDDataKey.test.ts +0 -12
- package/test/unit/StreamPartNetworkSplitAvoidance.test.ts +0 -31
- package/test/unit/StreamPartReconnect.test.ts +0 -30
- package/test/unit/TemporaryConnectionRpcLocal.test.ts +0 -38
- package/test/utils/fake/FakePeerDescriptorStoreManager.ts +0 -29
- package/test/utils/mock/MockConnectionsView.ts +0 -18
- package/test/utils/mock/MockControlLayerNode.ts +0 -78
- package/test/utils/mock/MockDiscoveryLayerNode.ts +0 -60
- package/test/utils/mock/MockHandshaker.ts +0 -17
- package/test/utils/mock/MockNeighborFinder.ts +0 -20
- package/test/utils/mock/MockNeighborUpdateManager.ts +0 -21
- package/test/utils/mock/MockTransport.ts +0 -30
- package/test/utils/utils.ts +0 -143
- package/tsconfig.browser.json +0 -12
- package/tsconfig.jest.json +0 -16
- package/tsconfig.json +0 -3
- package/tsconfig.node.json +0 -16
- /package/dist/{src/proto → generated}/google/protobuf/any.d.ts +0 -0
- /package/dist/{src/proto → generated}/google/protobuf/any.js +0 -0
- /package/dist/{src/proto → generated}/google/protobuf/empty.d.ts +0 -0
- /package/dist/{src/proto → generated}/google/protobuf/empty.js +0 -0
- /package/dist/{src/proto → generated}/google/protobuf/timestamp.d.ts +0 -0
- /package/dist/{src/proto → generated}/google/protobuf/timestamp.js +0 -0
- /package/dist/{src/proto → generated}/packages/dht/protos/DhtRpc.server.js +0 -0
- /package/dist/{src/proto → generated}/packages/proto-rpc/protos/ProtoRpc.d.ts +0 -0
- /package/dist/{src/proto → generated}/packages/proto-rpc/protos/ProtoRpc.js +0 -0
- /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.client.d.ts +0 -0
- /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.client.js +0 -0
- /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.server.d.ts +0 -0
- /package/dist/{src/proto → generated}/packages/trackerless-network/protos/NetworkRpc.server.js +0 -0
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { ListeningRpcCommunicator, PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
|
|
2
|
-
import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
|
|
3
|
-
import { NetworkStack } from '../../src/NetworkStack'
|
|
4
|
-
import { NodeInfoClient } from '../../src/logic/node-info/NodeInfoClient'
|
|
5
|
-
import { NODE_INFO_RPC_SERVICE_ID } from '../../src/logic/node-info/NodeInfoRpcLocal'
|
|
6
|
-
import { createMockPeerDescriptor } from '../utils/utils'
|
|
7
|
-
|
|
8
|
-
// TODO add Jest utility so that the normalization is not needed (NET-1254)
|
|
9
|
-
const normalizePeerDescriptor = (peerDescriptor: PeerDescriptor) => {
|
|
10
|
-
return {
|
|
11
|
-
...peerDescriptor,
|
|
12
|
-
nodeId: new Uint8Array(peerDescriptor.nodeId)
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
describe('NetworkStack NodeInfoRpc', () => {
|
|
17
|
-
|
|
18
|
-
let requesteStack: NetworkStack
|
|
19
|
-
let otherStack: NetworkStack
|
|
20
|
-
let nodeInfoClient: NodeInfoClient
|
|
21
|
-
let requesteeTransport1: SimulatorTransport
|
|
22
|
-
let otherTransport: SimulatorTransport
|
|
23
|
-
let requestorTransport: SimulatorTransport
|
|
24
|
-
|
|
25
|
-
let simulator: Simulator
|
|
26
|
-
|
|
27
|
-
const requesteePeerDescriptor = createMockPeerDescriptor()
|
|
28
|
-
const otherPeerDescriptor = createMockPeerDescriptor()
|
|
29
|
-
const requestorPeerDescriptor = createMockPeerDescriptor()
|
|
30
|
-
|
|
31
|
-
beforeEach(async () => {
|
|
32
|
-
simulator = new Simulator()
|
|
33
|
-
requesteeTransport1 = new SimulatorTransport(requesteePeerDescriptor, simulator)
|
|
34
|
-
otherTransport = new SimulatorTransport(otherPeerDescriptor, simulator)
|
|
35
|
-
requestorTransport = new SimulatorTransport(requestorPeerDescriptor, simulator)
|
|
36
|
-
await requesteeTransport1.start()
|
|
37
|
-
await otherTransport.start()
|
|
38
|
-
await requestorTransport.start()
|
|
39
|
-
requesteStack = new NetworkStack({
|
|
40
|
-
layer0: {
|
|
41
|
-
transport: requesteeTransport1,
|
|
42
|
-
connectionsView: requesteeTransport1,
|
|
43
|
-
peerDescriptor: requesteePeerDescriptor,
|
|
44
|
-
entryPoints: [requesteePeerDescriptor]
|
|
45
|
-
}
|
|
46
|
-
})
|
|
47
|
-
otherStack = new NetworkStack({
|
|
48
|
-
layer0: {
|
|
49
|
-
transport: otherTransport,
|
|
50
|
-
connectionsView: otherTransport,
|
|
51
|
-
peerDescriptor: otherPeerDescriptor,
|
|
52
|
-
entryPoints: [requesteePeerDescriptor]
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
await requesteStack.start()
|
|
56
|
-
await otherStack.start()
|
|
57
|
-
nodeInfoClient = new NodeInfoClient(requestorPeerDescriptor, new ListeningRpcCommunicator(NODE_INFO_RPC_SERVICE_ID, requestorTransport))
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
afterEach(async () => {
|
|
61
|
-
await requesteStack.stop()
|
|
62
|
-
await otherStack.stop()
|
|
63
|
-
await requesteeTransport1.stop()
|
|
64
|
-
await otherTransport.stop()
|
|
65
|
-
await requestorTransport.stop()
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
it('happy path', async () => {
|
|
69
|
-
const streamPartId1 = StreamPartIDUtils.parse('stream1#0')
|
|
70
|
-
const streamPartId2 = StreamPartIDUtils.parse('stream2#0')
|
|
71
|
-
requesteStack.getContentDeliveryManager().joinStreamPart(streamPartId1)
|
|
72
|
-
otherStack.getContentDeliveryManager().joinStreamPart(streamPartId1)
|
|
73
|
-
requesteStack.getContentDeliveryManager().joinStreamPart(streamPartId2)
|
|
74
|
-
otherStack.getContentDeliveryManager().joinStreamPart(streamPartId2)
|
|
75
|
-
await waitForCondition(() =>
|
|
76
|
-
requesteStack.getContentDeliveryManager().getNeighbors(streamPartId1).length === 1
|
|
77
|
-
&& otherStack.getContentDeliveryManager().getNeighbors(streamPartId1).length === 1
|
|
78
|
-
&& requesteStack.getContentDeliveryManager().getNeighbors(streamPartId2).length === 1
|
|
79
|
-
&& otherStack.getContentDeliveryManager().getNeighbors(streamPartId2).length === 1
|
|
80
|
-
)
|
|
81
|
-
const result = await nodeInfoClient.getInfo(requesteePeerDescriptor)
|
|
82
|
-
expect(result).toMatchObject({
|
|
83
|
-
peerDescriptor: normalizePeerDescriptor(requesteePeerDescriptor),
|
|
84
|
-
controlLayer: {
|
|
85
|
-
neighbors: [normalizePeerDescriptor(otherPeerDescriptor)],
|
|
86
|
-
connections: [normalizePeerDescriptor(otherPeerDescriptor), normalizePeerDescriptor(requestorPeerDescriptor)]
|
|
87
|
-
},
|
|
88
|
-
streamPartitions: [
|
|
89
|
-
{
|
|
90
|
-
id: streamPartId1,
|
|
91
|
-
controlLayerNeighbors: [normalizePeerDescriptor(otherPeerDescriptor)],
|
|
92
|
-
contentDeliveryLayerNeighbors: [{
|
|
93
|
-
peerDescriptor: normalizePeerDescriptor(otherPeerDescriptor)
|
|
94
|
-
}]
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
id: streamPartId2,
|
|
98
|
-
controlLayerNeighbors: [normalizePeerDescriptor(otherPeerDescriptor)],
|
|
99
|
-
contentDeliveryLayerNeighbors: [{
|
|
100
|
-
peerDescriptor: normalizePeerDescriptor(otherPeerDescriptor)
|
|
101
|
-
}]
|
|
102
|
-
}
|
|
103
|
-
],
|
|
104
|
-
version: expect.any(String)
|
|
105
|
-
})
|
|
106
|
-
expect(result.streamPartitions.length).toEqual(2)
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
})
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { Simulator } from '@streamr/dht'
|
|
2
|
-
import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
|
|
3
|
-
import { range } from 'lodash'
|
|
4
|
-
import { ContentDeliveryLayerNode } from '../../src/logic/ContentDeliveryLayerNode'
|
|
5
|
-
import { DiscoveryLayerNode } from '../../src/logic/DiscoveryLayerNode'
|
|
6
|
-
import { createMockContentDeliveryLayerNodeAndDhtNode, createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
7
|
-
import { randomUserId } from '@streamr/test-utils'
|
|
8
|
-
|
|
9
|
-
describe('Propagation', () => {
|
|
10
|
-
const entryPointDescriptor = createMockPeerDescriptor()
|
|
11
|
-
let discoveryLayerNodes: DiscoveryLayerNode[]
|
|
12
|
-
let contentDeliveryLayerNodes: ContentDeliveryLayerNode[]
|
|
13
|
-
const STREAM_PART_ID = StreamPartIDUtils.parse('testingtesting#0')
|
|
14
|
-
let totalReceived: number
|
|
15
|
-
const NUM_OF_NODES = 256
|
|
16
|
-
|
|
17
|
-
beforeEach(async () => {
|
|
18
|
-
const simulator = new Simulator()
|
|
19
|
-
totalReceived = 0
|
|
20
|
-
discoveryLayerNodes = []
|
|
21
|
-
contentDeliveryLayerNodes = []
|
|
22
|
-
const [entryPoint, node1] = await createMockContentDeliveryLayerNodeAndDhtNode(
|
|
23
|
-
entryPointDescriptor,
|
|
24
|
-
entryPointDescriptor,
|
|
25
|
-
STREAM_PART_ID,
|
|
26
|
-
simulator
|
|
27
|
-
)
|
|
28
|
-
await entryPoint.start()
|
|
29
|
-
await entryPoint.joinDht([entryPointDescriptor])
|
|
30
|
-
await node1.start()
|
|
31
|
-
node1.on('message', () => {totalReceived += 1})
|
|
32
|
-
discoveryLayerNodes.push(entryPoint)
|
|
33
|
-
contentDeliveryLayerNodes.push(node1)
|
|
34
|
-
|
|
35
|
-
await Promise.all(range(NUM_OF_NODES).map(async (_i) => {
|
|
36
|
-
const descriptor = createMockPeerDescriptor()
|
|
37
|
-
const [layer1, contentDeliveryLayerNode] = await createMockContentDeliveryLayerNodeAndDhtNode(
|
|
38
|
-
descriptor,
|
|
39
|
-
entryPointDescriptor,
|
|
40
|
-
STREAM_PART_ID,
|
|
41
|
-
simulator
|
|
42
|
-
)
|
|
43
|
-
await layer1.start()
|
|
44
|
-
await contentDeliveryLayerNode.start()
|
|
45
|
-
await layer1.joinDht([entryPointDescriptor]).then(() => {
|
|
46
|
-
contentDeliveryLayerNode.on('message', () => { totalReceived += 1 })
|
|
47
|
-
discoveryLayerNodes.push(layer1)
|
|
48
|
-
contentDeliveryLayerNodes.push(contentDeliveryLayerNode)
|
|
49
|
-
})
|
|
50
|
-
}))
|
|
51
|
-
}, 45000)
|
|
52
|
-
|
|
53
|
-
afterEach(async () => {
|
|
54
|
-
await Promise.all(contentDeliveryLayerNodes.map((node) => node.stop()))
|
|
55
|
-
await Promise.all(discoveryLayerNodes.map((node) => node.stop()))
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
it('All nodes receive messages', async () => {
|
|
59
|
-
await waitForCondition(
|
|
60
|
-
() => contentDeliveryLayerNodes.every((node) => node.getNeighbors().length >= 3), 30000
|
|
61
|
-
)
|
|
62
|
-
await waitForCondition(() => {
|
|
63
|
-
const avg = contentDeliveryLayerNodes.reduce((acc, curr) => {
|
|
64
|
-
return acc + curr.getNeighbors().length
|
|
65
|
-
}, 0) / contentDeliveryLayerNodes.length
|
|
66
|
-
return avg >= 4
|
|
67
|
-
}, 20000)
|
|
68
|
-
const msg = createStreamMessage(
|
|
69
|
-
JSON.stringify({ hello: 'WORLD' }),
|
|
70
|
-
STREAM_PART_ID,
|
|
71
|
-
randomUserId()
|
|
72
|
-
)
|
|
73
|
-
contentDeliveryLayerNodes[0].broadcast(msg)
|
|
74
|
-
await waitForCondition(() => totalReceived >= NUM_OF_NODES, 10000)
|
|
75
|
-
}, 45000)
|
|
76
|
-
})
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { LatencyType, PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
|
|
2
|
-
import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
|
|
3
|
-
import { NetworkStack } from '../../src/NetworkStack'
|
|
4
|
-
import { streamPartIdToDataKey } from '../../src/logic/ContentDeliveryManager'
|
|
5
|
-
import { Any } from '../../src/proto/google/protobuf/any'
|
|
6
|
-
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
7
|
-
import { randomUserId } from '@streamr/test-utils'
|
|
8
|
-
|
|
9
|
-
const STREAM_PART_ID = StreamPartIDUtils.parse('stream#0')
|
|
10
|
-
|
|
11
|
-
describe('Joining stream parts on offline nodes', () => {
|
|
12
|
-
|
|
13
|
-
const entryPointPeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
|
|
14
|
-
const node1PeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
|
|
15
|
-
const node2PeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
|
|
16
|
-
const offlineDescriptor1: PeerDescriptor = createMockPeerDescriptor()
|
|
17
|
-
const offlineDescriptor2: PeerDescriptor = createMockPeerDescriptor()
|
|
18
|
-
|
|
19
|
-
let entryPoint: NetworkStack
|
|
20
|
-
let node1: NetworkStack
|
|
21
|
-
let node2: NetworkStack
|
|
22
|
-
let simulator: Simulator
|
|
23
|
-
|
|
24
|
-
beforeEach(async () => {
|
|
25
|
-
simulator = new Simulator(LatencyType.REAL)
|
|
26
|
-
const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
|
|
27
|
-
entryPoint = new NetworkStack({
|
|
28
|
-
layer0: {
|
|
29
|
-
transport: entryPointTransport,
|
|
30
|
-
connectionsView: entryPointTransport,
|
|
31
|
-
peerDescriptor: entryPointPeerDescriptor,
|
|
32
|
-
entryPoints: [entryPointPeerDescriptor]
|
|
33
|
-
}
|
|
34
|
-
})
|
|
35
|
-
const node1Transport = new SimulatorTransport(node1PeerDescriptor, simulator)
|
|
36
|
-
node1 = new NetworkStack({
|
|
37
|
-
layer0: {
|
|
38
|
-
transport: node1Transport,
|
|
39
|
-
connectionsView: node1Transport,
|
|
40
|
-
peerDescriptor: node1PeerDescriptor,
|
|
41
|
-
entryPoints: [entryPointPeerDescriptor]
|
|
42
|
-
}
|
|
43
|
-
})
|
|
44
|
-
const node2Transport = new SimulatorTransport(node2PeerDescriptor, simulator)
|
|
45
|
-
node2 = new NetworkStack({
|
|
46
|
-
layer0: {
|
|
47
|
-
transport: node2Transport,
|
|
48
|
-
connectionsView: node2Transport,
|
|
49
|
-
peerDescriptor: node2PeerDescriptor,
|
|
50
|
-
entryPoints: [entryPointPeerDescriptor]
|
|
51
|
-
}
|
|
52
|
-
})
|
|
53
|
-
await entryPointTransport.start()
|
|
54
|
-
await node1Transport.start()
|
|
55
|
-
await node2Transport.start()
|
|
56
|
-
await entryPoint.start()
|
|
57
|
-
await node1.start()
|
|
58
|
-
await node2.start()
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
afterEach(async () => {
|
|
62
|
-
await entryPoint.stop()
|
|
63
|
-
await node1.stop()
|
|
64
|
-
await node2.stop()
|
|
65
|
-
simulator.stop()
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
it('should recover if discovered nodes are offline', async () => {
|
|
69
|
-
let messageReceived = false
|
|
70
|
-
|
|
71
|
-
// store offline peer descriptors to DHT
|
|
72
|
-
await entryPoint.getControlLayerNode().storeDataToDht(streamPartIdToDataKey(STREAM_PART_ID), Any.pack(offlineDescriptor1, PeerDescriptor))
|
|
73
|
-
await entryPoint.getControlLayerNode().storeDataToDht(streamPartIdToDataKey(STREAM_PART_ID), Any.pack(offlineDescriptor2, PeerDescriptor))
|
|
74
|
-
|
|
75
|
-
node1.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
|
|
76
|
-
node1.getContentDeliveryManager().on('newMessage', () => { messageReceived = true })
|
|
77
|
-
const msg = createStreamMessage(JSON.stringify({ hello: 'WORLD' }), STREAM_PART_ID, randomUserId())
|
|
78
|
-
node2.getContentDeliveryManager().broadcast(msg)
|
|
79
|
-
await waitForCondition(() => messageReceived, 40000)
|
|
80
|
-
}, 60000)
|
|
81
|
-
|
|
82
|
-
})
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { LatencyType, PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
|
|
2
|
-
import { StreamPartIDUtils, hexToBinary, utf8ToBinary, waitForCondition } from '@streamr/utils'
|
|
3
|
-
import { range } from 'lodash'
|
|
4
|
-
import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
|
|
5
|
-
import { streamPartIdToDataKey } from '../../src/logic/ContentDeliveryManager'
|
|
6
|
-
import { ContentType, EncryptionType, SignatureType, StreamMessage } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
7
|
-
import { createMockPeerDescriptor } from '../utils/utils'
|
|
8
|
-
import { randomUserId } from '@streamr/test-utils'
|
|
9
|
-
|
|
10
|
-
const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
|
|
11
|
-
|
|
12
|
-
describe('stream without default entrypoints', () => {
|
|
13
|
-
|
|
14
|
-
let entrypoint: NetworkNode
|
|
15
|
-
let nodes: NetworkNode[]
|
|
16
|
-
let receivedMessageCount: number
|
|
17
|
-
const entryPointPeerDescriptor: PeerDescriptor = createMockPeerDescriptor()
|
|
18
|
-
|
|
19
|
-
const streamMessage: StreamMessage = {
|
|
20
|
-
messageId: {
|
|
21
|
-
streamId: StreamPartIDUtils.getStreamID(STREAM_PART_ID),
|
|
22
|
-
streamPartition: StreamPartIDUtils.getStreamPartition(STREAM_PART_ID),
|
|
23
|
-
timestamp: 666,
|
|
24
|
-
sequenceNumber: 0,
|
|
25
|
-
publisherId: hexToBinary(randomUserId()),
|
|
26
|
-
messageChainId: 'msgChainId'
|
|
27
|
-
},
|
|
28
|
-
previousMessageRef: {
|
|
29
|
-
timestamp: 665,
|
|
30
|
-
sequenceNumber: 0
|
|
31
|
-
},
|
|
32
|
-
body: {
|
|
33
|
-
oneofKind: 'contentMessage',
|
|
34
|
-
contentMessage: {
|
|
35
|
-
content: utf8ToBinary(JSON.stringify({
|
|
36
|
-
hello: 'world'
|
|
37
|
-
})),
|
|
38
|
-
contentType: ContentType.JSON,
|
|
39
|
-
encryptionType: EncryptionType.NONE
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
signatureType: SignatureType.SECP256K1,
|
|
43
|
-
signature: hexToBinary('0x1234'),
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
beforeEach(async () => {
|
|
47
|
-
const simulator = new Simulator(LatencyType.REAL)
|
|
48
|
-
nodes = []
|
|
49
|
-
receivedMessageCount = 0
|
|
50
|
-
const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
|
|
51
|
-
await entryPointTransport.start()
|
|
52
|
-
entrypoint = createNetworkNode({
|
|
53
|
-
layer0: {
|
|
54
|
-
transport: entryPointTransport,
|
|
55
|
-
connectionsView: entryPointTransport,
|
|
56
|
-
peerDescriptor: entryPointPeerDescriptor,
|
|
57
|
-
entryPoints: [entryPointPeerDescriptor]
|
|
58
|
-
}
|
|
59
|
-
})
|
|
60
|
-
await entrypoint.start()
|
|
61
|
-
await Promise.all(range(20).map(async () => {
|
|
62
|
-
const peerDescriptor = createMockPeerDescriptor()
|
|
63
|
-
const transport = new SimulatorTransport(peerDescriptor, simulator)
|
|
64
|
-
await transport.start()
|
|
65
|
-
const node = createNetworkNode({
|
|
66
|
-
layer0: {
|
|
67
|
-
peerDescriptor,
|
|
68
|
-
transport,
|
|
69
|
-
connectionsView: transport,
|
|
70
|
-
entryPoints: [entryPointPeerDescriptor]
|
|
71
|
-
}
|
|
72
|
-
})
|
|
73
|
-
nodes.push(node)
|
|
74
|
-
await node.start()
|
|
75
|
-
}))
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
afterEach(async () => {
|
|
79
|
-
await entrypoint.stop()
|
|
80
|
-
await Promise.all(nodes.map((node) => node.stop()))
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
it('can join stream without configured entrypoints one by one', async () => {
|
|
84
|
-
await nodes[0].join(STREAM_PART_ID)
|
|
85
|
-
nodes[0].addMessageListener((_msg) => {
|
|
86
|
-
receivedMessageCount += 1
|
|
87
|
-
})
|
|
88
|
-
await Promise.all([
|
|
89
|
-
waitForCondition(() => receivedMessageCount === 1, 10000),
|
|
90
|
-
nodes[1].broadcast(streamMessage)
|
|
91
|
-
])
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
it('can join without configured entrypoints simultaneously', async () => {
|
|
95
|
-
nodes[0].addMessageListener((_msg) => {
|
|
96
|
-
receivedMessageCount += 1
|
|
97
|
-
})
|
|
98
|
-
await Promise.all([
|
|
99
|
-
waitForCondition(() => receivedMessageCount === 1, 15000),
|
|
100
|
-
nodes[0].join(STREAM_PART_ID),
|
|
101
|
-
nodes[1].broadcast(streamMessage),
|
|
102
|
-
])
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
it('multiple nodes can join without configured entrypoints simultaneously', async () => {
|
|
106
|
-
const subscriberCount = 8
|
|
107
|
-
await Promise.all(range(subscriberCount).map(async (i) => {
|
|
108
|
-
await nodes[i].join(STREAM_PART_ID, { minCount: 4, timeout: 15000 })
|
|
109
|
-
nodes[i].addMessageListener(() => {
|
|
110
|
-
receivedMessageCount += 1
|
|
111
|
-
})
|
|
112
|
-
}))
|
|
113
|
-
const nonjoinedNode = nodes[subscriberCount]
|
|
114
|
-
await nonjoinedNode.broadcast(streamMessage)
|
|
115
|
-
await waitForCondition(() => receivedMessageCount === subscriberCount, 15000)
|
|
116
|
-
}, 45000)
|
|
117
|
-
|
|
118
|
-
it('nodes store themselves as entrypoints on streamPart if number of entrypoints is low', async () => {
|
|
119
|
-
for (let i = 0; i < 10; i++) {
|
|
120
|
-
await nodes[i].join(STREAM_PART_ID, { minCount: (i > 0) ? 1 : 0, timeout: 15000 })
|
|
121
|
-
}
|
|
122
|
-
await waitForCondition(async () => {
|
|
123
|
-
const entryPointData = await nodes[15].stack.getControlLayerNode().fetchDataFromDht(streamPartIdToDataKey(STREAM_PART_ID))
|
|
124
|
-
return entryPointData.length >= 7
|
|
125
|
-
}, 15000)
|
|
126
|
-
|
|
127
|
-
}, 90000)
|
|
128
|
-
})
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { LatencyType, Simulator, SimulatorTransport } from '@streamr/dht'
|
|
2
|
-
import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
|
|
3
|
-
import { range } from 'lodash'
|
|
4
|
-
import { NetworkStack } from '../../src/NetworkStack'
|
|
5
|
-
import { MAX_NODE_COUNT } from '../../src/logic/PeerDescriptorStoreManager'
|
|
6
|
-
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
7
|
-
import { randomUserId } from '@streamr/test-utils'
|
|
8
|
-
|
|
9
|
-
describe('Stream Entry Points are replaced when known entry points leave streams', () => {
|
|
10
|
-
|
|
11
|
-
let simulator: Simulator
|
|
12
|
-
let layer0EntryPoint: NetworkStack
|
|
13
|
-
const entryPointPeerDescriptor = createMockPeerDescriptor()
|
|
14
|
-
let initialNodesOnStream: NetworkStack[]
|
|
15
|
-
let laterNodesOnStream: NetworkStack[]
|
|
16
|
-
let newNodeInStream: NetworkStack
|
|
17
|
-
|
|
18
|
-
const NUM_OF_LATER_NODES = 16
|
|
19
|
-
|
|
20
|
-
const STREAM_PART_ID = StreamPartIDUtils.parse('stream#0')
|
|
21
|
-
|
|
22
|
-
const startNode = async () => {
|
|
23
|
-
const peerDescriptor = createMockPeerDescriptor()
|
|
24
|
-
const transport = new SimulatorTransport(peerDescriptor, simulator)
|
|
25
|
-
await transport.start()
|
|
26
|
-
const node = new NetworkStack({
|
|
27
|
-
layer0: {
|
|
28
|
-
transport,
|
|
29
|
-
connectionsView: transport,
|
|
30
|
-
peerDescriptor,
|
|
31
|
-
entryPoints: [entryPointPeerDescriptor]
|
|
32
|
-
}
|
|
33
|
-
})
|
|
34
|
-
await node.start()
|
|
35
|
-
return node
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
beforeEach(async () => {
|
|
39
|
-
simulator = new Simulator(LatencyType.REAL)
|
|
40
|
-
const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
|
|
41
|
-
layer0EntryPoint = new NetworkStack({
|
|
42
|
-
layer0: {
|
|
43
|
-
transport: entryPointTransport,
|
|
44
|
-
connectionsView: entryPointTransport,
|
|
45
|
-
peerDescriptor: entryPointPeerDescriptor,
|
|
46
|
-
entryPoints: [entryPointPeerDescriptor]
|
|
47
|
-
}
|
|
48
|
-
})
|
|
49
|
-
await entryPointTransport.start()
|
|
50
|
-
await layer0EntryPoint.start()
|
|
51
|
-
|
|
52
|
-
initialNodesOnStream = await Promise.all(range(MAX_NODE_COUNT).map(async () => {
|
|
53
|
-
return await startNode()
|
|
54
|
-
}))
|
|
55
|
-
|
|
56
|
-
laterNodesOnStream = await Promise.all(range(NUM_OF_LATER_NODES).map(async () => {
|
|
57
|
-
return await startNode()
|
|
58
|
-
}))
|
|
59
|
-
newNodeInStream = await startNode()
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
afterEach(async () => {
|
|
63
|
-
await Promise.all([
|
|
64
|
-
layer0EntryPoint.stop(),
|
|
65
|
-
...initialNodesOnStream.map((node) => node.stop()),
|
|
66
|
-
...laterNodesOnStream.map((node) => node.stop()),
|
|
67
|
-
newNodeInStream.stop()
|
|
68
|
-
])
|
|
69
|
-
simulator.stop()
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
// TODO: Investigate why 60 second timeouts are needed
|
|
73
|
-
it('stream entry points are replaced when nodes leave streams', async () => {
|
|
74
|
-
await Promise.all(initialNodesOnStream.map((node) => node.joinStreamPart(STREAM_PART_ID, { minCount: 4, timeout: 60000 })))
|
|
75
|
-
|
|
76
|
-
let receivedMessages = 0
|
|
77
|
-
for (const node of laterNodesOnStream) {
|
|
78
|
-
await node.joinStreamPart(STREAM_PART_ID, { minCount: 4, timeout: 60000 })
|
|
79
|
-
node.getContentDeliveryManager().on('newMessage', () => {
|
|
80
|
-
receivedMessages += 1
|
|
81
|
-
})
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
await Promise.all(initialNodesOnStream.map((node) => node.getContentDeliveryManager().leaveStreamPart(STREAM_PART_ID)))
|
|
85
|
-
await waitForCondition(() =>
|
|
86
|
-
laterNodesOnStream.every((node) => node.getContentDeliveryManager().getNeighbors(STREAM_PART_ID).length >= 4), 60000, 1000
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
const msg = createStreamMessage(
|
|
90
|
-
JSON.stringify({ hello: 'WORLD' }),
|
|
91
|
-
STREAM_PART_ID,
|
|
92
|
-
randomUserId()
|
|
93
|
-
)
|
|
94
|
-
newNodeInStream.getContentDeliveryManager().broadcast(msg)
|
|
95
|
-
await waitForCondition(() => receivedMessages === NUM_OF_LATER_NODES, 30000)
|
|
96
|
-
}, 200000)
|
|
97
|
-
})
|
package/test/types/global.d.ts
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { toNodeId } from '@streamr/dht'
|
|
2
|
-
import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
|
|
3
|
-
import { ContentDeliveryLayerNode } from '../../src/logic/ContentDeliveryLayerNode'
|
|
4
|
-
import { NodeList } from '../../src/logic/NodeList'
|
|
5
|
-
import { createContentDeliveryLayerNode } from '../../src/logic/createContentDeliveryLayerNode'
|
|
6
|
-
import { MockDiscoveryLayerNode } from '../utils/mock/MockDiscoveryLayerNode'
|
|
7
|
-
import { MockHandshaker } from '../utils/mock/MockHandshaker'
|
|
8
|
-
import { MockNeighborFinder } from '../utils/mock/MockNeighborFinder'
|
|
9
|
-
import { MockNeighborUpdateManager } from '../utils/mock/MockNeighborUpdateManager'
|
|
10
|
-
import { MockTransport } from '../utils/mock/MockTransport'
|
|
11
|
-
import { createMockContentDeliveryRpcRemote, createMockPeerDescriptor, mockConnectionLocker } from '../utils/utils'
|
|
12
|
-
|
|
13
|
-
describe('ContentDeliveryLayerNode', () => {
|
|
14
|
-
|
|
15
|
-
let contentDeliveryLayerNode: ContentDeliveryLayerNode
|
|
16
|
-
const peerDescriptor = createMockPeerDescriptor()
|
|
17
|
-
|
|
18
|
-
let neighbors: NodeList
|
|
19
|
-
let nearbyNodeView: NodeList
|
|
20
|
-
let randomNodeView: NodeList
|
|
21
|
-
|
|
22
|
-
let discoveryLayerNode: MockDiscoveryLayerNode
|
|
23
|
-
|
|
24
|
-
beforeEach(async () => {
|
|
25
|
-
const nodeId = toNodeId(peerDescriptor)
|
|
26
|
-
|
|
27
|
-
neighbors = new NodeList(nodeId, 10)
|
|
28
|
-
randomNodeView = new NodeList(nodeId, 10)
|
|
29
|
-
nearbyNodeView = new NodeList(nodeId, 10)
|
|
30
|
-
discoveryLayerNode = new MockDiscoveryLayerNode()
|
|
31
|
-
|
|
32
|
-
contentDeliveryLayerNode = createContentDeliveryLayerNode({
|
|
33
|
-
neighbors,
|
|
34
|
-
randomNodeView,
|
|
35
|
-
nearbyNodeView,
|
|
36
|
-
transport: new MockTransport(),
|
|
37
|
-
localPeerDescriptor: peerDescriptor,
|
|
38
|
-
discoveryLayerNode,
|
|
39
|
-
connectionLocker: mockConnectionLocker,
|
|
40
|
-
handshaker: new MockHandshaker() as any,
|
|
41
|
-
neighborUpdateManager: new MockNeighborUpdateManager() as any,
|
|
42
|
-
neighborFinder: new MockNeighborFinder() as any,
|
|
43
|
-
streamPartId: StreamPartIDUtils.parse('stream#0'),
|
|
44
|
-
isLocalNodeEntryPoint: () => false
|
|
45
|
-
})
|
|
46
|
-
await contentDeliveryLayerNode.start()
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
afterEach(() => {
|
|
50
|
-
contentDeliveryLayerNode.stop()
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('getNeighbors', () => {
|
|
54
|
-
const mockRemote = createMockContentDeliveryRpcRemote()
|
|
55
|
-
neighbors.add(mockRemote)
|
|
56
|
-
const result = contentDeliveryLayerNode.getNeighbors()
|
|
57
|
-
expect(toNodeId(result[0])).toEqual(toNodeId(mockRemote.getPeerDescriptor()))
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
it('getNearbyNodeView', () => {
|
|
61
|
-
const mockRemote = createMockContentDeliveryRpcRemote()
|
|
62
|
-
nearbyNodeView.add(mockRemote)
|
|
63
|
-
const ids = contentDeliveryLayerNode.getNearbyNodeView().getIds()
|
|
64
|
-
expect(ids[0]).toEqual(toNodeId(mockRemote.getPeerDescriptor()))
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
it('Adds Closest Nodes from layer1 nearbyContactAdded event to nearbyNodeView', async () => {
|
|
68
|
-
const peerDescriptor1 = createMockPeerDescriptor()
|
|
69
|
-
const peerDescriptor2 = createMockPeerDescriptor()
|
|
70
|
-
discoveryLayerNode.setClosestContacts([peerDescriptor1, peerDescriptor2])
|
|
71
|
-
discoveryLayerNode.emit('nearbyContactAdded', peerDescriptor1)
|
|
72
|
-
await waitForCondition(() => nearbyNodeView.size() === 2)
|
|
73
|
-
expect(nearbyNodeView.get(toNodeId(peerDescriptor1))).toBeTruthy()
|
|
74
|
-
expect(nearbyNodeView.get(toNodeId(peerDescriptor2))).toBeTruthy()
|
|
75
|
-
})
|
|
76
|
-
|
|
77
|
-
it('Adds Random Nodes from layer1 randomContactAdded event to randomNodeView', async () => {
|
|
78
|
-
const peerDescriptor1 = createMockPeerDescriptor()
|
|
79
|
-
const peerDescriptor2 = createMockPeerDescriptor()
|
|
80
|
-
discoveryLayerNode.setRandomContacts([peerDescriptor1, peerDescriptor2])
|
|
81
|
-
discoveryLayerNode.emit('randomContactAdded', peerDescriptor1)
|
|
82
|
-
await waitForCondition(() => randomNodeView.size() === 2)
|
|
83
|
-
expect(randomNodeView.get(toNodeId(peerDescriptor1))).toBeTruthy()
|
|
84
|
-
expect(randomNodeView.get(toNodeId(peerDescriptor2))).toBeTruthy()
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
it('Adds Nodes from layer1 neighbors to nearbyNodeView if its size is below nodeViewSize', async () => {
|
|
88
|
-
const peerDescriptor1 = createMockPeerDescriptor()
|
|
89
|
-
const peerDescriptor2 = createMockPeerDescriptor()
|
|
90
|
-
discoveryLayerNode.addNewRandomPeerToKBucket()
|
|
91
|
-
discoveryLayerNode.setClosestContacts([peerDescriptor1, peerDescriptor2])
|
|
92
|
-
discoveryLayerNode.emit('nearbyContactAdded', peerDescriptor1)
|
|
93
|
-
await waitForCondition(() => {
|
|
94
|
-
return nearbyNodeView.size() === 3
|
|
95
|
-
}, 20000)
|
|
96
|
-
expect(nearbyNodeView.get(toNodeId(peerDescriptor1))).toBeTruthy()
|
|
97
|
-
expect(nearbyNodeView.get(toNodeId(peerDescriptor2))).toBeTruthy()
|
|
98
|
-
}, 25000)
|
|
99
|
-
|
|
100
|
-
it('getInfo', () => {
|
|
101
|
-
const nodeWithRtt = createMockContentDeliveryRpcRemote()
|
|
102
|
-
neighbors.add(nodeWithRtt)
|
|
103
|
-
const nodeWithoutRtt = createMockContentDeliveryRpcRemote()
|
|
104
|
-
neighbors.add(nodeWithoutRtt)
|
|
105
|
-
nodeWithRtt.setRtt(100)
|
|
106
|
-
const info = contentDeliveryLayerNode.getInfos()
|
|
107
|
-
expect(info[0].rtt).toEqual(100)
|
|
108
|
-
expect(info[0].peerDescriptor).toEqual(nodeWithRtt.getPeerDescriptor())
|
|
109
|
-
expect(info[1].rtt).toBeUndefined()
|
|
110
|
-
expect(info[1].peerDescriptor).toEqual(nodeWithoutRtt.getPeerDescriptor())
|
|
111
|
-
})
|
|
112
|
-
})
|