@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,139 +0,0 @@
|
|
|
1
|
-
import { DhtNode, LatencyType, PeerDescriptor, Simulator, SimulatorTransport, toNodeId } 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 { createContentDeliveryLayerNode } from '../../src/logic/createContentDeliveryLayerNode'
|
|
7
|
-
import { createMockPeerDescriptor } from '../utils/utils'
|
|
8
|
-
|
|
9
|
-
describe('ContentDeliveryLayerNode-DhtNode-Latencies', () => {
|
|
10
|
-
const otherNodeCount = 64
|
|
11
|
-
let otherDiscoveryLayerNodes: DiscoveryLayerNode[]
|
|
12
|
-
let entryPointDiscoveryLayerNode: DiscoveryLayerNode
|
|
13
|
-
let entryPointContentDeliveryLayerNode: ContentDeliveryLayerNode
|
|
14
|
-
let otherContentDeliveryLayerNodes: ContentDeliveryLayerNode[]
|
|
15
|
-
|
|
16
|
-
const streamPartId = StreamPartIDUtils.parse('stream#0')
|
|
17
|
-
const entrypointDescriptor = createMockPeerDescriptor()
|
|
18
|
-
|
|
19
|
-
const peerDescriptors: PeerDescriptor[] = range(otherNodeCount).map(() => createMockPeerDescriptor())
|
|
20
|
-
beforeEach(async () => {
|
|
21
|
-
const simulator = new Simulator(LatencyType.FIXED, 50)
|
|
22
|
-
const entrypointCm = new SimulatorTransport(entrypointDescriptor, simulator)
|
|
23
|
-
const cms: SimulatorTransport[] = range(otherNodeCount).map((i) =>
|
|
24
|
-
new SimulatorTransport(peerDescriptors[i], simulator)
|
|
25
|
-
)
|
|
26
|
-
await entrypointCm.start()
|
|
27
|
-
await Promise.all(cms.map((cm) => cm.start()))
|
|
28
|
-
|
|
29
|
-
entryPointDiscoveryLayerNode = new DhtNode({
|
|
30
|
-
transport: entrypointCm,
|
|
31
|
-
connectionsView: entrypointCm,
|
|
32
|
-
peerDescriptor: entrypointDescriptor,
|
|
33
|
-
serviceId: streamPartId
|
|
34
|
-
})
|
|
35
|
-
otherDiscoveryLayerNodes = range(otherNodeCount).map((i) => new DhtNode({
|
|
36
|
-
transport: cms[i],
|
|
37
|
-
connectionsView: cms[i],
|
|
38
|
-
peerDescriptor: peerDescriptors[i],
|
|
39
|
-
serviceId: streamPartId
|
|
40
|
-
}))
|
|
41
|
-
otherContentDeliveryLayerNodes = range(otherNodeCount).map((i) => createContentDeliveryLayerNode({
|
|
42
|
-
streamPartId,
|
|
43
|
-
discoveryLayerNode: otherDiscoveryLayerNodes[i],
|
|
44
|
-
transport: cms[i],
|
|
45
|
-
connectionLocker: cms[i],
|
|
46
|
-
localPeerDescriptor: peerDescriptors[i],
|
|
47
|
-
isLocalNodeEntryPoint: () => false
|
|
48
|
-
}))
|
|
49
|
-
entryPointContentDeliveryLayerNode = createContentDeliveryLayerNode({
|
|
50
|
-
streamPartId,
|
|
51
|
-
discoveryLayerNode: entryPointDiscoveryLayerNode,
|
|
52
|
-
transport: entrypointCm,
|
|
53
|
-
connectionLocker: entrypointCm,
|
|
54
|
-
localPeerDescriptor: entrypointDescriptor,
|
|
55
|
-
isLocalNodeEntryPoint: () => false
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
await entryPointDiscoveryLayerNode.start()
|
|
59
|
-
entryPointContentDeliveryLayerNode.start()
|
|
60
|
-
await entryPointDiscoveryLayerNode.joinDht([entrypointDescriptor])
|
|
61
|
-
await Promise.all(otherDiscoveryLayerNodes.map((node) => node.start()))
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
afterEach(async () => {
|
|
65
|
-
entryPointDiscoveryLayerNode.stop()
|
|
66
|
-
entryPointContentDeliveryLayerNode.stop()
|
|
67
|
-
await Promise.all(otherDiscoveryLayerNodes.map((node) => node.stop()))
|
|
68
|
-
await Promise.all(otherContentDeliveryLayerNodes.map((node) => node.stop()))
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
it('happy path single node', async () => {
|
|
72
|
-
await otherContentDeliveryLayerNodes[0].start()
|
|
73
|
-
await otherDiscoveryLayerNodes[0].joinDht([entrypointDescriptor])
|
|
74
|
-
await Promise.all([
|
|
75
|
-
waitForCondition(() => otherContentDeliveryLayerNodes[0].getNearbyNodeView().getIds().length === 1),
|
|
76
|
-
waitForCondition(() => otherContentDeliveryLayerNodes[0].getNeighbors().length === 1)
|
|
77
|
-
])
|
|
78
|
-
expect(otherContentDeliveryLayerNodes[0].getNearbyNodeView().getIds().length).toEqual(1)
|
|
79
|
-
expect(otherContentDeliveryLayerNodes[0].getNeighbors().length).toEqual(1)
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
it('happy path 5 nodes', async () => {
|
|
83
|
-
range(4).forEach((i) => otherContentDeliveryLayerNodes[i].start())
|
|
84
|
-
await Promise.all(range(4).map(async (i) => {
|
|
85
|
-
await otherDiscoveryLayerNodes[i].joinDht([entrypointDescriptor])
|
|
86
|
-
}))
|
|
87
|
-
await waitForCondition(() => range(4).every((i) => otherContentDeliveryLayerNodes[i].getNeighbors().length >= 4), 15000, 1000)
|
|
88
|
-
range(4).forEach((i) => {
|
|
89
|
-
expect(otherContentDeliveryLayerNodes[i].getNearbyNodeView().getIds().length).toBeGreaterThanOrEqual(4)
|
|
90
|
-
expect(otherContentDeliveryLayerNodes[i].getNeighbors().length).toBeGreaterThanOrEqual(4)
|
|
91
|
-
})
|
|
92
|
-
// Check bidirectionality
|
|
93
|
-
const allNodes = otherContentDeliveryLayerNodes
|
|
94
|
-
allNodes.push(entryPointContentDeliveryLayerNode)
|
|
95
|
-
range(5).forEach((i) => {
|
|
96
|
-
const ownNodeId = allNodes[i].getOwnNodeId()
|
|
97
|
-
allNodes[i].getNearbyNodeView().getIds().forEach((nodeId) => {
|
|
98
|
-
const neighbor = allNodes.find((node) => {
|
|
99
|
-
return node.getOwnNodeId() === ownNodeId
|
|
100
|
-
})
|
|
101
|
-
const neighborNodeIds = neighbor!.getNeighbors().map((n) => toNodeId(n))
|
|
102
|
-
expect(neighborNodeIds).toContain(nodeId)
|
|
103
|
-
})
|
|
104
|
-
})
|
|
105
|
-
}, 60000)
|
|
106
|
-
|
|
107
|
-
it('happy path 64 nodes', async () => {
|
|
108
|
-
await Promise.all(range(otherNodeCount).map((i) => otherContentDeliveryLayerNodes[i].start()))
|
|
109
|
-
await Promise.all(range(otherNodeCount).map((i) => {
|
|
110
|
-
otherDiscoveryLayerNodes[i].joinDht([entrypointDescriptor])
|
|
111
|
-
}))
|
|
112
|
-
await Promise.all(otherContentDeliveryLayerNodes.map((node) =>
|
|
113
|
-
waitForCondition(() => node.getNeighbors().length >= 4, 10000)
|
|
114
|
-
))
|
|
115
|
-
|
|
116
|
-
await Promise.all(otherContentDeliveryLayerNodes.map((node) =>
|
|
117
|
-
waitForCondition(() => node.getOutgoingHandshakeCount() === 0)
|
|
118
|
-
))
|
|
119
|
-
|
|
120
|
-
await waitForCondition(() => {
|
|
121
|
-
let mismatchCounter = 0
|
|
122
|
-
otherContentDeliveryLayerNodes.forEach((node) => {
|
|
123
|
-
const nodeId = node.getOwnNodeId()
|
|
124
|
-
node.getNeighbors().forEach((neighbor) => {
|
|
125
|
-
const neighborId = toNodeId(neighbor)
|
|
126
|
-
if (neighborId !== entryPointContentDeliveryLayerNode.getOwnNodeId()) {
|
|
127
|
-
const neighbor = otherContentDeliveryLayerNodes.find((n) => n.getOwnNodeId() === neighborId)
|
|
128
|
-
const neighborNodeIds = neighbor!.getNeighbors().map((n) => toNodeId(n))
|
|
129
|
-
if (!neighborNodeIds.includes(nodeId)) {
|
|
130
|
-
mismatchCounter += 1
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
})
|
|
134
|
-
})
|
|
135
|
-
// NET-1074 Investigate why sometimes unidirectional connections remain.
|
|
136
|
-
return mismatchCounter <= 2
|
|
137
|
-
}, 20000, 1000)
|
|
138
|
-
}, 90000)
|
|
139
|
-
})
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { ConnectionManager, DhtNode, PeerDescriptor, Simulator, SimulatorTransport, toNodeId, getRandomRegion } from '@streamr/dht'
|
|
2
|
-
import { Logger, 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 { createContentDeliveryLayerNode } from '../../src/logic/createContentDeliveryLayerNode'
|
|
7
|
-
import { createMockPeerDescriptor } from '../utils/utils'
|
|
8
|
-
|
|
9
|
-
const logger = new Logger(module)
|
|
10
|
-
|
|
11
|
-
describe('ContentDeliveryLayerNode-DhtNode', () => {
|
|
12
|
-
const otherNodeCount = 64
|
|
13
|
-
let entryPointDiscoveryLayerNode: DiscoveryLayerNode
|
|
14
|
-
let otherDiscoveryLayerNodes: DiscoveryLayerNode[]
|
|
15
|
-
let entryPointContentDeliveryLayerNode: ContentDeliveryLayerNode
|
|
16
|
-
let otherContentDeliveryLayerNodes: ContentDeliveryLayerNode[]
|
|
17
|
-
|
|
18
|
-
const streamPartId = StreamPartIDUtils.parse('stream#0')
|
|
19
|
-
const entrypointDescriptor = createMockPeerDescriptor({
|
|
20
|
-
region: getRandomRegion()
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
const peerDescriptors: PeerDescriptor[] = range(otherNodeCount).map(() => {
|
|
24
|
-
return createMockPeerDescriptor({
|
|
25
|
-
region: getRandomRegion()
|
|
26
|
-
})
|
|
27
|
-
})
|
|
28
|
-
beforeEach(async () => {
|
|
29
|
-
const simulator = new Simulator()
|
|
30
|
-
const entrypointCm = new SimulatorTransport(
|
|
31
|
-
entrypointDescriptor,
|
|
32
|
-
simulator
|
|
33
|
-
)
|
|
34
|
-
await entrypointCm.start()
|
|
35
|
-
|
|
36
|
-
const cms: ConnectionManager[] = range(otherNodeCount).map((i) =>
|
|
37
|
-
new SimulatorTransport(
|
|
38
|
-
peerDescriptors[i],
|
|
39
|
-
simulator
|
|
40
|
-
)
|
|
41
|
-
)
|
|
42
|
-
await Promise.all(cms.map((cm) => cm.start()))
|
|
43
|
-
|
|
44
|
-
entryPointDiscoveryLayerNode = new DhtNode({
|
|
45
|
-
transport: entrypointCm,
|
|
46
|
-
connectionsView: entrypointCm,
|
|
47
|
-
peerDescriptor: entrypointDescriptor,
|
|
48
|
-
serviceId: streamPartId
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
otherDiscoveryLayerNodes = range(otherNodeCount).map((i) => new DhtNode({
|
|
52
|
-
transport: cms[i],
|
|
53
|
-
connectionsView: cms[i],
|
|
54
|
-
peerDescriptor: peerDescriptors[i],
|
|
55
|
-
serviceId: streamPartId
|
|
56
|
-
}))
|
|
57
|
-
|
|
58
|
-
otherContentDeliveryLayerNodes = range(otherNodeCount).map((i) => createContentDeliveryLayerNode({
|
|
59
|
-
streamPartId,
|
|
60
|
-
discoveryLayerNode: otherDiscoveryLayerNodes[i],
|
|
61
|
-
transport: cms[i],
|
|
62
|
-
connectionLocker: cms[i],
|
|
63
|
-
localPeerDescriptor: peerDescriptors[i],
|
|
64
|
-
neighborUpdateInterval: 2000,
|
|
65
|
-
isLocalNodeEntryPoint: () => false
|
|
66
|
-
}))
|
|
67
|
-
|
|
68
|
-
entryPointContentDeliveryLayerNode = createContentDeliveryLayerNode({
|
|
69
|
-
streamPartId,
|
|
70
|
-
discoveryLayerNode: entryPointDiscoveryLayerNode,
|
|
71
|
-
transport: entrypointCm,
|
|
72
|
-
connectionLocker: entrypointCm,
|
|
73
|
-
localPeerDescriptor: entrypointDescriptor,
|
|
74
|
-
neighborUpdateInterval: 2000,
|
|
75
|
-
isLocalNodeEntryPoint: () => false
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
await entryPointDiscoveryLayerNode.start()
|
|
79
|
-
await entryPointContentDeliveryLayerNode.start()
|
|
80
|
-
await entryPointDiscoveryLayerNode.joinDht([entrypointDescriptor])
|
|
81
|
-
await Promise.all(otherDiscoveryLayerNodes.map((node) => node.start()))
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
afterEach(async () => {
|
|
85
|
-
await entryPointDiscoveryLayerNode.stop()
|
|
86
|
-
entryPointContentDeliveryLayerNode.stop()
|
|
87
|
-
await Promise.all(otherDiscoveryLayerNodes.map((node) => node.stop()))
|
|
88
|
-
await Promise.all(otherContentDeliveryLayerNodes.map((node) => node.stop()))
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
it('happy path single node ', async () => {
|
|
92
|
-
await otherContentDeliveryLayerNodes[0].start()
|
|
93
|
-
await otherDiscoveryLayerNodes[0].joinDht([entrypointDescriptor])
|
|
94
|
-
|
|
95
|
-
await waitForCondition(() => otherContentDeliveryLayerNodes[0].getNeighbors().length === 1)
|
|
96
|
-
expect(otherContentDeliveryLayerNodes[0].getNearbyNodeView().getIds().length).toEqual(1)
|
|
97
|
-
expect(otherContentDeliveryLayerNodes[0].getNeighbors().length).toEqual(1)
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
it('happy path 4 nodes', async () => {
|
|
101
|
-
range(4).forEach((i) => otherContentDeliveryLayerNodes[i].start())
|
|
102
|
-
await Promise.all(range(4).map(async (i) => {
|
|
103
|
-
await otherDiscoveryLayerNodes[i].joinDht([entrypointDescriptor])
|
|
104
|
-
}))
|
|
105
|
-
|
|
106
|
-
await waitForCondition(() => range(4).every((i) => otherContentDeliveryLayerNodes[i].getNeighbors().length === 4))
|
|
107
|
-
range(4).forEach((i) => {
|
|
108
|
-
expect(otherContentDeliveryLayerNodes[i].getNearbyNodeView().getIds().length).toBeGreaterThanOrEqual(4)
|
|
109
|
-
expect(otherContentDeliveryLayerNodes[i].getNeighbors().length).toBeGreaterThanOrEqual(4)
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
// Check bidirectionality
|
|
113
|
-
const allNodes = otherContentDeliveryLayerNodes
|
|
114
|
-
allNodes.push(entryPointContentDeliveryLayerNode)
|
|
115
|
-
range(5).forEach((i) => {
|
|
116
|
-
allNodes[i].getNearbyNodeView().getIds().forEach((nodeId) => {
|
|
117
|
-
const neighbor = allNodes.find((node) => {
|
|
118
|
-
return node.getOwnNodeId() === nodeId
|
|
119
|
-
})
|
|
120
|
-
const neighborNodeIds = neighbor!.getNeighbors().map((n) => toNodeId(n))
|
|
121
|
-
expect(neighborNodeIds.includes(allNodes[i].getOwnNodeId())).toEqual(true)
|
|
122
|
-
})
|
|
123
|
-
})
|
|
124
|
-
}, 10000)
|
|
125
|
-
|
|
126
|
-
it('happy path 64 nodes', async () => {
|
|
127
|
-
await Promise.all(range(otherNodeCount).map((i) => otherContentDeliveryLayerNodes[i].start()))
|
|
128
|
-
await Promise.all(range(otherNodeCount).map((i) => {
|
|
129
|
-
otherDiscoveryLayerNodes[i].joinDht([entrypointDescriptor])
|
|
130
|
-
}))
|
|
131
|
-
await Promise.all(otherContentDeliveryLayerNodes.map((node) =>
|
|
132
|
-
waitForCondition(() => node.getNeighbors().length >= 4, 10000)
|
|
133
|
-
))
|
|
134
|
-
|
|
135
|
-
const avg = otherContentDeliveryLayerNodes.reduce((acc, curr) => {
|
|
136
|
-
return acc + curr.getNeighbors().length
|
|
137
|
-
}, 0) / otherNodeCount
|
|
138
|
-
|
|
139
|
-
logger.info(`AVG Number of neighbors: ${avg}`)
|
|
140
|
-
await Promise.all(otherContentDeliveryLayerNodes.map((node) =>
|
|
141
|
-
waitForCondition(() => node.getOutgoingHandshakeCount() === 0)
|
|
142
|
-
))
|
|
143
|
-
await waitForCondition(() => {
|
|
144
|
-
let mismatchCounter = 0
|
|
145
|
-
otherContentDeliveryLayerNodes.forEach((node) => {
|
|
146
|
-
const nodeId = node.getOwnNodeId()
|
|
147
|
-
node.getNeighbors().forEach((neighbor) => {
|
|
148
|
-
const neighborId = toNodeId(neighbor)
|
|
149
|
-
if (neighborId !== entryPointContentDeliveryLayerNode.getOwnNodeId()) {
|
|
150
|
-
const neighbor = otherContentDeliveryLayerNodes.find((n) => n.getOwnNodeId() === neighborId)
|
|
151
|
-
const neighborNodeIds = neighbor!.getNeighbors().map((n) => toNodeId(n))
|
|
152
|
-
if (!neighborNodeIds.includes(nodeId)) {
|
|
153
|
-
mismatchCounter += 1
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
})
|
|
157
|
-
})
|
|
158
|
-
// NET-1074 Investigate why sometimes unidirectional connections remain.
|
|
159
|
-
return mismatchCounter <= 2
|
|
160
|
-
}, 20000, 1000)
|
|
161
|
-
}, 95000)
|
|
162
|
-
})
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DhtNode,
|
|
3
|
-
Simulator,
|
|
4
|
-
SimulatorTransport
|
|
5
|
-
} from '@streamr/dht'
|
|
6
|
-
import { StreamPartIDUtils, waitForCondition, waitForEvent3, wait } from '@streamr/utils'
|
|
7
|
-
import { ContentDeliveryManager, Events } from '../../src/logic/ContentDeliveryManager'
|
|
8
|
-
import { ControlLayerNode } from '../../src/logic/ControlLayerNode'
|
|
9
|
-
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
10
|
-
import { randomUserId } from '@streamr/test-utils'
|
|
11
|
-
|
|
12
|
-
describe('ContentDeliveryManager', () => {
|
|
13
|
-
|
|
14
|
-
let controlLayerNode1: ControlLayerNode
|
|
15
|
-
let controlLayerNode2: ControlLayerNode
|
|
16
|
-
let transport1: SimulatorTransport
|
|
17
|
-
let transport2: SimulatorTransport
|
|
18
|
-
let manager1: ContentDeliveryManager
|
|
19
|
-
let manager2: ContentDeliveryManager
|
|
20
|
-
|
|
21
|
-
const peerDescriptor1 = createMockPeerDescriptor()
|
|
22
|
-
const peerDescriptor2 = createMockPeerDescriptor()
|
|
23
|
-
const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
|
|
24
|
-
|
|
25
|
-
const msg = createStreamMessage(
|
|
26
|
-
JSON.stringify({ hello: 'WORLD' }),
|
|
27
|
-
STREAM_PART_ID,
|
|
28
|
-
randomUserId()
|
|
29
|
-
)
|
|
30
|
-
let simulator: Simulator
|
|
31
|
-
|
|
32
|
-
beforeEach(async () => {
|
|
33
|
-
simulator = new Simulator()
|
|
34
|
-
transport1 = new SimulatorTransport(peerDescriptor1, simulator)
|
|
35
|
-
await transport1.start()
|
|
36
|
-
transport2 = new SimulatorTransport(peerDescriptor2, simulator)
|
|
37
|
-
await transport2.start()
|
|
38
|
-
controlLayerNode1 = new DhtNode({
|
|
39
|
-
transport: transport1,
|
|
40
|
-
connectionsView: transport1,
|
|
41
|
-
peerDescriptor: peerDescriptor1,
|
|
42
|
-
entryPoints: [peerDescriptor1]
|
|
43
|
-
})
|
|
44
|
-
controlLayerNode2 = new DhtNode({
|
|
45
|
-
transport: transport2,
|
|
46
|
-
connectionsView: transport2,
|
|
47
|
-
peerDescriptor: peerDescriptor2,
|
|
48
|
-
entryPoints: [peerDescriptor1]
|
|
49
|
-
})
|
|
50
|
-
await Promise.all([
|
|
51
|
-
controlLayerNode1.start(),
|
|
52
|
-
controlLayerNode2.start()
|
|
53
|
-
])
|
|
54
|
-
await Promise.all([
|
|
55
|
-
controlLayerNode1.joinDht([peerDescriptor1]),
|
|
56
|
-
controlLayerNode2.joinDht([peerDescriptor1])
|
|
57
|
-
])
|
|
58
|
-
|
|
59
|
-
manager1 = new ContentDeliveryManager({ neighborUpdateInterval: 100 })
|
|
60
|
-
manager2 = new ContentDeliveryManager({ neighborUpdateInterval: 100 })
|
|
61
|
-
await manager1.start(controlLayerNode1, transport1, transport1)
|
|
62
|
-
manager1.setStreamPartEntryPoints(STREAM_PART_ID, [peerDescriptor1])
|
|
63
|
-
await manager2.start(controlLayerNode2, transport2, transport2)
|
|
64
|
-
manager2.setStreamPartEntryPoints(STREAM_PART_ID, [peerDescriptor1])
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
afterEach(async () => {
|
|
68
|
-
await Promise.all([
|
|
69
|
-
manager1.destroy(),
|
|
70
|
-
manager2.destroy(),
|
|
71
|
-
controlLayerNode1.stop(),
|
|
72
|
-
controlLayerNode2.stop(),
|
|
73
|
-
transport1.stop(),
|
|
74
|
-
transport2.stop()
|
|
75
|
-
])
|
|
76
|
-
simulator.stop()
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
it('starts', async () => {
|
|
80
|
-
expect(manager1.getPeerDescriptor()).toEqual(peerDescriptor1)
|
|
81
|
-
expect(manager2.getPeerDescriptor()).toEqual(peerDescriptor2)
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
it('Joining stream', async () => {
|
|
85
|
-
manager1.joinStreamPart(STREAM_PART_ID)
|
|
86
|
-
manager2.joinStreamPart(STREAM_PART_ID)
|
|
87
|
-
await waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1)
|
|
88
|
-
await waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
|
|
89
|
-
expect(manager1.getNeighbors(STREAM_PART_ID).length).toEqual(1)
|
|
90
|
-
expect(manager2.getNeighbors(STREAM_PART_ID).length).toEqual(1)
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
it('Publishing after joining and waiting for neighbors', async () => {
|
|
94
|
-
manager1.joinStreamPart(STREAM_PART_ID)
|
|
95
|
-
manager2.joinStreamPart(STREAM_PART_ID)
|
|
96
|
-
await waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1)
|
|
97
|
-
await waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
|
|
98
|
-
await Promise.all([
|
|
99
|
-
waitForEvent3<Events>(manager1, 'newMessage'),
|
|
100
|
-
manager2.broadcast(msg)
|
|
101
|
-
])
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
it('multi-stream pub/sub', async () => {
|
|
105
|
-
const streamPartId2 = StreamPartIDUtils.parse('test2#0')
|
|
106
|
-
manager1.setStreamPartEntryPoints(streamPartId2, [peerDescriptor1])
|
|
107
|
-
manager2.setStreamPartEntryPoints(streamPartId2, [peerDescriptor1])
|
|
108
|
-
manager1.joinStreamPart(STREAM_PART_ID)
|
|
109
|
-
manager1.joinStreamPart(streamPartId2)
|
|
110
|
-
manager2.joinStreamPart(STREAM_PART_ID)
|
|
111
|
-
manager2.joinStreamPart(streamPartId2)
|
|
112
|
-
await Promise.all([
|
|
113
|
-
waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1),
|
|
114
|
-
waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1),
|
|
115
|
-
waitForCondition(() => manager1.getNeighbors(streamPartId2).length === 1),
|
|
116
|
-
waitForCondition(() => manager2.getNeighbors(streamPartId2).length === 1)
|
|
117
|
-
])
|
|
118
|
-
const msg2 = createStreamMessage(
|
|
119
|
-
JSON.stringify({ hello: 'WORLD' }),
|
|
120
|
-
streamPartId2,
|
|
121
|
-
randomUserId()
|
|
122
|
-
)
|
|
123
|
-
await Promise.all([
|
|
124
|
-
waitForEvent3<Events>(manager1, 'newMessage'),
|
|
125
|
-
waitForEvent3<Events>(manager2, 'newMessage'),
|
|
126
|
-
manager1.broadcast(msg2),
|
|
127
|
-
manager2.broadcast(msg)
|
|
128
|
-
])
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
it('leaving stream parts', async () => {
|
|
132
|
-
manager1.joinStreamPart(STREAM_PART_ID)
|
|
133
|
-
manager2.joinStreamPart(STREAM_PART_ID)
|
|
134
|
-
await Promise.all([
|
|
135
|
-
waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1),
|
|
136
|
-
waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
|
|
137
|
-
])
|
|
138
|
-
await manager2.leaveStreamPart(STREAM_PART_ID)
|
|
139
|
-
await waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 0)
|
|
140
|
-
})
|
|
141
|
-
|
|
142
|
-
it('RTTs are updated for node info', async () => {
|
|
143
|
-
manager1.joinStreamPart(STREAM_PART_ID)
|
|
144
|
-
manager2.joinStreamPart(STREAM_PART_ID)
|
|
145
|
-
await Promise.all([
|
|
146
|
-
waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1),
|
|
147
|
-
waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
|
|
148
|
-
])
|
|
149
|
-
// Wait for RTTs to be updated
|
|
150
|
-
await wait(500)
|
|
151
|
-
const nodeInfo1 = manager1.getNodeInfo()
|
|
152
|
-
const nodeInfo2 = manager2.getNodeInfo()
|
|
153
|
-
expect(nodeInfo1[0].contentDeliveryLayerNeighbors[0].rtt).toBeGreaterThanOrEqual(0)
|
|
154
|
-
expect(nodeInfo2[0].contentDeliveryLayerNeighbors[0].rtt).toBeGreaterThanOrEqual(0)
|
|
155
|
-
})
|
|
156
|
-
|
|
157
|
-
})
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ListeningRpcCommunicator,
|
|
3
|
-
NodeType,
|
|
4
|
-
PeerDescriptor,
|
|
5
|
-
Simulator,
|
|
6
|
-
SimulatorTransport
|
|
7
|
-
} from '@streamr/dht'
|
|
8
|
-
import { StreamPartIDUtils, waitForCondition } from '@streamr/utils'
|
|
9
|
-
import { ContentDeliveryRpcRemote } from '../../src/logic/ContentDeliveryRpcRemote'
|
|
10
|
-
import { Empty } from '../../src/proto/google/protobuf/empty'
|
|
11
|
-
import {
|
|
12
|
-
LeaveStreamPartNotice,
|
|
13
|
-
StreamMessage
|
|
14
|
-
} from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
15
|
-
import { ContentDeliveryRpcClient } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
16
|
-
import { createStreamMessage } from '../utils/utils'
|
|
17
|
-
import { randomUserId } from '@streamr/test-utils'
|
|
18
|
-
|
|
19
|
-
describe('ContentDeliveryRpcRemote', () => {
|
|
20
|
-
let mockServerRpc: ListeningRpcCommunicator
|
|
21
|
-
let clientRpc: ListeningRpcCommunicator
|
|
22
|
-
let rpcRemote: ContentDeliveryRpcRemote
|
|
23
|
-
|
|
24
|
-
const clientNode: PeerDescriptor = {
|
|
25
|
-
nodeId: new Uint8Array([1, 1, 1]),
|
|
26
|
-
type: NodeType.NODEJS
|
|
27
|
-
}
|
|
28
|
-
const serverNode: PeerDescriptor = {
|
|
29
|
-
nodeId: new Uint8Array([2, 2, 2]),
|
|
30
|
-
type: NodeType.NODEJS
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
let recvCounter: number
|
|
34
|
-
|
|
35
|
-
let simulator: Simulator
|
|
36
|
-
let mockConnectionManager1: SimulatorTransport
|
|
37
|
-
let mockConnectionManager2: SimulatorTransport
|
|
38
|
-
|
|
39
|
-
beforeEach(async () => {
|
|
40
|
-
recvCounter = 0
|
|
41
|
-
simulator = new Simulator()
|
|
42
|
-
mockConnectionManager1 = new SimulatorTransport(serverNode, simulator)
|
|
43
|
-
await mockConnectionManager1.start()
|
|
44
|
-
mockConnectionManager2 = new SimulatorTransport(clientNode, simulator)
|
|
45
|
-
await mockConnectionManager2.start()
|
|
46
|
-
|
|
47
|
-
mockServerRpc = new ListeningRpcCommunicator('test', mockConnectionManager1)
|
|
48
|
-
clientRpc = new ListeningRpcCommunicator('test', mockConnectionManager2)
|
|
49
|
-
|
|
50
|
-
mockServerRpc.registerRpcNotification(
|
|
51
|
-
StreamMessage,
|
|
52
|
-
'sendStreamMessage',
|
|
53
|
-
async (): Promise<Empty> => {
|
|
54
|
-
recvCounter += 1
|
|
55
|
-
return Empty
|
|
56
|
-
}
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
mockServerRpc.registerRpcNotification(
|
|
60
|
-
LeaveStreamPartNotice,
|
|
61
|
-
'leaveStreamPartNotice',
|
|
62
|
-
async (): Promise<Empty> => {
|
|
63
|
-
recvCounter += 1
|
|
64
|
-
return Empty
|
|
65
|
-
}
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
rpcRemote = new ContentDeliveryRpcRemote(
|
|
69
|
-
clientNode,
|
|
70
|
-
serverNode,
|
|
71
|
-
clientRpc,
|
|
72
|
-
ContentDeliveryRpcClient
|
|
73
|
-
)
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
afterEach(async () => {
|
|
77
|
-
clientRpc.stop()
|
|
78
|
-
mockServerRpc.stop()
|
|
79
|
-
await mockConnectionManager1.stop()
|
|
80
|
-
await mockConnectionManager2.stop()
|
|
81
|
-
simulator.stop()
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
it('sendStreamMessage', async () => {
|
|
85
|
-
const msg = createStreamMessage(
|
|
86
|
-
JSON.stringify({ hello: 'WORLD' }),
|
|
87
|
-
StreamPartIDUtils.parse('test-stream#0'),
|
|
88
|
-
randomUserId()
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
await rpcRemote.sendStreamMessage(msg)
|
|
92
|
-
await waitForCondition(() => recvCounter === 1)
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
it('leaveNotice', async () => {
|
|
96
|
-
rpcRemote.leaveStreamPartNotice(StreamPartIDUtils.parse('test#0'), false)
|
|
97
|
-
await waitForCondition(() => recvCounter === 1)
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
})
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ListeningRpcCommunicator,
|
|
3
|
-
NodeType,
|
|
4
|
-
PeerDescriptor,
|
|
5
|
-
Simulator,
|
|
6
|
-
SimulatorTransport
|
|
7
|
-
} from '@streamr/dht'
|
|
8
|
-
import { StreamPartIDUtils } from '@streamr/utils'
|
|
9
|
-
import { HandshakeRpcRemote } from '../../src/logic/neighbor-discovery/HandshakeRpcRemote'
|
|
10
|
-
import {
|
|
11
|
-
StreamPartHandshakeRequest,
|
|
12
|
-
StreamPartHandshakeResponse
|
|
13
|
-
} from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
14
|
-
import {
|
|
15
|
-
HandshakeRpcClient,
|
|
16
|
-
} from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
17
|
-
|
|
18
|
-
describe('HandshakeRpcRemote', () => {
|
|
19
|
-
let mockServerRpc: ListeningRpcCommunicator
|
|
20
|
-
let clientRpc: ListeningRpcCommunicator
|
|
21
|
-
let rpcRemote: HandshakeRpcRemote
|
|
22
|
-
|
|
23
|
-
const clientNode: PeerDescriptor = {
|
|
24
|
-
nodeId: new Uint8Array([1, 1, 1]),
|
|
25
|
-
type: NodeType.NODEJS
|
|
26
|
-
}
|
|
27
|
-
const serverNode: PeerDescriptor = {
|
|
28
|
-
nodeId: new Uint8Array([2, 2, 2]),
|
|
29
|
-
type: NodeType.NODEJS
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
let simulator: Simulator
|
|
33
|
-
let mockConnectionManager1: SimulatorTransport
|
|
34
|
-
let mockConnectionManager2: SimulatorTransport
|
|
35
|
-
|
|
36
|
-
beforeEach(async () => {
|
|
37
|
-
simulator = new Simulator()
|
|
38
|
-
mockConnectionManager1 = new SimulatorTransport(serverNode, simulator)
|
|
39
|
-
await mockConnectionManager1.start()
|
|
40
|
-
mockConnectionManager2 = new SimulatorTransport(clientNode, simulator)
|
|
41
|
-
await mockConnectionManager2.start()
|
|
42
|
-
|
|
43
|
-
mockServerRpc = new ListeningRpcCommunicator('test', mockConnectionManager1)
|
|
44
|
-
clientRpc = new ListeningRpcCommunicator('test', mockConnectionManager2)
|
|
45
|
-
|
|
46
|
-
mockServerRpc.registerRpcMethod(
|
|
47
|
-
StreamPartHandshakeRequest,
|
|
48
|
-
StreamPartHandshakeResponse,
|
|
49
|
-
'handshake',
|
|
50
|
-
async (msg: StreamPartHandshakeRequest): Promise<StreamPartHandshakeResponse> => {
|
|
51
|
-
const res: StreamPartHandshakeResponse = {
|
|
52
|
-
requestId: msg.requestId,
|
|
53
|
-
accepted: true
|
|
54
|
-
}
|
|
55
|
-
return res
|
|
56
|
-
}
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
rpcRemote = new HandshakeRpcRemote(
|
|
60
|
-
clientNode,
|
|
61
|
-
serverNode,
|
|
62
|
-
clientRpc,
|
|
63
|
-
HandshakeRpcClient
|
|
64
|
-
)
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
afterEach(async () => {
|
|
68
|
-
clientRpc.stop()
|
|
69
|
-
mockServerRpc.stop()
|
|
70
|
-
await mockConnectionManager1.stop()
|
|
71
|
-
await mockConnectionManager2.stop()
|
|
72
|
-
simulator.stop()
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
it('handshake', async () => {
|
|
76
|
-
const result = await rpcRemote.handshake(StreamPartIDUtils.parse('test#0'), [])
|
|
77
|
-
expect(result.accepted).toEqual(true)
|
|
78
|
-
})
|
|
79
|
-
})
|