From 58a7eb71e749d3bc328e065652cdebfdf7163b10 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Mon, 25 Oct 2010 13:09:14 +0200 Subject: [PATCH] Added test for dispatcher parallelism --- .../test/scala/dispatch/ActorModelSpec.scala | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/akka-actor/src/test/scala/dispatch/ActorModelSpec.scala b/akka-actor/src/test/scala/dispatch/ActorModelSpec.scala index c79da02244..ae27faba09 100644 --- a/akka-actor/src/test/scala/dispatch/ActorModelSpec.scala +++ b/akka-actor/src/test/scala/dispatch/ActorModelSpec.scala @@ -165,7 +165,7 @@ object ActorModelSpec { def newTestActor(implicit d: MessageDispatcherInterceptor) = actorOf(new DispatcherActor(d)) } -abstract class ActorModelSpec extends JUnitSuite { +abstract class ActorModelSpec(val supportsMoreThanOneActor: Boolean) extends JUnitSuite { import ActorModelSpec._ protected def newInterceptedDispatcher: MessageDispatcherInterceptor @@ -194,7 +194,6 @@ abstract class ActorModelSpec extends JUnitSuite { implicit val dispatcher = newInterceptedDispatcher val a = newTestActor val start,step1,step2,oneAtATime = new CountDownLatch(1) - val counter = new AtomicLong(0) a.start a ! CountDown(start) @@ -207,6 +206,8 @@ abstract class ActorModelSpec extends JUnitSuite { a ! CountDown(oneAtATime) assertNoCountDown(oneAtATime,500,"Processed message when not allowed to") + assertRefDefaultZero(a)(registers = 1, msgsReceived = 3, msgsProcessed = 2) + step2.countDown() assertCountDown(oneAtATime,500,"Processed message when allowed") assertRefDefaultZero(a)(registers = 1, msgsReceived = 3, msgsProcessed = 3) @@ -214,9 +215,27 @@ abstract class ActorModelSpec extends JUnitSuite { a.stop assertRefDefaultZero(a)(registers = 1, unregisters = 1, msgsReceived = 3, msgsProcessed = 3) } + + @Test def dispatcherShouldProcessMessagesInParallel: Unit = if (supportsMoreThanOneActor) { + implicit val dispatcher = newInterceptedDispatcher + val a, b = newTestActor.start + val aStart,aStop,bParallel = new CountDownLatch(1) + + a ! Meet(aStart,aStop) + assertCountDown(aStart,3000, "Should process first message within 3 seconds") + + b ! CountDown(bParallel) + assertCountDown(bParallel, 3000, "Should process other actors in parallel") + + aStop.countDown() + a.stop() + b.stop() + assertRefDefaultZero(a)(registers = 1, unregisters = 1, msgsReceived = 1, msgsProcessed = 1) + assertRefDefaultZero(b)(registers = 1, unregisters = 1, msgsReceived = 1, msgsProcessed = 1) + } } -class ExecutorBasedEventDrivenDispatcherModelTest extends ActorModelSpec { +class ExecutorBasedEventDrivenDispatcherModelTest extends ActorModelSpec(supportsMoreThanOneActor = true) { def newInterceptedDispatcher = new ExecutorBasedEventDrivenDispatcher("foo") with MessageDispatcherInterceptor } \ No newline at end of file