diff --git a/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorSpec.scala index d3f3d65c27..7ccf37fbba 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/supervisor/SupervisorSpec.scala @@ -7,6 +7,7 @@ package akka.actor import org.scalatest.WordSpec import org.scalatest.matchers.MustMatchers import org.scalatest.BeforeAndAfterEach +import org.scalatest.BeforeAndAfterAll import akka.testkit._ import akka.testkit.Testing.sleepFor @@ -14,6 +15,8 @@ import akka.util.duration._ import akka.config.Supervision._ import akka.{ Die, Ping } import Actor._ +import akka.event.EventHandler +import akka.testkit.TestEvent._ import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.LinkedBlockingQueue @@ -192,9 +195,18 @@ object SupervisorSpec { } } -class SupervisorSpec extends WordSpec with MustMatchers with BeforeAndAfterEach { +class SupervisorSpec extends WordSpec with MustMatchers with BeforeAndAfterEach with BeforeAndAfterAll { import SupervisorSpec._ + override def beforeAll() = { + EventHandler notify Mute(EventFilter[Exception]("Die"), + EventFilter[IllegalStateException]("Don't wanna!")) + } + + override def afterAll() = { + EventHandler notify UnMuteAll + } + override def beforeEach() = { messageLog.clear } diff --git a/akka-actor-tests/src/test/scala/akka/actor/supervisor/Ticket669Spec.scala b/akka-actor-tests/src/test/scala/akka/actor/supervisor/Ticket669Spec.scala index 0a70058c7b..8c17f105de 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/supervisor/Ticket669Spec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/supervisor/Ticket669Spec.scala @@ -14,7 +14,10 @@ import org.scalatest.matchers.MustMatchers class Ticket669Spec extends WordSpec with MustMatchers with BeforeAndAfterAll { import Ticket669Spec._ - override def afterAll = Actor.registry.local.shutdownAll + override def afterAll = { + Actor.registry.local.shutdownAll + akka.event.EventHandler.start + } "A supervised actor with lifecycle PERMANENT" should { "be able to reply on failure during preRestart" in { diff --git a/akka-actor-tests/src/test/scala/akka/dispatch/FutureSpec.scala b/akka-actor-tests/src/test/scala/akka/dispatch/FutureSpec.scala index 0295e9c51c..b6c837c7bc 100644 --- a/akka-actor-tests/src/test/scala/akka/dispatch/FutureSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/dispatch/FutureSpec.scala @@ -107,7 +107,13 @@ class FutureSpec extends WordSpec with MustMatchers with Checkers with BeforeAnd check({ (future: Future[Int], actions: List[FutureAction]) ⇒ val result = (future /: actions)(_ /: _) val expected = (future.await.value.get /: actions)(_ /: _) - (result.await.value.get.toString == expected.toString) :| (result.value.get.toString + " is expected to be " + expected.toString) + ((result.await.value.get, expected) match { + case (Right(a), Right(b)) ⇒ a == b + case (Left(a), Left(b)) if a.toString == b.toString ⇒ true + case (Left(a), Left(b)) if a.getStackTrace.isEmpty || b.getStackTrace.isEmpty ⇒ + a.getClass.toString == b.getClass.toString + case _ ⇒ false + }) :| result.value.get.toString + " is expected to be " + expected.toString }, minSuccessful(10000), workers(4)) } } diff --git a/akka-actor-tests/src/test/scala/akka/misc/ActorRegistrySpec.scala b/akka-actor-tests/src/test/scala/akka/misc/ActorRegistrySpec.scala index 8522a2c92b..0dfba61920 100644 --- a/akka-actor-tests/src/test/scala/akka/misc/ActorRegistrySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/misc/ActorRegistrySpec.scala @@ -1,6 +1,7 @@ package akka.actor import org.scalatest.junit.JUnitSuite +import org.scalatest.BeforeAndAfterAll import org.junit.Test import Actor._ import org.scalatest.Assertions._ @@ -25,9 +26,13 @@ object ActorRegistrySpec { } } -class ActorRegistrySpec extends JUnitSuite { +class ActorRegistrySpec extends JUnitSuite with BeforeAndAfterAll { import ActorRegistrySpec._ + override def afterAll = { + akka.event.EventHandler.start + } + @Test def shouldGetActorByAddressFromActorRegistry { Actor.registry.local.shutdownAll diff --git a/akka-actor-tests/src/test/scala/akka/misc/SchedulerSpec.scala b/akka-actor-tests/src/test/scala/akka/misc/SchedulerSpec.scala index 6b5dbd684c..5af1276778 100644 --- a/akka-actor-tests/src/test/scala/akka/misc/SchedulerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/misc/SchedulerSpec.scala @@ -1,22 +1,32 @@ package akka.actor import org.scalatest.junit.JUnitSuite +import org.scalatest.BeforeAndAfterEach +import akka.event.EventHandler +import akka.testkit.TestEvent._ +import akka.testkit.EventFilter import Actor._ import java.util.concurrent.{ CountDownLatch, TimeUnit } import akka.config.Supervision._ import org.multiverse.api.latches.StandardLatch -import org.junit.Test +import org.junit.{ Test, Before, After } class SchedulerSpec extends JUnitSuite { - def withCleanEndState(action: ⇒ Unit) { - action + @Before + def beforeEach { + EventHandler.notify(Mute(EventFilter[Exception]("CRASH"))) + } + + @After + def afterEach { Scheduler.restart Actor.registry.local.shutdownAll + EventHandler.start() } @Test - def schedulerShouldScheduleMoreThanOnce = withCleanEndState { + def schedulerShouldScheduleMoreThanOnce = { case object Tick val countDownLatch = new CountDownLatch(3) @@ -38,7 +48,7 @@ class SchedulerSpec extends JUnitSuite { } @Test - def schedulerShouldScheduleOnce = withCleanEndState { + def schedulerShouldScheduleOnce = { case object Tick val countDownLatch = new CountDownLatch(3) val tickActor = actorOf(new Actor { @@ -58,7 +68,7 @@ class SchedulerSpec extends JUnitSuite { * ticket #372 */ @Test - def schedulerShouldntCreateActors = withCleanEndState { + def schedulerShouldntCreateActors = { object Ping val ticks = new CountDownLatch(1000) val actor = actorOf(new Actor { @@ -74,7 +84,7 @@ class SchedulerSpec extends JUnitSuite { * ticket #372 */ @Test - def schedulerShouldBeCancellable = withCleanEndState { + def schedulerShouldBeCancellable = { object Ping val ticks = new CountDownLatch(1) @@ -93,7 +103,7 @@ class SchedulerSpec extends JUnitSuite { * ticket #307 */ @Test - def actorRestartShouldPickUpScheduleAgain = withCleanEndState { + def actorRestartShouldPickUpScheduleAgain = { object Ping object Crash diff --git a/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala b/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala index 555b4df66a..9239b1103a 100644 --- a/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala +++ b/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala @@ -7,8 +7,14 @@ import akka.actor.Actor sealed trait TestEvent object TestEvent { - case class Mute(filter: EventFilter) extends TestEvent - case class UnMute(filter: EventFilter) extends TestEvent + object Mute { + def apply(filter: EventFilter, filters: EventFilter*): Mute = new Mute(filter +: filters.toSeq) + } + case class Mute(filters: Seq[EventFilter]) extends TestEvent + object UnMute { + def apply(filter: EventFilter, filters: EventFilter*): UnMute = new UnMute(filter +: filters.toSeq) + } + case class UnMute(filters: Seq[EventFilter]) extends TestEvent case object UnMuteAll extends TestEvent } @@ -44,9 +50,10 @@ case class ErrorFilter(throwable: Class[_]) extends EventFilter { case class ErrorMessageFilter(throwable: Class[_], message: String) extends EventFilter { def apply(event: Event) = event match { case Error(cause, _, _) if !(throwable isInstance cause) ⇒ false - case Error(cause, _, null) if cause.getMessage eq null ⇒ cause.getStackTrace.length == 0 - case Error(cause, _, null) ⇒ cause.getMessage startsWith message - case Error(_, _, msg) ⇒ msg.toString startsWith message + case Error(cause, _, null) if cause.getMessage eq null ⇒ cause.getStackTrace.length == 0 + case Error(cause, _, null) ⇒ cause.getMessage startsWith message + case Error(cause, _, msg) ⇒ + (msg.toString startsWith message) || (cause.getMessage startsWith message) case _ ⇒ false } } @@ -63,7 +70,8 @@ case class ErrorSourceMessageFilter(throwable: Class[_], source: AnyRef, message case Error(cause, instance, _) if !((throwable isInstance cause) && (source eq instance)) ⇒ false case Error(cause, _, null) if cause.getMessage eq null ⇒ cause.getStackTrace.length == 0 case Error(cause, _, null) ⇒ cause.getMessage startsWith message - case Error(_, _, msg) ⇒ msg.toString startsWith message + case Error(cause, _, msg) ⇒ + (msg.toString startsWith message) || (cause.getMessage startsWith message) case _ ⇒ false } } @@ -78,8 +86,8 @@ class TestEventListener extends EventHandler.DefaultListener { var filters: List[EventFilter] = Nil override def receive: Receive = ({ - case Mute(filter) ⇒ addFilter(filter) - case UnMute(filter) ⇒ removeFilter(filter) + case Mute(filters) ⇒ filters foreach addFilter + case UnMute(filters) ⇒ filters foreach removeFilter case UnMuteAll ⇒ filters = Nil case event: Event if filter(event) ⇒ }: Receive) orElse super.receive