pekko/akka-actor-tests/src/test/scala/akka/event/AddressTerminatedTopicBenchSpec.scala

54 lines
1.5 KiB
Scala

/**
* Copyright (C) 2009-2016 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.event
import scala.concurrent.duration._
import akka.actor.Actor
import akka.actor.ActorRef
import akka.actor.ActorSystem
import akka.actor.Address
import akka.actor.Props
import akka.testkit._
object AddressTerminatedTopicBenchSpec {
class Subscriber(testActor: ActorRef) extends Actor {
AddressTerminatedTopic(context.system).subscribe(self)
testActor ! "started"
override def postStop(): Unit = {
AddressTerminatedTopic(context.system).unsubscribe(self)
}
def receive = Actor.emptyBehavior
}
}
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
class AddressTerminatedTopicBenchSpec extends AkkaSpec("akka.loglevel=INFO") {
import AddressTerminatedTopicBenchSpec._
"Subscribe and unsubscribe of AddressTerminated" must {
"be quick" in {
val sys = ActorSystem(system.name + "2", system.settings.config)
try {
val num = 20000
val t1 = System.nanoTime()
val p = Props(classOf[Subscriber], testActor)
val subscribers = Vector.fill(num)(sys.actorOf(p))
receiveN(num, 10.seconds)
log.info("Starting {} actors took {} ms", num, (System.nanoTime() - t1).nanos.toMillis)
val t2 = System.nanoTime()
shutdown(sys, 10.seconds, verifySystemShutdown = true)
log.info("Stopping {} actors took {} ms", num, (System.nanoTime() - t2).nanos.toMillis)
} finally {
if (!sys.isTerminated) shutdown(sys)
}
}
}
}