@streamr/trackerless-network 100.0.0 → 100.1.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 +11 -11
- package/dist/src/NetworkNode.js.map +1 -1
- package/dist/src/NetworkStack.d.ts +4 -4
- package/dist/src/NetworkStack.js +18 -16
- package/dist/src/NetworkStack.js.map +1 -1
- package/dist/src/exports.d.ts +1 -1
- package/dist/src/logic/{StreamrNode.d.ts → ContentDeliveryManager.d.ts} +6 -6
- package/dist/src/logic/{StreamrNode.js → ContentDeliveryManager.js} +7 -9
- package/dist/src/logic/ContentDeliveryManager.js.map +1 -0
- package/dist/src/logic/{DeliveryRpcLocal.d.ts → ContentDeliveryRpcLocal.d.ts} +4 -4
- package/dist/src/logic/{DeliveryRpcLocal.js → ContentDeliveryRpcLocal.js} +4 -4
- package/dist/src/logic/ContentDeliveryRpcLocal.js.map +1 -0
- package/dist/src/logic/{DeliveryRpcRemote.d.ts → ContentDeliveryRpcRemote.d.ts} +2 -2
- package/dist/src/logic/{DeliveryRpcRemote.js → ContentDeliveryRpcRemote.js} +4 -4
- package/dist/src/logic/ContentDeliveryRpcRemote.js.map +1 -0
- package/dist/src/logic/EntryPointDiscovery.js +1 -1
- package/dist/src/logic/EntryPointDiscovery.js.map +1 -1
- package/dist/src/logic/NodeList.d.ts +11 -11
- package/dist/src/logic/NodeList.js.map +1 -1
- package/dist/src/logic/RandomGraphNode.d.ts +1 -1
- package/dist/src/logic/RandomGraphNode.js +12 -12
- package/dist/src/logic/RandomGraphNode.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/formStreamPartDeliveryServiceId.d.ts +1 -1
- package/dist/src/logic/formStreamPartDeliveryServiceId.js +4 -3
- package/dist/src/logic/formStreamPartDeliveryServiceId.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.d.ts +2 -2
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js +3 -3
- package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js +2 -2
- package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +1 -1
- package/dist/src/logic/neighbor-discovery/Handshaker.js +6 -6
- package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js +2 -2
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js +1 -1
- package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -1
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js +6 -0
- package/dist/src/logic/protocol-integration/stream-message/StreamMessageTranslator.js.map +1 -1
- package/dist/src/logic/proxy/ProxyClient.d.ts +1 -1
- package/dist/src/logic/proxy/ProxyClient.js +8 -8
- 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 +3 -3
- package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js +1 -1
- package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js +3 -3
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -1
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js +2 -2
- package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -1
- package/dist/src/proto/google/protobuf/any.d.ts +11 -4
- package/dist/src/proto/google/protobuf/any.js.map +1 -1
- package/dist/src/proto/google/protobuf/empty.d.ts +0 -1
- package/dist/src/proto/google/protobuf/empty.js.map +1 -1
- package/dist/src/proto/google/protobuf/timestamp.d.ts +9 -3
- package/dist/src/proto/google/protobuf/timestamp.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 +9 -2
- package/dist/src/proto/packages/dht/protos/DhtRpc.client.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +44 -0
- package/dist/src/proto/packages/dht/protos/DhtRpc.js +29 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
- package/dist/src/proto/packages/dht/protos/DhtRpc.server.d.ts +6 -0
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +4 -4
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +7 -7
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +9 -5
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +8 -4
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
- package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.d.ts +2 -2
- package/dist/test/benchmark/first-message.js +4 -4
- 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 +9 -6
- package/dist/test/utils/utils.js.map +1 -1
- package/karma.config.js +2 -0
- package/package.json +6 -6
- package/protos/NetworkRpc.proto +3 -2
- package/src/NetworkNode.ts +11 -11
- package/src/NetworkStack.ts +23 -18
- package/src/exports.ts +1 -1
- package/src/logic/{StreamrNode.ts → ContentDeliveryManager.ts} +12 -13
- package/src/logic/{DeliveryRpcLocal.ts → ContentDeliveryRpcLocal.ts} +5 -5
- package/src/logic/{DeliveryRpcRemote.ts → ContentDeliveryRpcRemote.ts} +2 -2
- package/src/logic/EntryPointDiscovery.ts +1 -1
- package/src/logic/NodeList.ts +13 -13
- package/src/logic/RandomGraphNode.ts +19 -21
- package/src/logic/createRandomGraphNode.ts +2 -2
- package/src/logic/formStreamPartDeliveryServiceId.ts +2 -1
- package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +5 -5
- package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +2 -2
- package/src/logic/neighbor-discovery/Handshaker.ts +10 -11
- package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +4 -4
- package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +1 -1
- package/src/logic/protocol-integration/stream-message/StreamMessageTranslator.ts +16 -10
- package/src/logic/proxy/ProxyClient.ts +11 -11
- package/src/logic/proxy/ProxyConnectionRpcLocal.ts +6 -6
- package/src/logic/proxy/ProxyConnectionRpcRemote.ts +1 -1
- package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +5 -5
- package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +2 -2
- package/src/proto/google/protobuf/any.ts +11 -4
- package/src/proto/google/protobuf/empty.ts +0 -1
- package/src/proto/google/protobuf/timestamp.ts +9 -3
- package/src/proto/packages/dht/protos/DhtRpc.client.ts +15 -2
- package/src/proto/packages/dht/protos/DhtRpc.server.ts +6 -0
- package/src/proto/packages/dht/protos/DhtRpc.ts +58 -0
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +8 -8
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +2 -2
- package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +10 -6
- package/test/benchmark/first-message.ts +4 -4
- package/test/end-to-end/inspect.test.ts +6 -6
- package/test/end-to-end/proxy-and-full-node.test.ts +19 -19
- package/test/end-to-end/proxy-connections.test.ts +7 -7
- package/test/end-to-end/proxy-key-exchange.test.ts +3 -3
- package/test/end-to-end/webrtc-full-node-network.test.ts +8 -8
- package/test/end-to-end/websocket-full-node-network.test.ts +9 -9
- package/test/integration/ContentDeliveryManager.test.ts +135 -0
- package/test/integration/{DeliveryRpcRemote.test.ts → ContentDeliveryRpcRemote.test.ts} +6 -6
- package/test/integration/Inspect.test.ts +2 -2
- package/test/integration/NetworkRpc.test.ts +3 -3
- package/test/integration/NetworkStack.test.ts +7 -7
- package/test/integration/NodeInfoRpc.test.ts +10 -10
- package/test/integration/joining-streams-on-offline-peers.test.ts +3 -3
- package/test/integration/streamEntryPointReplacing.test.ts +6 -4
- package/test/unit/ContentDeliveryManager.test.ts +96 -0
- package/test/unit/{DeliveryRpcLocal.test.ts → ContentDeliveryRpcLocal.test.ts} +4 -4
- package/test/unit/HandshakeRpcLocal.test.ts +19 -19
- package/test/unit/Handshaker.test.ts +2 -2
- package/test/unit/NeighborFinder.test.ts +2 -2
- package/test/unit/NeighborUpdateRpcLocal.test.ts +8 -8
- package/test/unit/NetworkNode.test.ts +6 -6
- package/test/unit/NodeList.test.ts +6 -6
- package/test/unit/RandomGraphNode.test.ts +3 -3
- package/test/utils/utils.ts +9 -6
- package/dist/src/logic/DeliveryRpcLocal.js.map +0 -1
- package/dist/src/logic/DeliveryRpcRemote.js.map +0 -1
- package/dist/src/logic/StreamrNode.js.map +0 -1
- package/test/integration/StreamrNode.test.ts +0 -131
- package/test/unit/StreamrNode.test.ts +0 -98
|
@@ -316,9 +316,9 @@ export interface StreamPartitionInfo {
|
|
|
316
316
|
*/
|
|
317
317
|
controlLayerNeighbors: PeerDescriptor[];
|
|
318
318
|
/**
|
|
319
|
-
* @generated from protobuf field: repeated dht.PeerDescriptor
|
|
319
|
+
* @generated from protobuf field: repeated dht.PeerDescriptor contentDeliveryLayerNeighbors = 3;
|
|
320
320
|
*/
|
|
321
|
-
|
|
321
|
+
contentDeliveryLayerNeighbors: PeerDescriptor[];
|
|
322
322
|
}
|
|
323
323
|
/**
|
|
324
324
|
* @generated from protobuf message ControlLayerInfo
|
|
@@ -413,7 +413,11 @@ export enum SignatureType {
|
|
|
413
413
|
/**
|
|
414
414
|
* @generated from protobuf enum value: SECP256K1 = 1;
|
|
415
415
|
*/
|
|
416
|
-
SECP256K1 = 1
|
|
416
|
+
SECP256K1 = 1,
|
|
417
|
+
/**
|
|
418
|
+
* @generated from protobuf enum value: ERC_1271 = 2;
|
|
419
|
+
*/
|
|
420
|
+
ERC_1271 = 2
|
|
417
421
|
}
|
|
418
422
|
/**
|
|
419
423
|
* @generated from protobuf enum ProxyDirection
|
|
@@ -678,7 +682,7 @@ class StreamPartitionInfo$Type extends MessageType<StreamPartitionInfo> {
|
|
|
678
682
|
super("StreamPartitionInfo", [
|
|
679
683
|
{ no: 1, name: "id", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
|
|
680
684
|
{ no: 2, name: "controlLayerNeighbors", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => PeerDescriptor },
|
|
681
|
-
{ no: 3, name: "
|
|
685
|
+
{ no: 3, name: "contentDeliveryLayerNeighbors", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => PeerDescriptor }
|
|
682
686
|
]);
|
|
683
687
|
}
|
|
684
688
|
}
|
|
@@ -725,9 +729,9 @@ class NodeInfoResponse$Type extends MessageType<NodeInfoResponse> {
|
|
|
725
729
|
*/
|
|
726
730
|
export const NodeInfoResponse = new NodeInfoResponse$Type();
|
|
727
731
|
/**
|
|
728
|
-
* @generated ServiceType for protobuf service
|
|
732
|
+
* @generated ServiceType for protobuf service ContentDeliveryRpc
|
|
729
733
|
*/
|
|
730
|
-
export const
|
|
734
|
+
export const ContentDeliveryRpc = new ServiceType("ContentDeliveryRpc", [
|
|
731
735
|
{ name: "sendStreamMessage", options: {}, I: StreamMessage, O: Empty },
|
|
732
736
|
{ name: "leaveStreamPartNotice", options: {}, I: LeaveStreamPartNotice, O: Empty }
|
|
733
737
|
]);
|
|
@@ -119,7 +119,7 @@ const measureJoiningTime = async () => {
|
|
|
119
119
|
await streamSubscriber.start()
|
|
120
120
|
|
|
121
121
|
await Promise.all([
|
|
122
|
-
waitForEvent3(streamSubscriber.stack.
|
|
122
|
+
waitForEvent3(streamSubscriber.stack.getContentDeliveryManager() as any, 'newMessage', 60000),
|
|
123
123
|
streamSubscriber.join(stream)
|
|
124
124
|
])
|
|
125
125
|
|
|
@@ -153,14 +153,14 @@ run().then(() => {
|
|
|
153
153
|
console.log('done')
|
|
154
154
|
}).catch((err) => {
|
|
155
155
|
console.error(err)
|
|
156
|
-
const
|
|
157
|
-
const streamParts =
|
|
156
|
+
const contentDeliveryManager = currentNode.stack.getContentDeliveryManager()
|
|
157
|
+
const streamParts = contentDeliveryManager.getStreamParts()
|
|
158
158
|
const foundData = nodes[0].stack.getLayer0Node().fetchDataFromDht(streamPartIdToDataKey(streamParts[0]))
|
|
159
159
|
console.log(foundData)
|
|
160
160
|
const layer0Node = currentNode.stack.getLayer0Node() as DhtNode
|
|
161
161
|
console.log(layer0Node.getNeighbors().length)
|
|
162
162
|
console.log(layer0Node.getConnectionCount())
|
|
163
|
-
const streamPartDelivery =
|
|
163
|
+
const streamPartDelivery = contentDeliveryManager.getStreamPartDelivery(streamParts[0])! as { layer1Node: Layer1Node, node: RandomGraphNode }
|
|
164
164
|
console.log(streamPartDelivery.layer1Node.getNeighbors())
|
|
165
165
|
console.log(streamPartDelivery.node.getNeighbors())
|
|
166
166
|
console.log(nodes[nodes.length - 1])
|
|
@@ -96,14 +96,14 @@ describe('inspect', () => {
|
|
|
96
96
|
await inspectedNode.start()
|
|
97
97
|
await inspectorNode.start()
|
|
98
98
|
|
|
99
|
-
publisherNode.stack.
|
|
100
|
-
inspectedNode.stack.
|
|
101
|
-
inspectorNode.stack.
|
|
99
|
+
publisherNode.stack.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
|
|
100
|
+
inspectedNode.stack.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
|
|
101
|
+
inspectorNode.stack.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
|
|
102
102
|
|
|
103
103
|
await waitForCondition(() =>
|
|
104
|
-
publisherNode.stack.
|
|
105
|
-
&& inspectedNode.stack.
|
|
106
|
-
&& inspectorNode.stack.
|
|
104
|
+
publisherNode.stack.getContentDeliveryManager().getNeighbors(STREAM_PART_ID).length === 2
|
|
105
|
+
&& inspectedNode.stack.getContentDeliveryManager().getNeighbors(STREAM_PART_ID).length === 2
|
|
106
|
+
&& inspectorNode.stack.getContentDeliveryManager().getNeighbors(STREAM_PART_ID).length === 2
|
|
107
107
|
)
|
|
108
108
|
}, 30000)
|
|
109
109
|
|
|
@@ -65,11 +65,11 @@ describe('proxy and full node', () => {
|
|
|
65
65
|
}
|
|
66
66
|
})
|
|
67
67
|
await proxyNode.start()
|
|
68
|
-
proxyNode.stack.
|
|
69
|
-
proxyNode.stack.
|
|
70
|
-
proxyNode.stack.
|
|
71
|
-
proxyNode.stack.
|
|
72
|
-
proxyNode.stack.
|
|
68
|
+
proxyNode.stack.getContentDeliveryManager().joinStreamPart(proxiedStreamPart)
|
|
69
|
+
proxyNode.stack.getContentDeliveryManager().joinStreamPart(regularStreamPart1)
|
|
70
|
+
proxyNode.stack.getContentDeliveryManager().joinStreamPart(regularStreamPart2)
|
|
71
|
+
proxyNode.stack.getContentDeliveryManager().joinStreamPart(regularStreamPart3)
|
|
72
|
+
proxyNode.stack.getContentDeliveryManager().joinStreamPart(regularStreamPart4)
|
|
73
73
|
|
|
74
74
|
proxiedNode = createNetworkNode({
|
|
75
75
|
layer0: {
|
|
@@ -90,19 +90,19 @@ describe('proxy and full node', () => {
|
|
|
90
90
|
expect(proxiedNode.stack.getLayer0Node().hasJoined()).toBe(false)
|
|
91
91
|
|
|
92
92
|
await Promise.all([
|
|
93
|
-
waitForEvent3(proxyNode.stack.
|
|
93
|
+
waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage'),
|
|
94
94
|
proxiedNode.broadcast(createMessage(regularStreamPart1))
|
|
95
95
|
])
|
|
96
96
|
|
|
97
97
|
expect(proxiedNode.stack.getLayer0Node().hasJoined()).toBe(true)
|
|
98
98
|
|
|
99
99
|
await Promise.all([
|
|
100
|
-
waitForEvent3(proxyNode.stack.
|
|
100
|
+
waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage'),
|
|
101
101
|
proxiedNode.broadcast(createMessage(proxiedStreamPart))
|
|
102
102
|
])
|
|
103
103
|
|
|
104
|
-
expect(proxiedNode.stack.
|
|
105
|
-
expect(proxiedNode.stack.
|
|
104
|
+
expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(proxiedStreamPart)!.proxied).toBe(true)
|
|
105
|
+
expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(regularStreamPart1)!.proxied).toBe(false)
|
|
106
106
|
})
|
|
107
107
|
|
|
108
108
|
it('proxied node can act as full node on multiple stream parts', async () => {
|
|
@@ -110,13 +110,13 @@ describe('proxy and full node', () => {
|
|
|
110
110
|
expect(proxiedNode.stack.getLayer0Node().hasJoined()).toBe(false)
|
|
111
111
|
|
|
112
112
|
await Promise.all([
|
|
113
|
-
waitForEvent3(proxyNode.stack.
|
|
113
|
+
waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage', 5000,
|
|
114
114
|
(streamMessage: InternalStreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart1)),
|
|
115
|
-
waitForEvent3(proxyNode.stack.
|
|
115
|
+
waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage', 5000,
|
|
116
116
|
(streamMessage: InternalStreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart2)),
|
|
117
|
-
waitForEvent3(proxyNode.stack.
|
|
117
|
+
waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage', 5000,
|
|
118
118
|
(streamMessage: InternalStreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart3)),
|
|
119
|
-
waitForEvent3(proxyNode.stack.
|
|
119
|
+
waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage', 5000,
|
|
120
120
|
(streamMessage: InternalStreamMessage) => streamMessage.messageId!.streamId === StreamPartIDUtils.getStreamID(regularStreamPart4)),
|
|
121
121
|
proxiedNode.broadcast(createMessage(regularStreamPart1)),
|
|
122
122
|
proxiedNode.broadcast(createMessage(regularStreamPart2)),
|
|
@@ -127,15 +127,15 @@ describe('proxy and full node', () => {
|
|
|
127
127
|
expect(proxiedNode.stack.getLayer0Node().hasJoined()).toBe(true)
|
|
128
128
|
|
|
129
129
|
await Promise.all([
|
|
130
|
-
waitForEvent3(proxyNode.stack.
|
|
130
|
+
waitForEvent3(proxyNode.stack.getContentDeliveryManager() as any, 'newMessage'),
|
|
131
131
|
proxiedNode.broadcast(createMessage(proxiedStreamPart))
|
|
132
132
|
])
|
|
133
133
|
|
|
134
|
-
expect(proxiedNode.stack.
|
|
135
|
-
expect(proxiedNode.stack.
|
|
136
|
-
expect(proxiedNode.stack.
|
|
137
|
-
expect(proxiedNode.stack.
|
|
138
|
-
expect(proxiedNode.stack.
|
|
134
|
+
expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(proxiedStreamPart)!.proxied).toBe(true)
|
|
135
|
+
expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(regularStreamPart1)!.proxied).toBe(false)
|
|
136
|
+
expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(regularStreamPart2)!.proxied).toBe(false)
|
|
137
|
+
expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(regularStreamPart3)!.proxied).toBe(false)
|
|
138
|
+
expect(proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(regularStreamPart4)!.proxied).toBe(false)
|
|
139
139
|
})
|
|
140
140
|
|
|
141
141
|
})
|
|
@@ -46,14 +46,14 @@ describe('Proxy connections', () => {
|
|
|
46
46
|
let proxiedNode: NetworkNode
|
|
47
47
|
|
|
48
48
|
const hasConnectionFromProxy = (proxyNode: NetworkNode): boolean => {
|
|
49
|
-
const delivery = proxyNode.stack.
|
|
49
|
+
const delivery = proxyNode.stack.getContentDeliveryManager().getStreamPartDelivery(STREAM_PART_ID)
|
|
50
50
|
return (delivery !== undefined)
|
|
51
51
|
? ((delivery as { node: RandomGraphNode }).node).hasProxyConnection(proxiedNode.getNodeId())
|
|
52
52
|
: false
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
const hasConnectionToProxy = (proxyNodeId: DhtAddress, direction: ProxyDirection): boolean => {
|
|
56
|
-
const client = (proxiedNode.stack.
|
|
56
|
+
const client = (proxiedNode.stack.getContentDeliveryManager().getStreamPartDelivery(STREAM_PART_ID) as { client: ProxyClient }).client
|
|
57
57
|
return client.hasConnection(proxyNodeId, direction)
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -77,7 +77,7 @@ describe('Proxy connections', () => {
|
|
|
77
77
|
})
|
|
78
78
|
await proxyNode1.start()
|
|
79
79
|
proxyNode1.setStreamPartEntryPoints(STREAM_PART_ID, [proxyNodeDescriptor1])
|
|
80
|
-
proxyNode1.stack.
|
|
80
|
+
proxyNode1.stack.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
|
|
81
81
|
proxyNode2 = createNetworkNode({
|
|
82
82
|
layer0: {
|
|
83
83
|
entryPoints: [proxyNodeDescriptor1],
|
|
@@ -90,7 +90,7 @@ describe('Proxy connections', () => {
|
|
|
90
90
|
})
|
|
91
91
|
await proxyNode2.start()
|
|
92
92
|
proxyNode2.setStreamPartEntryPoints(STREAM_PART_ID, [proxyNodeDescriptor1])
|
|
93
|
-
proxyNode2.stack.
|
|
93
|
+
proxyNode2.stack.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
|
|
94
94
|
proxiedNode = createNetworkNode({
|
|
95
95
|
layer0: {
|
|
96
96
|
entryPoints: [proxyNode1.getPeerDescriptor()],
|
|
@@ -109,7 +109,7 @@ describe('Proxy connections', () => {
|
|
|
109
109
|
it('happy path publishing', async () => {
|
|
110
110
|
await proxiedNode.setProxies(STREAM_PART_ID, [proxyNode1.getPeerDescriptor()], ProxyDirection.PUBLISH, PROXIED_NODE_USER_ID, 1)
|
|
111
111
|
await Promise.all([
|
|
112
|
-
waitForEvent3(proxyNode1.stack.
|
|
112
|
+
waitForEvent3(proxyNode1.stack.getContentDeliveryManager() as any, 'newMessage'),
|
|
113
113
|
proxiedNode.broadcast(MESSAGE)
|
|
114
114
|
])
|
|
115
115
|
})
|
|
@@ -117,7 +117,7 @@ describe('Proxy connections', () => {
|
|
|
117
117
|
it('happy path subscribing', async () => {
|
|
118
118
|
await proxiedNode.setProxies(STREAM_PART_ID, [proxyNode1.getPeerDescriptor()], ProxyDirection.SUBSCRIBE, PROXIED_NODE_USER_ID, 1)
|
|
119
119
|
await Promise.all([
|
|
120
|
-
waitForEvent3(proxiedNode.stack.
|
|
120
|
+
waitForEvent3(proxiedNode.stack.getContentDeliveryManager() as any, 'newMessage'),
|
|
121
121
|
proxyNode1.broadcast(MESSAGE)
|
|
122
122
|
])
|
|
123
123
|
})
|
|
@@ -196,7 +196,7 @@ describe('Proxy connections', () => {
|
|
|
196
196
|
await proxyNode1.leave(STREAM_PART_ID)
|
|
197
197
|
await waitForCondition(() => hasConnectionToProxy(proxyNode1.getNodeId(), ProxyDirection.SUBSCRIBE))
|
|
198
198
|
expect(hasConnectionFromProxy(proxyNode1)).toBe(false)
|
|
199
|
-
proxyNode1.stack.
|
|
199
|
+
proxyNode1.stack.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
|
|
200
200
|
await waitForCondition(() => hasConnectionToProxy(proxyNode1.getNodeId(), ProxyDirection.SUBSCRIBE), 25000)
|
|
201
201
|
// TODO why wait is needed?
|
|
202
202
|
await wait(100)
|
|
@@ -47,7 +47,7 @@ describe('proxy group key exchange', () => {
|
|
|
47
47
|
})
|
|
48
48
|
await proxyNode.start()
|
|
49
49
|
proxyNode.setStreamPartEntryPoints(STREAM_PART_ID, [proxyNodeDescriptor])
|
|
50
|
-
proxyNode.stack.
|
|
50
|
+
proxyNode.stack.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
|
|
51
51
|
publisher = createNetworkNode({
|
|
52
52
|
layer0: {
|
|
53
53
|
entryPoints: [proxyNodeDescriptor],
|
|
@@ -101,7 +101,7 @@ describe('proxy group key exchange', () => {
|
|
|
101
101
|
})
|
|
102
102
|
|
|
103
103
|
await Promise.all([
|
|
104
|
-
waitForEvent3(publisher.stack.
|
|
104
|
+
waitForEvent3(publisher.stack.getContentDeliveryManager() as any, 'newMessage'),
|
|
105
105
|
subscriber.broadcast(request)
|
|
106
106
|
])
|
|
107
107
|
})
|
|
@@ -133,7 +133,7 @@ describe('proxy group key exchange', () => {
|
|
|
133
133
|
})
|
|
134
134
|
|
|
135
135
|
await Promise.all([
|
|
136
|
-
waitForEvent3(subscriber.stack.
|
|
136
|
+
waitForEvent3(subscriber.stack.getContentDeliveryManager() as any, 'newMessage'),
|
|
137
137
|
publisher.broadcast(response)
|
|
138
138
|
])
|
|
139
139
|
})
|
|
@@ -33,8 +33,8 @@ describe('Full node network with WebRTC connections', () => {
|
|
|
33
33
|
}
|
|
34
34
|
})
|
|
35
35
|
await entryPoint.start()
|
|
36
|
-
entryPoint.
|
|
37
|
-
entryPoint.
|
|
36
|
+
entryPoint.getContentDeliveryManager().setStreamPartEntryPoints(streamPartId, [epPeerDescriptor])
|
|
37
|
+
entryPoint.getContentDeliveryManager().joinStreamPart(streamPartId)
|
|
38
38
|
|
|
39
39
|
await Promise.all(range(NUM_OF_NODES).map(async () => {
|
|
40
40
|
const peerDescriptor = createMockPeerDescriptor()
|
|
@@ -46,8 +46,8 @@ describe('Full node network with WebRTC connections', () => {
|
|
|
46
46
|
})
|
|
47
47
|
nodes.push(node)
|
|
48
48
|
await node.start()
|
|
49
|
-
node.
|
|
50
|
-
node.
|
|
49
|
+
node.getContentDeliveryManager().setStreamPartEntryPoints(streamPartId, [epPeerDescriptor])
|
|
50
|
+
node.getContentDeliveryManager().joinStreamPart(streamPartId)
|
|
51
51
|
}))
|
|
52
52
|
|
|
53
53
|
}, 90000)
|
|
@@ -62,15 +62,15 @@ describe('Full node network with WebRTC connections', () => {
|
|
|
62
62
|
it('happy path', async () => {
|
|
63
63
|
await Promise.all(nodes.map((node) =>
|
|
64
64
|
waitForCondition(() => {
|
|
65
|
-
return node.
|
|
65
|
+
return node.getContentDeliveryManager().getNeighbors(streamPartId).length >= 3
|
|
66
66
|
}
|
|
67
67
|
, 30000)
|
|
68
68
|
))
|
|
69
69
|
let receivedMessageCount = 0
|
|
70
70
|
const successIds: string[] = []
|
|
71
71
|
nodes.forEach((node) => {
|
|
72
|
-
node.
|
|
73
|
-
successIds.push(getNodeIdFromPeerDescriptor(node.
|
|
72
|
+
node.getContentDeliveryManager().on('newMessage', () => {
|
|
73
|
+
successIds.push(getNodeIdFromPeerDescriptor(node.getContentDeliveryManager().getPeerDescriptor()))
|
|
74
74
|
receivedMessageCount += 1
|
|
75
75
|
})
|
|
76
76
|
})
|
|
@@ -79,7 +79,7 @@ describe('Full node network with WebRTC connections', () => {
|
|
|
79
79
|
streamPartId,
|
|
80
80
|
randomEthereumAddress()
|
|
81
81
|
)
|
|
82
|
-
entryPoint.
|
|
82
|
+
entryPoint.getContentDeliveryManager().broadcast(msg)
|
|
83
83
|
await waitForCondition(() => receivedMessageCount === NUM_OF_NODES)
|
|
84
84
|
}, 120000)
|
|
85
85
|
|
|
@@ -8,7 +8,7 @@ import { getNodeIdFromPeerDescriptor } from '@streamr/dht'
|
|
|
8
8
|
|
|
9
9
|
describe('Full node network with WebSocket connections only', () => {
|
|
10
10
|
|
|
11
|
-
const NUM_OF_NODES =
|
|
11
|
+
const NUM_OF_NODES = 20
|
|
12
12
|
const epPeerDescriptor = createMockPeerDescriptor({
|
|
13
13
|
websocket: { host: '127.0.0.1', port: 15555, tls: false }
|
|
14
14
|
})
|
|
@@ -30,8 +30,8 @@ describe('Full node network with WebSocket connections only', () => {
|
|
|
30
30
|
}
|
|
31
31
|
})
|
|
32
32
|
await entryPoint.start()
|
|
33
|
-
entryPoint.
|
|
34
|
-
entryPoint.
|
|
33
|
+
entryPoint.getContentDeliveryManager().setStreamPartEntryPoints(streamPartId, [epPeerDescriptor])
|
|
34
|
+
entryPoint.getContentDeliveryManager().joinStreamPart(streamPartId)
|
|
35
35
|
|
|
36
36
|
await Promise.all(range(NUM_OF_NODES).map(async (i) => {
|
|
37
37
|
const node = new NetworkStack({
|
|
@@ -44,8 +44,8 @@ describe('Full node network with WebSocket connections only', () => {
|
|
|
44
44
|
})
|
|
45
45
|
nodes.push(node)
|
|
46
46
|
await node.start()
|
|
47
|
-
node.
|
|
48
|
-
node.
|
|
47
|
+
node.getContentDeliveryManager().setStreamPartEntryPoints(streamPartId, [epPeerDescriptor])
|
|
48
|
+
node.getContentDeliveryManager().joinStreamPart(streamPartId)
|
|
49
49
|
}))
|
|
50
50
|
|
|
51
51
|
}, 120000)
|
|
@@ -60,15 +60,15 @@ describe('Full node network with WebSocket connections only', () => {
|
|
|
60
60
|
it('happy path', async () => {
|
|
61
61
|
await Promise.all(nodes.map((node) =>
|
|
62
62
|
waitForCondition(() => {
|
|
63
|
-
return node.
|
|
63
|
+
return node.getContentDeliveryManager().getNeighbors(streamPartId).length >= 4
|
|
64
64
|
}
|
|
65
65
|
, 30000)
|
|
66
66
|
))
|
|
67
67
|
let receivedMessageCount = 0
|
|
68
68
|
const successIds: string[] = []
|
|
69
69
|
nodes.forEach((node) => {
|
|
70
|
-
node.
|
|
71
|
-
successIds.push(getNodeIdFromPeerDescriptor(node.
|
|
70
|
+
node.getContentDeliveryManager().on('newMessage', () => {
|
|
71
|
+
successIds.push(getNodeIdFromPeerDescriptor(node.getContentDeliveryManager().getPeerDescriptor()))
|
|
72
72
|
receivedMessageCount += 1
|
|
73
73
|
})
|
|
74
74
|
})
|
|
@@ -78,7 +78,7 @@ describe('Full node network with WebSocket connections only', () => {
|
|
|
78
78
|
streamPartId,
|
|
79
79
|
randomEthereumAddress()
|
|
80
80
|
)
|
|
81
|
-
entryPoint.
|
|
81
|
+
entryPoint.getContentDeliveryManager().broadcast(msg)
|
|
82
82
|
await waitForCondition(() => receivedMessageCount === NUM_OF_NODES)
|
|
83
83
|
}, 220000)
|
|
84
84
|
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DhtNode,
|
|
3
|
+
Simulator,
|
|
4
|
+
SimulatorTransport
|
|
5
|
+
} from '@streamr/dht'
|
|
6
|
+
import { ContentDeliveryManager, Events } from '../../src/logic/ContentDeliveryManager'
|
|
7
|
+
import { waitForEvent3, waitForCondition } from '@streamr/utils'
|
|
8
|
+
import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
|
|
9
|
+
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
10
|
+
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
11
|
+
import { Layer0Node } from '../../src/logic/Layer0Node'
|
|
12
|
+
|
|
13
|
+
describe('ContentDeliveryManager', () => {
|
|
14
|
+
|
|
15
|
+
let layer0Node1: Layer0Node
|
|
16
|
+
let layer0Node2: Layer0Node
|
|
17
|
+
let transport1: SimulatorTransport
|
|
18
|
+
let transport2: SimulatorTransport
|
|
19
|
+
let manager1: ContentDeliveryManager
|
|
20
|
+
let manager2: ContentDeliveryManager
|
|
21
|
+
|
|
22
|
+
const peerDescriptor1 = createMockPeerDescriptor()
|
|
23
|
+
const peerDescriptor2 = createMockPeerDescriptor()
|
|
24
|
+
const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
|
|
25
|
+
|
|
26
|
+
const msg = createStreamMessage(
|
|
27
|
+
JSON.stringify({ hello: 'WORLD' }),
|
|
28
|
+
STREAM_PART_ID,
|
|
29
|
+
randomEthereumAddress()
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
afterEach(async () => {
|
|
33
|
+
await Promise.all([
|
|
34
|
+
manager1.destroy(),
|
|
35
|
+
manager2.destroy()
|
|
36
|
+
])
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
beforeEach(async () => {
|
|
40
|
+
const simulator = new Simulator()
|
|
41
|
+
transport1 = new SimulatorTransport(peerDescriptor1, simulator)
|
|
42
|
+
await transport1.start()
|
|
43
|
+
transport2 = new SimulatorTransport(peerDescriptor2, simulator)
|
|
44
|
+
await transport2.start()
|
|
45
|
+
layer0Node1 = new DhtNode({
|
|
46
|
+
transport: transport1,
|
|
47
|
+
peerDescriptor: peerDescriptor1,
|
|
48
|
+
entryPoints: [peerDescriptor1]
|
|
49
|
+
})
|
|
50
|
+
layer0Node2 = new DhtNode({
|
|
51
|
+
transport: transport2,
|
|
52
|
+
peerDescriptor: peerDescriptor2,
|
|
53
|
+
entryPoints: [peerDescriptor1]
|
|
54
|
+
})
|
|
55
|
+
await Promise.all([
|
|
56
|
+
layer0Node1.start(),
|
|
57
|
+
layer0Node2.start()
|
|
58
|
+
])
|
|
59
|
+
await Promise.all([
|
|
60
|
+
layer0Node1.joinDht([peerDescriptor1]),
|
|
61
|
+
layer0Node2.joinDht([peerDescriptor1])
|
|
62
|
+
])
|
|
63
|
+
|
|
64
|
+
manager1 = new ContentDeliveryManager({})
|
|
65
|
+
manager2 = new ContentDeliveryManager({})
|
|
66
|
+
await manager1.start(layer0Node1, transport1, transport1)
|
|
67
|
+
manager1.setStreamPartEntryPoints(STREAM_PART_ID, [peerDescriptor1])
|
|
68
|
+
await manager2.start(layer0Node2, transport2, transport2)
|
|
69
|
+
manager2.setStreamPartEntryPoints(STREAM_PART_ID, [peerDescriptor1])
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it('starts', async () => {
|
|
73
|
+
expect(manager1.getPeerDescriptor()).toEqual(peerDescriptor1)
|
|
74
|
+
expect(manager2.getPeerDescriptor()).toEqual(peerDescriptor2)
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
it('Joining stream', async () => {
|
|
78
|
+
manager1.joinStreamPart(STREAM_PART_ID)
|
|
79
|
+
manager2.joinStreamPart(STREAM_PART_ID)
|
|
80
|
+
await waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1)
|
|
81
|
+
await waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
|
|
82
|
+
expect(manager1.getNeighbors(STREAM_PART_ID).length).toEqual(1)
|
|
83
|
+
expect(manager2.getNeighbors(STREAM_PART_ID).length).toEqual(1)
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
it('Publishing after joining and waiting for neighbors', async () => {
|
|
87
|
+
manager1.joinStreamPart(STREAM_PART_ID)
|
|
88
|
+
manager2.joinStreamPart(STREAM_PART_ID)
|
|
89
|
+
await waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1)
|
|
90
|
+
await waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
|
|
91
|
+
await Promise.all([
|
|
92
|
+
waitForEvent3<Events>(manager1, 'newMessage'),
|
|
93
|
+
manager2.broadcast(msg)
|
|
94
|
+
])
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('multi-stream pub/sub', async () => {
|
|
98
|
+
const streamPartId2 = StreamPartIDUtils.parse('test2#0')
|
|
99
|
+
manager1.setStreamPartEntryPoints(streamPartId2, [peerDescriptor1])
|
|
100
|
+
manager2.setStreamPartEntryPoints(streamPartId2, [peerDescriptor1])
|
|
101
|
+
manager1.joinStreamPart(STREAM_PART_ID)
|
|
102
|
+
manager1.joinStreamPart(streamPartId2)
|
|
103
|
+
manager2.joinStreamPart(STREAM_PART_ID)
|
|
104
|
+
manager2.joinStreamPart(streamPartId2)
|
|
105
|
+
await Promise.all([
|
|
106
|
+
waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1),
|
|
107
|
+
waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1),
|
|
108
|
+
waitForCondition(() => manager1.getNeighbors(streamPartId2).length === 1),
|
|
109
|
+
waitForCondition(() => manager2.getNeighbors(streamPartId2).length === 1)
|
|
110
|
+
])
|
|
111
|
+
const msg2 = createStreamMessage(
|
|
112
|
+
JSON.stringify({ hello: 'WORLD' }),
|
|
113
|
+
streamPartId2,
|
|
114
|
+
randomEthereumAddress()
|
|
115
|
+
)
|
|
116
|
+
await Promise.all([
|
|
117
|
+
waitForEvent3<Events>(manager1, 'newMessage'),
|
|
118
|
+
waitForEvent3<Events>(manager2, 'newMessage'),
|
|
119
|
+
manager1.broadcast(msg2),
|
|
120
|
+
manager2.broadcast(msg)
|
|
121
|
+
])
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
it('leaving stream parts', async () => {
|
|
125
|
+
manager1.joinStreamPart(STREAM_PART_ID)
|
|
126
|
+
manager2.joinStreamPart(STREAM_PART_ID)
|
|
127
|
+
await Promise.all([
|
|
128
|
+
waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 1),
|
|
129
|
+
waitForCondition(() => manager2.getNeighbors(STREAM_PART_ID).length === 1)
|
|
130
|
+
])
|
|
131
|
+
await manager2.leaveStreamPart(STREAM_PART_ID)
|
|
132
|
+
await waitForCondition(() => manager1.getNeighbors(STREAM_PART_ID).length === 0)
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
})
|
|
@@ -5,8 +5,8 @@ import {
|
|
|
5
5
|
SimulatorTransport,
|
|
6
6
|
NodeType
|
|
7
7
|
} from '@streamr/dht'
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { ContentDeliveryRpcRemote } from '../../src/logic/ContentDeliveryRpcRemote'
|
|
9
|
+
import { ContentDeliveryRpcClient } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
10
10
|
import {
|
|
11
11
|
LeaveStreamPartNotice,
|
|
12
12
|
StreamMessage
|
|
@@ -17,10 +17,10 @@ import { createStreamMessage } from '../utils/utils'
|
|
|
17
17
|
import { StreamPartIDUtils } from '@streamr/protocol'
|
|
18
18
|
import { randomEthereumAddress } from '@streamr/test-utils'
|
|
19
19
|
|
|
20
|
-
describe('
|
|
20
|
+
describe('ContentDeliveryRpcRemote', () => {
|
|
21
21
|
let mockServerRpc: ListeningRpcCommunicator
|
|
22
22
|
let clientRpc: ListeningRpcCommunicator
|
|
23
|
-
let rpcRemote:
|
|
23
|
+
let rpcRemote: ContentDeliveryRpcRemote
|
|
24
24
|
|
|
25
25
|
const clientNode: PeerDescriptor = {
|
|
26
26
|
nodeId: new Uint8Array([1, 1, 1]),
|
|
@@ -66,11 +66,11 @@ describe('DeliveryRpcRemote', () => {
|
|
|
66
66
|
}
|
|
67
67
|
)
|
|
68
68
|
|
|
69
|
-
rpcRemote = new
|
|
69
|
+
rpcRemote = new ContentDeliveryRpcRemote(
|
|
70
70
|
clientNode,
|
|
71
71
|
serverNode,
|
|
72
72
|
clientRpc,
|
|
73
|
-
|
|
73
|
+
ContentDeliveryRpcClient
|
|
74
74
|
)
|
|
75
75
|
})
|
|
76
76
|
|
|
@@ -75,12 +75,12 @@ describe('inspect', () => {
|
|
|
75
75
|
123123,
|
|
76
76
|
sequenceNumber
|
|
77
77
|
)
|
|
78
|
-
publisherNode.
|
|
78
|
+
publisherNode.getContentDeliveryManager().broadcast(msg)
|
|
79
79
|
sequenceNumber += 1
|
|
80
80
|
}, 200)
|
|
81
81
|
|
|
82
82
|
for (const node of inspectedNodes) {
|
|
83
|
-
const result = await inspectorNode.
|
|
83
|
+
const result = await inspectorNode.getContentDeliveryManager().inspect(node.getLayer0Node().getLocalPeerDescriptor(), streamPartId)
|
|
84
84
|
expect(result).toEqual(true)
|
|
85
85
|
}
|
|
86
86
|
}, 25000)
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
ProtoRpcClient,
|
|
4
4
|
toProtoRpcClient
|
|
5
5
|
} from '@streamr/proto-rpc'
|
|
6
|
-
import {
|
|
6
|
+
import { ContentDeliveryRpcClient } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
|
|
7
7
|
import { StreamMessage } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
|
|
8
8
|
import { waitForCondition } from '@streamr/utils'
|
|
9
9
|
import { Empty } from '../../src/proto/google/protobuf/empty'
|
|
@@ -16,7 +16,7 @@ import { randomEthereumAddress } from '@streamr/test-utils'
|
|
|
16
16
|
describe('Network RPC', () => {
|
|
17
17
|
let rpcCommunicator1: RpcCommunicator<DhtCallContext>
|
|
18
18
|
let rpcCommunicator2: RpcCommunicator<DhtCallContext>
|
|
19
|
-
let client: ProtoRpcClient<
|
|
19
|
+
let client: ProtoRpcClient<ContentDeliveryRpcClient>
|
|
20
20
|
let recvCounter = 0
|
|
21
21
|
|
|
22
22
|
beforeEach(() => {
|
|
@@ -25,7 +25,7 @@ describe('Network RPC', () => {
|
|
|
25
25
|
rpcCommunicator1.on('outgoingMessage', (message: RpcMessage) => {
|
|
26
26
|
rpcCommunicator2.handleIncomingMessage(message)
|
|
27
27
|
})
|
|
28
|
-
client = toProtoRpcClient(new
|
|
28
|
+
client = toProtoRpcClient(new ContentDeliveryRpcClient(rpcCommunicator1.getRpcClientTransport()))
|
|
29
29
|
rpcCommunicator2.registerRpcNotification(
|
|
30
30
|
StreamMessage,
|
|
31
31
|
'sendStreamMessage',
|
|
@@ -34,9 +34,9 @@ describe('NetworkStack', () => {
|
|
|
34
34
|
})
|
|
35
35
|
|
|
36
36
|
await stack1.start()
|
|
37
|
-
stack1.
|
|
37
|
+
stack1.getContentDeliveryManager().setStreamPartEntryPoints(STREAM_PART_ID, [epDescriptor])
|
|
38
38
|
await stack2.start()
|
|
39
|
-
stack2.
|
|
39
|
+
stack2.getContentDeliveryManager().setStreamPartEntryPoints(STREAM_PART_ID, [epDescriptor])
|
|
40
40
|
})
|
|
41
41
|
|
|
42
42
|
afterEach(async () => {
|
|
@@ -48,8 +48,8 @@ describe('NetworkStack', () => {
|
|
|
48
48
|
|
|
49
49
|
it('Can use NetworkNode pub/sub via NetworkStack', async () => {
|
|
50
50
|
let receivedMessages = 0
|
|
51
|
-
stack1.
|
|
52
|
-
stack1.
|
|
51
|
+
stack1.getContentDeliveryManager().joinStreamPart(STREAM_PART_ID)
|
|
52
|
+
stack1.getContentDeliveryManager().on('newMessage', () => {
|
|
53
53
|
receivedMessages += 1
|
|
54
54
|
})
|
|
55
55
|
const msg = createStreamMessage(
|
|
@@ -57,7 +57,7 @@ describe('NetworkStack', () => {
|
|
|
57
57
|
STREAM_PART_ID,
|
|
58
58
|
randomEthereumAddress()
|
|
59
59
|
)
|
|
60
|
-
stack2.
|
|
60
|
+
stack2.getContentDeliveryManager().broadcast(msg)
|
|
61
61
|
await waitForCondition(() => receivedMessages === 1)
|
|
62
62
|
})
|
|
63
63
|
|
|
@@ -66,7 +66,7 @@ describe('NetworkStack', () => {
|
|
|
66
66
|
stack1.joinStreamPart(STREAM_PART_ID, { minCount: 1, timeout: 5000 }),
|
|
67
67
|
stack2.joinStreamPart(STREAM_PART_ID, { minCount: 1, timeout: 5000 }),
|
|
68
68
|
])
|
|
69
|
-
expect(stack1.
|
|
70
|
-
expect(stack2.
|
|
69
|
+
expect(stack1.getContentDeliveryManager().getNeighbors(STREAM_PART_ID).length).toBe(1)
|
|
70
|
+
expect(stack2.getContentDeliveryManager().getNeighbors(STREAM_PART_ID).length).toBe(1)
|
|
71
71
|
})
|
|
72
72
|
})
|