|
Akka/Scala example source code file (RandomSpec.scala)
The RandomSpec.scala Akka example source code
/**
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.routing
import language.postfixOps
import java.util.concurrent.atomic.AtomicInteger
import scala.concurrent.Await
import scala.concurrent.duration._
import akka.actor.{ Props, Actor }
import akka.testkit.{ TestLatch, ImplicitSender, DefaultTimeout, AkkaSpec }
import akka.pattern.ask
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
class RandomSpec extends AkkaSpec with DefaultTimeout with ImplicitSender {
"random pool" must {
"be able to shut down its instance" in {
val stopLatch = new TestLatch(7)
val actor = system.actorOf(RandomPool(7).props(Props(new Actor {
def receive = {
case "hello" ⇒ sender() ! "world"
}
override def postStop() {
stopLatch.countDown()
}
})), "random-shutdown")
actor ! "hello"
actor ! "hello"
actor ! "hello"
actor ! "hello"
actor ! "hello"
within(2 seconds) {
for (i ← 1 to 5) expectMsg("world")
}
system.stop(actor)
Await.ready(stopLatch, 5 seconds)
}
"deliver messages in a random fashion" in {
val connectionCount = 10
val iterationCount = 100
val doneLatch = new TestLatch(connectionCount)
val counter = new AtomicInteger
var replies = Map.empty[Int, Int]
for (i ← 0 until connectionCount) {
replies = replies + (i -> 0)
}
val actor = system.actorOf(RandomPool(connectionCount).props(routeeProps =
Props(new Actor {
lazy val id = counter.getAndIncrement()
def receive = {
case "hit" ⇒ sender() ! id
case "end" ⇒ doneLatch.countDown()
}
})), name = "random")
for (i ← 0 until iterationCount) {
for (k ← 0 until connectionCount) {
val id = Await.result((actor ? "hit").mapTo[Int], timeout.duration)
replies = replies + (id -> (replies(id) + 1))
}
}
counter.get should be(connectionCount)
actor ! akka.routing.Broadcast("end")
Await.ready(doneLatch, 5 seconds)
replies.values foreach { _ should be > (0) }
replies.values.sum should be(iterationCount * connectionCount)
}
"deliver a broadcast message using the !" in {
val helloLatch = new TestLatch(6)
val stopLatch = new TestLatch(6)
val actor = system.actorOf(RandomPool(6).props(routeeProps = Props(new Actor {
def receive = {
case "hello" ⇒ helloLatch.countDown()
}
override def postStop() {
stopLatch.countDown()
}
})), "random-broadcast")
actor ! akka.routing.Broadcast("hello")
Await.ready(helloLatch, 5 seconds)
system.stop(actor)
Await.ready(stopLatch, 5 seconds)
}
}
}
Other Akka source code examplesHere is a short list of links related to this Akka RandomSpec.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.