@streamr/dht 100.0.0-testnet-one.0 → 100.0.0-testnet-one.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/src/connection/ConnectionLockRpcRemote.js +1 -25
  2. package/dist/src/connection/ConnectionLockRpcRemote.js.map +1 -1
  3. package/dist/src/connection/ConnectionManager.d.ts +0 -1
  4. package/dist/src/connection/ConnectionManager.js +7 -6
  5. package/dist/src/connection/ConnectionManager.js.map +1 -1
  6. package/dist/src/connection/ConnectorFacade.d.ts +2 -2
  7. package/dist/src/connection/ConnectorFacade.js +2 -3
  8. package/dist/src/connection/ConnectorFacade.js.map +1 -1
  9. package/dist/src/connection/ManagedConnection.d.ts +1 -0
  10. package/dist/src/connection/ManagedConnection.js +11 -1
  11. package/dist/src/connection/ManagedConnection.js.map +1 -1
  12. package/dist/src/connection/connectivityChecker.js +3 -2
  13. package/dist/src/connection/connectivityChecker.js.map +1 -1
  14. package/dist/src/connection/websocket/ClientWebsocket.d.ts +1 -0
  15. package/dist/src/connection/websocket/ClientWebsocket.js +6 -3
  16. package/dist/src/connection/websocket/ClientWebsocket.js.map +1 -1
  17. package/dist/src/connection/websocket/ServerWebsocket.d.ts +4 -0
  18. package/dist/src/connection/websocket/ServerWebsocket.js +32 -21
  19. package/dist/src/connection/websocket/ServerWebsocket.js.map +1 -1
  20. package/dist/src/connection/websocket/WebsocketConnector.d.ts +0 -1
  21. package/dist/src/connection/websocket/WebsocketConnector.js +21 -10
  22. package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
  23. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.d.ts +1 -1
  24. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js +8 -11
  25. package/dist/src/connection/websocket/WebsocketConnectorRpcLocal.js.map +1 -1
  26. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.d.ts +2 -2
  27. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js +3 -37
  28. package/dist/src/connection/websocket/WebsocketConnectorRpcRemote.js.map +1 -1
  29. package/dist/src/connection/websocket/WebsocketServer.js +21 -4
  30. package/dist/src/connection/websocket/WebsocketServer.js.map +1 -1
  31. package/dist/src/dht/DhtNode.d.ts +4 -4
  32. package/dist/src/dht/DhtNode.js +31 -20
  33. package/dist/src/dht/DhtNode.js.map +1 -1
  34. package/dist/src/dht/DhtNodeRpcLocal.d.ts +1 -4
  35. package/dist/src/dht/DhtNodeRpcLocal.js +1 -5
  36. package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
  37. package/dist/src/dht/PeerManager.d.ts +10 -6
  38. package/dist/src/dht/PeerManager.js +95 -30
  39. package/dist/src/dht/PeerManager.js.map +1 -1
  40. package/dist/src/dht/contact/SortedContactList.d.ts +20 -6
  41. package/dist/src/dht/contact/SortedContactList.js +55 -24
  42. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  43. package/dist/src/dht/discovery/DiscoverySession.d.ts +3 -5
  44. package/dist/src/dht/discovery/DiscoverySession.js +11 -9
  45. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  46. package/dist/src/dht/discovery/PeerDiscovery.d.ts +4 -2
  47. package/dist/src/dht/discovery/PeerDiscovery.js +17 -16
  48. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  49. package/dist/src/dht/find/FindSession.js +6 -1
  50. package/dist/src/dht/find/FindSession.js.map +1 -1
  51. package/dist/src/dht/find/Finder.js +6 -1
  52. package/dist/src/dht/find/Finder.js.map +1 -1
  53. package/dist/src/dht/routing/Router.d.ts +1 -1
  54. package/dist/src/dht/routing/Router.js +8 -4
  55. package/dist/src/dht/routing/Router.js.map +1 -1
  56. package/dist/src/dht/routing/RoutingSession.js +8 -1
  57. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  58. package/dist/src/dht/store/StoreRpcLocal.js +19 -5
  59. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
  60. package/dist/src/helpers/PeerID.d.ts +1 -0
  61. package/dist/src/helpers/PeerID.js +7 -2
  62. package/dist/src/helpers/PeerID.js.map +1 -1
  63. package/dist/src/helpers/peerIdFromPeerDescriptor.js +2 -2
  64. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  65. package/package.json +5 -5
  66. package/src/connection/ConnectionLockRpcRemote.ts +1 -2
  67. package/src/connection/ConnectionManager.ts +16 -17
  68. package/src/connection/ConnectorFacade.ts +1 -4
  69. package/src/connection/ManagedConnection.ts +12 -1
  70. package/src/connection/connectivityChecker.ts +3 -2
  71. package/src/connection/websocket/ClientWebsocket.ts +5 -2
  72. package/src/connection/websocket/ServerWebsocket.ts +40 -25
  73. package/src/connection/websocket/WebsocketConnector.ts +23 -12
  74. package/src/connection/websocket/WebsocketConnectorRpcLocal.ts +9 -11
  75. package/src/connection/websocket/WebsocketConnectorRpcRemote.ts +5 -14
  76. package/src/connection/websocket/WebsocketServer.ts +20 -5
  77. package/src/dht/DhtNode.ts +32 -24
  78. package/src/dht/DhtNodeRpcLocal.ts +2 -9
  79. package/src/dht/PeerManager.ts +110 -36
  80. package/src/dht/contact/SortedContactList.ts +87 -44
  81. package/src/dht/discovery/DiscoverySession.ts +15 -14
  82. package/src/dht/discovery/PeerDiscovery.ts +37 -22
  83. package/src/dht/find/FindSession.ts +6 -1
  84. package/src/dht/find/Finder.ts +6 -7
  85. package/src/dht/routing/Router.ts +8 -4
  86. package/src/dht/routing/RoutingSession.ts +8 -8
  87. package/src/dht/store/StoreRpcLocal.ts +19 -7
  88. package/src/helpers/PeerID.ts +6 -2
  89. package/src/helpers/peerIdFromPeerDescriptor.ts +4 -4
  90. package/test/benchmark/Find.test.ts +1 -1
  91. package/test/benchmark/KademliaCorrectness.test.ts +1 -1
  92. package/test/benchmark/SortedContactListBenchmark.test.ts +150 -0
  93. package/test/benchmark/WebsocketServerMemoryLeak.test.ts +41 -0
  94. package/test/benchmark/kademlia-simulation/SimulationNode.ts +6 -1
  95. package/test/end-to-end/Layer0.test.ts +4 -4
  96. package/test/end-to-end/Layer0MixedConnectionTypes.test.ts +10 -10
  97. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +4 -4
  98. package/test/end-to-end/Layer1-Scale-WebSocket.test.ts +2 -2
  99. package/test/end-to-end/Layer1-Scale-Webrtc.test.ts +2 -2
  100. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +1 -1
  101. package/test/end-to-end/memory-leak.test.ts +1 -0
  102. package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -2
  103. package/test/integration/Layer1-scale.test.ts +1 -1
  104. package/test/integration/Mock-Layer1-Layer0.test.ts +15 -15
  105. package/test/integration/MultipleEntryPointJoining.test.ts +7 -7
  106. package/test/integration/ReplicateData.test.ts +6 -1
  107. package/test/integration/SimultaneousConnections.test.ts +81 -49
  108. package/test/integration/Store.test.ts +1 -1
  109. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +1 -1
  110. package/test/integration/WebrtcConnectionManagement.test.ts +29 -0
  111. package/test/integration/WebsocketConnectionManagement.test.ts +65 -4
  112. package/test/integration/WebsocketConnectorRpc.test.ts +3 -5
  113. package/test/unit/SortedContactList.test.ts +15 -10
@@ -89,11 +89,11 @@ describe('Layer0MixedConnectionTypes', () => {
89
89
  node5.joinDht([epPeerDescriptor])
90
90
  ])
91
91
 
92
- expect(node1.getBucketSize()).toBeGreaterThanOrEqual(2)
93
- expect(node2.getBucketSize()).toBeGreaterThanOrEqual(2)
94
- expect(node3.getBucketSize()).toBeGreaterThanOrEqual(2)
95
- expect(node4.getBucketSize()).toBeGreaterThanOrEqual(2)
96
- expect(node5.getBucketSize()).toBeGreaterThanOrEqual(1)
92
+ expect(node1.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
93
+ expect(node2.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
94
+ expect(node3.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
95
+ expect(node4.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
96
+ expect(node5.getNumberOfNeighbors()).toBeGreaterThanOrEqual(1)
97
97
 
98
98
  }, 15000)
99
99
 
@@ -105,10 +105,10 @@ describe('Layer0MixedConnectionTypes', () => {
105
105
  node4.joinDht([epPeerDescriptor]),
106
106
  node5.joinDht([epPeerDescriptor])
107
107
  ])
108
- expect(node1.getBucketSize()).toBeGreaterThanOrEqual(2)
109
- expect(node2.getBucketSize()).toBeGreaterThanOrEqual(2)
110
- expect(node3.getBucketSize()).toBeGreaterThanOrEqual(2)
111
- expect(node4.getBucketSize()).toBeGreaterThanOrEqual(2)
112
- expect(node5.getBucketSize()).toBeGreaterThanOrEqual(2)
108
+ expect(node1.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
109
+ expect(node2.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
110
+ expect(node3.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
111
+ expect(node4.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
112
+ expect(node5.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
113
113
  }, 30000)
114
114
  })
@@ -125,9 +125,9 @@ describe('Layer 1 on Layer 0 with mocked connections', () => {
125
125
  await layer1Node3.joinDht([entrypointDescriptor])
126
126
  await layer1Node4.joinDht([entrypointDescriptor])
127
127
 
128
- expect(layer1Node1.getBucketSize()).toBeGreaterThanOrEqual(2)
129
- expect(layer1Node2.getBucketSize()).toBeGreaterThanOrEqual(2)
130
- expect(layer1Node3.getBucketSize()).toBeGreaterThanOrEqual(2)
131
- expect(layer1Node4.getBucketSize()).toBeGreaterThanOrEqual(2)
128
+ expect(layer1Node1.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
129
+ expect(layer1Node2.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
130
+ expect(layer1Node3.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
131
+ expect(layer1Node4.getNumberOfNeighbors()).toBeGreaterThanOrEqual(2)
132
132
  }, 60000)
133
133
  })
@@ -75,10 +75,10 @@ describe('Layer1 Scale', () => {
75
75
  // TODO: fix flaky test in NET-1021
76
76
  it('bucket sizes', async () => {
77
77
  layer0Nodes.forEach((node) => {
78
- expect(node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET - 1)
78
+ expect(node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET - 1)
79
79
  })
80
80
  layer1Nodes.forEach((node ) => {
81
- expect(node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
81
+ expect(node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
82
82
  })
83
83
  })
84
84
  })
@@ -65,10 +65,10 @@ describe('Layer1 Scale', () => {
65
65
 
66
66
  it('bucket sizes', async () => {
67
67
  layer0Nodes.forEach((node) => {
68
- expect(node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET - 1)
68
+ expect(node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET - 1)
69
69
  })
70
70
  layer1Nodes.forEach((node) => {
71
- expect(node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
71
+ expect(node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
72
72
  })
73
73
  })
74
74
  })
@@ -46,7 +46,7 @@ describe('Failed autocertification', () => {
46
46
  const failedAutocertificationPeerDescriptor = failedAutocertificationNode.getLocalPeerDescriptor()
47
47
  expect(failedAutocertificationPeerDescriptor.websocket!.tls).toBe(false)
48
48
  await failedAutocertificationNode.joinDht([entryPointPeerDescriptor])
49
- expect(failedAutocertificationNode.getBucketSize()).toEqual(2)
49
+ expect(failedAutocertificationNode.getNumberOfNeighbors()).toEqual(2)
50
50
  })
51
51
 
52
52
  })
@@ -68,6 +68,7 @@ describe('memory leak', () => {
68
68
 
69
69
  const detector1 = new LeakDetector(entryPoint)
70
70
  entryPoint = undefined
71
+ await detector1.isLeaking()
71
72
  expect(await detector1.isLeaking()).toBe(false)
72
73
 
73
74
  const detector2 = new LeakDetector(sender)
@@ -25,10 +25,10 @@ const runTest = async (latencyType: LatencyType) => {
25
25
  await entryPoint.joinDht([entrypointDescriptor])
26
26
  await Promise.all(nodes.map((node) => node.joinDht([entrypointDescriptor])))
27
27
  nodes.forEach((node) => {
28
- expect(node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
28
+ expect(node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
29
29
  expect(node.getClosestContacts().length).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
30
30
  })
31
- expect(entryPoint.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
31
+ expect(entryPoint.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
32
32
 
33
33
  await Promise.all([
34
34
  entryPoint.stop(),
@@ -75,7 +75,7 @@ describe('Layer1', () => {
75
75
  const layer1Node = layer1Nodes[i]
76
76
  expect(layer1Node.getNodeId().equals(layer0Node.getNodeId())).toEqual(true)
77
77
  expect(layer1Node.getNumberOfConnections()).toEqual(layer0Node.getNumberOfConnections())
78
- expect(layer1Node.getBucketSize()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
78
+ expect(layer1Node.getNumberOfNeighbors()).toBeGreaterThanOrEqual(NUM_OF_NODES_PER_KBUCKET / 2)
79
79
  expect(layer1Node.getAllConnectionPeerDescriptors()).toEqual(layer0Node.getAllConnectionPeerDescriptors())
80
80
  }
81
81
  }, 120000)
@@ -85,21 +85,21 @@ describe('Layer 1 on Layer 0 with mocked connections', () => {
85
85
  await layer1Node3.joinDht([entryPointDescriptor])
86
86
  await layer1Node4.joinDht([entryPointDescriptor])
87
87
 
88
- logger.info('layer1EntryPoint.getBucketSize() ' + layer1EntryPoint.getBucketSize())
89
- logger.info('layer1Node1.getBucketSize()' + layer1Node1.getBucketSize())
90
- logger.info('layer1Node2.getBucketSize()' + layer1Node2.getBucketSize())
91
- logger.info('layer1Node3.getBucketSize()' + layer1Node3.getBucketSize())
92
- logger.info('layer1Node4.getBucketSize()' + layer1Node4.getBucketSize())
93
-
94
- expect(layer1Node1.getBucketSize()).toEqual(layer0Node1.getBucketSize())
95
- expect(layer1Node2.getBucketSize()).toEqual(layer0Node2.getBucketSize())
96
- expect(layer1Node3.getBucketSize()).toEqual(layer0Node3.getBucketSize())
97
- expect(layer1Node4.getBucketSize()).toEqual(layer0Node4.getBucketSize())
98
-
99
- expect(layer1Node1.getKBucketPeers()).toContainValues(layer0Node1.getKBucketPeers())
100
- expect(layer1Node2.getKBucketPeers()).toContainValues(layer0Node2.getKBucketPeers())
101
- expect(layer1Node3.getKBucketPeers()).toContainValues(layer0Node3.getKBucketPeers())
102
- expect(layer1Node4.getKBucketPeers()).toContainValues(layer0Node4.getKBucketPeers())
88
+ logger.info('layer1EntryPoint.getNumberOfNeighbors() ' + layer1EntryPoint.getNumberOfNeighbors())
89
+ logger.info('layer1Node1.getNumberOfNeighbors()' + layer1Node1.getNumberOfNeighbors())
90
+ logger.info('layer1Node2.getNumberOfNeighbors()' + layer1Node2.getNumberOfNeighbors())
91
+ logger.info('layer1Node3.getNumberOfNeighbors()' + layer1Node3.getNumberOfNeighbors())
92
+ logger.info('layer1Node4.getNumberOfNeighbors()' + layer1Node4.getNumberOfNeighbors())
93
+
94
+ expect(layer1Node1.getNumberOfNeighbors()).toEqual(layer0Node1.getNumberOfNeighbors())
95
+ expect(layer1Node2.getNumberOfNeighbors()).toEqual(layer0Node2.getNumberOfNeighbors())
96
+ expect(layer1Node3.getNumberOfNeighbors()).toEqual(layer0Node3.getNumberOfNeighbors())
97
+ expect(layer1Node4.getNumberOfNeighbors()).toEqual(layer0Node4.getNumberOfNeighbors())
98
+
99
+ expect(layer1Node1.getAllNeighborPeerDescriptors()).toContainValues(layer0Node1.getAllNeighborPeerDescriptors())
100
+ expect(layer1Node2.getAllNeighborPeerDescriptors()).toContainValues(layer0Node2.getAllNeighborPeerDescriptors())
101
+ expect(layer1Node3.getAllNeighborPeerDescriptors()).toContainValues(layer0Node3.getAllNeighborPeerDescriptors())
102
+ expect(layer1Node4.getAllNeighborPeerDescriptors()).toContainValues(layer0Node4.getAllNeighborPeerDescriptors())
103
103
 
104
104
  }, 60000)
105
105
  })
@@ -42,9 +42,9 @@ describe('multiple entry point joining', () => {
42
42
  node2.joinDht(entryPoints),
43
43
  node3.joinDht(entryPoints)
44
44
  ])
45
- expect(node1.getBucketSize()).toEqual(2)
46
- expect(node2.getBucketSize()).toEqual(2)
47
- expect(node3.getBucketSize()).toEqual(2)
45
+ expect(node1.getNumberOfNeighbors()).toEqual(2)
46
+ expect(node2.getNumberOfNeighbors()).toEqual(2)
47
+ expect(node3.getNumberOfNeighbors()).toEqual(2)
48
48
  })
49
49
 
50
50
  it('can join even if a node is offline', async () => {
@@ -53,8 +53,8 @@ describe('multiple entry point joining', () => {
53
53
  node1.joinDht(entryPoints),
54
54
  node2.joinDht(entryPoints)
55
55
  ])
56
- expect(node1.getBucketSize()).toEqual(1)
57
- expect(node2.getBucketSize()).toEqual(1)
56
+ expect(node1.getNumberOfNeighbors()).toEqual(1)
57
+ expect(node2.getNumberOfNeighbors()).toEqual(1)
58
58
  }, 10000)
59
59
  })
60
60
 
@@ -96,9 +96,9 @@ describe('multiple entry point joining', () => {
96
96
 
97
97
  it('non-entry point nodes can join', async () => {
98
98
  await node1.joinDht(entryPoints)
99
- expect(node1.getBucketSize()).toEqual(2)
99
+ expect(node1.getNumberOfNeighbors()).toEqual(2)
100
100
  await node2.joinDht(entryPoints)
101
- expect(node2.getBucketSize()).toEqual(3)
101
+ expect(node2.getNumberOfNeighbors()).toEqual(3)
102
102
  })
103
103
 
104
104
  })
@@ -80,7 +80,12 @@ describe('Replicate data from node to node in DHT', () => {
80
80
 
81
81
  // calculate offline which node is closest to the data
82
82
 
83
- const sortedList = new SortedContactList<Contact>(dataKey, 10000)
83
+ const sortedList = new SortedContactList<Contact>({
84
+ referenceId: dataKey,
85
+ maxSize: 10000,
86
+ allowToContainReferenceId: true,
87
+ emitEvents: false
88
+ })
84
89
 
85
90
  nodes.forEach((node) => {
86
91
  sortedList.addContact(new Contact(node.getLocalPeerDescriptor())
@@ -20,8 +20,8 @@ const createConnectionManager = (localPeerDescriptor: PeerDescriptor, opts: Omit
20
20
  describe('SimultaneousConnections', () => {
21
21
 
22
22
  let simulator: Simulator
23
- let simulatorTransport1: SimulatorTransport
24
- let simulatorTransport2: SimulatorTransport
23
+ let simTransport1: SimulatorTransport
24
+ let simTransport2: SimulatorTransport
25
25
 
26
26
  const peerDescriptor1 = {
27
27
  nodeId: PeerID.fromString('mock1').value,
@@ -45,15 +45,15 @@ describe('SimultaneousConnections', () => {
45
45
 
46
46
  beforeEach(async () => {
47
47
  simulator = new Simulator()
48
- simulatorTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
49
- await simulatorTransport1.start()
50
- simulatorTransport2 = new SimulatorTransport(peerDescriptor2, simulator)
51
- await simulatorTransport2.start()
48
+ simTransport1 = new SimulatorTransport(peerDescriptor1, simulator)
49
+ await simTransport1.start()
50
+ simTransport2 = new SimulatorTransport(peerDescriptor2, simulator)
51
+ await simTransport2.start()
52
52
  })
53
53
 
54
54
  afterEach(async () => {
55
- await simulatorTransport1.stop()
56
- await simulatorTransport2.stop()
55
+ await simTransport1.stop()
56
+ await simTransport2.stop()
57
57
  })
58
58
 
59
59
  it('simultanous simulated connection', async () => {
@@ -67,13 +67,13 @@ describe('SimultaneousConnections', () => {
67
67
  }
68
68
 
69
69
  const promise1 = new Promise<void>((resolve, _reject) => {
70
- simulatorTransport1.on('message', async (message: Message) => {
70
+ simTransport1.on('message', async (message: Message) => {
71
71
  expect(message.messageType).toBe(MessageType.RPC)
72
72
  resolve()
73
73
  })
74
74
  })
75
75
  const promise2 = new Promise<void>((resolve, _reject) => {
76
- simulatorTransport2.on('message', async (message: Message) => {
76
+ simTransport2.on('message', async (message: Message) => {
77
77
  expect(message.messageType).toBe(MessageType.RPC)
78
78
  resolve()
79
79
  })
@@ -81,19 +81,21 @@ describe('SimultaneousConnections', () => {
81
81
  await Promise.all([
82
82
  promise1,
83
83
  promise2,
84
- simulatorTransport1.send(msg1),
85
- simulatorTransport2.send(msg2)
84
+ simTransport1.send(msg1),
85
+ simTransport2.send(msg2)
86
86
  ])
87
- await waitForCondition(() => simulatorTransport2.hasConnection(peerDescriptor1))
88
- await waitForCondition(() => simulatorTransport1.hasConnection(peerDescriptor2))
87
+ await waitForCondition(() => simTransport2.hasConnection(peerDescriptor1))
88
+ await waitForCondition(() => simTransport1.hasConnection(peerDescriptor2))
89
89
  })
90
90
 
91
91
  describe('Websocket 2 servers', () => {
92
92
 
93
+ let simTransport1: SimulatorTransport
94
+ let simTransport2: SimulatorTransport
93
95
  let connectionManager1: ConnectionManager
94
96
  let connectionManager2: ConnectionManager
95
-
96
- const wsPeer1: PeerDescriptor = {
97
+
98
+ const wsPeerDescriptor1: PeerDescriptor = {
97
99
  nodeId: PeerID.fromString('mock1').value,
98
100
  type: NodeType.NODEJS,
99
101
  websocket: {
@@ -103,7 +105,7 @@ describe('SimultaneousConnections', () => {
103
105
  }
104
106
  }
105
107
 
106
- const wsPeer2: PeerDescriptor = {
108
+ const wsPeerDescriptor2: PeerDescriptor = {
107
109
  nodeId: PeerID.fromString('mock2').value,
108
110
  type: NodeType.NODEJS,
109
111
  websocket: {
@@ -114,17 +116,26 @@ describe('SimultaneousConnections', () => {
114
116
  }
115
117
 
116
118
  beforeEach(async () => {
119
+
120
+ // SimulatorTransport needs to have exatly same peerDescriptor as ConnectionManager
121
+ // that is why we need to create new SimulatorTransports here
122
+ simulator = new Simulator()
123
+ simTransport1 = new SimulatorTransport(wsPeerDescriptor1, simulator)
124
+ await simTransport1.start()
125
+ simTransport2 = new SimulatorTransport(wsPeerDescriptor2, simulator)
126
+ await simTransport2.start()
127
+
117
128
  const websocketPortRange = { min: 43432, max: 43433 }
118
- connectionManager1 = createConnectionManager(wsPeer1, {
119
- transport: simulatorTransport1,
129
+ connectionManager1 = createConnectionManager(wsPeerDescriptor1, {
130
+ transport: simTransport1,
120
131
  websocketPortRange,
121
- entryPoints: [wsPeer1],
132
+ entryPoints: [wsPeerDescriptor1],
122
133
  websocketServerEnableTls: false
123
134
  })
124
- connectionManager2 = createConnectionManager(wsPeer2, {
125
- transport: simulatorTransport2,
135
+ connectionManager2 = createConnectionManager(wsPeerDescriptor2, {
136
+ transport: simTransport2,
126
137
  websocketPortRange,
127
- entryPoints: [wsPeer1],
138
+ entryPoints: [wsPeerDescriptor1],
128
139
  websocketServerEnableTls: false
129
140
  })
130
141
  await connectionManager1.start()
@@ -134,16 +145,18 @@ describe('SimultaneousConnections', () => {
134
145
  afterEach(async () => {
135
146
  await connectionManager1.stop()
136
147
  await connectionManager2.stop()
148
+ await simTransport1.stop()
149
+ await simTransport2.stop()
137
150
  })
138
151
 
139
152
  it('Simultaneous Connections', async () => {
140
153
  const msg1: Message = {
141
154
  ...baseMsg,
142
- targetDescriptor: wsPeer2
155
+ targetDescriptor: wsPeerDescriptor2
143
156
  }
144
157
  const msg2: Message = {
145
158
  ...baseMsg,
146
- targetDescriptor: wsPeer1
159
+ targetDescriptor: wsPeerDescriptor1
147
160
  }
148
161
 
149
162
  const promise1 = new Promise<void>((resolve, _reject) => {
@@ -166,17 +179,19 @@ describe('SimultaneousConnections', () => {
166
179
  connectionManager2.send(msg2)
167
180
  ])
168
181
 
169
- await waitForCondition(() => connectionManager1.hasConnection(wsPeer2))
170
- await waitForCondition(() => connectionManager2.hasConnection(wsPeer1))
182
+ await waitForCondition(() => connectionManager1.hasConnection(wsPeerDescriptor2))
183
+ await waitForCondition(() => connectionManager2.hasConnection(wsPeerDescriptor1))
171
184
  })
172
185
  })
173
186
 
174
187
  describe('Websocket 1 server (ConnectionRequests)', () => {
175
-
188
+
189
+ let simTransport1: SimulatorTransport
190
+ let simTransport2: SimulatorTransport
176
191
  let connectionManager1: ConnectionManager
177
192
  let connectionManager2: ConnectionManager
178
193
 
179
- const wsPeer1: PeerDescriptor = {
194
+ const wsPeerDescriptor1: PeerDescriptor = {
180
195
  nodeId: PeerID.fromString('mock1').value,
181
196
  type: NodeType.NODEJS,
182
197
  websocket: {
@@ -186,20 +201,26 @@ describe('SimultaneousConnections', () => {
186
201
  }
187
202
  }
188
203
 
189
- const wsPeer2: PeerDescriptor = {
204
+ const wsPeerDescriptor2: PeerDescriptor = {
190
205
  nodeId: PeerID.fromString('mock2').value,
191
206
  type: NodeType.NODEJS
192
207
  }
193
208
 
194
209
  beforeEach(async () => {
195
- connectionManager1 = createConnectionManager(wsPeer1, {
196
- transport: simulatorTransport1,
210
+ simulator = new Simulator()
211
+ simTransport1 = new SimulatorTransport(wsPeerDescriptor1, simulator)
212
+ await simTransport1.start()
213
+ simTransport2 = new SimulatorTransport(wsPeerDescriptor2, simulator)
214
+ await simTransport2.start()
215
+
216
+ connectionManager1 = createConnectionManager(wsPeerDescriptor1, {
217
+ transport: simTransport1,
197
218
  websocketPortRange: { min: 43432, max: 43432 },
198
- entryPoints: [wsPeer1],
219
+ entryPoints: [wsPeerDescriptor1],
199
220
  websocketServerEnableTls: false
200
221
  })
201
- connectionManager2 = createConnectionManager(wsPeer2, {
202
- transport: simulatorTransport2
222
+ connectionManager2 = createConnectionManager(wsPeerDescriptor2, {
223
+ transport: simTransport2
203
224
  })
204
225
  await connectionManager1.start()
205
226
  await connectionManager2.start()
@@ -208,16 +229,18 @@ describe('SimultaneousConnections', () => {
208
229
  afterEach(async () => {
209
230
  await connectionManager1.stop()
210
231
  await connectionManager2.stop()
232
+ await simTransport1.stop()
233
+ await simTransport2.stop()
211
234
  })
212
235
 
213
236
  it('Simultaneous Connections', async () => {
214
237
  const msg1: Message = {
215
238
  ...baseMsg,
216
- targetDescriptor: wsPeer2
239
+ targetDescriptor: wsPeerDescriptor2
217
240
  }
218
241
  const msg2: Message = {
219
242
  ...baseMsg,
220
- targetDescriptor: wsPeer1
243
+ targetDescriptor: wsPeerDescriptor1
221
244
  }
222
245
 
223
246
  const promise1 = new Promise<void>((resolve, _reject) => {
@@ -240,32 +263,39 @@ describe('SimultaneousConnections', () => {
240
263
  connectionManager2.send(msg2)
241
264
  ])
242
265
 
243
- await waitForCondition(() => connectionManager1.hasConnection(wsPeer2))
244
- await waitForCondition(() => connectionManager2.hasConnection(wsPeer1))
266
+ await waitForCondition(() => connectionManager1.hasConnection(wsPeerDescriptor2))
267
+ await waitForCondition(() => connectionManager2.hasConnection(wsPeerDescriptor1))
245
268
  })
246
269
  })
247
270
 
248
271
  describe('WebRTC', () => {
249
272
 
273
+ let simTransport1: SimulatorTransport
274
+ let simTransport2: SimulatorTransport
250
275
  let connectionManager1: ConnectionManager
251
276
  let connectionManager2: ConnectionManager
252
277
 
253
- const wrtcPeer1: PeerDescriptor = {
278
+ const wrtcPeerDescriptor1: PeerDescriptor = {
254
279
  nodeId: PeerID.fromString('mock1').value,
255
280
  type: NodeType.NODEJS
256
281
  }
257
282
 
258
- const wrtcPeer2: PeerDescriptor = {
283
+ const wrtcPeerDescriptor2: PeerDescriptor = {
259
284
  nodeId: PeerID.fromString('mock2').value,
260
285
  type: NodeType.NODEJS
261
286
  }
262
287
 
263
288
  beforeEach(async () => {
264
- connectionManager1 = createConnectionManager(wrtcPeer1, {
265
- transport: simulatorTransport1,
289
+ simulator = new Simulator()
290
+ simTransport1 = new SimulatorTransport(wrtcPeerDescriptor1, simulator)
291
+ await simTransport1.start()
292
+ simTransport2 = new SimulatorTransport(wrtcPeerDescriptor2, simulator)
293
+ await simTransport2.start()
294
+ connectionManager1 = createConnectionManager(wrtcPeerDescriptor1, {
295
+ transport: simTransport1,
266
296
  })
267
- connectionManager2 = createConnectionManager(wrtcPeer2, {
268
- transport: simulatorTransport2,
297
+ connectionManager2 = createConnectionManager(wrtcPeerDescriptor2, {
298
+ transport: simTransport2,
269
299
  })
270
300
  await connectionManager1.start()
271
301
  await connectionManager2.start()
@@ -274,16 +304,18 @@ describe('SimultaneousConnections', () => {
274
304
  afterEach(async () => {
275
305
  await connectionManager1.stop()
276
306
  await connectionManager2.stop()
307
+ await simTransport1.stop()
308
+ await simTransport2.stop()
277
309
  })
278
310
 
279
311
  it('Simultaneous Connections', async () => {
280
312
  const msg1: Message = {
281
313
  ...baseMsg,
282
- targetDescriptor: wrtcPeer2
314
+ targetDescriptor: wrtcPeerDescriptor2
283
315
  }
284
316
  const msg2: Message = {
285
317
  ...baseMsg,
286
- targetDescriptor: wrtcPeer1
318
+ targetDescriptor: wrtcPeerDescriptor1
287
319
  }
288
320
 
289
321
  const promise1 = new Promise<void>((resolve, _reject) => {
@@ -306,8 +338,8 @@ describe('SimultaneousConnections', () => {
306
338
  connectionManager2.send(msg2)
307
339
  ])
308
340
 
309
- await waitForCondition(() => connectionManager1.hasConnection(wrtcPeer2))
310
- await waitForCondition(() => connectionManager2.hasConnection(wrtcPeer1))
341
+ await waitForCondition(() => connectionManager1.hasConnection(wrtcPeerDescriptor2))
342
+ await waitForCondition(() => connectionManager2.hasConnection(wrtcPeerDescriptor1))
311
343
  })
312
344
  })
313
345
 
@@ -42,7 +42,7 @@ describe('Storing data in DHT', () => {
42
42
 
43
43
  afterEach(async () => {
44
44
  await Promise.all(nodes.map((node) => node.stop()))
45
- })
45
+ }, 15000)
46
46
 
47
47
  it('Storing data works', async () => {
48
48
  const storingNodeIndex = 34
@@ -59,7 +59,7 @@ describe('Storing data in DHT with two peers', () => {
59
59
 
60
60
  it('Can store on one peer DHT', async () => {
61
61
  await otherNode.stop()
62
- await waitForCondition(() => entryPoint.getBucketSize() === 0)
62
+ await waitForCondition(() => entryPoint.getNumberOfNeighbors() === 0)
63
63
  const dataKey = createRandomNodeId()
64
64
  const storedData = createMockPeerDescriptor()
65
65
  const data = Any.pack(storedData, PeerDescriptor)
@@ -209,4 +209,33 @@ describe('WebRTC Connection Management', () => {
209
209
  await disconnectedPromise1
210
210
 
211
211
  }, 20000)
212
+
213
+ it('failed connections are cleaned up', async () => {
214
+ const msg: Message = {
215
+ serviceId,
216
+ messageType: MessageType.RPC,
217
+ messageId: '1',
218
+ body: {
219
+ oneofKind: 'rpcMessage',
220
+ rpcMessage: RpcMessage.create()
221
+ },
222
+ }
223
+
224
+ const disconnectedPromise1 = new Promise<void>((resolve, _reject) => {
225
+ manager1.on('disconnected', () => {
226
+ resolve()
227
+ })
228
+ })
229
+
230
+ msg.targetDescriptor = {
231
+ nodeId: new Uint8Array([0, 0, 0, 0, 0]),
232
+ type: NodeType.NODEJS,
233
+ }
234
+
235
+ await Promise.allSettled([
236
+ manager1.send(msg),
237
+ disconnectedPromise1
238
+ ])
239
+ expect(manager1.getConnection(msg.targetDescriptor!)).toBeUndefined()
240
+ }, 20000)
212
241
  })