diff --git a/akka-camel/src/test/scala/ConsumerMethodRegisteredTest.scala b/akka-camel/src/test/scala/ConsumerMethodRegisteredTest.scala deleted file mode 100644 index 0b4f20778d..0000000000 --- a/akka-camel/src/test/scala/ConsumerMethodRegisteredTest.scala +++ /dev/null @@ -1,40 +0,0 @@ -package se.scalablesolutions.akka.camel - -import java.net.InetSocketAddress - -import org.junit.{AfterClass, Test} -import org.scalatest.junit.JUnitSuite - -import se.scalablesolutions.akka.actor.{AspectInit, TypedActor} -import se.scalablesolutions.akka.camel.ConsumerMethodRegistered._ - -/* -class ConsumerMethodRegisteredTest extends JUnitSuite { - import ConsumerMethodRegisteredTest._ - - val remoteAddress = new InetSocketAddress("localhost", 8888); - val remoteAspectInit = AspectInit(classOf[SampleTypedConsumer], new SampleTypedConsumerImpl, null, Some(remoteAddress), 1000) - val localAspectInit = AspectInit(classOf[SampleTypedConsumer], new SampleTypedConsumerImpl, null, None, 1000) - val ascendingMethodName = (r1: ConsumerMethodRegistered, r2: ConsumerMethodRegistered) => - r1.method.getName < r2.method.getName - - @Test def shouldSelectTypedActorMethods234 = { - val registered = forConsumer(typedConsumer, localAspectInit).sortWith(ascendingMethodName) - assert(registered.size === 3) - assert(registered.map(_.method.getName) === List("m2", "m3", "m4")) - } - - @Test def shouldIgnoreRemoteProxies = { - val registered = forConsumer(typedConsumer, remoteAspectInit) - assert(registered.size === 0) - } -} - -object ConsumerMethodRegisteredTest { - val typedConsumer = TypedActor.newInstance(classOf[SampleTypedConsumer], classOf[SampleTypedConsumerImpl]) - - @AfterClass - def afterClass = TypedActor.stop(typedConsumer) -} - -*/ diff --git a/akka-camel/src/test/scala/PublishRequestorTest.scala b/akka-camel/src/test/scala/PublishRequestorTest.scala index e27fd7287f..7cfced57e1 100644 --- a/akka-camel/src/test/scala/PublishRequestorTest.scala +++ b/akka-camel/src/test/scala/PublishRequestorTest.scala @@ -16,7 +16,10 @@ class PublishRequestorTest extends JUnitSuite { var requestor: ActorRef = _ var consumer: ActorRef = _ - @Before def setUp = { + val ascendingMethodName = (r1: ConsumerMethodRegistered, r2: ConsumerMethodRegistered) => + r1.method.getName < r2.method.getName + + @Before def setUp: Unit = { publisher = actorOf[PublisherMock].start requestor = actorOf[PublishRequestor].start requestor ! PublishRequestorInit(publisher) @@ -24,42 +27,58 @@ class PublishRequestorTest extends JUnitSuite { def endpointUri = "mock:test" protected def receive = null }).start - } @After def tearDown = { + AspectInitRegistry.removeListener(requestor); ActorRegistry.shutdownAll } - //@Test - def shouldReceiveConsumerMethodRegisteredEvent = { - val obj = TypedActor.newInstance(classOf[SampleTypedSingleConsumer], classOf[SampleTypedSingleConsumerImpl]) - val init = AspectInit(classOf[SampleTypedSingleConsumer], new SampleTypedSingleConsumerImpl, null, None, 1000) + @Test def shouldReceiveOneConsumerMethodRegisteredEvent = { + AspectInitRegistry.addListener(requestor) val latch = (publisher !! SetExpectedTestMessageCount(1)).as[CountDownLatch].get - requestor ! AspectInitRegistered(obj, init) + val obj = TypedActor.newInstance(classOf[SampleTypedSingleConsumer], classOf[SampleTypedSingleConsumerImpl]) assert(latch.await(5000, TimeUnit.MILLISECONDS)) - val event = (publisher !! GetRetainedMessage).get.asInstanceOf[ConsumerMethodRegistered] - assert(event.init === init) + val event = (publisher !! GetRetainedMessage).as[ConsumerMethodRegistered].get assert(event.uri === "direct:foo") assert(event.typedActor === obj) assert(event.method.getName === "foo") } - //@Test - def shouldReceiveConsumerMethodUnregisteredEvent = { + @Test def shouldReceiveOneConsumerMethodUnregisteredEvent = { val obj = TypedActor.newInstance(classOf[SampleTypedSingleConsumer], classOf[SampleTypedSingleConsumerImpl]) - val init = AspectInit(classOf[SampleTypedSingleConsumer], new SampleTypedSingleConsumerImpl, null, None, 1000) val latch = (publisher !! SetExpectedTestMessageCount(1)).as[CountDownLatch].get - requestor ! AspectInitUnregistered(obj, init) + AspectInitRegistry.addListener(requestor) + TypedActor.stop(obj) assert(latch.await(5000, TimeUnit.MILLISECONDS)) - val event = (publisher !! GetRetainedMessage).get.asInstanceOf[ConsumerMethodUnregistered] - assert(event.init === init) + val event = (publisher !! GetRetainedMessage).as[ConsumerMethodUnregistered].get assert(event.uri === "direct:foo") assert(event.typedActor === obj) assert(event.method.getName === "foo") } - @Test def shouldReceiveConsumerRegisteredEvent = { + @Test def shouldReceiveThreeConsumerMethodRegisteredEvents = { + AspectInitRegistry.addListener(requestor) + val latch = (publisher !! SetExpectedTestMessageCount(3)).as[CountDownLatch].get + val obj = TypedActor.newInstance(classOf[SampleTypedConsumer], classOf[SampleTypedConsumerImpl]) + assert(latch.await(5000, TimeUnit.MILLISECONDS)) + val request = GetRetainedMessages(_.isInstanceOf[ConsumerMethodRegistered]) + val events = (publisher !! request).as[List[ConsumerMethodRegistered]].get + assert(events.map(_.method.getName).sortWith(_ < _) === List("m2", "m3", "m4")) + } + + @Test def shouldReceiveThreeConsumerMethodUnregisteredEvents = { + val obj = TypedActor.newInstance(classOf[SampleTypedConsumer], classOf[SampleTypedConsumerImpl]) + val latch = (publisher !! SetExpectedTestMessageCount(3)).as[CountDownLatch].get + AspectInitRegistry.addListener(requestor) + TypedActor.stop(obj) + assert(latch.await(5000, TimeUnit.MILLISECONDS)) + val request = GetRetainedMessages(_.isInstanceOf[ConsumerMethodUnregistered]) + val events = (publisher !! request).as[List[ConsumerMethodUnregistered]].get + assert(events.map(_.method.getName).sortWith(_ < _) === List("m2", "m3", "m4")) + } + + @Test def shouldReceiveOneConsumerRegisteredEvent = { val latch = (publisher !! SetExpectedTestMessageCount(1)).as[CountDownLatch].get requestor ! ActorRegistered(consumer) assert(latch.await(5000, TimeUnit.MILLISECONDS)) @@ -67,7 +86,7 @@ class PublishRequestorTest extends JUnitSuite { Some(ConsumerRegistered(consumer, "mock:test", consumer.uuid, false))) } - @Test def shouldReceiveConsumerUnregisteredEvent = { + @Test def shouldReceiveOneConsumerUnregisteredEvent = { val latch = (publisher !! SetExpectedTestMessageCount(1)).as[CountDownLatch].get requestor ! ActorUnregistered(consumer) assert(latch.await(5000, TimeUnit.MILLISECONDS)) diff --git a/akka-camel/src/test/scala/support/TestSupport.scala b/akka-camel/src/test/scala/support/TestSupport.scala index 61118ef3e3..8e1322e14f 100644 --- a/akka-camel/src/test/scala/support/TestSupport.scala +++ b/akka-camel/src/test/scala/support/TestSupport.scala @@ -2,6 +2,8 @@ package se.scalablesolutions.akka.camel.support import java.util.concurrent.{TimeUnit, CountDownLatch} +import collection.mutable.Buffer + import se.scalablesolutions.akka.camel.Message import se.scalablesolutions.akka.actor.Actor @@ -54,12 +56,13 @@ trait Respond { this: Actor => } trait Retain { this: Actor => - var message: Any = _ + val messages = Buffer[Any]() def retain: Handler = { - case GetRetainedMessage => self.reply(message) + case GetRetainedMessage => self.reply(messages.last) + case GetRetainedMessages(p) => self.reply(messages.toList.filter(p)) case msg => { - message = msg + messages += msg msg } } @@ -73,3 +76,6 @@ trait Noop { this: Actor => case class SetExpectedMessageCount(num: Int) case class GetRetainedMessage() +case class GetRetainedMessages(p: Any => Boolean) { + def this() = this(_ => true) +}