Skip to content

Commit d6a0d76

Browse files
committed
ETCM-446: Add pruning to the actor tests.
1 parent fec5168 commit d6a0d76

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/test/resources/application.conf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ mantis {
1212
max-outgoing-peers = 3
1313
max-incoming-peers = 1
1414
max-pending-peers = 1
15+
prune-incoming-peers = 1
16+
min-prune-age = 0.seconds
1517
update-nodes-initial-delay = 5.seconds
1618
update-nodes-interval = 10.seconds
1719
}

src/test/scala/io/iohk/ethereum/network/PeerManagerSpec.scala

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ class PeerManagerSpec
128128
start()
129129
handleInitialNodesDiscovery()
130130

131+
// There are 2 bootstrap nodes in the test config.
131132
createdPeers.head.probe.expectMsgClass(classOf[PeerActor.ConnectTo])
132133
createdPeers(1).probe.expectMsgClass(classOf[PeerActor.ConnectTo])
133134

@@ -140,20 +141,23 @@ class PeerManagerSpec
140141

141142
peerManager ! PeerManagerActor.HandlePeerConnection(incomingConnection1.ref, incomingPeerAddress1)
142143

144+
// It should have created the next peer for the first incoming connection (probably using a synchronous test scheduler).
143145
val probe2: TestProbe = createdPeers(2).probe
144146
val peer = Peer(incomingPeerAddress1, probe2.ref, incomingConnection = true, Some(incomingNodeId1))
145-
146147
probe2.expectMsg(PeerActor.HandleConnection(incomingConnection1.ref, incomingPeerAddress1))
147148
probe2.reply(PeerEvent.PeerHandshakeSuccessful(peer, initialPeerInfo))
148149

149150
val watcher = TestProbe()
150151
watcher.watch(incomingConnection3.ref)
151152

153+
// Try to connect with 2 more.
152154
peerManager ! PeerManagerActor.HandlePeerConnection(incomingConnection2.ref, incomingPeerAddress2)
153155
peerManager ! PeerManagerActor.HandlePeerConnection(incomingConnection3.ref, incomingPeerAddress3)
154156

157+
// The second should be terminated because max-pending is 1.
155158
watcher.expectMsgClass(classOf[Terminated])
156159

160+
// Simulate the successful handshake with the 2nd incoming. It should be disconnected because max-incoming is 1.
157161
val probe3: TestProbe = createdPeers(3).probe
158162

159163
val secondPeer = Peer(incomingPeerAddress2, probe3.ref, incomingConnection = true, Some(incomingNodeId2))
@@ -166,6 +170,14 @@ class PeerManagerSpec
166170
probe3.ref ! PoisonPill
167171

168172
peerEventBus.expectMsg(Publish(PeerDisconnected(PeerId(probe3.ref.path.name))))
173+
174+
// TooManyPeers should also trigger a pruning cycle.
175+
peerStatistics.expectMsg(
176+
PeerStatisticsActor.GetStatsForAll(peerConfiguration.statSlotDuration * peerConfiguration.statSlotCount)
177+
)
178+
peerStatistics.reply(PeerStatisticsActor.StatsForAll(Map.empty))
179+
// There's only one connection that can be pruned.
180+
probe2.expectMsg(PeerActor.DisconnectPeer(Disconnect.Reasons.TooManyPeers))
169181
}
170182

171183
it should "handle common message about getting peers" in new TestSetup {

0 commit comments

Comments
 (0)