@streamr/trackerless-network 102.0.0-beta.1 → 102.0.0-beta.3

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.
Files changed (103) hide show
  1. package/dist/package.json +5 -5
  2. package/package.json +5 -5
  3. package/src/NetworkNode.ts +0 -142
  4. package/src/NetworkStack.ts +0 -197
  5. package/src/exports.ts +0 -18
  6. package/src/logic/ContentDeliveryLayerNode.ts +0 -424
  7. package/src/logic/ContentDeliveryManager.ts +0 -401
  8. package/src/logic/ContentDeliveryRpcLocal.ts +0 -48
  9. package/src/logic/ContentDeliveryRpcRemote.ts +0 -44
  10. package/src/logic/ControlLayerNode.ts +0 -17
  11. package/src/logic/DiscoveryLayerNode.ts +0 -30
  12. package/src/logic/DuplicateMessageDetector.ts +0 -167
  13. package/src/logic/ExternalNetworkRpc.ts +0 -42
  14. package/src/logic/NodeList.ts +0 -114
  15. package/src/logic/PeerDescriptorStoreManager.ts +0 -96
  16. package/src/logic/StreamPartNetworkSplitAvoidance.ts +0 -90
  17. package/src/logic/StreamPartReconnect.ts +0 -38
  18. package/src/logic/createContentDeliveryLayerNode.ts +0 -130
  19. package/src/logic/formStreamPartDeliveryServiceId.ts +0 -7
  20. package/src/logic/inspect/InspectSession.ts +0 -55
  21. package/src/logic/inspect/Inspector.ts +0 -100
  22. package/src/logic/neighbor-discovery/HandshakeRpcLocal.ts +0 -138
  23. package/src/logic/neighbor-discovery/HandshakeRpcRemote.ts +0 -66
  24. package/src/logic/neighbor-discovery/Handshaker.ts +0 -215
  25. package/src/logic/neighbor-discovery/NeighborFinder.ts +0 -77
  26. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +0 -69
  27. package/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.ts +0 -75
  28. package/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.ts +0 -35
  29. package/src/logic/node-info/NodeInfoClient.ts +0 -23
  30. package/src/logic/node-info/NodeInfoRpcLocal.ts +0 -28
  31. package/src/logic/node-info/NodeInfoRpcRemote.ts +0 -11
  32. package/src/logic/propagation/FifoMapWithTTL.ts +0 -116
  33. package/src/logic/propagation/Propagation.ts +0 -84
  34. package/src/logic/propagation/PropagationTaskStore.ts +0 -41
  35. package/src/logic/proxy/ProxyClient.ts +0 -286
  36. package/src/logic/proxy/ProxyConnectionRpcLocal.ts +0 -106
  37. package/src/logic/proxy/ProxyConnectionRpcRemote.ts +0 -26
  38. package/src/logic/temporary-connection/TemporaryConnectionRpcLocal.ts +0 -73
  39. package/src/logic/temporary-connection/TemporaryConnectionRpcRemote.ts +0 -29
  40. package/src/logic/utils.ts +0 -18
  41. package/src/types.ts +0 -13
  42. package/test/benchmark/StreamPartIdDataKeyDistribution.test.ts +0 -60
  43. package/test/benchmark/first-message.ts +0 -171
  44. package/test/end-to-end/content-delivery-layer-node-with-real-connections.test.ts +0 -165
  45. package/test/end-to-end/external-network-rpc.test.ts +0 -67
  46. package/test/end-to-end/inspect.test.ts +0 -124
  47. package/test/end-to-end/proxy-and-full-node.test.ts +0 -143
  48. package/test/end-to-end/proxy-connections.test.ts +0 -226
  49. package/test/end-to-end/proxy-key-exchange.test.ts +0 -126
  50. package/test/end-to-end/webrtc-full-node-network.test.ts +0 -83
  51. package/test/end-to-end/websocket-full-node-network.test.ts +0 -82
  52. package/test/integration/ContentDeliveryLayerNode-Layer1Node-Latencies.test.ts +0 -139
  53. package/test/integration/ContentDeliveryLayerNode-Layer1Node.test.ts +0 -162
  54. package/test/integration/ContentDeliveryManager.test.ts +0 -160
  55. package/test/integration/ContentDeliveryRpcRemote.test.ts +0 -100
  56. package/test/integration/HandshakeRpcRemote.test.ts +0 -79
  57. package/test/integration/Handshakes.test.ts +0 -141
  58. package/test/integration/Inspect.test.ts +0 -89
  59. package/test/integration/NeighborUpdateRpcRemote.test.ts +0 -82
  60. package/test/integration/NetworkNode.test.ts +0 -115
  61. package/test/integration/NetworkRpc.test.ts +0 -52
  62. package/test/integration/NetworkStack.test.ts +0 -72
  63. package/test/integration/NodeInfoRpc.test.ts +0 -109
  64. package/test/integration/Propagation.test.ts +0 -76
  65. package/test/integration/joining-streams-on-offline-peers.test.ts +0 -82
  66. package/test/integration/stream-without-default-entrypoints.test.ts +0 -128
  67. package/test/integration/streamEntryPointReplacing.test.ts +0 -97
  68. package/test/types/global.d.ts +0 -1
  69. package/test/unit/ContentDeliveryLayerNode.test.ts +0 -112
  70. package/test/unit/ContentDeliveryManager.test.ts +0 -96
  71. package/test/unit/ContentDeliveryRpcLocal.test.ts +0 -60
  72. package/test/unit/DuplicateMessageDetector.test.ts +0 -192
  73. package/test/unit/ExternalNetworkRpc.test.ts +0 -48
  74. package/test/unit/FifoMapWithTtl.test.ts +0 -253
  75. package/test/unit/HandshakeRpcLocal.test.ts +0 -155
  76. package/test/unit/Handshaker.test.ts +0 -69
  77. package/test/unit/InspectSession.test.ts +0 -83
  78. package/test/unit/Inspector.test.ts +0 -51
  79. package/test/unit/NeighborFinder.test.ts +0 -51
  80. package/test/unit/NeighborUpdateRpcLocal.test.ts +0 -139
  81. package/test/unit/NetworkNode.test.ts +0 -42
  82. package/test/unit/NodeList.test.ts +0 -164
  83. package/test/unit/NumberPair.test.ts +0 -22
  84. package/test/unit/PeerDescriptorStoreManager.test.ts +0 -103
  85. package/test/unit/Propagation.test.ts +0 -151
  86. package/test/unit/ProxyConnectionRpcRemote.test.ts +0 -39
  87. package/test/unit/StreamPartIDDataKey.test.ts +0 -12
  88. package/test/unit/StreamPartNetworkSplitAvoidance.test.ts +0 -31
  89. package/test/unit/StreamPartReconnect.test.ts +0 -30
  90. package/test/unit/TemporaryConnectionRpcLocal.test.ts +0 -38
  91. package/test/utils/fake/FakePeerDescriptorStoreManager.ts +0 -29
  92. package/test/utils/mock/MockConnectionsView.ts +0 -18
  93. package/test/utils/mock/MockControlLayerNode.ts +0 -78
  94. package/test/utils/mock/MockDiscoveryLayerNode.ts +0 -60
  95. package/test/utils/mock/MockHandshaker.ts +0 -17
  96. package/test/utils/mock/MockNeighborFinder.ts +0 -20
  97. package/test/utils/mock/MockNeighborUpdateManager.ts +0 -21
  98. package/test/utils/mock/MockTransport.ts +0 -30
  99. package/test/utils/utils.ts +0 -144
  100. package/tsconfig.browser.json +0 -13
  101. package/tsconfig.jest.json +0 -17
  102. package/tsconfig.json +0 -3
  103. package/tsconfig.node.json +0 -17
@@ -1,128 +0,0 @@
1
- import { LatencyType, PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
2
- import { randomUserId } from '@streamr/test-utils'
3
- import { StreamPartIDUtils, hexToBinary, toUserIdRaw, utf8ToBinary, until } from '@streamr/utils'
4
- import { range } from 'lodash'
5
- import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
6
- import { streamPartIdToDataKey } from '../../src/logic/ContentDeliveryManager'
7
- import { ContentType, EncryptionType, SignatureType, StreamMessage } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
8
- import { createMockPeerDescriptor } from '../utils/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: toUserIdRaw(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
- until(() => 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
- until(() => 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 until(() => 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 until(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, until } 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 until(() =>
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 until(() => receivedMessages === NUM_OF_LATER_NODES, 30000)
96
- }, 200000)
97
- })
@@ -1 +0,0 @@
1
- import '@streamr/test-utils/customMatcherTypes'
@@ -1,112 +0,0 @@
1
- import { toNodeId } from '@streamr/dht'
2
- import { StreamPartIDUtils, until } 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 until(() => 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 until(() => 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 until(() => {
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
- })
@@ -1,96 +0,0 @@
1
- import { areEqualPeerDescriptors } from '@streamr/dht'
2
- import { StreamPartIDUtils, until } from '@streamr/utils'
3
- import { ContentDeliveryManager } from '../../src/logic/ContentDeliveryManager'
4
- import { ProxyDirection } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
5
- import { MockControlLayerNode } from '../utils/mock/MockControlLayerNode'
6
- import { MockTransport } from '../utils/mock/MockTransport'
7
- import { createMockPeerDescriptor, createStreamMessage, mockConnectionLocker } from '../utils/utils'
8
- import { randomUserId } from '@streamr/test-utils'
9
-
10
- describe('ContentDeliveryManager', () => {
11
-
12
- let manager: ContentDeliveryManager
13
- const peerDescriptor = createMockPeerDescriptor()
14
-
15
- beforeEach(async () => {
16
- manager = new ContentDeliveryManager({})
17
- const mockLayer0 = new MockControlLayerNode(peerDescriptor)
18
- await manager.start(mockLayer0, new MockTransport(), mockConnectionLocker)
19
- })
20
-
21
- afterEach(async () => {
22
- await manager.destroy()
23
- })
24
-
25
- it('PeerDescriptor is correct', () => {
26
- // TODO could use toEqualPeerDescriptor from dht package if we export that custom matcher
27
- expect(areEqualPeerDescriptors(peerDescriptor, manager.getPeerDescriptor())).toBe(true)
28
- })
29
-
30
- describe('join and leave', () => {
31
-
32
- const streamPartId = StreamPartIDUtils.parse('stream#0')
33
- const message = createStreamMessage(
34
- JSON.stringify({ hello: 'WORLD' }),
35
- streamPartId,
36
- randomUserId()
37
- )
38
-
39
- beforeEach(async () => {
40
- manager.setStreamPartEntryPoints(streamPartId, [manager.getPeerDescriptor()])
41
- })
42
-
43
- it('can join stream part', async () => {
44
- manager.joinStreamPart(streamPartId)
45
- expect(manager.hasStreamPart(streamPartId)).toEqual(true)
46
- })
47
-
48
- it('can leave stream part', async () => {
49
- manager.joinStreamPart(streamPartId)
50
- expect(manager.hasStreamPart(streamPartId)).toEqual(true)
51
- await manager.leaveStreamPart(streamPartId)
52
- expect(manager.hasStreamPart(streamPartId)).toEqual(false)
53
- })
54
-
55
- it('broadcast joins stream', async () => {
56
- manager.broadcast(message)
57
- await until(() => manager.hasStreamPart(streamPartId))
58
- })
59
- })
60
-
61
- describe('proxied stream', () => {
62
- it('happy path', async () => {
63
- const streamPartId = StreamPartIDUtils.parse('stream#0')
64
- const proxy = createMockPeerDescriptor()
65
- const userId = randomUserId()
66
- await manager.setProxies(streamPartId, [proxy], ProxyDirection.PUBLISH, userId)
67
- expect(manager.isProxiedStreamPart(streamPartId)).toBe(true)
68
- await manager.setProxies(streamPartId, [], ProxyDirection.PUBLISH, userId)
69
- expect(manager.isProxiedStreamPart(streamPartId)).toBe(false)
70
- })
71
-
72
- it('empty node list', async () => {
73
- const streamPartId = StreamPartIDUtils.parse('stream#0')
74
- const proxy = createMockPeerDescriptor()
75
- const userId = randomUserId()
76
- await manager.setProxies(streamPartId, [], ProxyDirection.PUBLISH, userId)
77
- expect(manager.isProxiedStreamPart(streamPartId)).toBe(false)
78
- await manager.setProxies(streamPartId, [proxy], ProxyDirection.PUBLISH, userId)
79
- expect(manager.isProxiedStreamPart(streamPartId)).toBe(true)
80
- await manager.setProxies(streamPartId, [], ProxyDirection.PUBLISH, userId)
81
- expect(manager.isProxiedStreamPart(streamPartId)).toBe(false)
82
- })
83
-
84
- it('connection count to 0', async () => {
85
- const streamPartId = StreamPartIDUtils.parse('stream#0')
86
- const proxy = createMockPeerDescriptor()
87
- const userId = randomUserId()
88
- await manager.setProxies(streamPartId, [proxy], ProxyDirection.PUBLISH, userId, 0)
89
- expect(manager.isProxiedStreamPart(streamPartId)).toBe(false)
90
- await manager.setProxies(streamPartId, [proxy], ProxyDirection.PUBLISH, userId)
91
- expect(manager.isProxiedStreamPart(streamPartId)).toBe(true)
92
- await manager.setProxies(streamPartId, [proxy], ProxyDirection.PUBLISH, userId, 0)
93
- expect(manager.isProxiedStreamPart(streamPartId)).toBe(false)
94
- })
95
- })
96
- })
@@ -1,60 +0,0 @@
1
- import { ListeningRpcCommunicator } from '@streamr/dht'
2
- import { StreamPartIDUtils } from '@streamr/utils'
3
- import { ContentDeliveryRpcLocal } from '../../src/logic/ContentDeliveryRpcLocal'
4
- import { LeaveStreamPartNotice } from '../../generated/packages/trackerless-network/protos/NetworkRpc'
5
- import { MockTransport } from '../utils/mock/MockTransport'
6
- import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
7
- import { randomUserId } from '@streamr/test-utils'
8
-
9
- describe('ContentDeliveryRpcLocal', () => {
10
-
11
- let rpcLocal: ContentDeliveryRpcLocal
12
- const peerDescriptor = createMockPeerDescriptor()
13
-
14
- const mockSender = createMockPeerDescriptor()
15
-
16
- const message = createStreamMessage(
17
- JSON.stringify({ hello: 'WORLD' }),
18
- StreamPartIDUtils.parse('random-graph#0'),
19
- randomUserId()
20
- )
21
-
22
- let mockBroadcast: jest.Mock
23
- let mockDuplicateCheck: jest.Mock
24
- let mockOnLeaveNotice: jest.Mock
25
- let mockMarkForInspection: jest.Mock
26
-
27
- beforeEach(async () => {
28
- mockDuplicateCheck = jest.fn((_c, _p) => true)
29
- mockBroadcast = jest.fn((_m, _p) => {})
30
- mockOnLeaveNotice = jest.fn((_m) => {})
31
- mockMarkForInspection = jest.fn((_m) => {})
32
-
33
- rpcLocal = new ContentDeliveryRpcLocal({
34
- markAndCheckDuplicate: mockDuplicateCheck,
35
- broadcast: mockBroadcast,
36
- onLeaveNotice: mockOnLeaveNotice,
37
- markForInspection: mockMarkForInspection,
38
- localPeerDescriptor: peerDescriptor,
39
- streamPartId: StreamPartIDUtils.parse('stream#0'),
40
- rpcCommunicator: new ListeningRpcCommunicator('random-graph-node', new MockTransport())
41
- })
42
- })
43
-
44
- it('Server sendStreamMessage()', async () => {
45
- await rpcLocal.sendStreamMessage(message, { incomingSourceDescriptor: mockSender } as any)
46
- expect(mockDuplicateCheck).toHaveBeenCalledTimes(1)
47
- expect(mockBroadcast).toHaveBeenCalledTimes(1)
48
- expect(mockMarkForInspection).toHaveBeenCalledTimes(1)
49
- })
50
-
51
- it('Server leaveStreamPartNotice()', async () => {
52
- const leaveNotice: LeaveStreamPartNotice = {
53
- streamPartId: StreamPartIDUtils.parse('stream#0'),
54
- isEntryPoint: false
55
- }
56
- await rpcLocal.leaveStreamPartNotice(leaveNotice, { incomingSourceDescriptor: mockSender } as any)
57
- expect(mockOnLeaveNotice).toHaveBeenCalledTimes(1)
58
- })
59
-
60
- })