@@ -417,6 +417,33 @@ class PeerManagerSpec
417
417
}
418
418
}
419
419
420
+ behavior of " prunePriority"
421
+
422
+ it should " calculate priority as count(responses)/lifetime" in {
423
+ import PeerStatisticsActor .Stat
424
+ val now = System .currentTimeMillis
425
+
426
+ def stat (responses : Int , firstSeen : FiniteDuration , lastSeen : FiniteDuration ) =
427
+ Stat .empty.copy(
428
+ responsesReceived = responses,
429
+ firstSeenTimeMillis = Some (now - firstSeen.toMillis),
430
+ lastSeenTimeMillis = Some (now - lastSeen.toMillis)
431
+ )
432
+
433
+ val stats = Map (
434
+ PeerId (" Alice" ) -> stat(responses = 50 , firstSeen = 1 .hour, lastSeen = 50 .minutes),
435
+ PeerId (" Bob" ) -> stat(responses = 100 , firstSeen = 12 .hours, lastSeen = 1 .minute),
436
+ PeerId (" Charlie" ) -> stat(responses = 0 , firstSeen = 20 .hours, lastSeen = 5 .minute).copy(requestsReceived = 1000 )
437
+ )
438
+
439
+ val priority = PeerManagerActor .prunePriority(stats, now) _
440
+
441
+ priority(PeerId (" Alice" )) shouldBe (50.0 / 1 .hour.toMillis) +- 0.001
442
+ priority(PeerId (" Alice" )) shouldBe > (priority(PeerId (" Bob" )))
443
+ priority(PeerId (" Charlie" )) shouldBe 0.0
444
+ priority(PeerId (" Dave" )) shouldBe 0.0
445
+ }
446
+
420
447
trait ConnectedPeersFixture {
421
448
case class TestConfig (
422
449
minOutgoingPeers : Int = 10 ,
0 commit comments