|
Akka/Scala example source code file (TestSupport.scala)
The TestSupport.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.camel import language.postfixOps import language.implicitConversions import scala.concurrent.duration._ import java.util.concurrent.{ TimeoutException, ExecutionException, TimeUnit } import org.scalatest.{ BeforeAndAfterEach, BeforeAndAfterAll, Suite } import org.scalatest.matchers.{ BePropertyMatcher, BePropertyMatchResult } import scala.reflect.ClassTag import akka.actor.{ ActorRef, Props, ActorSystem, Actor } import scala.concurrent.Await import akka.util.Timeout import akka.testkit.{ TestKit, AkkaSpec } private[camel] object TestSupport { def start(actor: ⇒ Actor, name: String)(implicit system: ActorSystem, timeout: Timeout): ActorRef = Await.result(CamelExtension(system).activationFutureFor(system.actorOf(Props(actor), name))(timeout, system.dispatcher), timeout.duration) def stop(actorRef: ActorRef)(implicit system: ActorSystem, timeout: Timeout) { system.stop(actorRef) Await.result(CamelExtension(system).deactivationFutureFor(actorRef)(timeout, system.dispatcher), timeout.duration) } private[camel] implicit def camelToTestWrapper(camel: Camel) = new CamelTestWrapper(camel) class CamelTestWrapper(camel: Camel) { /** * Sends msg to the endpoint and returns response. * It only waits for the response until timeout passes. * This is to reduce cases when unit-tests block infinitely. */ def sendTo(to: String, msg: String, timeout: Duration = 1 second): AnyRef = { try { camel.template.asyncRequestBody(to, msg).get(timeout.toNanos, TimeUnit.NANOSECONDS) } catch { case e: ExecutionException ⇒ throw e.getCause case e: TimeoutException ⇒ throw new AssertionError("Failed to get response to message [%s], send to endpoint [%s], within [%s]".format(msg, to, timeout)) } } def routeCount = camel.context.getRoutes().size() def routes = camel.context.getRoutes } trait SharedCamelSystem extends BeforeAndAfterAll { this: Suite ⇒ implicit lazy val system = ActorSystem("test", AkkaSpec.testConf) implicit lazy val camel = CamelExtension(system) abstract override protected def afterAll() { super.afterAll() TestKit.shutdownActorSystem(system) } } trait NonSharedCamelSystem extends BeforeAndAfterEach { this: Suite ⇒ implicit var system: ActorSystem = _ implicit var camel: Camel = _ override protected def beforeEach() { super.beforeEach() system = ActorSystem("test", AkkaSpec.testConf) camel = CamelExtension(system) } override protected def afterEach() { TestKit.shutdownActorSystem(system) super.afterEach() } } def time[A](block: ⇒ A): FiniteDuration = { val start = System.nanoTime() block val duration = System.nanoTime() - start duration nanos } def anInstanceOf[T](implicit tag: ClassTag[T]) = { val clazz = tag.runtimeClass.asInstanceOf[Class[T]] new BePropertyMatcher[AnyRef] { def apply(left: AnyRef) = BePropertyMatchResult( clazz.isAssignableFrom(left.getClass), "an instance of " + clazz.getName) } } } Other Akka source code examplesHere is a short list of links related to this Akka TestSupport.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.