|
Akka/Scala example source code file (TimerBasedThrottlerSpec.scala)
The TimerBasedThrottlerSpec.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.contrib.throttle import language.postfixOps import scala.concurrent.duration._ import akka.actor.ActorSystem import akka.actor.Actor import akka.actor.Props import akka.testkit.TestKit import akka.testkit.ImplicitSender import akka.contrib.throttle.Throttler._ import org.junit.runner.RunWith import org.scalatest.junit.JUnitRunner import org.scalatest.WordSpecLike import org.scalatest.Matchers import org.scalatest.BeforeAndAfterAll import akka.testkit._ object TimerBasedThrottlerSpec { def println(a: Any) = () //#demo-code // A simple actor that prints whatever it receives class PrintActor extends Actor { def receive = { case x ⇒ println(x) } } //#demo-code } @RunWith(classOf[JUnitRunner]) class TimerBasedThrottlerSpec extends TestKit(ActorSystem("TimerBasedThrottlerSpec")) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { import TimerBasedThrottlerSpec._ override def afterAll { shutdown() } "A throttler" must { def println(a: Any) = () "pass the ScalaDoc class documentation example program" in { //#demo-code val printer = system.actorOf(Props[PrintActor]) // The throttler for this example, setting the rate val throttler = system.actorOf(Props(classOf[TimerBasedThrottler], 3 msgsPer 1.second)) // Set the target throttler ! SetTarget(Some(printer)) // These three messages will be sent to the target immediately throttler ! "1" throttler ! "2" throttler ! "3" // These two will wait until a second has passed throttler ! "4" throttler ! "5" //#demo-code } "keep messages until a target is set" in { val echo = system.actorOf(TestActors.echoActorProps) val throttler = system.actorOf(Props(classOf[TimerBasedThrottler], 3 msgsPer (1.second.dilated))) 1 to 6 foreach { throttler ! _ } expectNoMsg(1 second) throttler ! SetTarget(Some(echo)) within(2.5 seconds) { 1 to 6 foreach { expectMsg(_) } } } "send messages after a `SetTarget(None)` pause" in { val echo = system.actorOf(TestActors.echoActorProps) val throttler = system.actorOf(Props(classOf[TimerBasedThrottler], 3 msgsPer (1.second.dilated))) throttler ! SetTarget(Some(echo)) 1 to 3 foreach { throttler ! _ } throttler ! SetTarget(None) within(1 second) { 1 to 3 foreach { expectMsg(_) } expectNoMsg() } expectNoMsg(1 second) throttler ! SetTarget(Some(echo)) 4 to 7 foreach { throttler ! _ } within(0.5 seconds, 1.5 seconds) { 4 to 7 foreach { expectMsg(_) } } } "keep messages when the target is set to None" in { val echo = system.actorOf(TestActors.echoActorProps) val throttler = system.actorOf(Props(classOf[TimerBasedThrottler], 3 msgsPer (1.second.dilated))) throttler ! SetTarget(Some(echo)) 1 to 7 foreach { throttler ! _ } throttler ! SetTarget(None) within(1 second) { 1 to 3 foreach { expectMsg(_) } expectNoMsg() } expectNoMsg(1 second) throttler ! SetTarget(Some(echo)) within(0.5 seconds, 1.5 seconds) { 4 to 7 foreach { expectMsg(_) } } } "respect the rate (3 msg/s)" in within(1.5 seconds, 2.5 seconds) { val echo = system.actorOf(TestActors.echoActorProps) val throttler = system.actorOf(Props(classOf[TimerBasedThrottler], 3 msgsPer (1.second.dilated))) throttler ! SetTarget(Some(echo)) 1 to 7 foreach { throttler ! _ } 1 to 7 foreach { expectMsg(_) } } "respect the rate (4 msg/s)" in within(1.5 seconds, 2.5 seconds) { val echo = system.actorOf(TestActors.echoActorProps) val throttler = system.actorOf(Props(classOf[TimerBasedThrottler], 4 msgsPer (1.second.dilated))) throttler ! SetTarget(Some(echo)) 1 to 9 foreach { throttler ! _ } 1 to 9 foreach { expectMsg(_) } } } } Other Akka source code examplesHere is a short list of links related to this Akka TimerBasedThrottlerSpec.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.