@streamr/dht 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 (205) hide show
  1. package/dist/src/connection/ConnectionLockHandler.d.ts +1 -1
  2. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  3. package/dist/src/connection/ConnectionManager.d.ts +17 -39
  4. package/dist/src/connection/ConnectionManager.js +138 -192
  5. package/dist/src/connection/ConnectionManager.js.map +1 -1
  6. package/dist/src/connection/ConnectivityChecker.js +14 -11
  7. package/dist/src/connection/ConnectivityChecker.js.map +1 -1
  8. package/dist/src/connection/ConnectorFacade.d.ts +49 -0
  9. package/dist/src/connection/ConnectorFacade.js +86 -0
  10. package/dist/src/connection/ConnectorFacade.js.map +1 -0
  11. package/dist/src/connection/ManagedConnection.d.ts +1 -4
  12. package/dist/src/connection/ManagedConnection.js +23 -31
  13. package/dist/src/connection/ManagedConnection.js.map +1 -1
  14. package/dist/src/connection/RemoteConnectionLocker.js +4 -3
  15. package/dist/src/connection/RemoteConnectionLocker.js.map +1 -1
  16. package/dist/src/connection/Simulator/Simulator.d.ts +0 -2
  17. package/dist/src/connection/Simulator/Simulator.js +0 -5
  18. package/dist/src/connection/Simulator/Simulator.js.map +1 -1
  19. package/dist/src/connection/Simulator/SimulatorConnection.js +16 -13
  20. package/dist/src/connection/Simulator/SimulatorConnection.js.map +1 -1
  21. package/dist/src/connection/Simulator/SimulatorConnector.d.ts +2 -2
  22. package/dist/src/connection/Simulator/SimulatorConnector.js +10 -11
  23. package/dist/src/connection/Simulator/SimulatorConnector.js.map +1 -1
  24. package/dist/src/connection/Simulator/SimulatorTransport.js +6 -1
  25. package/dist/src/connection/Simulator/SimulatorTransport.js.map +1 -1
  26. package/dist/src/connection/WebRTC/NodeWebRtcConnection.d.ts +2 -0
  27. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js +12 -12
  28. package/dist/src/connection/WebRTC/NodeWebRtcConnection.js.map +1 -1
  29. package/dist/src/connection/WebRTC/WebRtcConnector.d.ts +9 -9
  30. package/dist/src/connection/WebRTC/WebRtcConnector.js +22 -22
  31. package/dist/src/connection/WebRTC/WebRtcConnector.js.map +1 -1
  32. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js +2 -1
  33. package/dist/src/connection/WebSocket/RemoteWebSocketConnector.js.map +1 -1
  34. package/dist/src/connection/WebSocket/WebSocketConnector.d.ts +19 -8
  35. package/dist/src/connection/WebSocket/WebSocketConnector.js +67 -46
  36. package/dist/src/connection/WebSocket/WebSocketConnector.js.map +1 -1
  37. package/dist/src/connection/WebSocket/WebSocketServer.d.ts +11 -1
  38. package/dist/src/connection/WebSocket/WebSocketServer.js +15 -10
  39. package/dist/src/connection/WebSocket/WebSocketServer.js.map +1 -1
  40. package/dist/src/dht/DhtNode.d.ts +16 -54
  41. package/dist/src/dht/DhtNode.js +116 -137
  42. package/dist/src/dht/DhtNode.js.map +1 -1
  43. package/dist/src/dht/{DhtPeer.d.ts → RemoteDhtNode.d.ts} +3 -2
  44. package/dist/src/dht/{DhtPeer.js → RemoteDhtNode.js} +22 -16
  45. package/dist/src/dht/RemoteDhtNode.js.map +1 -0
  46. package/dist/src/dht/contact/Contact.d.ts +1 -15
  47. package/dist/src/dht/contact/Contact.js +1 -9
  48. package/dist/src/dht/contact/Contact.js.map +1 -1
  49. package/dist/src/dht/contact/ContactList.d.ts +13 -3
  50. package/dist/src/dht/contact/ContactList.js +9 -4
  51. package/dist/src/dht/contact/ContactList.js.map +1 -1
  52. package/dist/src/dht/contact/RandomContactList.d.ts +3 -3
  53. package/dist/src/dht/contact/RandomContactList.js +4 -8
  54. package/dist/src/dht/contact/RandomContactList.js.map +1 -1
  55. package/dist/src/dht/contact/Remote.d.ts +1 -5
  56. package/dist/src/dht/contact/Remote.js +0 -5
  57. package/dist/src/dht/contact/Remote.js.map +1 -1
  58. package/dist/src/dht/contact/SortedContactList.d.ts +3 -5
  59. package/dist/src/dht/contact/SortedContactList.js +9 -19
  60. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  61. package/dist/src/dht/discovery/DiscoverySession.d.ts +5 -7
  62. package/dist/src/dht/discovery/DiscoverySession.js +9 -10
  63. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  64. package/dist/src/dht/discovery/PeerDiscovery.d.ts +11 -10
  65. package/dist/src/dht/discovery/PeerDiscovery.js +32 -37
  66. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  67. package/dist/src/dht/find/RecursiveFindSession.d.ts +5 -6
  68. package/dist/src/dht/find/RecursiveFindSession.js +8 -8
  69. package/dist/src/dht/find/RecursiveFindSession.js.map +1 -1
  70. package/dist/src/dht/find/RecursiveFinder.d.ts +2 -4
  71. package/dist/src/dht/find/RecursiveFinder.js +11 -12
  72. package/dist/src/dht/find/RecursiveFinder.js.map +1 -1
  73. package/dist/src/dht/registerExternalApiRpcMethods.d.ts +1 -1
  74. package/dist/src/dht/routing/DuplicateDetector.d.ts +1 -2
  75. package/dist/src/dht/routing/DuplicateDetector.js +2 -7
  76. package/dist/src/dht/routing/DuplicateDetector.js.map +1 -1
  77. package/dist/src/dht/routing/RemoteRouter.js +4 -4
  78. package/dist/src/dht/routing/RemoteRouter.js.map +1 -1
  79. package/dist/src/dht/routing/Router.d.ts +10 -13
  80. package/dist/src/dht/routing/Router.js +28 -29
  81. package/dist/src/dht/routing/Router.js.map +1 -1
  82. package/dist/src/dht/routing/RoutingSession.d.ts +3 -5
  83. package/dist/src/dht/routing/RoutingSession.js +19 -13
  84. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  85. package/dist/src/dht/store/DataStore.d.ts +2 -2
  86. package/dist/src/dht/store/DataStore.js +7 -7
  87. package/dist/src/dht/store/DataStore.js.map +1 -1
  88. package/dist/src/exports.d.ts +1 -8
  89. package/dist/src/exports.js +2 -16
  90. package/dist/src/exports.js.map +1 -1
  91. package/dist/src/helpers/PeerID.d.ts +0 -1
  92. package/dist/src/helpers/PeerID.js +0 -6
  93. package/dist/src/helpers/PeerID.js.map +1 -1
  94. package/dist/src/helpers/browser/isBrowserEnvironment.d.ts +1 -0
  95. package/dist/src/helpers/browser/isBrowserEnvironment.js +6 -0
  96. package/dist/src/helpers/browser/isBrowserEnvironment.js.map +1 -0
  97. package/dist/src/helpers/browser/isBrowserEnvironment_override.d.ts +1 -0
  98. package/dist/src/helpers/browser/isBrowserEnvironment_override.js +7 -0
  99. package/dist/src/helpers/browser/isBrowserEnvironment_override.js.map +1 -0
  100. package/dist/src/helpers/kademliaId.d.ts +1 -0
  101. package/dist/src/helpers/kademliaId.js +14 -0
  102. package/dist/src/helpers/kademliaId.js.map +1 -0
  103. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +1 -1
  104. package/dist/src/helpers/peerIdFromPeerDescriptor.js +3 -3
  105. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  106. package/dist/src/proto/packages/dht/protos/DhtRpc.d.ts +0 -4
  107. package/dist/src/proto/packages/dht/protos/DhtRpc.js +1 -2
  108. package/dist/src/proto/packages/dht/protos/DhtRpc.js.map +1 -1
  109. package/package.json +10 -9
  110. package/protos/DhtRpc.proto +0 -1
  111. package/src/connection/ConnectionLockHandler.ts +1 -1
  112. package/src/connection/ConnectionManager.ts +156 -240
  113. package/src/connection/ConnectivityChecker.ts +14 -11
  114. package/src/connection/ConnectorFacade.ts +143 -0
  115. package/src/connection/ManagedConnection.ts +23 -34
  116. package/src/connection/RemoteConnectionLocker.ts +4 -3
  117. package/src/connection/Simulator/Simulator.ts +0 -7
  118. package/src/connection/Simulator/SimulatorConnection.ts +16 -13
  119. package/src/connection/Simulator/SimulatorConnector.ts +11 -12
  120. package/src/connection/Simulator/SimulatorTransport.ts +6 -1
  121. package/src/connection/WebRTC/NodeWebRtcConnection.ts +14 -13
  122. package/src/connection/WebRTC/WebRtcConnector.ts +31 -31
  123. package/src/connection/WebSocket/RemoteWebSocketConnector.ts +2 -1
  124. package/src/connection/WebSocket/WebSocketConnector.ts +85 -62
  125. package/src/connection/WebSocket/WebSocketServer.ts +26 -8
  126. package/src/dht/DhtNode.ts +164 -189
  127. package/src/dht/{DhtPeer.ts → RemoteDhtNode.ts} +14 -7
  128. package/src/dht/contact/Contact.ts +1 -18
  129. package/src/dht/contact/ContactList.ts +16 -6
  130. package/src/dht/contact/RandomContactList.ts +6 -11
  131. package/src/dht/contact/Remote.ts +1 -10
  132. package/src/dht/contact/SortedContactList.ts +12 -25
  133. package/src/dht/discovery/DiscoverySession.ts +20 -23
  134. package/src/dht/discovery/PeerDiscovery.ts +45 -44
  135. package/src/dht/find/RecursiveFindSession.ts +12 -13
  136. package/src/dht/find/RecursiveFinder.ts +16 -19
  137. package/src/dht/registerExternalApiRpcMethods.ts +1 -1
  138. package/src/dht/routing/DuplicateDetector.ts +3 -10
  139. package/src/dht/routing/RemoteRouter.ts +5 -5
  140. package/src/dht/routing/Router.ts +35 -39
  141. package/src/dht/routing/RoutingSession.ts +37 -28
  142. package/src/dht/store/DataStore.ts +11 -11
  143. package/src/exports.ts +1 -8
  144. package/src/helpers/PeerID.ts +0 -7
  145. package/src/helpers/browser/isBrowserEnvironment.ts +1 -0
  146. package/src/helpers/browser/isBrowserEnvironment_override.ts +3 -0
  147. package/src/helpers/kademliaId.ts +8 -0
  148. package/src/helpers/peerIdFromPeerDescriptor.ts +1 -1
  149. package/src/proto/packages/dht/protos/DhtRpc.ts +1 -6
  150. package/test/benchmark/KademliaCorrectness.test.ts +5 -2
  151. package/test/benchmark/RecursiveFind.test.ts +6 -6
  152. package/test/end-to-end/Layer0-Layer1.test.ts +14 -14
  153. package/test/end-to-end/Layer0WebRTC-Layer1.test.ts +5 -5
  154. package/test/end-to-end/Layer0WebRTC.test.ts +5 -6
  155. package/test/end-to-end/Layer1-Scale-WebRTC.test.ts +13 -8
  156. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +15 -10
  157. package/test/end-to-end/WebSocketConnectionRequest.test.ts +5 -5
  158. package/test/integration/ConnectionLocking.test.ts +32 -26
  159. package/test/integration/ConnectionManager.test.ts +90 -93
  160. package/test/integration/DhtJoinPeerDiscovery.test.ts +53 -0
  161. package/test/integration/DhtRpc.test.ts +4 -6
  162. package/test/integration/Layer1-scale.test.ts +8 -8
  163. package/test/integration/MigrateData.test.ts +9 -9
  164. package/test/integration/Mock-Layer1-Layer0.test.ts +1 -2
  165. package/test/integration/RecursiveFind.test.ts +5 -5
  166. package/test/integration/{DhtPeer.test.ts → RemoteDhtNode.test.ts} +11 -12
  167. package/test/integration/RemoteRouter.test.ts +5 -6
  168. package/test/integration/RemoteStore.test.ts +4 -5
  169. package/test/integration/RouteMessage.test.ts +7 -9
  170. package/test/integration/RpcErrors.test.ts +25 -10
  171. package/test/integration/ScaleDownDht.test.ts +8 -8
  172. package/test/integration/SimultaneousConnections.test.ts +35 -36
  173. package/test/integration/Store.test.ts +8 -9
  174. package/test/integration/StoreAndDelete.test.ts +11 -11
  175. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +7 -7
  176. package/test/integration/WebRtcConnectionManagement.test.ts +26 -19
  177. package/test/integration/WebRtcConnectorRpc.test.ts +6 -8
  178. package/test/integration/WebSocket.test.ts +4 -2
  179. package/test/integration/WebSocketConnectionManagement.test.ts +30 -17
  180. package/test/integration/WebSocketConnectorRpc.test.ts +2 -3
  181. package/test/unit/DuplicateDetector.test.ts +3 -4
  182. package/test/unit/LocalDataStore.test.ts +6 -8
  183. package/test/unit/RandomContactList.test.ts +25 -74
  184. package/test/unit/RecursiveFinder.test.ts +8 -12
  185. package/test/unit/Router.test.ts +18 -21
  186. package/test/unit/SortedContactList.test.ts +62 -112
  187. package/test/unit/WebSocketConnector.test.ts +64 -0
  188. package/test/unit/WebSocketServer.test.ts +24 -12
  189. package/test/utils/mock/RecursiveFinder.ts +2 -2
  190. package/test/utils/mock/Router.ts +9 -11
  191. package/test/utils/mock/Transport.ts +2 -2
  192. package/test/utils/utils.ts +40 -49
  193. package/dist/src/dht/DhtPeer.js.map +0 -1
  194. package/dist/src/helpers/browser/isBrowser.d.ts +0 -1
  195. package/dist/src/helpers/browser/isBrowser.js +0 -6
  196. package/dist/src/helpers/browser/isBrowser.js.map +0 -1
  197. package/dist/src/helpers/browser/isNodeJS.d.ts +0 -1
  198. package/dist/src/helpers/browser/isNodeJS.js +0 -6
  199. package/dist/src/helpers/browser/isNodeJS.js.map +0 -1
  200. package/src/helpers/browser/isBrowser.ts +0 -1
  201. package/src/helpers/browser/isNodeJS.ts +0 -1
  202. package/test/integration/DhtWithMockConnectionLatencies.test.ts +0 -46
  203. package/test/integration/DhtWithMockConnections.test.ts +0 -46
  204. package/test/integration/DhtWithRealConnectionLatencies.test.ts +0 -47
  205. /package/test/unit/{webrtcReplaceInternalIpWithExternalIp.ts → webrtcReplaceInternalIpWithExternalIp.test.ts} +0 -0
@@ -10,7 +10,7 @@ import { toProtoRpcClient } from '@streamr/proto-rpc'
10
10
  import { StoreServiceClient } from '../../proto/packages/dht/protos/DhtRpc.client'
11
11
  import { RoutingRpcCommunicator } from '../../transport/RoutingRpcCommunicator'
12
12
  import { IRecursiveFinder } from '../find/RecursiveFinder'
13
- import { isSamePeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
13
+ import { areEqualPeerDescriptors, keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
14
14
  import { Logger } from '@streamr/utils'
15
15
  import { LocalDataStore } from './LocalDataStore'
16
16
  import { IStoreService } from '../../proto/packages/dht/protos/DhtRpc.server'
@@ -20,7 +20,7 @@ import EventEmitter from 'eventemitter3'
20
20
  import { Events } from '../DhtNode'
21
21
  import { SortedContactList } from '../contact/SortedContactList'
22
22
  import { Contact } from '../contact/Contact'
23
- import { DhtPeer } from '../DhtPeer'
23
+ import { RemoteDhtNode } from '../RemoteDhtNode'
24
24
 
25
25
  interface DataStoreConfig {
26
26
  rpcCommunicator: RoutingRpcCommunicator
@@ -32,7 +32,7 @@ interface DataStoreConfig {
32
32
  highestTtl: number
33
33
  numberOfCopies: number
34
34
  dhtNodeEmitter: EventEmitter<Events>
35
- getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => DhtPeer[]
35
+ getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => RemoteDhtNode[]
36
36
  }
37
37
 
38
38
  const logger = new Logger(module)
@@ -48,7 +48,7 @@ export class DataStore implements IStoreService {
48
48
  private readonly highestTtl: number
49
49
  private readonly numberOfCopies: number
50
50
  private readonly dhtNodeEmitter: EventEmitter<Events>
51
- private readonly getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => DhtPeer[]
51
+ private readonly getNodesClosestToIdFromBucket: (id: Uint8Array, n?: number) => RemoteDhtNode[]
52
52
 
53
53
  constructor(config: DataStoreConfig) {
54
54
  this.rpcCommunicator = config.rpcCommunicator
@@ -68,7 +68,7 @@ export class DataStore implements IStoreService {
68
68
  this.rpcCommunicator.registerRpcMethod(DeleteDataRequest, DeleteDataResponse, 'deleteData',
69
69
  (request: DeleteDataRequest, context: ServerCallContext) => this.deleteData(request, context))
70
70
 
71
- this.dhtNodeEmitter.on('newContact', (peerDescriptor: PeerDescriptor, _closestPeers: PeerDescriptor[]) => {
71
+ this.dhtNodeEmitter.on('newContact', (peerDescriptor: PeerDescriptor) => {
72
72
  this.localDataStore.getStore().forEach((dataMap, _dataKey) => {
73
73
  dataMap.forEach((dataEntry) => {
74
74
  if (this.shouldMigrateDataToNewNode(dataEntry.dataEntry, peerDescriptor)) {
@@ -151,7 +151,7 @@ export class DataStore implements IStoreService {
151
151
  const ttl = this.highestTtl // ToDo: make TTL decrease according to some nice curve
152
152
  const storerTime = Timestamp.now()
153
153
  for (let i = 0; i < closestNodes.length && successfulNodes.length < this.numberOfCopies; i++) {
154
- if (isSamePeerDescriptor(this.ownPeerDescriptor, closestNodes[i])) {
154
+ if (areEqualPeerDescriptors(this.ownPeerDescriptor, closestNodes[i])) {
155
155
  this.localDataStore.storeEntry({
156
156
  kademliaId: key,
157
157
  storer: this.ownPeerDescriptor,
@@ -201,7 +201,7 @@ export class DataStore implements IStoreService {
201
201
  const closestNodes = result.closestNodes
202
202
  const successfulNodes: PeerDescriptor[] = []
203
203
  for (let i = 0; i < closestNodes.length && successfulNodes.length < this.numberOfCopies; i++) {
204
- if (isSamePeerDescriptor(this.ownPeerDescriptor, closestNodes[i])) {
204
+ if (areEqualPeerDescriptors(this.ownPeerDescriptor, closestNodes[i])) {
205
205
  this.localDataStore.markAsDeleted(key, peerIdFromPeerDescriptor(this.ownPeerDescriptor))
206
206
  successfulNodes.push(closestNodes[i])
207
207
  continue
@@ -217,7 +217,7 @@ export class DataStore implements IStoreService {
217
217
  if (response.deleted) {
218
218
  logger.trace('remoteStore.deleteData() returned success')
219
219
  } else {
220
- logger.trace('could not delete data from ' + PeerID.fromValue(closestNodes[i].kademliaId))
220
+ logger.trace('could not delete data from ' + keyFromPeerDescriptor(closestNodes[i]))
221
221
  }
222
222
  successfulNodes.push(closestNodes[i])
223
223
  } catch (e) {
@@ -246,7 +246,7 @@ export class DataStore implements IStoreService {
246
246
  this.localDataStore.setAllEntriesAsStale(PeerID.fromValue(kademliaId))
247
247
  }
248
248
 
249
- logger.trace(this.ownPeerDescriptor.nodeName + ' storeData()')
249
+ logger.trace('storeData()')
250
250
  return StoreDataResponse.create()
251
251
  }
252
252
 
@@ -260,7 +260,7 @@ export class DataStore implements IStoreService {
260
260
 
261
261
  // RPC service implementation
262
262
  public async migrateData(request: MigrateDataRequest, context: ServerCallContext): Promise<MigrateDataResponse> {
263
- logger.trace(this.ownPeerDescriptor.nodeName + ' server-side migrateData()')
263
+ logger.trace('server-side migrateData()')
264
264
  const dataEntry = request.dataEntry!
265
265
 
266
266
  const wasStored = this.localDataStore.storeEntry(dataEntry)
@@ -271,7 +271,7 @@ export class DataStore implements IStoreService {
271
271
  if (!this.selfIsOneOfClosestPeers(dataEntry.kademliaId)) {
272
272
  this.localDataStore.setAllEntriesAsStale(PeerID.fromValue(dataEntry.kademliaId))
273
273
  }
274
- logger.trace(this.ownPeerDescriptor.nodeName + ' server-side migrateData() at end')
274
+ logger.trace('server-side migrateData() at end')
275
275
  return MigrateDataResponse.create()
276
276
  }
277
277
 
package/src/exports.ts CHANGED
@@ -6,15 +6,8 @@ export { getRandomRegion, getRegionDelayMatrix } from './connection/Simulator/pi
6
6
  export { PeerDescriptor, Message, NodeType, DataEntry } from './proto/packages/dht/protos/DhtRpc'
7
7
  export { ITransport } from './transport/ITransport'
8
8
  export { ConnectionManager, ConnectionLocker, PortRange, TlsCertificate } from './connection/ConnectionManager'
9
- export { PeerID, PeerIDKey } from './helpers/PeerID'
10
- export { DhtPeer } from './dht/DhtPeer'
11
- export { UUID } from './helpers/UUID'
12
9
  export { DhtRpcOptions } from './rpc-protocol/DhtRpcOptions'
13
- export { protoClasses } from './helpers/protoClasses'
14
- export { SortedContactList } from './dht/contact/SortedContactList'
15
- export { Contact } from './dht/contact/Contact'
16
10
  export { Remote } from './dht/contact/Remote'
17
- export { RecursiveFindResult } from './dht/find/RecursiveFinder'
18
- export { peerIdFromPeerDescriptor, keyFromPeerDescriptor, isSamePeerDescriptor } from './helpers/peerIdFromPeerDescriptor'
11
+ export { areEqualPeerDescriptors } from './helpers/peerIdFromPeerDescriptor'
19
12
  export { IceServer } from './connection/WebRTC/WebRtcConnector'
20
13
  export { DhtCallContext } from './rpc-protocol/DhtCallContext'
@@ -49,13 +49,6 @@ export class PeerID {
49
49
  return new PeerID({ stringValue })
50
50
  }
51
51
 
52
- static generateRandom(): PeerID {
53
- // generate 160 bit random Uint8array
54
- const value = new Uint8Array(20)
55
- crypto.randomFillSync(value)
56
- return new PeerID({ value })
57
- }
58
-
59
52
  // TODO convert to static method?
60
53
  // eslint-disable-next-line class-methods-use-this
61
54
  private ip2Int(ip: string): number {
@@ -0,0 +1 @@
1
+ export const isBrowserEnvironment = (): boolean => false
@@ -0,0 +1,3 @@
1
+ // webpack overwrites the isBrowserEnvironment.ts with this file when it creates the browser bundle
2
+
3
+ export const isBrowserEnvironment = (): boolean => true
@@ -0,0 +1,8 @@
1
+ import crypto from 'crypto'
2
+
3
+ // https://www.scs.stanford.edu/~dm/home/papers/kpos.pdf
4
+ const KADEMLIA_ID_LENGTH_IN_BYTES = 20
5
+
6
+ export const createRandomKademliaId = (): Uint8Array => {
7
+ return crypto.randomBytes(KADEMLIA_ID_LENGTH_IN_BYTES)
8
+ }
@@ -9,6 +9,6 @@ export const keyFromPeerDescriptor = (peerDescriptor: PeerDescriptor): PeerIDKey
9
9
  return PeerID.fromValue(peerDescriptor.kademliaId).toKey()
10
10
  }
11
11
 
12
- export const isSamePeerDescriptor = (peerDescriptor1: PeerDescriptor, peerDescriptor2: PeerDescriptor): boolean => {
12
+ export const areEqualPeerDescriptors = (peerDescriptor1: PeerDescriptor, peerDescriptor2: PeerDescriptor): boolean => {
13
13
  return peerIdFromPeerDescriptor(peerDescriptor1).equals(peerIdFromPeerDescriptor(peerDescriptor2))
14
14
  }
@@ -253,10 +253,6 @@ export interface PeerDescriptor {
253
253
  * @generated from protobuf field: optional uint32 region = 7;
254
254
  */
255
255
  region?: number;
256
- /**
257
- * @generated from protobuf field: optional string nodeName = 8;
258
- */
259
- nodeName?: string;
260
256
  }
261
257
  /**
262
258
  * @generated from protobuf message dht.ConnectivityMethod
@@ -1019,8 +1015,7 @@ class PeerDescriptor$Type extends MessageType$<PeerDescriptor> {
1019
1015
  { no: 4, name: "tcp", kind: "message", T: () => ConnectivityMethod },
1020
1016
  { no: 5, name: "websocket", kind: "message", T: () => ConnectivityMethod },
1021
1017
  { no: 6, name: "openInternet", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
1022
- { no: 7, name: "region", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ },
1023
- { no: 8, name: "nodeName", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }
1018
+ { no: 7, name: "region", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }
1024
1019
  ]);
1025
1020
  }
1026
1021
  }
@@ -1,6 +1,8 @@
1
1
  /* eslint-disable no-console */
2
2
  import { Simulator } from '../../src/connection/Simulator/Simulator'
3
3
  import { DhtNode } from '../../src/dht/DhtNode'
4
+ import { PeerID } from '../../src/helpers/PeerID'
5
+ import { keyFromPeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
4
6
  import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
5
7
  import { createMockConnectionDhtNode } from '../utils/utils'
6
8
  import { execSync } from 'child_process'
@@ -70,7 +72,7 @@ describe('Kademlia correctness', () => {
70
72
  groundTruthString += groundTruth[i + ''][j].name + ','
71
73
  }
72
74
 
73
- const kademliaNeighbors = nodes[i].getNeighborList().getContactIds()
75
+ const kademliaNeighbors = nodes[i].getClosestContacts().map((p) => PeerID.fromValue(p.kademliaId))
74
76
 
75
77
  let kadString = 'kademliaNeighbors: '
76
78
  kademliaNeighbors.forEach((neighbor) => {
@@ -86,7 +88,8 @@ describe('Kademlia correctness', () => {
86
88
  correctNeighbors++
87
89
  }
88
90
  } catch (e) {
89
- console.error('Node ' + nodes[i].getPeerDescriptor().nodeName + ' had only ' + kademliaNeighbors.length + ' kademlia neighbors')
91
+ console.error('Node ' + keyFromPeerDescriptor(nodes[i].getPeerDescriptor()) + ' had only '
92
+ + kademliaNeighbors.length + ' kademlia neighbors')
90
93
  }
91
94
  if (correctNeighbors === 0) {
92
95
  console.log('No correct neighbors found for node ' + i)
@@ -5,7 +5,8 @@ import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/Dh
5
5
  import { createMockConnectionDhtNode } from '../utils/utils'
6
6
  import { execSync } from 'child_process'
7
7
  import fs from 'fs'
8
- import { PeerID, peerIdFromPeerDescriptor } from '../../src/exports'
8
+ import { PeerID } from '../../src/helpers/PeerID'
9
+ import { keyFromPeerDescriptor, peerIdFromPeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
9
10
  import { Logger, wait } from '@streamr/utils'
10
11
  import { debugVars } from '../../src/helpers/debugHelpers'
11
12
 
@@ -31,19 +32,18 @@ describe('Recursive find correctness', () => {
31
32
 
32
33
  nodes = []
33
34
  const entryPointId = '0'
34
- entryPoint = await createMockConnectionDhtNode(entryPointId, simulator, Uint8Array.from(dhtIds[0].data), undefined, entryPointId)
35
+ entryPoint = await createMockConnectionDhtNode(entryPointId, simulator, Uint8Array.from(dhtIds[0].data), undefined)
35
36
  nodes.push(entryPoint)
36
37
  nodeIndicesById[entryPoint.getNodeId().toKey()] = 0
37
38
  entrypointDescriptor = {
38
39
  kademliaId: entryPoint.getNodeId().value,
39
- type: NodeType.NODEJS,
40
- nodeName: entryPointId
40
+ type: NodeType.NODEJS
41
41
  }
42
42
 
43
43
  for (let i = 1; i < NUM_NODES; i++) {
44
44
  const nodeId = `${i}`
45
45
 
46
- const node = await createMockConnectionDhtNode(nodeId, simulator, Uint8Array.from(dhtIds[i].data), undefined, nodeId)
46
+ const node = await createMockConnectionDhtNode(nodeId, simulator, Uint8Array.from(dhtIds[i].data), undefined)
47
47
  nodeIndicesById[node.getNodeId().toKey()] = i
48
48
  nodes.push(node)
49
49
  }
@@ -70,7 +70,7 @@ describe('Recursive find correctness', () => {
70
70
  debugVars['waiting'] = false
71
71
  logger.info('waiting over')
72
72
 
73
- nodes.forEach((node) => logger.info(node.getPeerDescriptor().nodeName + ': connections:' +
73
+ nodes.forEach((node) => logger.info(keyFromPeerDescriptor(node.getPeerDescriptor()) + ': connections:' +
74
74
  node.getNumberOfConnections() + ', kbucket: ' + node.getBucketSize()
75
75
  + ', localLocked: ' + node.getNumberOfLocalLockedConnections()
76
76
  + ', remoteLocked: ' + node.getNumberOfRemoteLockedConnections()
@@ -1,6 +1,6 @@
1
1
  import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
2
2
  import { DhtNode } from '../../src/dht/DhtNode'
3
- import { peerIdFromPeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
3
+ import { areEqualPeerDescriptors } from '../../src/helpers/peerIdFromPeerDescriptor'
4
4
 
5
5
  describe('Layer0-Layer1', () => {
6
6
  const epPeerDescriptor: PeerDescriptor = {
@@ -35,11 +35,11 @@ describe('Layer0-Layer1', () => {
35
35
  await node1.start()
36
36
  await node2.start()
37
37
 
38
- stream1Node1 = new DhtNode({ transportLayer: epDhtNode, serviceId: STREAM_ID1 })
39
- stream1Node2 = new DhtNode({ transportLayer: node1, serviceId: STREAM_ID1 })
38
+ stream1Node1 = new DhtNode({ transport: epDhtNode, serviceId: STREAM_ID1 })
39
+ stream1Node2 = new DhtNode({ transport: node1, serviceId: STREAM_ID1 })
40
40
 
41
- stream2Node1 = new DhtNode({ transportLayer: epDhtNode, serviceId: STREAM_ID2 })
42
- stream2Node2 = new DhtNode({ transportLayer: node2, serviceId: STREAM_ID2 })
41
+ stream2Node1 = new DhtNode({ transport: epDhtNode, serviceId: STREAM_ID2 })
42
+ stream2Node2 = new DhtNode({ transport: node2, serviceId: STREAM_ID2 })
43
43
 
44
44
  await Promise.all([
45
45
  stream1Node1.start(),
@@ -76,14 +76,14 @@ describe('Layer0-Layer1', () => {
76
76
  stream2Node1.joinDht([epPeerDescriptor]),
77
77
  stream2Node2.joinDht([epPeerDescriptor])
78
78
  ])
79
- expect(stream1Node1.getNeighborList().getSize()).toEqual(1)
80
- expect(stream1Node2.getNeighborList().getSize()).toEqual(1)
81
- expect(stream2Node1.getNeighborList().getSize()).toEqual(1)
82
- expect(stream2Node2.getNeighborList().getSize()).toEqual(1)
83
-
84
- expect(stream1Node1.getNeighborList().getContactIds()[0].equals(peerIdFromPeerDescriptor(node1.getPeerDescriptor()))).toEqual(true)
85
- expect(stream1Node2.getNeighborList().getContactIds()[0].equals(peerIdFromPeerDescriptor(epPeerDescriptor))).toEqual(true)
86
- expect(stream2Node1.getNeighborList().getContactIds()[0].equals(peerIdFromPeerDescriptor(node2.getPeerDescriptor()))).toEqual(true)
87
- expect(stream2Node2.getNeighborList().getContactIds()[0].equals(peerIdFromPeerDescriptor(epPeerDescriptor))).toEqual(true)
79
+ expect(stream1Node1.getClosestContacts()).toHaveLength(1)
80
+ expect(stream1Node2.getClosestContacts()).toHaveLength(1)
81
+ expect(stream2Node1.getClosestContacts()).toHaveLength(1)
82
+ expect(stream2Node2.getClosestContacts()).toHaveLength(1)
83
+
84
+ expect(areEqualPeerDescriptors(stream1Node1.getClosestContacts()[0], node1.getPeerDescriptor())).toBe(true)
85
+ expect(areEqualPeerDescriptors(stream1Node2.getClosestContacts()[0], epPeerDescriptor)).toBe(true)
86
+ expect(areEqualPeerDescriptors(stream2Node1.getClosestContacts()[0], node2.getPeerDescriptor())).toBe(true)
87
+ expect(areEqualPeerDescriptors(stream2Node2.getClosestContacts()[0], epPeerDescriptor)).toBe(true)
88
88
  })
89
89
  })
@@ -54,31 +54,31 @@ describe('Layer 1 on Layer 0 with mocked connections', () => {
54
54
 
55
55
  layer1EntryPoint = new DhtNode({
56
56
  peerId: binaryToHex(entrypointDescriptor.kademliaId),
57
- transportLayer: layer0EntryPoint,
57
+ transport: layer0EntryPoint,
58
58
  serviceId: 'layer1'
59
59
  })
60
60
 
61
61
  layer1Node1 = new DhtNode({
62
62
  peerId: layer0Node1Id,
63
- transportLayer: layer0Node1,
63
+ transport: layer0Node1,
64
64
  serviceId: 'layer1'
65
65
  })
66
66
 
67
67
  layer1Node2 = new DhtNode({
68
68
  peerId: layer0Node2Id,
69
- transportLayer: layer0Node2,
69
+ transport: layer0Node2,
70
70
  serviceId: 'layer1'
71
71
  })
72
72
 
73
73
  layer1Node3 = new DhtNode({
74
74
  peerId: layer0Node3Id,
75
- transportLayer: layer0Node3,
75
+ transport: layer0Node3,
76
76
  serviceId: 'layer1'
77
77
  })
78
78
 
79
79
  layer1Node4 = new DhtNode({
80
80
  peerId: layer0Node4Id,
81
- transportLayer: layer0Node4,
81
+ transport: layer0Node4,
82
82
  serviceId: 'layer1'
83
83
  })
84
84
 
@@ -8,7 +8,6 @@ import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/Dh
8
8
  describe('Layer0 with WebRTC connections', () => {
9
9
  const epPeerDescriptor: PeerDescriptor = {
10
10
  kademliaId: PeerID.fromString('entrypoint').value,
11
- nodeName: 'entrypoint',
12
11
  type: NodeType.NODEJS,
13
12
  websocket: { host: '127.0.0.1', port: 10029, tls: false }
14
13
  }
@@ -20,15 +19,15 @@ describe('Layer0 with WebRTC connections', () => {
20
19
 
21
20
  beforeEach(async () => {
22
21
 
23
- epDhtNode = new DhtNode({ peerDescriptor: epPeerDescriptor, nodeName: 'entrypoint', numberOfNodesPerKBucket: 8 })
22
+ epDhtNode = new DhtNode({ peerDescriptor: epPeerDescriptor, numberOfNodesPerKBucket: 8 })
24
23
  await epDhtNode.start()
25
24
 
26
25
  await epDhtNode.joinDht([epPeerDescriptor])
27
26
 
28
- node1 = new DhtNode({ nodeName: 'Peer0', entryPoints: [epPeerDescriptor] })
29
- node2 = new DhtNode({ nodeName: 'Peer1', entryPoints: [epPeerDescriptor] })
30
- node3 = new DhtNode({ nodeName: 'Peer2', entryPoints: [epPeerDescriptor] })
31
- node4 = new DhtNode({ nodeName: 'Peer3', entryPoints: [epPeerDescriptor] })
27
+ node1 = new DhtNode({ entryPoints: [epPeerDescriptor] })
28
+ node2 = new DhtNode({ entryPoints: [epPeerDescriptor] })
29
+ node3 = new DhtNode({ entryPoints: [epPeerDescriptor] })
30
+ node4 = new DhtNode({ entryPoints: [epPeerDescriptor] })
32
31
 
33
32
  await Promise.all([
34
33
  node1.start(),
@@ -2,12 +2,13 @@ import { DhtNode } from '../../src/dht/DhtNode'
2
2
  import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
3
3
  import { PeerID } from '../../src/helpers/PeerID'
4
4
 
5
+ const NUM_OF_NODES_PER_KBUCKET = 8
6
+
5
7
  describe('Layer1 Scale', () => {
6
8
  const epPeerDescriptor: PeerDescriptor = {
7
9
  kademliaId: PeerID.fromString('0').value,
8
10
  type: NodeType.NODEJS,
9
- websocket: { host: '127.0.0.1', port: 43228, tls: false },
10
- nodeName: 'entrypoint'
11
+ websocket: { host: '127.0.0.1', port: 43228, tls: false }
11
12
  }
12
13
 
13
14
  const STREAM_ID = 'stream'
@@ -26,7 +27,7 @@ describe('Layer1 Scale', () => {
26
27
  await epLayer0Node.start()
27
28
  await epLayer0Node.joinDht([epPeerDescriptor])
28
29
 
29
- epLayer1Node = new DhtNode({ transportLayer: epLayer0Node, peerDescriptor: epPeerDescriptor, serviceId: STREAM_ID })
30
+ epLayer1Node = new DhtNode({ transport: epLayer0Node, peerDescriptor: epPeerDescriptor, serviceId: STREAM_ID })
30
31
  await epLayer1Node.start()
31
32
  await epLayer1Node.joinDht([epPeerDescriptor])
32
33
 
@@ -34,15 +35,19 @@ describe('Layer1 Scale', () => {
34
35
  layer1Nodes = []
35
36
 
36
37
  for (let i = 1; i < NUM_OF_NODES; i++) {
37
- const node = new DhtNode({ nodeName: `${i}`, entryPoints: [epPeerDescriptor] })
38
+ const node = new DhtNode({
39
+ entryPoints: [epPeerDescriptor],
40
+ numberOfNodesPerKBucket: NUM_OF_NODES_PER_KBUCKET
41
+ })
38
42
  await node.start()
39
43
  layer0Nodes.push(node)
40
44
  const layer1 = new DhtNode({
41
- transportLayer: node,
45
+ transport: node,
42
46
  entryPoints: [epPeerDescriptor],
43
47
  peerDescriptor: node.getPeerDescriptor(),
44
48
  serviceId: STREAM_ID,
45
- rpcRequestTimeout: 5000
49
+ rpcRequestTimeout: 5000,
50
+ numberOfNodesPerKBucket: NUM_OF_NODES_PER_KBUCKET
46
51
  })
47
52
  await layer1.start()
48
53
  layer1Nodes.push(layer1)
@@ -60,10 +65,10 @@ describe('Layer1 Scale', () => {
60
65
 
61
66
  it('bucket sizes', async () => {
62
67
  layer0Nodes.forEach((node) => {
63
- expect(node.getBucketSize()).toBeGreaterThanOrEqual(node.getK() - 1)
68
+ expect(node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET - 1)
64
69
  })
65
70
  layer1Nodes.forEach((node) => {
66
- expect(node.getBucketSize()).toBeGreaterThanOrEqual(node.getK() / 2)
71
+ expect(node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
67
72
  })
68
73
  })
69
74
  })
@@ -2,12 +2,13 @@ import { DhtNode } from '../../src/dht/DhtNode'
2
2
  import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
3
3
  import { PeerID } from '../../src/helpers/PeerID'
4
4
 
5
+ const NUM_OF_NODES_PER_KBUCKET = 8
6
+
5
7
  describe('Layer1 Scale', () => {
6
8
  const epPeerDescriptor: PeerDescriptor = {
7
9
  kademliaId: PeerID.fromString('entrypoint').value,
8
10
  type: NodeType.NODEJS,
9
- websocket: { host: '127.0.0.1', port: 43225, tls: false },
10
- nodeName: 'entrypoint'
11
+ websocket: { host: '127.0.0.1', port: 43225, tls: false }
11
12
  }
12
13
 
13
14
  const STREAM_ID = 'stream'
@@ -24,11 +25,11 @@ describe('Layer1 Scale', () => {
24
25
  const websocketPortRange = { min: 62200, max: 62200 + NUM_OF_NODES }
25
26
 
26
27
  beforeEach(async () => {
27
- epLayer0Node = new DhtNode({ peerDescriptor: epPeerDescriptor, nodeName: 'entrypoint' })
28
+ epLayer0Node = new DhtNode({ peerDescriptor: epPeerDescriptor })
28
29
  await epLayer0Node.start()
29
30
  await epLayer0Node.joinDht([epPeerDescriptor])
30
31
 
31
- epLayer1Node = new DhtNode({ transportLayer: epLayer0Node, peerDescriptor: epPeerDescriptor, serviceId: STREAM_ID, nodeName: 'entrypoint' })
32
+ epLayer1Node = new DhtNode({ transport: epLayer0Node, peerDescriptor: epPeerDescriptor, serviceId: STREAM_ID })
32
33
  await epLayer1Node.start()
33
34
  await epLayer1Node.joinDht([epPeerDescriptor])
34
35
 
@@ -36,15 +37,19 @@ describe('Layer1 Scale', () => {
36
37
  layer1Nodes = []
37
38
 
38
39
  for (let i = 0; i < NUM_OF_NODES; i++) {
39
- const node = new DhtNode({ nodeName: `${i}`, websocketPortRange, entryPoints: [epPeerDescriptor] })
40
+ const node = new DhtNode({
41
+ websocketPortRange,
42
+ entryPoints: [epPeerDescriptor],
43
+ numberOfNodesPerKBucket: NUM_OF_NODES_PER_KBUCKET
44
+ })
40
45
  await node.start()
41
46
  layer0Nodes.push(node)
42
47
  const layer1 = new DhtNode({
43
- nodeName: `${i}`,
44
- transportLayer: node,
48
+ transport: node,
45
49
  entryPoints: [epPeerDescriptor],
46
50
  peerDescriptor: node.getPeerDescriptor(),
47
- serviceId: STREAM_ID
51
+ serviceId: STREAM_ID,
52
+ numberOfNodesPerKBucket: NUM_OF_NODES_PER_KBUCKET
48
53
  })
49
54
  await layer1.start()
50
55
  layer1Nodes.push(layer1)
@@ -66,10 +71,10 @@ describe('Layer1 Scale', () => {
66
71
  // TODO: fix flaky test in NET-1021
67
72
  it('bucket sizes', async () => {
68
73
  layer0Nodes.forEach((node) => {
69
- expect(node.getBucketSize()).toBeGreaterThanOrEqual(node.getK() - 1)
74
+ expect(node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET - 1)
70
75
  })
71
76
  layer1Nodes.forEach((node ) => {
72
- expect(node.getBucketSize()).toBeGreaterThanOrEqual(node.getK() / 2)
77
+ expect(node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
73
78
  })
74
79
  })
75
80
  })
@@ -3,7 +3,7 @@ import { DhtNode } from '../../src/dht/DhtNode'
3
3
  import { ConnectionManager } from '../../src/connection/ConnectionManager'
4
4
  import { PeerID } from '../../src/helpers/PeerID'
5
5
  import { waitForCondition } from '@streamr/utils'
6
- import { isSamePeerDescriptor } from '../../src/helpers/peerIdFromPeerDescriptor'
6
+ import { areEqualPeerDescriptors } from '../../src/helpers/peerIdFromPeerDescriptor'
7
7
 
8
8
  describe('WebSocket IConnection Requests', () => {
9
9
  const epPeerDescriptor: PeerDescriptor = {
@@ -22,8 +22,8 @@ describe('WebSocket IConnection Requests', () => {
22
22
 
23
23
  await epDhtNode.joinDht([epPeerDescriptor])
24
24
 
25
- node1 = new DhtNode({ nodeName: 'node1', websocketPortRange: { min: 10022, max: 10022 }, entryPoints: [epPeerDescriptor] })
26
- node2 = new DhtNode({ nodeName: 'node2', entryPoints: [epPeerDescriptor] })
25
+ node1 = new DhtNode({ websocketPortRange: { min: 10022, max: 10022 }, entryPoints: [epPeerDescriptor] })
26
+ node2 = new DhtNode({ entryPoints: [epPeerDescriptor] })
27
27
  await node1.start()
28
28
  await node2.start()
29
29
  })
@@ -40,12 +40,12 @@ describe('WebSocket IConnection Requests', () => {
40
40
  let connected2 = false
41
41
 
42
42
  node1.on('connected', (peerDescriptor: PeerDescriptor) => {
43
- if (isSamePeerDescriptor(peerDescriptor, node2.getPeerDescriptor())) {
43
+ if (areEqualPeerDescriptors(peerDescriptor, node2.getPeerDescriptor())) {
44
44
  connected1 = true
45
45
  }
46
46
  })
47
47
  node2.on('connected', (peerDescriptor: PeerDescriptor) => {
48
- if (isSamePeerDescriptor(peerDescriptor, node1.getPeerDescriptor())) {
48
+ if (areEqualPeerDescriptors(peerDescriptor, node1.getPeerDescriptor())) {
49
49
  connected2 = true
50
50
  }
51
51
  })
@@ -1,20 +1,30 @@
1
- import { Simulator } from '../../src/connection/Simulator/Simulator'
1
+ import { MetricsContext, waitForCondition } from '@streamr/utils'
2
2
  import { ConnectionManager } from '../../src/connection/ConnectionManager'
3
- import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
4
- import { waitForCondition } from '@streamr/utils'
3
+ import { DefaultConnectorFacade } from '../../src/connection/ConnectorFacade'
4
+ import { Simulator } from '../../src/connection/Simulator/Simulator'
5
+ import { SimulatorTransport } from '../../src/connection/Simulator/SimulatorTransport'
6
+ import { ITransport } from '../../src/exports'
5
7
  import { PeerID } from '../../src/helpers/PeerID'
6
- import { SimulatorTransport } from '../../src/exports'
8
+ import { NodeType, PeerDescriptor } from '../../src/proto/packages/dht/protos/DhtRpc'
9
+
10
+ const createConnectionManager = (ownPeerDescriptor: PeerDescriptor, transport: ITransport) => {
11
+ return new ConnectionManager({
12
+ createConnectorFacade: () => new DefaultConnectorFacade({
13
+ transport,
14
+ createOwnPeerDescriptor: () => ownPeerDescriptor
15
+ }),
16
+ metricsContext: new MetricsContext()
17
+ })
18
+ }
7
19
 
8
20
  describe('Connection Locking', () => {
9
21
 
10
22
  const mockPeerDescriptor1: PeerDescriptor = {
11
23
  kademliaId: PeerID.fromString('mock1').value,
12
- nodeName: 'mock1',
13
24
  type: NodeType.NODEJS
14
25
  }
15
26
  const mockPeerDescriptor2: PeerDescriptor = {
16
27
  kademliaId: PeerID.fromString('mock2').value,
17
- nodeName: 'mock2',
18
28
  type: NodeType.NODEJS
19
29
  }
20
30
 
@@ -29,17 +39,13 @@ describe('Connection Locking', () => {
29
39
  beforeEach(async () => {
30
40
  simulator = new Simulator()
31
41
  mockConnectorTransport1 = new SimulatorTransport(mockPeerDescriptor1, simulator)
42
+ await mockConnectorTransport1.start()
32
43
  mockConnectorTransport2 = new SimulatorTransport(mockPeerDescriptor2, simulator)
33
-
34
- connectionManager1 = new ConnectionManager({
35
- transportLayer: mockConnectorTransport1
36
- })
37
-
38
- connectionManager2 = new ConnectionManager({
39
- transportLayer: mockConnectorTransport2
40
- })
41
- await connectionManager1.start(() => mockPeerDescriptor1)
42
- await connectionManager2.start(() => mockPeerDescriptor2)
44
+ await mockConnectorTransport2.start()
45
+ connectionManager1 = createConnectionManager(mockPeerDescriptor1, mockConnectorTransport1)
46
+ connectionManager2 = createConnectionManager(mockPeerDescriptor2, mockConnectorTransport2)
47
+ await connectionManager1.start()
48
+ await connectionManager2.start()
43
49
  })
44
50
 
45
51
  afterEach(async () => {
@@ -68,7 +74,7 @@ describe('Connection Locking', () => {
68
74
  connectionManager1.lockConnection(mockPeerDescriptor2, 'testLock1')
69
75
  ])
70
76
  await Promise.all([
71
- waitForCondition(() => connectionManager2.hasRemoteLockedConnection(mockPeerDescriptor1, 'testLock2')),
77
+ waitForCondition(() => connectionManager2.hasRemoteLockedConnection(mockPeerDescriptor1)),
72
78
  connectionManager1.lockConnection(mockPeerDescriptor2, 'testLock2')
73
79
  ])
74
80
  expect(connectionManager1.hasConnection(mockPeerDescriptor2)).toEqual(true)
@@ -97,7 +103,7 @@ describe('Connection Locking', () => {
97
103
  connectionManager1.lockConnection(mockPeerDescriptor2, 'testLock1')
98
104
  ])
99
105
  await Promise.all([
100
- waitForCondition(() => connectionManager2.hasRemoteLockedConnection(mockPeerDescriptor1, 'testLock2')),
106
+ waitForCondition(() => connectionManager2.hasRemoteLockedConnection(mockPeerDescriptor1)),
101
107
  connectionManager1.lockConnection(mockPeerDescriptor2, 'testLock2')
102
108
  ])
103
109
 
@@ -125,10 +131,10 @@ describe('Connection Locking', () => {
125
131
 
126
132
  connectionManager1.unlockConnection(mockPeerDescriptor2, 'testLock1')
127
133
  await waitForCondition(() =>
128
- connectionManager1.hasRemoteLockedConnection(mockPeerDescriptor2, 'testLock1')
129
- && !connectionManager1.hasLocalLockedConnection(mockPeerDescriptor2, 'testLock1')
130
- && !connectionManager2.hasRemoteLockedConnection(mockPeerDescriptor1, 'testLock1')
131
- && connectionManager2.hasLocalLockedConnection(mockPeerDescriptor1, 'testLock1')
134
+ connectionManager1.hasRemoteLockedConnection(mockPeerDescriptor2)
135
+ && !connectionManager1.hasLocalLockedConnection(mockPeerDescriptor2)
136
+ && !connectionManager2.hasRemoteLockedConnection(mockPeerDescriptor1)
137
+ && connectionManager2.hasLocalLockedConnection(mockPeerDescriptor1)
132
138
  )
133
139
 
134
140
  expect(connectionManager2.hasConnection(mockPeerDescriptor1)).toEqual(true)
@@ -150,12 +156,12 @@ describe('Connection Locking', () => {
150
156
  await connectionManager1.gracefullyDisconnectAsync(mockPeerDescriptor2)
151
157
 
152
158
  await waitForCondition(() =>
153
- !connectionManager1.hasRemoteLockedConnection(mockPeerDescriptor2, 'testLock1')
154
- && !connectionManager1.hasLocalLockedConnection(mockPeerDescriptor2, 'testLock1')
159
+ !connectionManager1.hasRemoteLockedConnection(mockPeerDescriptor2)
160
+ && !connectionManager1.hasLocalLockedConnection(mockPeerDescriptor2)
155
161
  )
156
162
  await waitForCondition(() =>
157
- !connectionManager2.hasRemoteLockedConnection(mockPeerDescriptor1, 'testLock1')
158
- && !connectionManager2.hasLocalLockedConnection(mockPeerDescriptor1, 'testLock1')
163
+ !connectionManager2.hasRemoteLockedConnection(mockPeerDescriptor1)
164
+ && !connectionManager2.hasLocalLockedConnection(mockPeerDescriptor1)
159
165
  )
160
166
  await waitForCondition(() => !connectionManager2.hasConnection(mockPeerDescriptor1))
161
167
  await waitForCondition(() => !connectionManager1.hasConnection(mockPeerDescriptor2))