@streamr/trackerless-network 0.0.1-tatum.5 → 0.0.1-tatum.7

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 (177) hide show
  1. package/dist/package.json +10 -8
  2. package/dist/src/NetworkNode.js +1 -1
  3. package/dist/src/NetworkNode.js.map +1 -1
  4. package/dist/src/NetworkStack.d.ts +1 -3
  5. package/dist/src/NetworkStack.js +18 -47
  6. package/dist/src/NetworkStack.js.map +1 -1
  7. package/dist/src/identifiers.js +2 -2
  8. package/dist/src/identifiers.js.map +1 -1
  9. package/dist/src/logic/{StreamNodeServer.d.ts → DeliveryRpcLocal.d.ts} +6 -5
  10. package/dist/src/logic/{StreamNodeServer.js → DeliveryRpcLocal.js} +5 -5
  11. package/dist/src/logic/{StreamNodeServer.js.map → DeliveryRpcLocal.js.map} +1 -1
  12. package/dist/src/logic/{RemoteRandomGraphNode.d.ts → DeliveryRpcRemote.d.ts} +2 -2
  13. package/dist/src/logic/{RemoteRandomGraphNode.js → DeliveryRpcRemote.js} +5 -5
  14. package/dist/src/logic/DeliveryRpcRemote.js.map +1 -0
  15. package/dist/src/logic/EntryPointDiscovery.d.ts +35 -0
  16. package/dist/src/logic/EntryPointDiscovery.js +145 -0
  17. package/dist/src/logic/EntryPointDiscovery.js.map +1 -0
  18. package/dist/src/logic/ILayer0.d.ts +3 -6
  19. package/dist/src/logic/ILayer1.d.ts +2 -2
  20. package/dist/src/logic/NodeList.d.ts +10 -10
  21. package/dist/src/logic/NodeList.js +2 -2
  22. package/dist/src/logic/NodeList.js.map +1 -1
  23. package/dist/src/logic/RandomGraphNode.d.ts +8 -12
  24. package/dist/src/logic/RandomGraphNode.js +47 -46
  25. package/dist/src/logic/RandomGraphNode.js.map +1 -1
  26. package/dist/src/logic/StreamrNode.d.ts +9 -11
  27. package/dist/src/logic/StreamrNode.js +72 -75
  28. package/dist/src/logic/StreamrNode.js.map +1 -1
  29. package/dist/src/logic/createRandomGraphNode.d.ts +6 -1
  30. package/dist/src/logic/createRandomGraphNode.js +17 -23
  31. package/dist/src/logic/createRandomGraphNode.js.map +1 -1
  32. package/dist/src/logic/formStreamPartDeliveryServiceId.d.ts +2 -0
  33. package/dist/src/logic/formStreamPartDeliveryServiceId.js +8 -0
  34. package/dist/src/logic/formStreamPartDeliveryServiceId.js.map +1 -0
  35. package/dist/src/logic/inspect/Inspector.d.ts +3 -2
  36. package/dist/src/logic/inspect/Inspector.js +5 -5
  37. package/dist/src/logic/inspect/Inspector.js.map +1 -1
  38. package/dist/src/logic/neighbor-discovery/{HandshakerServer.d.ts → HandshakeRpcLocal.d.ts} +10 -10
  39. package/dist/src/logic/neighbor-discovery/{HandshakerServer.js → HandshakeRpcLocal.js} +13 -13
  40. package/dist/src/logic/neighbor-discovery/HandshakeRpcLocal.js.map +1 -0
  41. package/dist/src/logic/neighbor-discovery/{RemoteHandshaker.d.ts → HandshakeRpcRemote.d.ts} +1 -1
  42. package/dist/src/logic/neighbor-discovery/{RemoteHandshaker.js → HandshakeRpcRemote.js} +8 -7
  43. package/dist/src/logic/neighbor-discovery/HandshakeRpcRemote.js.map +1 -0
  44. package/dist/src/logic/neighbor-discovery/Handshaker.d.ts +8 -7
  45. package/dist/src/logic/neighbor-discovery/Handshaker.js +23 -24
  46. package/dist/src/logic/neighbor-discovery/Handshaker.js.map +1 -1
  47. package/dist/src/logic/neighbor-discovery/NeighborFinder.d.ts +1 -1
  48. package/dist/src/logic/neighbor-discovery/NeighborFinder.js +5 -5
  49. package/dist/src/logic/neighbor-discovery/NeighborFinder.js.map +1 -1
  50. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.d.ts +3 -2
  51. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js +7 -7
  52. package/dist/src/logic/neighbor-discovery/NeighborUpdateManager.js.map +1 -1
  53. package/dist/src/logic/neighbor-discovery/{NeighborUpdateManagerServer.d.ts → NeighborUpdateRpcLocal.d.ts} +6 -6
  54. package/dist/src/logic/neighbor-discovery/{NeighborUpdateManagerServer.js → NeighborUpdateRpcLocal.js} +11 -11
  55. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcLocal.js.map +1 -0
  56. package/dist/src/logic/neighbor-discovery/{RemoteNeighborUpdateManager.d.ts → NeighborUpdateRpcRemote.d.ts} +1 -1
  57. package/dist/src/logic/neighbor-discovery/{RemoteNeighborUpdateManager.js → NeighborUpdateRpcRemote.js} +5 -5
  58. package/dist/src/logic/neighbor-discovery/NeighborUpdateRpcRemote.js.map +1 -0
  59. package/dist/src/logic/propagation/Propagation.js +2 -2
  60. package/dist/src/logic/propagation/Propagation.js.map +1 -1
  61. package/dist/src/logic/proxy/{ProxyStreamConnectionClient.d.ts → ProxyClient.d.ts} +8 -12
  62. package/dist/src/logic/proxy/{ProxyStreamConnectionClient.js → ProxyClient.js} +28 -29
  63. package/dist/src/logic/proxy/ProxyClient.js.map +1 -0
  64. package/dist/src/logic/proxy/{ProxyStreamConnectionServer.d.ts → ProxyConnectionRpcLocal.d.ts} +5 -7
  65. package/dist/src/logic/proxy/{ProxyStreamConnectionServer.js → ProxyConnectionRpcLocal.js} +6 -12
  66. package/dist/src/logic/proxy/ProxyConnectionRpcLocal.js.map +1 -0
  67. package/dist/src/logic/proxy/{RemoteProxyServer.d.ts → ProxyConnectionRpcRemote.d.ts} +1 -1
  68. package/dist/src/logic/proxy/{RemoteProxyServer.js → ProxyConnectionRpcRemote.js} +4 -4
  69. package/dist/src/logic/proxy/ProxyConnectionRpcRemote.js.map +1 -0
  70. package/dist/src/logic/temporary-connection/{TemporaryConnectionRpcServer.d.ts → TemporaryConnectionRpcLocal.d.ts} +5 -4
  71. package/dist/src/logic/temporary-connection/{TemporaryConnectionRpcServer.js → TemporaryConnectionRpcLocal.js} +6 -6
  72. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcLocal.js.map +1 -0
  73. package/dist/src/logic/temporary-connection/{RemoteTemporaryConnectionRpcServer.d.ts → TemporaryConnectionRpcRemote.d.ts} +1 -1
  74. package/dist/src/logic/temporary-connection/{RemoteTemporaryConnectionRpcServer.js → TemporaryConnectionRpcRemote.js} +4 -4
  75. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcRemote.js.map +1 -0
  76. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +0 -4
  77. package/dist/src/proto/packages/dht/protos/DhtRpc.js +1 -2
  78. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  79. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.d.ts +4 -4
  80. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js +7 -7
  81. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.client.js.map +1 -1
  82. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.d.ts +10 -10
  83. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js +7 -7
  84. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.js.map +1 -1
  85. package/dist/src/proto/packages/trackerless-network/protos/NetworkRpc.server.d.ts +2 -2
  86. package/dist/test/benchmark/first-message.js +10 -13
  87. package/dist/test/benchmark/first-message.js.map +1 -1
  88. package/dist/test/utils/utils.d.ts +5 -5
  89. package/dist/test/utils/utils.js +14 -14
  90. package/dist/test/utils/utils.js.map +1 -1
  91. package/package.json +10 -8
  92. package/protos/NetworkRpc.proto +5 -5
  93. package/src/NetworkNode.ts +1 -1
  94. package/src/NetworkStack.ts +20 -62
  95. package/src/identifiers.ts +3 -3
  96. package/src/logic/{StreamNodeServer.ts → DeliveryRpcLocal.ts} +8 -7
  97. package/src/logic/{RemoteRandomGraphNode.ts → DeliveryRpcRemote.ts} +3 -3
  98. package/src/logic/EntryPointDiscovery.ts +181 -0
  99. package/src/logic/ILayer0.ts +3 -6
  100. package/src/logic/ILayer1.ts +2 -5
  101. package/src/logic/NodeList.ts +12 -12
  102. package/src/logic/RandomGraphNode.ts +67 -69
  103. package/src/logic/StreamrNode.ts +78 -90
  104. package/src/logic/createRandomGraphNode.ts +28 -26
  105. package/src/logic/formStreamPartDeliveryServiceId.ts +5 -0
  106. package/src/logic/inspect/Inspector.ts +8 -7
  107. package/src/logic/neighbor-discovery/{HandshakerServer.ts → HandshakeRpcLocal.ts} +20 -20
  108. package/src/logic/neighbor-discovery/{RemoteHandshaker.ts → HandshakeRpcRemote.ts} +6 -5
  109. package/src/logic/neighbor-discovery/Handshaker.ts +38 -38
  110. package/src/logic/neighbor-discovery/NeighborFinder.ts +6 -6
  111. package/src/logic/neighbor-discovery/NeighborUpdateManager.ts +15 -12
  112. package/src/logic/neighbor-discovery/{NeighborUpdateManagerServer.ts → NeighborUpdateRpcLocal.ts} +17 -17
  113. package/src/logic/neighbor-discovery/{RemoteNeighborUpdateManager.ts → NeighborUpdateRpcRemote.ts} +2 -2
  114. package/src/logic/propagation/Propagation.ts +2 -2
  115. package/src/logic/proxy/{ProxyStreamConnectionClient.ts → ProxyClient.ts} +33 -37
  116. package/src/logic/proxy/{ProxyStreamConnectionServer.ts → ProxyConnectionRpcLocal.ts} +10 -19
  117. package/src/logic/proxy/{RemoteProxyServer.ts → ProxyConnectionRpcRemote.ts} +1 -1
  118. package/src/logic/temporary-connection/{TemporaryConnectionRpcServer.ts → TemporaryConnectionRpcLocal.ts} +11 -10
  119. package/src/logic/temporary-connection/{RemoteTemporaryConnectionRpcServer.ts → TemporaryConnectionRpcRemote.ts} +1 -1
  120. package/src/proto/packages/dht/protos/DhtRpc.ts +1 -6
  121. package/src/proto/packages/trackerless-network/protos/NetworkRpc.client.ts +8 -8
  122. package/src/proto/packages/trackerless-network/protos/NetworkRpc.server.ts +2 -2
  123. package/src/proto/packages/trackerless-network/protos/NetworkRpc.ts +14 -14
  124. package/test/benchmark/first-message.ts +10 -13
  125. package/test/end-to-end/inspect.test.ts +12 -12
  126. package/test/end-to-end/proxy-and-full-node.test.ts +13 -14
  127. package/test/end-to-end/proxy-connections.test.ts +10 -12
  128. package/test/end-to-end/proxy-key-exchange.test.ts +12 -13
  129. package/test/end-to-end/random-graph-with-real-connections.test.ts +7 -7
  130. package/test/end-to-end/webrtc-full-node-network.test.ts +8 -8
  131. package/test/end-to-end/websocket-full-node-network.test.ts +8 -10
  132. package/test/integration/{RemoteRandomGraphNode.test.ts → DeliveryRpcRemote.test.ts} +17 -14
  133. package/test/integration/{RemoteHandshaker.test.ts → HandshakeRpcRemote.test.ts} +10 -9
  134. package/test/integration/Handshakes.test.ts +23 -20
  135. package/test/integration/Inspect.test.ts +3 -2
  136. package/test/integration/{RemoteNeighborUpdateManager.test.ts → NeighborUpdateRpcRemote.test.ts} +12 -10
  137. package/test/integration/NetworkNode.test.ts +9 -8
  138. package/test/integration/NetworkRpc.test.ts +5 -7
  139. package/test/integration/NetworkStack.test.ts +13 -15
  140. package/test/integration/Propagation.test.ts +2 -2
  141. package/test/integration/RandomGraphNode-Layer1Node-Latencies.test.ts +10 -8
  142. package/test/integration/RandomGraphNode-Layer1Node.test.ts +17 -17
  143. package/test/integration/StreamrNode.test.ts +5 -3
  144. package/test/integration/joining-streams-on-offline-peers.test.ts +16 -18
  145. package/test/integration/stream-without-default-entrypoints.test.ts +11 -13
  146. package/test/unit/{StreamNodeServer.test.ts → DeliveryRpcLocal.test.ts} +8 -8
  147. package/test/unit/EntrypointDiscovery.test.ts +132 -0
  148. package/test/unit/{HandshakerServer.test.ts → HandshakeRpcLocal.test.ts} +26 -24
  149. package/test/unit/Handshaker.test.ts +10 -8
  150. package/test/unit/Inspector.test.ts +4 -3
  151. package/test/unit/NeighborFinder.test.ts +5 -5
  152. package/test/unit/NodeList.test.ts +22 -13
  153. package/test/unit/{RemoteProxyServer.test.ts → ProxyConnectionRpcRemote.test.ts} +4 -4
  154. package/test/unit/RandomGraphNode.test.ts +12 -11
  155. package/test/unit/StreamMessageTranslator.test.ts +10 -9
  156. package/test/unit/StreamrNode.test.ts +8 -8
  157. package/test/utils/mock/MockLayer0.ts +7 -26
  158. package/test/utils/mock/MockLayer1.ts +6 -13
  159. package/test/utils/mock/MockNeighborFinder.ts +1 -2
  160. package/test/utils/mock/MockNeighborUpdateManager.ts +1 -2
  161. package/test/utils/mock/Transport.ts +2 -2
  162. package/test/utils/utils.ts +13 -13
  163. package/dist/src/logic/RemoteRandomGraphNode.js.map +0 -1
  164. package/dist/src/logic/StreamPartEntryPointDiscovery.d.ts +0 -39
  165. package/dist/src/logic/StreamPartEntryPointDiscovery.js +0 -194
  166. package/dist/src/logic/StreamPartEntryPointDiscovery.js.map +0 -1
  167. package/dist/src/logic/neighbor-discovery/HandshakerServer.js.map +0 -1
  168. package/dist/src/logic/neighbor-discovery/NeighborUpdateManagerServer.js.map +0 -1
  169. package/dist/src/logic/neighbor-discovery/RemoteHandshaker.js.map +0 -1
  170. package/dist/src/logic/neighbor-discovery/RemoteNeighborUpdateManager.js.map +0 -1
  171. package/dist/src/logic/proxy/ProxyStreamConnectionClient.js.map +0 -1
  172. package/dist/src/logic/proxy/ProxyStreamConnectionServer.js.map +0 -1
  173. package/dist/src/logic/proxy/RemoteProxyServer.js.map +0 -1
  174. package/dist/src/logic/temporary-connection/RemoteTemporaryConnectionRpcServer.js.map +0 -1
  175. package/dist/src/logic/temporary-connection/TemporaryConnectionRpcServer.js.map +0 -1
  176. package/src/logic/StreamPartEntryPointDiscovery.ts +0 -240
  177. package/test/unit/StreamPartEntrypointDiscovery.test.ts +0 -164
@@ -1,14 +1,13 @@
1
- import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
2
1
  import { NodeType, PeerDescriptor, Simulator, SimulatorTransport } from '@streamr/dht'
3
2
  import {
4
3
  MessageID,
5
4
  MessageRef,
6
5
  StreamMessage,
7
6
  StreamMessageType,
8
- StreamPartIDUtils,
9
- toStreamID
7
+ StreamPartIDUtils
10
8
  } from '@streamr/protocol'
11
- import { EthereumAddress, waitForCondition, hexToBinary, utf8ToBinary } from '@streamr/utils'
9
+ import { EthereumAddress, hexToBinary, utf8ToBinary, waitForCondition } from '@streamr/utils'
10
+ import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
12
11
 
13
12
  const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
14
13
 
@@ -34,20 +33,22 @@ describe('NetworkNode', () => {
34
33
  Simulator.useFakeTimers()
35
34
  const simulator = new Simulator()
36
35
  transport1 = new SimulatorTransport(pd1, simulator)
36
+ await transport1.start()
37
37
  transport2 = new SimulatorTransport(pd2, simulator)
38
+ await transport2.start()
38
39
 
39
40
  node1 = createNetworkNode({
40
41
  layer0: {
41
42
  entryPoints: [pd1],
42
43
  peerDescriptor: pd1,
43
- transportLayer: transport1
44
+ transport: transport1
44
45
  }
45
46
  })
46
47
  node2 = createNetworkNode({
47
48
  layer0: {
48
49
  entryPoints: [pd1],
49
50
  peerDescriptor: pd2,
50
- transportLayer: transport2
51
+ transport: transport2
51
52
  }
52
53
  })
53
54
 
@@ -68,8 +69,8 @@ describe('NetworkNode', () => {
68
69
  it('wait for join + broadcast and subscribe', async () => {
69
70
  const streamMessage = new StreamMessage({
70
71
  messageId: new MessageID(
71
- toStreamID('test'),
72
- 0,
72
+ StreamPartIDUtils.getStreamID(STREAM_PART_ID),
73
+ StreamPartIDUtils.getStreamPartition(STREAM_PART_ID),
73
74
  666,
74
75
  0,
75
76
  '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as EthereumAddress,
@@ -1,14 +1,12 @@
1
1
  import {
2
2
  RpcCommunicator,
3
- ProtoCallContext,
4
3
  ProtoRpcClient,
5
4
  toProtoRpcClient
6
5
  } from '@streamr/proto-rpc'
7
- import { NetworkRpcClient } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
6
+ import { DeliveryRpcClient } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc.client'
8
7
  import { StreamMessage } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
9
8
  import { waitForCondition } from '@streamr/utils'
10
9
  import { Empty } from '../../src/proto/google/protobuf/empty'
11
- import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
12
10
  import { createStreamMessage } from '../utils/utils'
13
11
  import { RpcMessage } from '../../src/proto/packages/proto-rpc/protos/ProtoRpc'
14
12
  import { Simulator } from '@streamr/dht'
@@ -18,21 +16,21 @@ import { randomEthereumAddress } from '@streamr/test-utils'
18
16
  describe('Network RPC', () => {
19
17
  let rpcCommunicator1: RpcCommunicator
20
18
  let rpcCommunicator2: RpcCommunicator
21
- let client: ProtoRpcClient<NetworkRpcClient>
19
+ let client: ProtoRpcClient<DeliveryRpcClient>
22
20
  let recvCounter = 0
23
21
 
24
22
  beforeEach(() => {
25
23
  Simulator.useFakeTimers()
26
24
  rpcCommunicator1 = new RpcCommunicator()
27
25
  rpcCommunicator2 = new RpcCommunicator()
28
- rpcCommunicator1.on('outgoingMessage', (message: RpcMessage, _requestId: string, _ucallContext?: ProtoCallContext) => {
26
+ rpcCommunicator1.on('outgoingMessage', (message: RpcMessage) => {
29
27
  rpcCommunicator2.handleIncomingMessage(message)
30
28
  })
31
- client = toProtoRpcClient(new NetworkRpcClient(rpcCommunicator1.getRpcClientTransport()))
29
+ client = toProtoRpcClient(new DeliveryRpcClient(rpcCommunicator1.getRpcClientTransport()))
32
30
  rpcCommunicator2.registerRpcNotification(
33
31
  StreamMessage,
34
32
  'sendStreamMessage',
35
- async (_msg: StreamMessage, _context: ServerCallContext): Promise<Empty> => {
33
+ async (): Promise<Empty> => {
36
34
  recvCounter += 1
37
35
  return {}
38
36
  }
@@ -6,37 +6,35 @@ import { waitForCondition } from '@streamr/utils'
6
6
  import { NetworkStack } from '../../src/NetworkStack'
7
7
  import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
8
8
 
9
+ const STREAM_PART_ID = StreamPartIDUtils.parse('stream#0')
10
+
9
11
  describe('NetworkStack', () => {
10
12
 
11
13
  let stack1: NetworkStack
12
14
  let stack2: NetworkStack
13
- const streamPartId = StreamPartIDUtils.parse('stream1#0')
14
15
 
15
16
  const epDescriptor = createMockPeerDescriptor({
16
- websocket: { host: '127.0.0.1', port: 32222, tls: false },
17
- nodeName: 'entrypoint'
17
+ websocket: { host: '127.0.0.1', port: 32222, tls: false }
18
18
  })
19
19
 
20
20
  beforeEach(async () => {
21
21
  stack1 = new NetworkStack({
22
22
  layer0: {
23
23
  peerDescriptor: epDescriptor,
24
- entryPoints: [epDescriptor],
25
- nodeName: 'entrypoint'
24
+ entryPoints: [epDescriptor]
26
25
  }
27
26
  })
28
27
  stack2 = new NetworkStack({
29
28
  layer0: {
30
29
  websocketPortRange: { min: 32223, max: 32223 },
31
- entryPoints: [epDescriptor],
32
- nodeName: 'node2'
30
+ entryPoints: [epDescriptor]
33
31
  }
34
32
  })
35
33
 
36
34
  await stack1.start()
37
- stack1.getStreamrNode()!.setStreamPartEntryPoints(streamPartId, [epDescriptor])
35
+ stack1.getStreamrNode()!.setStreamPartEntryPoints(STREAM_PART_ID, [epDescriptor])
38
36
  await stack2.start()
39
- stack2.getStreamrNode()!.setStreamPartEntryPoints(streamPartId, [epDescriptor])
37
+ stack2.getStreamrNode()!.setStreamPartEntryPoints(STREAM_PART_ID, [epDescriptor])
40
38
  })
41
39
 
42
40
  afterEach(async () => {
@@ -48,13 +46,13 @@ describe('NetworkStack', () => {
48
46
 
49
47
  it('Can use NetworkNode pub/sub via NetworkStack', async () => {
50
48
  let receivedMessages = 0
51
- stack1.getStreamrNode().joinStreamPart(streamPartId)
49
+ stack1.getStreamrNode().joinStreamPart(STREAM_PART_ID)
52
50
  stack1.getStreamrNode().on('newMessage', () => {
53
51
  receivedMessages += 1
54
52
  })
55
53
  const msg = createStreamMessage(
56
54
  JSON.stringify({ hello: 'WORLD' }),
57
- streamPartId,
55
+ STREAM_PART_ID,
58
56
  randomEthereumAddress()
59
57
  )
60
58
  stack2.getStreamrNode().broadcast(msg)
@@ -63,10 +61,10 @@ describe('NetworkStack', () => {
63
61
 
64
62
  it('join and wait for neighbors', async () => {
65
63
  await Promise.all([
66
- stack1.joinStreamPart(streamPartId, { minCount: 1, timeout: 5000 }),
67
- stack2.joinStreamPart(streamPartId, { minCount: 1, timeout: 5000 }),
64
+ stack1.joinStreamPart(STREAM_PART_ID, { minCount: 1, timeout: 5000 }),
65
+ stack2.joinStreamPart(STREAM_PART_ID, { minCount: 1, timeout: 5000 }),
68
66
  ])
69
- expect(stack1.getStreamrNode().getNeighbors(streamPartId).length).toBe(1)
70
- expect(stack2.getStreamrNode().getNeighbors(streamPartId).length).toBe(1)
67
+ expect(stack1.getStreamrNode().getNeighbors(STREAM_PART_ID).length).toBe(1)
68
+ expect(stack2.getStreamrNode().getNeighbors(STREAM_PART_ID).length).toBe(1)
71
69
  })
72
70
  })
@@ -19,7 +19,7 @@ describe('Propagation', () => {
19
19
  const simulator = new Simulator()
20
20
  dhtNodes = []
21
21
  randomGraphNodes = []
22
- const [entryPoint, node1] = createMockRandomGraphNodeAndDhtNode(entryPointDescriptor, entryPointDescriptor, STREAM_PART_ID, simulator)
22
+ const [entryPoint, node1] = await createMockRandomGraphNodeAndDhtNode(entryPointDescriptor, entryPointDescriptor, STREAM_PART_ID, simulator)
23
23
  await entryPoint.start()
24
24
  await entryPoint.joinDht([entryPointDescriptor])
25
25
  await node1.start()
@@ -29,7 +29,7 @@ describe('Propagation', () => {
29
29
 
30
30
  await Promise.all(range(NUM_OF_NODES).map(async (_i) => {
31
31
  const descriptor = createMockPeerDescriptor()
32
- const [dht, graph] = createMockRandomGraphNodeAndDhtNode(
32
+ const [dht, graph] = await createMockRandomGraphNodeAndDhtNode(
33
33
  descriptor,
34
34
  entryPointDescriptor,
35
35
  STREAM_PART_ID,
@@ -24,26 +24,28 @@ describe('RandomGraphNode-DhtNode-Latencies', () => {
24
24
  const cms: SimulatorTransport[] = range(numOfNodes).map((i) =>
25
25
  new SimulatorTransport(peerDescriptors[i], simulator)
26
26
  )
27
+ await entrypointCm.start()
28
+ await Promise.all(cms.map((cm) => cm.start()))
27
29
 
28
30
  dhtEntryPoint = new DhtNode({
29
- transportLayer: entrypointCm,
31
+ transport: entrypointCm,
30
32
  peerDescriptor: entrypointDescriptor,
31
33
  serviceId: streamPartId
32
34
  })
33
35
  dhtNodes = range(numOfNodes).map((i) => new DhtNode({
34
- transportLayer: cms[i],
36
+ transport: cms[i],
35
37
  peerDescriptor: peerDescriptors[i],
36
38
  serviceId: streamPartId
37
39
  }))
38
40
  graphNodes = range(numOfNodes).map((i) => createRandomGraphNode({
39
- randomGraphId: streamPartId,
41
+ streamPartId,
40
42
  layer1: dhtNodes[i],
41
43
  P2PTransport: cms[i],
42
44
  connectionLocker: cms[i],
43
45
  ownPeerDescriptor: peerDescriptors[i]
44
46
  }))
45
47
  entryPointRandomGraphNode = createRandomGraphNode({
46
- randomGraphId: streamPartId,
48
+ streamPartId,
47
49
  layer1: dhtEntryPoint,
48
50
  P2PTransport: entrypointCm,
49
51
  connectionLocker: entrypointCm,
@@ -77,23 +79,23 @@ describe('RandomGraphNode-DhtNode-Latencies', () => {
77
79
 
78
80
  it('happy path 5 nodes', async () => {
79
81
  entryPointRandomGraphNode.start()
80
- range(4).map((i) => graphNodes[i].start())
82
+ range(4).forEach((i) => graphNodes[i].start())
81
83
  await Promise.all(range(4).map(async (i) => {
82
84
  await dhtNodes[i].joinDht([entrypointDescriptor])
83
85
  }))
84
86
  await Promise.all(range(4).map((i) => {
85
87
  return waitForCondition(() => {
86
88
  return graphNodes[i].getTargetNeighborIds().length >= 4
87
- }, 10000, 2000)
89
+ }, 15000, 2000)
88
90
  }))
89
- range(4).map((i) => {
91
+ range(4).forEach((i) => {
90
92
  expect(graphNodes[i].getNearbyNodeView().getIds().length).toBeGreaterThanOrEqual(4)
91
93
  expect(graphNodes[i].getTargetNeighborIds().length).toBeGreaterThanOrEqual(4)
92
94
  })
93
95
  // Check bidirectionality
94
96
  const allNodes = graphNodes
95
97
  allNodes.push(entryPointRandomGraphNode)
96
- range(5).map((i) => {
98
+ range(5).forEach((i) => {
97
99
  const ownNodeId = allNodes[i].getOwnNodeId()
98
100
  allNodes[i].getNearbyNodeView().getIds().forEach((nodeId) => {
99
101
  const neighbor = allNodes.find((node) => {
@@ -1,4 +1,4 @@
1
- import { ConnectionManager, DhtNode, PeerDescriptor, Simulator, getRandomRegion } from '@streamr/dht'
1
+ import { ConnectionManager, DhtNode, PeerDescriptor, Simulator, SimulatorTransport, getRandomRegion } from '@streamr/dht'
2
2
  import { Logger, waitForCondition } from '@streamr/utils'
3
3
  import { range } from 'lodash'
4
4
  import { RandomGraphNode } from '../../src/logic/RandomGraphNode'
@@ -17,13 +17,11 @@ describe('RandomGraphNode-DhtNode', () => {
17
17
 
18
18
  const streamPartId = StreamPartIDUtils.parse('stream#0')
19
19
  const entrypointDescriptor = createMockPeerDescriptor({
20
- nodeName: 'entrypoint',
21
20
  region: getRandomRegion()
22
21
  })
23
22
 
24
- const peerDescriptors: PeerDescriptor[] = range(numOfNodes).map((i) => {
23
+ const peerDescriptors: PeerDescriptor[] = range(numOfNodes).map(() => {
25
24
  return createMockPeerDescriptor({
26
- nodeName: `node${i}`,
27
25
  region: getRandomRegion()
28
26
  })
29
27
  })
@@ -31,32 +29,34 @@ describe('RandomGraphNode-DhtNode', () => {
31
29
 
32
30
  Simulator.useFakeTimers()
33
31
  const simulator = new Simulator()
34
- const entrypointCm = new ConnectionManager({
35
- ownPeerDescriptor: entrypointDescriptor,
32
+ const entrypointCm = new SimulatorTransport(
33
+ entrypointDescriptor,
36
34
  simulator
37
- })
35
+ )
36
+ await entrypointCm.start()
38
37
 
39
38
  const cms: ConnectionManager[] = range(numOfNodes).map((i) =>
40
- new ConnectionManager({
41
- ownPeerDescriptor: peerDescriptors[i],
39
+ new SimulatorTransport(
40
+ peerDescriptors[i],
42
41
  simulator
43
- })
42
+ )
44
43
  )
44
+ await Promise.all(cms.map((cm) => cm.start()))
45
45
 
46
46
  dhtEntryPoint = new DhtNode({
47
- transportLayer: entrypointCm,
47
+ transport: entrypointCm,
48
48
  peerDescriptor: entrypointDescriptor,
49
49
  serviceId: streamPartId
50
50
  })
51
51
 
52
52
  dhtNodes = range(numOfNodes).map((i) => new DhtNode({
53
- transportLayer: cms[i],
53
+ transport: cms[i],
54
54
  peerDescriptor: peerDescriptors[i],
55
55
  serviceId: streamPartId
56
56
  }))
57
57
 
58
58
  graphNodes = range(numOfNodes).map((i) => createRandomGraphNode({
59
- randomGraphId: streamPartId,
59
+ streamPartId,
60
60
  layer1: dhtNodes[i],
61
61
  P2PTransport: cms[i],
62
62
  connectionLocker: cms[i],
@@ -65,7 +65,7 @@ describe('RandomGraphNode-DhtNode', () => {
65
65
  }))
66
66
 
67
67
  entryPointRandomGraphNode = createRandomGraphNode({
68
- randomGraphId: streamPartId,
68
+ streamPartId,
69
69
  layer1: dhtEntryPoint,
70
70
  P2PTransport: entrypointCm,
71
71
  connectionLocker: entrypointCm,
@@ -99,13 +99,13 @@ describe('RandomGraphNode-DhtNode', () => {
99
99
 
100
100
  it('happy path 4 nodes', async () => {
101
101
  entryPointRandomGraphNode.start()
102
- range(4).map((i) => graphNodes[i].start())
102
+ range(4).forEach((i) => graphNodes[i].start())
103
103
  await Promise.all(range(4).map(async (i) => {
104
104
  await dhtNodes[i].joinDht([entrypointDescriptor])
105
105
  }))
106
106
 
107
107
  await waitForCondition(() => range(4).every((i) => graphNodes[i].getTargetNeighborIds().length === 4))
108
- range(4).map((i) => {
108
+ range(4).forEach((i) => {
109
109
  expect(graphNodes[i].getNearbyNodeView().getIds().length).toBeGreaterThanOrEqual(4)
110
110
  expect(graphNodes[i].getTargetNeighborIds().length).toBeGreaterThanOrEqual(4)
111
111
  })
@@ -113,7 +113,7 @@ describe('RandomGraphNode-DhtNode', () => {
113
113
  // Check bidirectionality
114
114
  const allNodes = graphNodes
115
115
  allNodes.push(entryPointRandomGraphNode)
116
- range(5).map((i) => {
116
+ range(5).forEach((i) => {
117
117
  allNodes[i].getNearbyNodeView().getIds().forEach((nodeId) => {
118
118
  const neighbor = allNodes.find((node) => {
119
119
  return node.getOwnNodeId() === nodeId
@@ -46,14 +46,16 @@ describe('StreamrNode', () => {
46
46
  beforeEach(async () => {
47
47
  const simulator = new Simulator()
48
48
  transport1 = new SimulatorTransport(peerDescriptor1, simulator)
49
+ await transport1.start()
49
50
  transport2 = new SimulatorTransport(peerDescriptor2, simulator)
51
+ await transport2.start()
50
52
  layer01 = new DhtNode({
51
- transportLayer: transport1,
53
+ transport: transport1,
52
54
  peerDescriptor: peerDescriptor1,
53
55
  entryPoints: [peerDescriptor1]
54
56
  })
55
57
  layer02 = new DhtNode({
56
- transportLayer: transport2,
58
+ transport: transport2,
57
59
  peerDescriptor: peerDescriptor2,
58
60
  entryPoints: [peerDescriptor1]
59
61
  })
@@ -126,7 +128,7 @@ describe('StreamrNode', () => {
126
128
  ])
127
129
  })
128
130
 
129
- it('leaving streams', async () => {
131
+ it('leaving stream parts', async () => {
130
132
  node1.joinStreamPart(STREAM_PART_ID)
131
133
  node2.joinStreamPart(STREAM_PART_ID)
132
134
  await Promise.all([
@@ -1,42 +1,38 @@
1
1
  import { NodeType, PeerDescriptor, Simulator, SimulatorTransport, LatencyType } from '@streamr/dht'
2
2
  import { NetworkStack } from '../../src/NetworkStack'
3
- import { streamPartIdToDataKey } from '../../src/logic/StreamPartEntryPointDiscovery'
3
+ import { streamPartIdToDataKey } from '../../src/logic/EntryPointDiscovery'
4
4
  import { StreamPartIDUtils } from '@streamr/protocol'
5
5
  import { Any } from '../../src/proto/google/protobuf/any'
6
6
  import { createStreamMessage } from '../utils/utils'
7
7
  import { waitForCondition } from '@streamr/utils'
8
8
  import { randomEthereumAddress } from '@streamr/test-utils'
9
9
 
10
- describe('Joining streams on offline nodes', () => {
11
- const streamPartId = StreamPartIDUtils.parse('stream#0')
10
+ const STREAM_PART_ID = StreamPartIDUtils.parse('stream#0')
11
+
12
+ describe('Joining stream parts on offline nodes', () => {
12
13
 
13
14
  const entryPointPeerDescriptor: PeerDescriptor = {
14
15
  kademliaId: new Uint8Array([1, 2, 3]),
15
- nodeName: 'entrypoint',
16
16
  type: NodeType.NODEJS
17
17
  }
18
18
 
19
19
  const node1PeerDescriptor: PeerDescriptor = {
20
20
  kademliaId: new Uint8Array([1, 1, 1]),
21
- nodeName: 'node1',
22
21
  type: NodeType.NODEJS
23
22
  }
24
23
 
25
24
  const node2PeerDescriptor: PeerDescriptor = {
26
25
  kademliaId: new Uint8Array([2, 2, 2]),
27
- nodeName: 'node2',
28
26
  type: NodeType.NODEJS
29
27
  }
30
28
 
31
29
  const offlineDescriptor1: PeerDescriptor = {
32
30
  kademliaId: new Uint8Array([3, 3, 3]),
33
- nodeName: 'offline',
34
31
  type: NodeType.NODEJS
35
32
  }
36
33
 
37
34
  const offlineDescriptor2: PeerDescriptor = {
38
35
  kademliaId: new Uint8Array([4, 4, 4]),
39
- nodeName: 'offline',
40
36
  type: NodeType.NODEJS
41
37
  }
42
38
 
@@ -50,28 +46,30 @@ describe('Joining streams on offline nodes', () => {
50
46
  const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
51
47
  entryPoint = new NetworkStack({
52
48
  layer0: {
53
- transportLayer: entryPointTransport,
49
+ transport: entryPointTransport,
54
50
  peerDescriptor: entryPointPeerDescriptor,
55
51
  entryPoints: [entryPointPeerDescriptor]
56
52
  }
57
53
  })
58
-
54
+ const node1Transport = new SimulatorTransport(node1PeerDescriptor, simulator)
59
55
  node1 = new NetworkStack({
60
56
  layer0: {
61
- transportLayer: new SimulatorTransport(node1PeerDescriptor, simulator),
57
+ transport: node1Transport,
62
58
  peerDescriptor: node1PeerDescriptor,
63
59
  entryPoints: [entryPointPeerDescriptor]
64
60
  }
65
61
  })
66
-
62
+ const node2Transport = new SimulatorTransport(node2PeerDescriptor, simulator)
67
63
  node2 = new NetworkStack({
68
64
  layer0: {
69
- transportLayer: new SimulatorTransport(node2PeerDescriptor, simulator),
65
+ transport: node2Transport,
70
66
  peerDescriptor: node2PeerDescriptor,
71
67
  entryPoints: [entryPointPeerDescriptor]
72
68
  }
73
69
  })
74
-
70
+ await entryPointTransport.start()
71
+ await node1Transport.start()
72
+ await node2Transport.start()
75
73
  await entryPoint.start()
76
74
  await node1.start()
77
75
  await node2.start()
@@ -88,12 +86,12 @@ describe('Joining streams on offline nodes', () => {
88
86
  let messageReceived = false
89
87
 
90
88
  // store offline peer descriptors to DHT
91
- await entryPoint.getLayer0DhtNode().storeDataToDht(streamPartIdToDataKey(streamPartId), Any.pack(offlineDescriptor1, PeerDescriptor))
92
- await entryPoint.getLayer0DhtNode().storeDataToDht(streamPartIdToDataKey(streamPartId), Any.pack(offlineDescriptor2, PeerDescriptor))
89
+ await entryPoint.getLayer0DhtNode().storeDataToDht(streamPartIdToDataKey(STREAM_PART_ID), Any.pack(offlineDescriptor1, PeerDescriptor))
90
+ await entryPoint.getLayer0DhtNode().storeDataToDht(streamPartIdToDataKey(STREAM_PART_ID), Any.pack(offlineDescriptor2, PeerDescriptor))
93
91
 
94
- node1.getStreamrNode().joinStreamPart(streamPartId)
92
+ node1.getStreamrNode().joinStreamPart(STREAM_PART_ID)
95
93
  node1.getStreamrNode().on('newMessage', () => { messageReceived = true })
96
- const msg = createStreamMessage(JSON.stringify({ hello: 'WORLD' }), streamPartId, randomEthereumAddress())
94
+ const msg = createStreamMessage(JSON.stringify({ hello: 'WORLD' }), STREAM_PART_ID, randomEthereumAddress())
97
95
  node2.getStreamrNode().broadcast(msg)
98
96
  await waitForCondition(() => messageReceived, 40000)
99
97
  }, 60000)
@@ -4,13 +4,12 @@ import {
4
4
  MessageRef,
5
5
  StreamMessage,
6
6
  StreamMessageType,
7
- StreamPartIDUtils,
8
- toStreamID
7
+ StreamPartIDUtils
9
8
  } from '@streamr/protocol'
10
9
  import { EthereumAddress, hexToBinary, utf8ToBinary, waitForCondition } from '@streamr/utils'
11
10
  import { range } from 'lodash'
12
11
  import { NetworkNode, createNetworkNode } from '../../src/NetworkNode'
13
- import { streamPartIdToDataKey } from '../../src/logic/StreamPartEntryPointDiscovery'
12
+ import { streamPartIdToDataKey } from '../../src/logic/EntryPointDiscovery'
14
13
  import { createMockPeerDescriptor } from '../utils/utils'
15
14
 
16
15
  const STREAM_PART_ID = StreamPartIDUtils.parse('test#0')
@@ -22,14 +21,13 @@ describe('stream without default entrypoints', () => {
22
21
  let numOfReceivedMessages: number
23
22
  const entryPointPeerDescriptor: PeerDescriptor = {
24
23
  kademliaId: new Uint8Array([1, 2, 3]),
25
- nodeName: 'entrypoint',
26
24
  type: NodeType.NODEJS
27
25
  }
28
26
 
29
27
  const streamMessage = new StreamMessage({
30
28
  messageId: new MessageID(
31
- toStreamID('test'),
32
- 0,
29
+ StreamPartIDUtils.getStreamID(STREAM_PART_ID),
30
+ StreamPartIDUtils.getStreamPartition(STREAM_PART_ID),
33
31
  666,
34
32
  0,
35
33
  '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as EthereumAddress,
@@ -49,23 +47,23 @@ describe('stream without default entrypoints', () => {
49
47
  nodes = []
50
48
  numOfReceivedMessages = 0
51
49
  const entryPointTransport = new SimulatorTransport(entryPointPeerDescriptor, simulator)
50
+ await entryPointTransport.start()
52
51
  entrypoint = createNetworkNode({
53
52
  layer0: {
54
- transportLayer: entryPointTransport,
53
+ transport: entryPointTransport,
55
54
  peerDescriptor: entryPointPeerDescriptor,
56
55
  entryPoints: [entryPointPeerDescriptor]
57
56
  }
58
57
  })
59
58
  await entrypoint.start()
60
- await Promise.all(range(20).map(async (i) => {
61
- const peerDescriptor = createMockPeerDescriptor({
62
- nodeName: `${i}`
63
- })
59
+ await Promise.all(range(20).map(async () => {
60
+ const peerDescriptor = createMockPeerDescriptor()
64
61
  const transport = new SimulatorTransport(peerDescriptor, simulator)
62
+ await transport.start()
65
63
  const node = createNetworkNode({
66
64
  layer0: {
67
65
  peerDescriptor,
68
- transportLayer: transport,
66
+ transport,
69
67
  entryPoints: [entryPointPeerDescriptor]
70
68
  }
71
69
  })
@@ -122,7 +120,7 @@ describe('stream without default entrypoints', () => {
122
120
  }
123
121
  await waitForCondition(async () => {
124
122
  const entryPointData = await nodes[15].stack.getLayer0DhtNode().getDataFromDht(streamPartIdToDataKey(STREAM_PART_ID))
125
- return entryPointData.dataEntries!.length >= 7
123
+ return entryPointData.length >= 7
126
124
  }, 15000)
127
125
 
128
126
  }, 90000)
@@ -1,14 +1,14 @@
1
1
  import { ListeningRpcCommunicator } from '@streamr/dht'
2
2
  import { StreamPartIDUtils } from '@streamr/protocol'
3
3
  import { randomEthereumAddress } from '@streamr/test-utils'
4
- import { StreamNodeServer } from '../../src/logic/StreamNodeServer'
4
+ import { DeliveryRpcLocal } from '../../src/logic/DeliveryRpcLocal'
5
5
  import { LeaveStreamPartNotice } from '../../src/proto/packages/trackerless-network/protos/NetworkRpc'
6
6
  import { MockTransport } from '../utils/mock/Transport'
7
7
  import { createMockPeerDescriptor, createStreamMessage } from '../utils/utils'
8
8
 
9
- describe('StreamNodeServer', () => {
9
+ describe('DeliveryRpcLocal', () => {
10
10
 
11
- let streamNodeServer: StreamNodeServer
11
+ let rpcLocal: DeliveryRpcLocal
12
12
  const peerDescriptor = createMockPeerDescriptor()
13
13
 
14
14
  const mockSender = createMockPeerDescriptor()
@@ -30,19 +30,19 @@ describe('StreamNodeServer', () => {
30
30
  mockOnLeaveNotice = jest.fn((_m) => {})
31
31
  mockMarkForInspection = jest.fn((_m) => {})
32
32
 
33
- streamNodeServer = new StreamNodeServer({
33
+ rpcLocal = new DeliveryRpcLocal({
34
34
  markAndCheckDuplicate: mockDuplicateCheck,
35
35
  broadcast: mockBroadcast,
36
36
  onLeaveNotice: mockOnLeaveNotice,
37
37
  markForInspection: mockMarkForInspection,
38
38
  ownPeerDescriptor: peerDescriptor,
39
- randomGraphId: 'random-graph',
39
+ streamPartId: StreamPartIDUtils.parse('stream#0'),
40
40
  rpcCommunicator: new ListeningRpcCommunicator('random-graph-node', new MockTransport())
41
41
  })
42
42
  })
43
43
 
44
44
  it('Server sendStreamMessage()', async () => {
45
- await streamNodeServer.sendStreamMessage(message, { incomingSourceDescriptor: mockSender } as any)
45
+ await rpcLocal.sendStreamMessage(message, { incomingSourceDescriptor: mockSender } as any)
46
46
  expect(mockDuplicateCheck).toHaveBeenCalledTimes(1)
47
47
  expect(mockBroadcast).toHaveBeenCalledTimes(1)
48
48
  expect(mockMarkForInspection).toHaveBeenCalledTimes(1)
@@ -50,9 +50,9 @@ describe('StreamNodeServer', () => {
50
50
 
51
51
  it('Server leaveStreamPartNotice()', async () => {
52
52
  const leaveNotice: LeaveStreamPartNotice = {
53
- randomGraphId: 'random-graph'
53
+ streamPartId: StreamPartIDUtils.parse('stream#0')
54
54
  }
55
- await streamNodeServer.leaveStreamPartNotice(leaveNotice, { incomingSourceDescriptor: mockSender } as any)
55
+ await rpcLocal.leaveStreamPartNotice(leaveNotice, { incomingSourceDescriptor: mockSender } as any)
56
56
  expect(mockOnLeaveNotice).toHaveBeenCalledTimes(1)
57
57
  })
58
58