akka.testkit.TestKit Scala Examples
The following examples show how to use akka.testkit.TestKit.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: IntegrationTest.scala From kmq with Apache License 2.0 | 6 votes |
package com.softwaremill.kmq.redelivery import java.time.Duration import java.util.Random import akka.actor.ActorSystem import akka.kafka.scaladsl.{Consumer, Producer} import akka.kafka.{ConsumerSettings, ProducerMessage, ProducerSettings, Subscriptions} import akka.stream.ActorMaterializer import akka.testkit.TestKit import com.softwaremill.kmq._ import com.softwaremill.kmq.redelivery.infrastructure.KafkaSpec import org.apache.kafka.clients.consumer.ConsumerConfig import org.apache.kafka.clients.producer.{ProducerConfig, ProducerRecord} import org.apache.kafka.common.serialization.StringDeserializer import org.scalatest.concurrent.Eventually import org.scalatest.time.{Seconds, Span} import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import scala.collection.mutable.ArrayBuffer class IntegrationTest extends TestKit(ActorSystem("test-system")) with FlatSpecLike with KafkaSpec with BeforeAndAfterAll with Eventually with Matchers { implicit val materializer = ActorMaterializer() import system.dispatcher "KMQ" should "resend message if not committed" in { val bootstrapServer = s"localhost:${testKafkaConfig.kafkaPort}" val kmqConfig = new KmqConfig("queue", "markers", "kmq_client", "kmq_redelivery", Duration.ofSeconds(1).toMillis, 1000) val consumerSettings = ConsumerSettings(system, new StringDeserializer, new StringDeserializer) .withBootstrapServers(bootstrapServer) .withGroupId(kmqConfig.getMsgConsumerGroupId) .withProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest") val markerProducerSettings = ProducerSettings(system, new MarkerKey.MarkerKeySerializer(), new MarkerValue.MarkerValueSerializer()) .withBootstrapServers(bootstrapServer) .withProperty(ProducerConfig.PARTITIONER_CLASS_CONFIG, classOf[ParititionFromMarkerKey].getName) val markerProducer = markerProducerSettings.createKafkaProducer() val random = new Random() lazy val processedMessages = ArrayBuffer[String]() lazy val receivedMessages = ArrayBuffer[String]() val control = Consumer.committableSource(consumerSettings, Subscriptions.topics(kmqConfig.getMsgTopic)) // 1. get messages from topic .map { msg => ProducerMessage.Message( new ProducerRecord[MarkerKey, MarkerValue](kmqConfig.getMarkerTopic, MarkerKey.fromRecord(msg.record), new StartMarker(kmqConfig.getMsgTimeoutMs)), msg) } .via(Producer.flow(markerProducerSettings, markerProducer)) // 2. write the "start" marker .map(_.message.passThrough) .mapAsync(1) { msg => msg.committableOffset.commitScaladsl().map(_ => msg.record) // this should be batched } .map { msg => receivedMessages += msg.value msg } .filter(_ => random.nextInt(5) != 0) .map { processedMessage => processedMessages += processedMessage.value new ProducerRecord[MarkerKey, MarkerValue](kmqConfig.getMarkerTopic, MarkerKey.fromRecord(processedMessage), EndMarker.INSTANCE) } .to(Producer.plainSink(markerProducerSettings, markerProducer)) // 5. write "end" markers .run() val redeliveryHook = RedeliveryTracker.start(new KafkaClients(bootstrapServer), kmqConfig) val messages = (0 to 20).map(_.toString) messages.foreach(msg => sendToKafka(kmqConfig.getMsgTopic,msg)) eventually { receivedMessages.size should be > processedMessages.size processedMessages.sortBy(_.toInt).distinct shouldBe messages }(PatienceConfig(timeout = Span(15, Seconds)), implicitly) redeliveryHook.close() control.shutdown() } override def afterAll(): Unit = { super.afterAll() TestKit.shutdownActorSystem(system) } }
Example 2
Source File: DropRepeatedSpec.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.server.api import akka.actor.ActorSystem import akka.pattern.pipe import akka.stream.Materializer import akka.stream.scaladsl.{Sink, Source} import akka.testkit.{TestKit, TestProbe} import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.collection.immutable import scala.concurrent.ExecutionContext final class DropRepeatedSpec extends TestKit(ActorSystem(classOf[DropRepeatedSpec].getSimpleName)) with WordSpecLike with Matchers with BeforeAndAfterAll { private[this] implicit val materializer: Materializer = Materializer(system) private[this] implicit val executionContext: ExecutionContext = materializer.executionContext override def afterAll: Unit = { TestKit.shutdownActorSystem(system) } "DropRepeated" should { "drop repeated elements" in { val probe = TestProbe() val input = immutable.Seq(1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5) val _ = Source(input) .via(DropRepeated()) .runWith(Sink.seq) .pipeTo(probe.ref) .failed .foreach(fail(_)) probe.expectMsg(Vector(1, 2, 3, 4, 5)) } "does not drop duplicate elements that are not repeated" in { val probe = TestProbe() val input = immutable.Seq(1, 1, 2, 2, 1, 1, 2, 2) val _ = Source(input) .via(DropRepeated()) .runWith(Sink.seq) .pipeTo(probe.ref) .failed .foreach(fail(_)) probe.expectMsg(Vector(1, 2, 1, 2)) } } }
Example 3
Source File: YahooFinanceSpec.scala From YahooFinanceScala with MIT License | 5 votes |
package openquant.yahoofinance import java.time.ZonedDateTime import akka.actor.ActorSystem import akka.testkit.TestKit import org.specs2.matcher.{FutureMatchers, Matchers} import org.specs2.mutable._ import scala.concurrent.Await import scala.concurrent.duration.Duration class YahooFinanceSpec extends TestKit(ActorSystem()) with SpecificationLike with Matchers with Logging { "get quotes" in { val yahooFinance = new YahooFinance() val res = Await.result(yahooFinance.quotes("MSFT", Some(ZonedDateTime.now().minusDays(5))), Duration.Inf) res.length must be_>=(3) res.length must be_<=(5) } "get full history" in { val yahooFinance = new YahooFinance() val res = Await.result(yahooFinance.quotes("MSFT"), Duration.Inf) res.length must be_>=(1000) } "non-existent symbol" in { val yahooFinance = new YahooFinance() Await.result(yahooFinance.quotes("qwertyasdf"), Duration.Inf) must throwA[RuntimeException] } "invalid fundamentals" in { val yahooFinance = new YahooFinance() val invalids = Await.result(yahooFinance.fundamentals(Vector("qwertyasdf")), Duration.Inf) invalids must have size (1) invalids.head.looksValid must beFalse } "valid fundamentals" in { val yahooFinance = new YahooFinance() val syms = Vector("MSFT", "IBM") val valids = Await.result(yahooFinance.fundamentals(syms), Duration.Inf) valids must have size(2) valids.foreach { x ⇒ x.looksValid must beTrue x.name must not beEmpty } valids.map { _.symbol } must contain(exactly(syms:_*)) ok } }
Example 4
Source File: ClusterSingletonHelperTest.scala From akka-tools with MIT License | 5 votes |
package no.nextgentel.oss.akkatools.cluster import akka.actor.{Actor, ActorRef, ActorSystem, Props} import akka.testkit.{TestKit, TestProbe} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FunSuiteLike, Matchers} import org.slf4j.LoggerFactory import scala.util.Random object ClusterSingletonHelperTest { val port = 20000 + Random.nextInt(20000) } class ClusterSingletonHelperTest (_system:ActorSystem) extends TestKit(_system) with FunSuiteLike with Matchers with BeforeAndAfterAll with BeforeAndAfter { def this() = this(ActorSystem("test-actor-system", ConfigFactory.parseString( s"""akka.actor.provider = "akka.cluster.ClusterActorRefProvider" |akka.remote.enabled-transports = ["akka.remote.netty.tcp"] |akka.remote.netty.tcp.hostname="localhost" |akka.remote.netty.tcp.port=${ClusterSingletonHelperTest.port} |akka.cluster.seed-nodes = ["akka.tcp://test-actor-system@localhost:${ClusterSingletonHelperTest.port}"] """.stripMargin ).withFallback(ConfigFactory.load("application-test.conf")))) override def afterAll { TestKit.shutdownActorSystem(system) } val log = LoggerFactory.getLogger(getClass) test("start and communicate with cluster-singleton") { val started = TestProbe() val proxy = ClusterSingletonHelper.startClusterSingleton(system, Props(new OurClusterSingleton(started.ref)), "ocl") started.expectMsg("started") val sender = TestProbe() sender.send(proxy, "ping") sender.expectMsg("pong") } } class OurClusterSingleton(started:ActorRef) extends Actor { started ! "started" def receive = { case "ping" => sender ! "pong" } }
Example 5
Source File: GeneralAggregateWithShardingTest.scala From akka-tools with MIT License | 5 votes |
package no.nextgentel.oss.akkatools.aggregate import java.util.{Arrays, UUID} import akka.actor.ActorSystem import akka.actor.Status.Failure import akka.testkit.{TestKit, TestProbe} import com.typesafe.config.ConfigFactory import no.nextgentel.oss.akkatools.aggregate.testAggregate.StateName._ import no.nextgentel.oss.akkatools.aggregate.testAggregate.{StateName, _} import no.nextgentel.oss.akkatools.testing.AggregateTesting import org.scalatest._ import org.slf4j.LoggerFactory import scala.util.Random object GeneralAggregateWithShardingTest { val port = 20000 + Random.nextInt(20000) } class GeneralAggregateWithShardingTest(_system:ActorSystem) extends TestKit(_system) with FunSuiteLike with Matchers with BeforeAndAfterAll with BeforeAndAfter { def this() = this(ActorSystem("test-actor-system", ConfigFactory.parseString( s"""akka.actor.provider = "akka.cluster.ClusterActorRefProvider" |akka.remote.enabled-transports = ["akka.remote.netty.tcp"] |akka.remote.netty.tcp.hostname="localhost" |akka.remote.netty.tcp.port=${GeneralAggregateWithShardingTest.port} |akka.cluster.seed-nodes = ["akka.tcp://test-actor-system@localhost:${GeneralAggregateWithShardingTest.port}"] """.stripMargin ).withFallback(ConfigFactory.load("application-test.conf")))) override def afterAll { TestKit.shutdownActorSystem(system) } val log = LoggerFactory.getLogger(getClass) private def generateId() = UUID.randomUUID().toString val seatIds = List("s1","id-used-in-Failed-in-onAfterValidationSuccess", "s2", "s3-This-id-is-going-to-be-discarded", "s4") trait TestEnv extends AggregateTesting[BookingState] { val id = generateId() val printShop = TestProbe() val cinema = TestProbe() val onSuccessDmForwardReceiver = TestProbe() val starter = new AggregateStarterSimple("booking", system).withAggregatePropsCreator { dmSelf => BookingAggregate.props(dmSelf, dmForwardAndConfirm(printShop.ref).path, dmForwardAndConfirm(cinema.ref).path, seatIds, dmForwardAndConfirm(onSuccessDmForwardReceiver.ref).path) } val main = starter.dispatcher starter.start() def assertState(correctState:BookingState): Unit = { assert(getState(id) == correctState) } } test("normal flow") { new TestEnv { // Make sure we start with empty state assertState(BookingState.empty()) val maxSeats = 2 val sender = TestProbe() // Open the booking println("1") sendDMBlocking(main, OpenBookingCmd(id, maxSeats), sender.ref) println("2") assertState(BookingState(OPEN, maxSeats, Set())) } } }
Example 6
Source File: GeneralAggregateBaseTest_handleSnapshotMessages.scala From akka-tools with MIT License | 5 votes |
package no.nextgentel.oss.akkatools.aggregate.aggregateTest_usingAggregateStateBase import java.util.UUID import akka.actor.{ActorPath, ActorSystem, Props} import akka.persistence.{DeleteMessagesFailure, DeleteMessagesSuccess, SaveSnapshotFailure, SaveSnapshotSuccess, SnapshotMetadata, SnapshotOffer} import akka.testkit.{TestKit, TestProbe} import com.typesafe.config.ConfigFactory import no.nextgentel.oss.akkatools.aggregate._ import no.nextgentel.oss.akkatools.testing.AggregateTesting import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FunSuiteLike, Matchers} import org.slf4j.LoggerFactory override def onSnapshotOffer(offer: SnapshotOffer): Unit = { state = offer.snapshot.asInstanceOf[StringState] } override def acceptSnapshotRequest(req: SaveSnapshotOfCurrentState): Boolean = { if (state == StringState("WAT")) { state = StringState("SAVED") true } else { state = StringState("WAT") //So it works second time false } } override def onSnapshotSuccess(success: SaveSnapshotSuccess): Unit = { state = StringState("SUCCESS_SNAP") } override def onSnapshotFailure(failure: SaveSnapshotFailure): Unit = { state = StringState("FAIL_SNAP") } override def onDeleteMessagesSuccess(success: DeleteMessagesSuccess): Unit = { state = StringState("SUCCESS_MSG") } override def onDeleteMessagesFailure(failure: DeleteMessagesFailure): Unit = { state = StringState("FAIL_MSG") } // Used as prefix/base when constructing the persistenceId to use - the unique ID is extracted runtime from actorPath which is construced by Sharding-coordinator override def persistenceIdBase(): String = "/x/" } case class StringEv(data: String) case class StringState(data:String) extends AggregateStateBase[StringEv, StringState] { override def transitionState(event: StringEv): StateTransition[StringEv, StringState] = StateTransition(StringState(event.data)) }
Example 7
Source File: ActorWithDMSupportTest.scala From akka-tools with MIT License | 5 votes |
package no.nextgentel.oss.akkatools.persistence import java.util.concurrent.TimeUnit import akka.actor.{Props, ActorSystem} import akka.testkit.{TestProbe, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, Matchers, FunSuiteLike} import scala.concurrent.duration.FiniteDuration class ActorWithDMSupportTest(_system:ActorSystem) extends TestKit(_system) with FunSuiteLike with Matchers with BeforeAndAfterAll with BeforeAndAfter { def this() = this(ActorSystem("ActorWithDMSupportTest", ConfigFactory.load("application-test.conf"))) test("success with dm") { val a = system.actorOf(Props(new TestActorWithDMSupport())) val s = TestProbe() // send raw s.send(a, "sendok") s.expectMsg("ok") // send via dm and withNewPayload val dm = DurableMessage(1L, "sendok", s.ref.path) s.send(a, dm) s.expectMsg(dm.withNewPayload("ok")) // send raw - do nothing s.send(a, "silent") // send silent - wait for configm s.send(a, DurableMessage(1L, "silent", s.ref.path)) s.expectMsg( DurableMessageReceived(1,None) ) // send noconfirm - with dm s.send(a, DurableMessage(1L, "no-confirm", s.ref.path)) s.expectNoMessage(FiniteDuration(500, TimeUnit.MILLISECONDS)) // send noconfirm - with dm s.send(a, DurableMessage(1L, "no-confirm-custom", s.ref.path)) s.expectNoMessage(FiniteDuration(500, TimeUnit.MILLISECONDS)) // send noconfirm - without dm s.send(a, "no-confirm") s.expectNoMessage(FiniteDuration(500, TimeUnit.MILLISECONDS)) // send noconfirm - without dm s.send(a, "no-confirm-custom") s.expectNoMessage(FiniteDuration(500, TimeUnit.MILLISECONDS)) } } class TestActorWithDMSupport extends ActorWithDMSupport { // All raw messages or payloads in DMs are passed to this function. override def receivePayload = { case "sendok" => send(sender.path, "ok") case "silent" => Unit case "no-confirm" => throw new LogWarningAndSkipDMConfirmException("something went wrong") case "no-confirm-custom" => throw new CustomLogWarningAndSkipDMConfirm() } } class CustomLogWarningAndSkipDMConfirm extends Exception("") with LogWarningAndSkipDMConfirm
Example 8
Source File: AkkaQuickstartSpec.scala From didactic-computing-machine with GNU Affero General Public License v3.0 | 5 votes |
//#full-example package com.lightbend.akka.sample import org.scalatest.{ BeforeAndAfterAll, FlatSpecLike, Matchers } import akka.actor.{ Actor, Props, ActorSystem } import akka.testkit.{ ImplicitSender, TestKit, TestActorRef, TestProbe } import scala.concurrent.duration._ import Greeter._ import Printer._ //#test-classes class AkkaQuickstartSpec(_system: ActorSystem) extends TestKit(_system) with Matchers with FlatSpecLike with BeforeAndAfterAll { //#test-classes def this() = this(ActorSystem("AkkaQuickstartSpec")) override def afterAll: Unit = { shutdown(system) } //#first-test //#specification-example "A Greeter Actor" should "pass on a greeting message when instructed to" in { //#specification-example val testProbe = TestProbe() val helloGreetingMessage = "hello" val helloGreeter = system.actorOf(Greeter.props(helloGreetingMessage, testProbe.ref)) val greetPerson = "Akka" helloGreeter ! WhoToGreet(greetPerson) helloGreeter ! Greet testProbe.expectMsg(500 millis, Greeting(s"$helloGreetingMessage, $greetPerson")) } //#first-test } //#full-example
Example 9
Source File: AmqpSubscriberPerfSpec.scala From reliable-http-client with Apache License 2.0 | 5 votes |
package rhttpc.transport.amqp import akka.Done import akka.actor.{Actor, ActorSystem, Props} import akka.http.scaladsl.Http import akka.http.scaladsl.model.{HttpRequest, HttpResponse} import akka.pattern._ import akka.stream.ActorMaterializer import akka.testkit.{TestKit, TestProbe} import dispatch.url import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Ignore} import rhttpc.transport.{Deserializer, InboundQueueData, OutboundQueueData, Serializer} import scala.concurrent.duration._ import scala.concurrent.{Await, Future} import scala.util.{Random, Try} @Ignore class AmqpSubscriberPerfSpec extends TestKit(ActorSystem("AmqpSubscriberPerfSpec")) with FlatSpecLike with BeforeAndAfterAll { import system.dispatcher implicit val materializer = ActorMaterializer() implicit def serializer[Msg] = new Serializer[Msg] { override def serialize(obj: Msg): String = obj.toString } implicit def deserializer[Msg] = new Deserializer[Msg] { override def deserialize(value: String): Try[Msg] = Try(value.asInstanceOf[Msg]) } val queueName = "request" val outboundQueueData = OutboundQueueData(queueName, autoDelete = true, durability = false) val inboundQueueData = InboundQueueData(queueName, batchSize = 10, parallelConsumers = 10, autoDelete = true, durability = false) val count = 100 private val interface = "localhost" private val port = 8081 def handle(request: HttpRequest) = { val delay = 5 + Random.nextInt(10) after(delay.seconds, system.scheduler)(Future.successful(HttpResponse())) } it should "have a good throughput" in { val bound = Await.result( Http().bindAndHandleAsync( handle, interface, port ), 5.seconds ) val http = dispatch.Http() // .configure(_.setMaxConnections(count) // .setExecutorService(Executors.newFixedThreadPool(count))) val connection = Await.result(AmqpConnectionFactory.connect(system), 5 seconds) val transport = AmqpTransport( connection = connection ) val publisher = transport.publisher[String](outboundQueueData) val probe = TestProbe() val actor = system.actorOf(Props(new Actor { override def receive: Receive = { case str: String => http(url(s"http://$interface:$port") OK identity).map(_ => Done).pipeTo(self)(sender()) case Done => probe.ref ! Done sender() ! Done } })) val subscriber = transport.subscriber[String](inboundQueueData, actor) subscriber.start() try { measureMeanThroughput(count) { (1 to count).foreach { _ => publisher.publish("x") } probe.receiveWhile(10 minutes, messages = count) { case a => a } } } finally { Await.result(subscriber.stop(), 5.seconds) connection.close(5 * 1000) Await.result(bound.unbind(), 5.seconds) } } def measureMeanThroughput(count: Int)(consume: => Unit) = { val before = System.currentTimeMillis() consume val msgsPerSecond = count / ((System.currentTimeMillis() - before).toDouble / 1000) println(s"Throughput was: $msgsPerSecond msgs/sec") } override protected def afterAll(): Unit = { shutdown() } }
Example 10
Source File: InMemTransportSpec.scala From reliable-http-client with Apache License 2.0 | 5 votes |
package rhttpc.transport.inmem import akka.actor.{ActorSystem, Status} import akka.testkit.{TestKit, TestProbe} import org.scalatest._ import rhttpc.transport.PubSubTransport import scala.concurrent.Await import scala.concurrent.duration._ class InMemTransportSpec extends TestKit(ActorSystem("InMemTransportSpec")) with fixture.FlatSpecLike with BeforeAndAfterAll { import rhttpc.transport.dumb._ val someQueueName = "fooQueue" val someMessage = "fooMessage" val someMessage2 = "fooMessage2" it should "delivery message to consumer subscribed before publishing" in { transport => val probe = TestProbe() val subscriber = transport.subscriber[String](someQueueName, probe.testActor) subscriber.start() val publisher = transport.publisher[String](someQueueName) publisher.publish(someMessage) probe.expectMsg(someMessage) probe.reply(Unit) } it should "delivery message to consumer subscribed after publishing" in { transport => val probe = TestProbe() val publisher = transport.publisher[String](someQueueName) val subscriber = transport.subscriber[String](someQueueName, probe.testActor) subscriber.start() publisher.publish(someMessage) probe.expectMsg(someMessage) probe.reply(Unit) } it should "delivery message to consumer started after publishing" in { transport => val probe = TestProbe() val publisher = transport.publisher[String](someQueueName) val subscriber = transport.subscriber[String](someQueueName, probe.testActor) publisher.publish(someMessage) subscriber.start() probe.expectMsg(someMessage) probe.reply(Unit) } it should "delivery message to multiple consumers" in { transport => val probe1 = TestProbe() val subscriber = transport.subscriber[String](someQueueName, probe1.testActor) subscriber.start() val probe2 = TestProbe() val subscriber2 = transport.subscriber[String](someQueueName, probe2.testActor) subscriber2.start() val publisher = transport.publisher[String](someQueueName) publisher.publish(someMessage) publisher.publish(someMessage2) probe1.expectMsg(someMessage) probe1.reply(Unit) probe2.expectMsg(someMessage2) probe2.reply(Unit) } it should "retry message if failure" in { transport => val probe = TestProbe() val subscriber = transport.subscriber[String](someQueueName, probe.testActor) subscriber.start() val publisher = transport.publisher[String](someQueueName) publisher.publish(someMessage) probe.expectMsg(someMessage) probe.reply(Status.Failure(new Exception("failure"))) probe.expectMsg(someMessage) probe.reply(Unit) } override type FixtureParam = PubSubTransport override protected def withFixture(test: OneArgTest): Outcome = { val transport = InMemTransport(retryDelay = 0.seconds) try { test(transport) } finally { Await.result(transport.stop(), InMemDefaults.stopTimeout) } } override protected def afterAll(): Unit = { shutdown() } }
Example 11
Source File: MessageDispatcherActorSpec.scala From reliable-http-client with Apache License 2.0 | 5 votes |
package rhttpc.client.subscription import java.util.UUID import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.scalatest._ import rhttpc.client.protocol.{Correlated, SuccessExchange} class MessageDispatcherActorSpec extends TestKit(ActorSystem("MessageDispatcherActorSpec")) with ImplicitSender with FlatSpecLike with Matchers { it should "ack after promise -> confirm -> reply -> consumed" in { val actor = system.actorOf(Props[MessageDispatcherActor]) val sub = SubscriptionOnResponse(UUID.randomUUID().toString) actor ! RegisterSubscriptionPromise(sub) val replyMock = TestProbe() actor ! ConfirmOrRegisterSubscription(sub, replyMock.ref) val ackProbe = TestProbe() ackProbe.send(actor, Correlated(SuccessExchange("fooReq", "foo"), sub.correlationId)) replyMock.expectMsg(MessageFromSubscription("foo", sub)) ackProbe.expectNoMsg() replyMock.reply("ok") ackProbe.expectMsg("ok") () } it should "ack after promise -> reply -> confirm -> consumed" in { val actor = system.actorOf(Props[MessageDispatcherActor]) val sub = SubscriptionOnResponse(UUID.randomUUID().toString) actor ! RegisterSubscriptionPromise(sub) val ackProbe = TestProbe() ackProbe.send(actor, Correlated(SuccessExchange("fooReq", "foo"), sub.correlationId)) val replyMock = TestProbe() actor ! ConfirmOrRegisterSubscription(sub, replyMock.ref) replyMock.expectMsg(MessageFromSubscription("foo", sub)) ackProbe.expectNoMsg() replyMock.reply("ok") ackProbe.expectMsg("ok") () } }
Example 12
Source File: RepositoryTest.scala From akka-http-slick-sample with MIT License | 5 votes |
package net.softler.data import java.util.UUID import akka.actor.ActorSystem import akka.testkit.TestKit import net.softler.data.model.User import net.softler.data.persistence.{H2, UserComponent} import org.scalatest._ import org.scalatest.concurrent.ScalaFutures import scala.concurrent.ExecutionContext import scala.concurrent.duration._ import scala.language.postfixOps class RepositoryTest extends TestKit(ActorSystem("test-system")) with FlatSpecLike with Matchers with ScalaFutures with UserComponent with H2 { implicit val ec: ExecutionContext = system.dispatcher val repo: UserRepository = new UserRepository private val testId = UUID.fromString("00000000-0000-0000-0000-000000000000") override implicit def patienceConfig: PatienceConfig = PatienceConfig(5 seconds) "The generic repository" should "handle a in memory database" in { whenReady(repo.all)(_.size shouldBe 3) } it should "retrieve a user by id" in { whenReady(repo.byId(testId)) { user => user.get.login shouldBe "tom" } } it should "update a single entity" in { val testEntity: User = repo.byId(testId).futureValue.get val result = repo.update(testEntity).futureValue result shouldBe 1 } it should "delete a single user by id" in { whenReady(repo.delete(testId)) { result => result shouldBe true } whenReady(repo.byId(testId)) { user => user shouldBe None } whenReady(repo.all)(_.size shouldBe 2) } }
Example 13
Source File: Step4_SecondaryPersistenceSpec.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.testkit.TestKit import akka.testkit.ImplicitSender import org.scalatest.BeforeAndAfterAll import org.scalatest.Matchers import org.scalatest.FunSuiteLike import akka.actor.ActorSystem import akka.testkit.TestProbe import scala.concurrent.duration._ import Arbiter._ import Persistence._ import org.scalactic.ConversionCheckedTripleEquals class Step4_SecondaryPersistenceSpec extends TestKit(ActorSystem("Step4SecondaryPersistenceSpec")) with FunSuiteLike with BeforeAndAfterAll with Matchers with ConversionCheckedTripleEquals with ImplicitSender with Tools { override def afterAll(): Unit = { system.shutdown() } test("case1: Secondary should not acknowledge snapshots until persisted") { import Replicator._ val arbiter = TestProbe() val persistence = TestProbe() val replicator = TestProbe() val secondary = system.actorOf(Replica.props(arbiter.ref, probeProps(persistence)), "case1-secondary") val client = session(secondary) arbiter.expectMsg(Join) arbiter.send(secondary, JoinedSecondary) client.get("k1") should ===(None) replicator.send(secondary, Snapshot("k1", Some("v1"), 0L)) val persistId = persistence.expectMsgPF() { case Persist("k1", Some("v1"), id) => id } withClue("secondary replica should already serve the received update while waiting for persistence: ") { client.get("k1") should ===(Some("v1")) } replicator.expectNoMsg(500.milliseconds) persistence.reply(Persisted("k1", persistId)) replicator.expectMsg(SnapshotAck("k1", 0L)) client.get("k1") should ===(Some("v1")) } test("case2: Secondary should retry persistence in every 100 milliseconds") { import Replicator._ val arbiter = TestProbe() val persistence = TestProbe() val replicator = TestProbe() val secondary = system.actorOf(Replica.props(arbiter.ref, probeProps(persistence)), "case2-secondary") val client = session(secondary) arbiter.expectMsg(Join) arbiter.send(secondary, JoinedSecondary) client.get("k1") should ===(None) replicator.send(secondary, Snapshot("k1", Some("v1"), 0L)) val persistId = persistence.expectMsgPF() { case Persist("k1", Some("v1"), id) => id } withClue("secondary replica should already serve the received update while waiting for persistence: ") { client.get("k1") should ===(Some("v1")) } // Persistence should be retried persistence.expectMsg(200.milliseconds, Persist("k1", Some("v1"), persistId)) persistence.expectMsg(200.milliseconds, Persist("k1", Some("v1"), persistId)) replicator.expectNoMsg(500.milliseconds) persistence.reply(Persisted("k1", persistId)) replicator.expectMsg(SnapshotAck("k1", 0L)) client.get("k1") should ===(Some("v1")) } }
Example 14
Source File: Tools.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.actor.ActorSystem import scala.concurrent.duration.FiniteDuration import akka.testkit.TestProbe import akka.actor.{ ActorRef, Actor } import org.scalatest.Matchers import org.scalatest.FunSuiteLike import akka.actor.Props import akka.testkit.TestKit import akka.testkit.ImplicitSender import scala.concurrent.duration._ object Tools { class TestRefWrappingActor(val probe: TestProbe) extends Actor { def receive = { case msg => probe.ref forward msg } } } trait Tools { this: TestKit with FunSuiteLike with Matchers with ImplicitSender => import Arbiter._ import Tools._ def probeProps(probe: TestProbe): Props = Props(classOf[TestRefWrappingActor], probe) class Session(val probe: TestProbe, val replica: ActorRef) { import Replica._ @volatile private var seq = 0L private def nextSeq: Long = { val next = seq seq += 1 next } @volatile private var referenceMap = Map.empty[String, String] def waitAck(s: Long): Unit = probe.expectMsg(OperationAck(s)) def waitFailed(s: Long): Unit = probe.expectMsg(OperationFailed(s)) def set(key: String, value: String): Long = { referenceMap += key -> value val s = nextSeq probe.send(replica, Insert(key, value, s)) s } def setAcked(key: String, value: String): Unit = waitAck(set(key, value)) def remove(key: String): Long = { referenceMap -= key val s = nextSeq probe.send(replica, Remove(key, s)) s } def removeAcked(key: String): Unit = waitAck(remove(key)) def getAndVerify(key: String): Unit = { val s = nextSeq probe.send(replica, Get(key, s)) probe.expectMsg(GetResult(key, referenceMap.get(key), s)) } def get(key: String): Option[String] = { val s = nextSeq probe.send(replica, Get(key, s)) probe.expectMsgType[GetResult].valueOption } def nothingHappens(duration: FiniteDuration): Unit = probe.expectNoMsg(duration) } def session(replica: ActorRef)(implicit system: ActorSystem) = new Session(TestProbe(), replica) }
Example 15
Source File: IntegrationSpec.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.actor.{ Actor, Props, ActorRef, ActorSystem } import akka.testkit.{ TestProbe, ImplicitSender, TestKit } import org.scalatest.{ BeforeAndAfterAll, FlatSpec, Matchers } import scala.concurrent.duration._ import org.scalatest.FunSuiteLike import org.scalactic.ConversionCheckedTripleEquals class IntegrationSpec(_system: ActorSystem) extends TestKit(_system) with FunSuiteLike with Matchers with BeforeAndAfterAll with ConversionCheckedTripleEquals with ImplicitSender with Tools { import Replica._ import Replicator._ import Arbiter._ def this() = this(ActorSystem("ReplicatorSpec")) override def afterAll: Unit = system.shutdown() }
Example 16
Source File: Step6_NewSecondarySpec.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.testkit.TestKit import akka.testkit.ImplicitSender import org.scalatest.BeforeAndAfterAll import org.scalatest.Matchers import org.scalatest.FunSuiteLike import akka.actor.ActorSystem import akka.testkit.TestProbe import Arbiter._ import Replicator._ import org.scalactic.ConversionCheckedTripleEquals class Step6_NewSecondarySpec extends TestKit(ActorSystem("Step6NewSecondarySpec")) with FunSuiteLike with BeforeAndAfterAll with Matchers with ConversionCheckedTripleEquals with ImplicitSender with Tools { override def afterAll(): Unit = { system.shutdown() } test("case1: Primary must start replication to new replicas") { val arbiter = TestProbe() val primary = system.actorOf(Replica.props(arbiter.ref, Persistence.props(flaky = false)), "case1-primary") val user = session(primary) val secondary = TestProbe() arbiter.expectMsg(Join) arbiter.send(primary, JoinedPrimary) user.setAcked("k1", "v1") arbiter.send(primary, Replicas(Set(primary, secondary.ref))) secondary.expectMsg(Snapshot("k1", Some("v1"), 0L)) secondary.reply(SnapshotAck("k1", 0L)) val ack1 = user.set("k1", "v2") secondary.expectMsg(Snapshot("k1", Some("v2"), 1L)) secondary.reply(SnapshotAck("k1", 1L)) user.waitAck(ack1) val ack2 = user.remove("k1") secondary.expectMsg(Snapshot("k1", None, 2L)) secondary.reply(SnapshotAck("k1", 2L)) user.waitAck(ack2) } test("case2: Primary must stop replication to removed replicas and stop Replicator") { val arbiter = TestProbe() val primary = system.actorOf(Replica.props(arbiter.ref, Persistence.props(flaky = false)), "case2-primary") val user = session(primary) val secondary = TestProbe() arbiter.expectMsg(Join) arbiter.send(primary, JoinedPrimary) arbiter.send(primary, Replicas(Set(primary, secondary.ref))) val ack1 = user.set("k1", "v1") secondary.expectMsg(Snapshot("k1", Some("v1"), 0L)) val replicator = secondary.lastSender secondary.reply(SnapshotAck("k1", 0L)) user.waitAck(ack1) watch(replicator) arbiter.send(primary, Replicas(Set(primary))) expectTerminated(replicator) } test("case3: Primary must stop replication to removed replicas and waive their outstanding acknowledgements") { val arbiter = TestProbe() val primary = system.actorOf(Replica.props(arbiter.ref, Persistence.props(flaky = false)), "case3-primary") val user = session(primary) val secondary = TestProbe() arbiter.expectMsg(Join) arbiter.send(primary, JoinedPrimary) arbiter.send(primary, Replicas(Set(primary, secondary.ref))) val ack1 = user.set("k1", "v1") secondary.expectMsg(Snapshot("k1", Some("v1"), 0L)) secondary.reply(SnapshotAck("k1", 0L)) user.waitAck(ack1) val ack2 = user.set("k1", "v2") secondary.expectMsg(Snapshot("k1", Some("v2"), 1L)) arbiter.send(primary, Replicas(Set(primary))) user.waitAck(ack2) } }
Example 17
Source File: Step1_PrimarySpec.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.testkit.TestKit import akka.actor.ActorSystem import org.scalatest.FunSuiteLike import org.scalatest.BeforeAndAfterAll import org.scalatest.Matchers import akka.testkit.ImplicitSender import akka.testkit.TestProbe import scala.concurrent.duration._ import kvstore.Persistence.{ Persisted, Persist } import kvstore.Replica.OperationFailed import kvstore.Replicator.{ Snapshot } import scala.util.Random import scala.util.control.NonFatal import org.scalactic.ConversionCheckedTripleEquals class Step1_PrimarySpec extends TestKit(ActorSystem("Step1PrimarySpec")) with FunSuiteLike with BeforeAndAfterAll with Matchers with ConversionCheckedTripleEquals with ImplicitSender with Tools { override def afterAll(): Unit = { system.shutdown() } import Arbiter._ test("case1: Primary (in isolation) should properly register itself to the provided Arbiter") { val arbiter = TestProbe() system.actorOf(Replica.props(arbiter.ref, Persistence.props(flaky = false)), "case1-primary") arbiter.expectMsg(Join) } test("case2: Primary (in isolation) should react properly to Insert, Remove, Get") { val arbiter = TestProbe() val primary = system.actorOf(Replica.props(arbiter.ref, Persistence.props(flaky = false)), "case2-primary") val client = session(primary) arbiter.expectMsg(Join) arbiter.send(primary, JoinedPrimary) client.getAndVerify("k1") client.setAcked("k1", "v1") client.getAndVerify("k1") client.getAndVerify("k2") client.setAcked("k2", "v2") client.getAndVerify("k2") client.removeAcked("k1") client.getAndVerify("k1") } }
Example 18
Source File: Step3_ReplicatorSpec.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.testkit.{ TestProbe, TestKit, ImplicitSender } import org.scalatest.BeforeAndAfterAll import org.scalatest.Matchers import org.scalatest.FunSuiteLike import akka.actor.ActorSystem import scala.concurrent.duration._ import kvstore.Arbiter.{ JoinedSecondary, Join } import kvstore.Persistence.{ Persisted, Persist } import kvstore.Replicator.{ SnapshotAck, Snapshot, Replicate } import org.scalactic.ConversionCheckedTripleEquals class Step3_ReplicatorSpec extends TestKit(ActorSystem("Step3ReplicatorSpec")) with FunSuiteLike with BeforeAndAfterAll with Matchers with ConversionCheckedTripleEquals with ImplicitSender with Tools { override def afterAll(): Unit = { system.shutdown() } test("case1: Replicator should send snapshots when asked to replicate") { val secondary = TestProbe() val replicator = system.actorOf(Replicator.props(secondary.ref), "case1-replicator") replicator ! Replicate("k1", Some("v1"), 0L) secondary.expectMsg(Snapshot("k1", Some("v1"), 0L)) secondary.ignoreMsg({ case Snapshot(_, _, 0L) => true }) secondary.reply(SnapshotAck("k1", 0L)) replicator ! Replicate("k1", Some("v2"), 1L) secondary.expectMsg(Snapshot("k1", Some("v2"), 1L)) secondary.ignoreMsg({ case Snapshot(_, _, 1L) => true }) secondary.reply(SnapshotAck("k1", 1L)) replicator ! Replicate("k2", Some("v1"), 2L) secondary.expectMsg(Snapshot("k2", Some("v1"), 2L)) secondary.ignoreMsg({ case Snapshot(_, _, 2L) => true }) secondary.reply(SnapshotAck("k2", 2L)) replicator ! Replicate("k1", None, 3L) secondary.expectMsg(Snapshot("k1", None, 3L)) secondary.reply(SnapshotAck("k1", 3L)) } test("case2: Replicator should retry until acknowledged by secondary") { val secondary = TestProbe() val replicator = system.actorOf(Replicator.props(secondary.ref), "case2-replicator") replicator ! Replicate("k1", Some("v1"), 0L) secondary.expectMsg(Snapshot("k1", Some("v1"), 0L)) secondary.expectMsg(300.milliseconds, Snapshot("k1", Some("v1"), 0L)) secondary.expectMsg(300.milliseconds, Snapshot("k1", Some("v1"), 0L)) secondary.reply(SnapshotAck("k1", 0L)) } }
Example 19
Source File: SidechainNodeViewHolderTest.scala From Sidechains-SDK with MIT License | 5 votes |
package com.horizen.actors import java.util.concurrent.TimeUnit import akka.actor.{ActorRef, ActorSystem} import akka.pattern.ask import akka.testkit.TestKit import akka.util.Timeout import com.horizen.SidechainNodeViewHolder.ReceivableMessages.GetDataFromCurrentSidechainNodeView import com.horizen.fixtures.SidechainNodeViewHolderFixture import com.horizen.node.SidechainNodeView import org.scalatest.{BeforeAndAfterAll, FunSuiteLike} import scala.concurrent._ import scala.concurrent.duration._ import org.scalatest._ import org.junit.runner.RunWith import org.scalatest.junit.JUnitRunner @RunWith(classOf[JUnitRunner]) class SidechainNodeViewHolderTest extends Suites( new SidechainNodeViewHolderTest1, new SidechainNodeViewHolderTest2 ) @RunWith(classOf[JUnitRunner]) class SidechainNodeViewHolderTest1 extends TestKit(ActorSystem("testsystem")) with FunSuiteLike with BeforeAndAfterAll with SidechainNodeViewHolderFixture { implicit val timeout = Timeout(5, TimeUnit.SECONDS) override def afterAll: Unit = { //info("Actor system is shutting down...") TestKit.shutdownActorSystem(system) } test ("Test1") { def f(v: SidechainNodeView) = v val sidechainNodeViewHolderRef: ActorRef = getSidechainNodeViewHolderRef val nodeView = (sidechainNodeViewHolderRef ? GetDataFromCurrentSidechainNodeView(f)) .mapTo[SidechainNodeView] assert(Await.result(nodeView, 5 seconds) != null) } test("Test2") { } } @RunWith(classOf[JUnitRunner]) class SidechainNodeViewHolderTest2 extends TestKit(ActorSystem("testSystem")) with FeatureSpecLike with BeforeAndAfterAll with Matchers with SidechainNodeViewHolderFixture { implicit val timeout = Timeout(5, TimeUnit.SECONDS) override def afterAll: Unit = { //info("Actor system is shutting down...") TestKit.shutdownActorSystem(system) } feature("Actor1") { scenario("Scenario 1"){ system should not be(null) def f(v: SidechainNodeView) = v val sidechainNodeViewHolderRef: ActorRef = getSidechainNodeViewHolderRef val nodeView = (sidechainNodeViewHolderRef ? GetDataFromCurrentSidechainNodeView(f)) .mapTo[SidechainNodeView] Await.result(nodeView, 5 seconds) should not be(null) } } }
Example 20
Source File: BaseSpec.scala From process with Apache License 2.0 | 5 votes |
package processframework import akka.actor.ActorSystem import org.scalatest._ import org.scalatest.concurrent.Eventually import akka.testkit.{ ImplicitSender, TestKit } abstract class BaseSpec extends TestKit(ActorSystem(getClass.getSimpleName.stripSuffix("$"))) with WordSpecLike with Suite with Matchers with BeforeAndAfterAll with BeforeAndAfterEach with ImplicitSender with Eventually { override def afterAll() { TestKit.shutdownActorSystem(system) } }
Example 21
Source File: ProcessTest.scala From process with Apache License 2.0 | 5 votes |
package processframework import java.lang import akka.actor.{ ActorContext, ActorRef, ActorSystem, Props } import akka.testkit.{ ImplicitSender, TestKit, TestProbe } import org.scalatest._ import org.scalatest.concurrent.Eventually import scala.concurrent.duration._ object ProcessTest { case object Start case object Response case class Command(i: Int) case object Completed extends Process.Event class MockStep(service: ActorRef, retryInt: Duration)(implicit val context: ActorContext) extends ProcessStep[Int] { override val retryInterval = retryInt def execute()(implicit process: akka.actor.ActorRef) = { state ⇒ service ! Command(state) } def receiveCommand = { case Response ⇒ Completed } def updateState = { case Completed ⇒ state ⇒ markDone(state + 1) } } class Process1(service: ActorRef, retryInterval: Duration) extends Process[Int] { import context.dispatcher var state = 0 val process = new MockStep(service, retryInterval) def receive = { case Start ⇒ process.run() } } } class ProcessTest extends BaseSpec { import ProcessTest._ "Process" should { "have a happy flow" in { val service = TestProbe() val process = system.actorOf(Props(new Process1(service.ref, Duration.Inf)), "Process1") process ! processframework.Process.GetState expectMsg(0) process ! Start service.expectMsg(Command(0)) service.reply(Response) eventually { process ! processframework.Process.GetState expectMsg(1) } process ! Start expectNoMsg(250 millis) process ! processframework.Process.GetState expectMsg(1) } "does not retry by default" in { val service = TestProbe() val process = system.actorOf(Props(new Process1(service.ref, Duration.Inf)), "Process2") process ! processframework.Process.GetState expectMsg(0) process ! Start service.expectMsg(Command(0)) expectNoMsg() } "retries execution until succeeded" in { val service = TestProbe() val process = system.actorOf(Props(new Process1(service.ref, 150 millis)), "Process3") process ! processframework.Process.GetState expectMsg(0) process ! Start service.expectMsg(Command(0)) service.expectMsg(1000.millis, Command(0)) service.expectMsg(1000.millis, Command(0)) service.reply(Response) expectNoMsg() } } }
Example 22
Source File: ProcessStepTestSupport.scala From process with Apache License 2.0 | 5 votes |
package processframework import akka.pattern.ask import akka.actor.{ ActorRef, ActorContext, Actor, Props } import akka.util.Timeout import scala.concurrent.duration._ import scala.concurrent.Await import scala.reflect.ClassTag import akka.testkit.{ TestProbe, TestKit } import org.scalatest.BeforeAndAfterEach object ProcessStepTestSupport { case object GetStep case object ACommand case object AnEvent extends Process.Event } trait ProcessStepTestSupport[S, PS <: ProcessStep[S]] { this: TestKit with BeforeAndAfterEach ⇒ implicit val timeout: Timeout = 1 second var testProbe: TestProbe = null var processActor: ActorRef = null override protected def beforeEach(): Unit = { testProbe = createTestProbe() processActor = createProcessActor() } def createTestProbe(): TestProbe def createProcessStep(executeProbe: TestProbe)(implicit context: ActorContext): PS def createProcessActor() = system.actorOf(Props(new Actor { val step = createProcessStep(testProbe) def receive = { case msg if sender() == step ⇒ testActor forward msg case ProcessStepTestSupport.GetStep ⇒ sender() ! step case e: Process.Event ⇒ testActor ! e } })) def processStep()(implicit classTag: ClassTag[PS]): PS = Await.result[PS]((processActor ? ProcessStepTestSupport.GetStep).mapTo[PS], 2 seconds) }
Example 23
Source File: LoggerSpec.scala From wookiee with Apache License 2.0 | 5 votes |
package com.webtrends.harness.logging import akka.actor.ActorSystem import akka.testkit.{TestKit, TestProbe} import ch.qos.logback.classic.Level import com.webtrends.harness.TestKitSpecificationWithJUnit import org.slf4j.LoggerFactory class LoggerSpec extends TestKitSpecificationWithJUnit(ActorSystem("harness")) with LoggingAdapter { val probe = new TestProbe(system) val appender = setupAppender() sequential "logging" should { "allow for logging that is received by a mediator actor using Scala string interpolation" in { Logger.registerMediator(probe.ref) val logger = Logger("test") val x = 0 logger.trace(s"testing ${x}123...") val msg = Trace(LoggerFactory getLogger "test", "testing 0123...", None, None, Nil, None) Logger.unregisterMediator(probe.ref) probe.expectMsgClass(classOf[Trace]) must be equalTo msg } "allow for logging that is received by a mediator actor using Java string interpolation" in { Logger.registerMediator(probe.ref) val logger = Logger("test") logger.debug("testing {}123...", 0) val msg = Debug(LoggerFactory getLogger "test", "testing {}123...", None, None, Seq(0), None) Logger.unregisterMediator(probe.ref) probe.expectMsgClass(classOf[Debug]) must be equalTo msg } "allow for logging that is handle directly by the underlying logging framework using Scala string interpolation" in { val logger = Logger("test") val x = 0 logger.info(s"testing ${x}123...") appender.lastMessage.get must be equalTo "testing 0123..." } "allow for logging that is handle directly by the underlying logging framework using Java string interpolation" in { val logger = Logger("test") logger.warn("testing {}123...", 0) appender.lastMessage.get must be equalTo "testing 0123..." } "allow for logging that is handle directly by the underlying logging framework using Scala string interpolation and handles a Throwable" in { val logger = Logger("test") logger.error("testing {}123...", 0) appender.lastMessage.get must be equalTo "testing 0123..." } "don't log if try succeeds" in { val logger = Logger("test") logger.error("testing {}123...", 0) tryAndLogError({ true }) appender.lastMessage.get must be equalTo "testing 0123..." } "do log if try fails" in { val logger = Logger("test") logger.error("testing {}123...", 0) tryAndLogError({ 5 / 0 }) appender.lastMessage.get must be equalTo "/ by zero" } } step { TestKit.shutdownActorSystem(system) } private def setupAppender(): TestingAppender = { val root = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME).asInstanceOf[ch.qos.logback.classic.Logger] root.setLevel(Level.ALL) val appender = new TestingAppender() appender.start() root.addAppender(appender) appender } }
Example 24
Source File: LoggingActorSpec.scala From wookiee with Apache License 2.0 | 5 votes |
package com.webtrends.harness.logging import akka.actor.{ActorSystem, Props} import akka.event.Logging.{InitializeLogger, LoggerInitialized} import akka.testkit.{TestKit, TestProbe} import com.typesafe.config.ConfigFactory import com.webtrends.harness.TestKitSpecificationWithJUnit class LoggingActorSpec extends TestKitSpecificationWithJUnit(ActorSystem("test", ConfigFactory.parseString( """logging.use-actor=off"""))) { val logger = system.actorOf(Props[LoggingActor]) "Logging" should { "test logging initialization" in { val probe = TestProbe() probe.send(logger, InitializeLogger(null)) LoggerInitialized must beEqualTo(probe.expectMsg(LoggerInitialized)) } } step { TestKit.shutdownActorSystem(system) } }
Example 25
Source File: ServiceSpec.scala From wookiee with Apache License 2.0 | 5 votes |
package com.webtrends.harness import akka.actor.ActorSystem import akka.testkit.{TestActorRef, TestKit, TestProbe} import com.webtrends.harness.health.{ComponentState, HealthComponent} import com.webtrends.harness.service.messages._ import com.webtrends.harness.service.meta.ServiceMetaDetails import org.specs2.mutable.SpecificationLike case class TestClass(val name: String, val value: Int) class ServiceSpec extends TestKit(ActorSystem("harness")) with SpecificationLike { val act = TestActorRef(new TestService) //val httpAct = TestActorRef(new TestHttpService) "services " should { " be able to be loaded and pinged" in { val probe = TestProbe() probe.send(act, Ping) Pong must beEqualTo(probe.expectMsg(Pong)) } " be able to be loaded and sent a ready message" in { val probe = TestProbe() probe.send(act, Ready) Ready must beEqualTo(probe.expectMsg(Ready)) } " be able to be loaded and checked" in { val probe = TestProbe() probe.send(act, CheckHealth) val comp = HealthComponent("testservice", ComponentState.NORMAL, "test") comp.addComponent(HealthComponent("childcomponent", ComponentState.DEGRADED, "test")) comp must beEqualTo(probe.expectMsg(comp)) } //todo only HttpService should be able to do this } step { TestKit.shutdownActorSystem(system) } }
Example 26
Source File: InternalHttpSpec.scala From wookiee with Apache License 2.0 | 5 votes |
package com.webtrends.harness.http import java.net.{HttpURLConnection, URL} import java.util.concurrent.TimeUnit import akka.actor.{Props, ActorSystem} import akka.testkit.TestKit import akka.util.Timeout import com.webtrends.harness.TestKitSpecificationWithJUnit import com.webtrends.harness.service.messages.CheckHealth import scala.concurrent.Await import akka.pattern.ask import scala.concurrent.duration.FiniteDuration class InternalHttpSpec extends TestKitSpecificationWithJUnit(ActorSystem("test")) with InternalHttpClient { val port = 8123 val path = "http://127.0.0.1:" + port + "/" val httpActor = system.actorOf(Props(classOf[SimpleHttpServer], port)) // We need to make sure the httpActor has started up before trying to connect. implicit val timeout = Timeout(FiniteDuration(5, TimeUnit.SECONDS)) Await.result(httpActor ? CheckHealth, timeout.duration) "Test handlers" should { "handle the get path /ping" in { val url = new URL(path + "ping") val conn = url.openConnection().asInstanceOf[HttpURLConnection] val resp = getResponseContent(conn) resp.status mustEqual "200" resp.content.length must be > 0 resp.content.substring(0, 5) mustEqual "pong:" } } step { TestKit.shutdownActorSystem(system) } }
Example 27
Source File: ActorWaitSpec.scala From wookiee with Apache License 2.0 | 5 votes |
package com.webtrends.harness import java.util.concurrent.TimeUnit import akka.actor.{Actor, ActorSystem, PoisonPill, Props} import akka.pattern.ask import akka.testkit.TestKit import akka.util.Timeout import com.webtrends.harness.utils.ActorWaitHelper import org.specs2.mutable.SpecificationLike import scala.concurrent.Await import scala.concurrent.duration.Duration class WaitedOnActor extends Actor with ActorWaitHelper { def receive: Receive = { case "message" => sender ! "waitedResponse" } } class WaitActor extends Actor with ActorWaitHelper { implicit val timeout = Timeout(5000, TimeUnit.MILLISECONDS) val waited = awaitActor(Props[WaitedOnActor]) def receive: Receive = { case "message" => sender ! "response" case "waited" => sender ! Await.result((waited ? "message").mapTo[String], Duration(5, "seconds")) } } class ActorWaitSpec extends TestKit(ActorSystem("wait-spec")) with SpecificationLike { implicit val timeout = Timeout(5000, TimeUnit.MILLISECONDS) val waitActor = ActorWaitHelper.awaitActor(Props[WaitActor], system) sequential "ActorWaitSpec" should { "await the WaitActor successfully " in { Await.result((waitActor ? "message").mapTo[String], Duration(5, "seconds")) must beEqualTo("response") } "the WaitActor's awaited actor must have come up " in { Await.result((waitActor ? "waited").mapTo[String], Duration(5, "seconds")) must beEqualTo("waitedResponse") } } step { waitActor ! PoisonPill } }
Example 28
Source File: IngestorsEndpointSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.ingest.http import akka.actor.Actor import akka.http.scaladsl.testkit.ScalatestRouteTest import akka.testkit.{TestActorRef, TestKit, TestProbe} import hydra.common.util.ActorUtils import hydra.ingest.IngestorInfo import hydra.ingest.services.IngestorRegistry.{FindAll, FindByName, LookupResult} import org.joda.time.DateTime import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike import scala.concurrent.duration._ class IngestorsEndpointSpec extends Matchers with AnyWordSpecLike with ScalatestRouteTest with HydraIngestJsonSupport { val ingestorsRoute = new IngestorRegistryEndpoint().route override def afterAll = { super.afterAll() TestKit.shutdownActorSystem( system, verifySystemShutdown = true, duration = 10 seconds ) } val probe = TestProbe() val ingestorInfo = IngestorInfo( ActorUtils.actorName(probe.ref), "test", probe.ref.path, DateTime.now ) val registry = TestActorRef( new Actor { override def receive = { case FindByName("tester") => sender ! LookupResult(Seq(ingestorInfo)) case FindAll => sender ! LookupResult(Seq(ingestorInfo)) } }, "ingestor_registry" ).underlyingActor "The ingestors endpoint" should { "returns all ingestors" in { Get("/ingestors") ~> ingestorsRoute ~> check { val r = responseAs[Seq[IngestorInfo]] r.size shouldBe 1 r(0).path shouldBe ingestorInfo.path r(0).group shouldBe ingestorInfo.group r(0).path shouldBe ingestorInfo.path r(0).registeredAt shouldBe ingestorInfo.registeredAt.withMillisOfSecond( 0 ) } } } }
Example 29
Source File: IngestorRegistrarSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.ingest.services import java.util.concurrent.TimeUnit import akka.actor.{ActorSystem, Props} import akka.pattern.ask import akka.testkit.{ImplicitSender, TestKit} import akka.util.Timeout import hydra.common.util.ActorUtils import hydra.ingest.services.IngestorRegistrar.UnregisterAll import hydra.ingest.services.IngestorRegistry.{ FindAll, FindByName, LookupResult } import hydra.ingest.test.TestIngestor import org.scalatest.concurrent.{Eventually, ScalaFutures} import org.scalatest.time.{Seconds, Span} import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ class IngestorRegistrarSpec extends TestKit(ActorSystem("IngestorRegistrarSpec")) with Matchers with AnyFunSpecLike with ImplicitSender with ScalaFutures with BeforeAndAfterAll with Eventually { override def afterAll = TestKit.shutdownActorSystem(system, verifySystemShutdown = true) implicit override val patienceConfig = PatienceConfig(timeout = Span(10, Seconds), interval = Span(1, Seconds)) val registry = system.actorOf(Props[IngestorRegistry], "ingestor_registry") val act = system.actorOf(Props[IngestorRegistrar]) implicit val timeout = Timeout(3, TimeUnit.SECONDS) describe("The ingestor registrar actor") { it("registers from classpath on bootstrap") { eventually { whenReady( (registry ? FindByName(ActorUtils.actorName(classOf[TestIngestor]))) .mapTo[LookupResult] ) { i => i.ingestors.size shouldBe 1 i.ingestors(0).name shouldBe ActorUtils.actorName( classOf[TestIngestor] ) } } } it("unregisters") { act ! UnregisterAll eventually { whenReady((registry ? FindAll).mapTo[LookupResult]) { i => i.ingestors.size shouldBe 0 } } } } }
Example 30
Source File: RequestFactoriesSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.ingest.bootstrap import akka.actor.ActorSystem import akka.http.scaladsl.model.HttpRequest import akka.stream.ActorMaterializer import akka.testkit.TestKit import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ class RequestFactoriesSpec extends TestKit(ActorSystem("RequestFactoriesSpec")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll with ScalaFutures { override def afterAll = TestKit.shutdownActorSystem( system, verifySystemShutdown = true, duration = 10.seconds ) import RequestFactories._ describe("The RequestFactories") { it("build a Hydra request from an HTTP request") { val hr = HttpRequest(entity = "test") val hydraReq = createRequest("1", hr) whenReady(hydraReq) { r => r.payload shouldBe "test" } } } }
Example 31
Source File: HydraIngestorRegistrySpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.ingest.bootstrap import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import hydra.common.util.ActorUtils import hydra.core.bootstrap.ReflectionsWrapper import hydra.ingest.IngestorInfo import hydra.ingest.services.IngestorRegistry import hydra.ingest.services.IngestorRegistry.RegisterWithClass import hydra.ingest.test.TestIngestor import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ class HydraIngestorRegistrySpec extends TestKit(ActorSystem("HydraIngestorRegistrySpec")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll with ImplicitSender with ScalaFutures { override def afterAll = TestKit.shutdownActorSystem( system, verifySystemShutdown = true, duration = 10.seconds ) val testRegistry = system.actorOf(Props[IngestorRegistry], "ingestor_registry") val cfg = ConfigFactory.parseString( "ingest.ingestor-registry.path=/user/ingestor_registry" ) val registry = HydraIngestorRegistryClient(cfg) implicit val actorRefFactory = system ReflectionsWrapper.rescan() registry.registry ! RegisterWithClass(classOf[TestIngestor], "global") expectMsgType[IngestorInfo] describe("The Ingestor Registry") { it("uses the default registry if no config") { val path = HydraIngestorRegistryClient.registryPath(ConfigFactory.empty()) path shouldBe s"/user/service/${ActorUtils.actorName(classOf[IngestorRegistry])}" } it("looks up an ingestor") { implicit val timeout = akka.util.Timeout(10.seconds) whenReady(registry.lookupIngestor("test_ingestor")) { i => i.ingestors.size shouldBe 1 i.ingestors(0).name shouldBe "test_ingestor" i.ingestors(0).path shouldBe testRegistry.path / "test_ingestor" } } } }
Example 32
Source File: RabbitIngestorSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.rabbit import akka.actor.{ActorSystem, Props} import akka.testkit.TestActors.ForwardActor import akka.testkit.{ImplicitSender, TestKit, TestProbe} import hydra.core.ingest.HydraRequest import hydra.core.protocol._ import hydra.core.transport.{AckStrategy, HydraRecord} import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ class RabbitIngestorSpec extends TestKit(ActorSystem("rabbit-ingestor-spec")) with Matchers with AnyFunSpecLike with ImplicitSender with BeforeAndAfterAll { val ingestor = system.actorOf(Props[RabbitIngestor]) val probe = TestProbe() val rabbitTransport = system.actorOf(Props(new ForwardActor(probe.ref)), "rabbit_transport") override def afterAll = TestKit.shutdownActorSystem(system, verifySystemShutdown = true) describe("When using the rabbit ingestor") { it("Joins if exchange provided") { val request = HydraRequest( "123", "{'name': 'test'}", None, Map(RabbitRecord.HYDRA_RABBIT_EXCHANGE -> "test.exchange") ) ingestor ! Publish(request) expectMsg(10.seconds, Join) } it("Joins if queue provided") { val request = HydraRequest( "123", "{'name': 'test'}", None, Map(RabbitRecord.HYDRA_RABBIT_QUEUE -> "test.queue") ) ingestor ! Publish(request) expectMsg(10.seconds, Join) } it("Ignores") { val request = HydraRequest("123", "test string") ingestor ! Publish(request) expectMsg(10.seconds, Ignore) } it("transports") { ingestor ! Ingest( TestRecord("test", "test", "", AckStrategy.NoAck), AckStrategy.NoAck ) probe.expectMsg( Produce( TestRecord("test", "test", "", AckStrategy.NoAck), self, AckStrategy.NoAck ) ) } } } case class TestRecord( destination: String, payload: String, key: String, ackStrategy: AckStrategy ) extends HydraRecord[String, String]
Example 33
Source File: KafkaConsumerProxySpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.kafka.consumer import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit} import hydra.kafka.consumer.KafkaConsumerProxy._ import net.manub.embeddedkafka.{EmbeddedKafka, EmbeddedKafkaConfig} import org.apache.kafka.common.TopicPartition import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ class KafkaConsumerProxySpec extends TestKit(ActorSystem("test")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll with ImplicitSender { implicit val config = EmbeddedKafkaConfig(kafkaPort = 8092, zooKeeperPort = 3181) override def beforeAll() = { super.beforeAll() EmbeddedKafka.start() EmbeddedKafka.createCustomTopic("test-consumer1") EmbeddedKafka.createCustomTopic("test-consumer2") } override def afterAll() = { super.afterAll() EmbeddedKafka.stop() TestKit.shutdownActorSystem(system, verifySystemShutdown = true) } lazy val kafkaProxy = system.actorOf(Props[KafkaConsumerProxy]) describe("When using KafkaConsumerProxy") { it("gets latest offsets for a topic") { kafkaProxy ! GetLatestOffsets("test-consumer1") expectMsg( 10.seconds, LatestOffsetsResponse( "test-consumer1", Map(new TopicPartition("test-consumer1", 0) -> 0L) ) ) } it("lists topics") { kafkaProxy ! ListTopics expectMsgPF(10.seconds) { case ListTopicsResponse(topics) => topics.keys should contain allOf ("test-consumer1", "test-consumer2") } } it("gets partition info") { kafkaProxy ! GetPartitionInfo("test-consumer2") expectMsgPF(10.seconds) { case PartitionInfoResponse(topic, response) => topic shouldBe "test-consumer2" response.map(p => p.partition()) shouldBe Seq(0) } } it("handles errors") { kafkaProxy ! GetPartitionInfo("test-consumer-unknown") expectMsgPF(10.seconds) { case PartitionInfoResponse(topic, response) => response(0).leader().idString shouldBe "0" topic should startWith("test-consumer-unknown") } } } }
Example 34
Source File: KafkaMetricsSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.kafka.transport import akka.actor.ActorSystem import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import hydra.core.transport.AckStrategy import hydra.kafka.producer.KafkaRecordMetadata import net.manub.embeddedkafka.{EmbeddedKafka, EmbeddedKafkaConfig} import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import spray.json.DefaultJsonProtocol class KafkaMetricsSpec extends TestKit(ActorSystem("hydra")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll with DefaultJsonProtocol { import KafkaRecordMetadata._ implicit val config = EmbeddedKafkaConfig( kafkaPort = 8092, zooKeeperPort = 3181, customBrokerProperties = Map( "auto.create.topics.enable" -> "false", "offsets.topic.replication.factor" -> "1" ) ) override def afterAll() = { super.afterAll() EmbeddedKafka.stop() TestKit.shutdownActorSystem(system, verifySystemShutdown = true) } override def beforeAll() = { super.beforeAll() EmbeddedKafka.start() EmbeddedKafka.createCustomTopic("metrics_topic") } describe("When using the KafkaMetrics object") { it("uses the NoOpMetrics") { KafkaMetrics(ConfigFactory.empty()) shouldBe NoOpMetrics KafkaMetrics( ConfigFactory.parseString("transports.kafka.metrics.enabled=false") ) shouldBe NoOpMetrics } it("uses the PublishMetrics") { import spray.json._ val cfg = ConfigFactory.parseString(s""" | transports.kafka.metrics.topic = metrics_topic | transports.kafka.metrics.enabled=true""".stripMargin) val pm = KafkaMetrics(cfg) pm shouldBe a[PublishMetrics] val kmd = KafkaRecordMetadata(1, 1, "topic", 1, 1, AckStrategy.NoAck) pm.saveMetrics(kmd) EmbeddedKafka .consumeFirstStringMessageFrom("metrics_topic") .parseJson shouldBe kmd.toJson } } }
Example 35
Source File: LoggingAdapterSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.common.logging import akka.actor.{Actor, ActorSystem} import akka.testkit.{TestActorRef, TestKit, TestProbe} import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll class LoggingAdapterSpec extends TestKit(ActorSystem("test")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll { override def afterAll = TestKit.shutdownActorSystem(system) describe("The logging adapter") { it("allows an actor to use the logger") { val act = TestActorRef(new Actor with ActorLoggingAdapter { override def receive = { case _ => log.info("got it"); sender ! "got it" } }, "logger-test") act.underlyingActor.log.getName shouldBe "akka.testkit.TestActorRef" // Send a message and make sure we get a response back val probe = TestProbe() probe.send(act, "test") probe.expectMsgType[String] shouldBe "got it" } } }
Example 36
Source File: ActorConfigSupportSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.common.config import akka.actor.ActorSystem import akka.testkit.{TestActorRef, TestKit} import hydra.common.testing.DummyActor import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll class ActorConfigSupportSpec extends TestKit(ActorSystem("test")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll with ConfigSupport { val dummy = TestActorRef[DummyActor] override def afterAll = TestKit.shutdownActorSystem(system) describe("When mixing the trait in an actor") { it("has the correct actor name") { dummy.underlyingActor.thisActorName shouldBe "dummy_actor" } it("has the correct actor config") { dummy.underlyingActor.actorConfig shouldBe rootConfig.getConfig( "hydraTest.actors.dummy_actor" ) } } }
Example 37
Source File: TransportOpsSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.core.ingest import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.TestActors.ForwardActor import akka.testkit.{ImplicitSender, TestKit, TestProbe} import com.pluralsight.hydra.reflect.DoNotScan import hydra.core.akka.ActorInitializationException import hydra.core.protocol.{IngestorError, Produce} import hydra.core.test.TestRecordFactory import hydra.core.transport.AckStrategy.NoAck import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.Await import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ class TransportOpsSpec extends TestKit(ActorSystem("test")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll with ImplicitSender with ScalaFutures { override def afterAll() = TestKit.shutdownActorSystem(system) val supervisor = TestProbe() val tm = TestProbe() val transport = system.actorOf(Props(new ForwardActor(tm.ref)), "test-transport") describe("TransportOps") { it("looks up a transport") { val t = system.actorOf(Props(classOf[TestTransportIngestor], supervisor.ref)) t ! "hello" expectMsg("hi!") } it("won't initialize if transport can't be found") { val t = system.actorOf(Props[TestTransportIngestorError]) t ! "hello" expectNoMessage() } it("transports a record") { val req = HydraRequest("123", "test-produce") val t = system.actorOf(Props(classOf[TestTransportIngestor], supervisor.ref)) t ! req whenReady(TestRecordFactory.build(req))(r => tm.expectMsg(Produce(r, self, NoAck)) ) } } } @DoNotScan class TestTransportIngestor(supervisor: ActorRef) extends Ingestor with TransportOps { override val recordFactory = TestRecordFactory override def initTimeout = 500 millis ingest { case "hello" => sender ! "hi!" case req: HydraRequest => val record = Await.result(TestRecordFactory.build(req), 3.seconds) transport(record, NoAck) } override def transportName = "test-transport" } class TestTransportIngestorError extends Ingestor with TransportOps { override val recordFactory = TestRecordFactory override def transportName = "test-transport-unknown" }
Example 38
Source File: TransportCallbackSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.core.transport import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit, TestProbe} import hydra.core.protocol.{RecordNotProduced, RecordProduced} import hydra.core.test.{TestRecord, TestRecordMetadata} import hydra.core.transport.Transport.{Confirm, TransportError} import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ class TransportCallbackSpec extends TestKit(ActorSystem("test")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll with ImplicitSender { private val ingestor = TestProbe() private val supervisor = TestProbe() override def afterAll() { super.afterAll() TestKit.shutdownActorSystem(system, verifySystemShutdown = true) } describe("Transports Acks") { it("handles empty callbacks") { NoCallback.onCompletion( -1, None, Some(new IllegalArgumentException("test")) ) ingestor.expectNoMessage(3 seconds) supervisor.expectNoMessage(3 seconds) } it("handles simple/transport only callbacks") { val probe = TestProbe() new TransportSupervisorCallback(probe.ref) .onCompletion(-11, None, Some(new IllegalArgumentException("test"))) ingestor.expectNoMessage(3 seconds) supervisor.expectNoMessage(3 seconds) probe.expectMsg(TransportError(-11)) new TransportSupervisorCallback(probe.ref).onCompletion( -11, Some(TestRecordMetadata(1, 0, "", AckStrategy.NoAck)), None ) ingestor.expectNoMessage(3 seconds) supervisor.expectNoMessage(3 seconds) probe.expectMsg(Confirm(-11)) } it("handles ingestor callbacks") { val rec = TestRecord("OK", "1", "test", AckStrategy.NoAck) val transport = TestProbe() val cb = new IngestorCallback[String, String]( rec, ingestor.ref, supervisor.ref, transport.ref ) cb.onCompletion( 1, Some(TestRecordMetadata(1, 0, "", AckStrategy.NoAck)), None ) ingestor.expectMsgPF() { case RecordProduced(md, sup) => sup shouldBe supervisor.ref md shouldBe a[TestRecordMetadata] } transport.expectMsg(Confirm(1)) cb.onCompletion(1, None, Some(new IllegalArgumentException("test"))) ingestor.expectMsgPF() { case RecordNotProduced(r, e, s) => r shouldBe rec e.getMessage shouldBe "test" s shouldBe supervisor.ref } transport.expectMsg(TransportError(1)) } } }
Example 39
Source File: ComposeReceiveSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.core.akka import akka.actor.{Actor, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit} import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.should.Matchers import org.scalatest.flatspec.AnyFlatSpecLike class ComposeReceiveSpec extends TestKit(ActorSystem("test")) with Matchers with AnyFlatSpecLike with BeforeAndAfterAll with ImplicitSender { override def afterAll = TestKit.shutdownActorSystem(system, verifySystemShutdown = true) "The ComposingReceiveTrait" should "compose" in { system.actorOf(Props[TestBaseActor]) ! "foo" expectMsg("bar") system.actorOf(Props[TestComposeActor]) ! "foo" expectMsg("new-bar") } } trait TestBase extends Actor with ComposingReceive { override def baseReceive = { case "foo" => sender ! "bar" } } class TestBaseActor extends TestBase { compose(Actor.emptyBehavior) } class TestComposeActor extends TestBase { compose { case "foo" => sender ! "new-bar" } }
Example 40
Source File: DurableEventWriterIntegrationSpec.scala From eventuate with Apache License 2.0 | 5 votes |
package com.rbmhtechnology.eventuate.adapter.stream import akka.actor._ import akka.stream._ import akka.stream.scaladsl._ import akka.stream.testkit.scaladsl._ import akka.testkit.TestKit import com.rbmhtechnology.eventuate._ import com.rbmhtechnology.eventuate.utilities._ import org.scalatest._ import scala.collection.immutable.Seq class DurableEventWriterIntegrationSpec extends TestKit(ActorSystem("test")) with WordSpecLike with Matchers with SingleLocationSpecLeveldb { implicit val materializer: Materializer = ActorMaterializer() val SrcEmitterId = "src-emitter" val SrcLogId = "src-log" val WriterId = "writer" "An emission writer" must { "write a DurableEvent stream to a log (with an emission-write strategy) and continue the stream with the logged events" in { val writerId = "w1" val (src, snk) = TestSource.probe[DurableEvent] .via(DurableEventWriter.emissionWriter(WriterId, log)) .toMat(TestSink.probe[DurableEvent])(Keep.both) .run() val expected = Seq( ("a", WriterId, logId, logId, 1L, VectorTime(logId -> 1L)), ("b", WriterId, logId, logId, 2L, VectorTime(logId -> 2L)), ("c", WriterId, logId, logId, 3L, VectorTime(logId -> 3L))) def extract(e: DurableEvent) = (e.payload, e.emitterId, e.processId, e.localLogId, e.localSequenceNr, e.vectorTimestamp) snk.request(3) src.sendNext(DurableEvent("a")) src.sendNext(DurableEvent("b")) src.sendNext(DurableEvent("c")) snk.expectNextN(3).map(extract) should be(expected) snk.cancel() Source.fromGraph(DurableEventSource(log)).map(extract).take(3).toMat(Sink.seq)(Keep.right).run().await should be(expected) } } "A replication writer" must { "write a Seq[DurableEvent] stream to a log (with a replication-write strategy) and continue the stream with the logged events" in { val writerId = "w2" val (src, snk) = TestSource.probe[Seq[DurableEvent]] .via(DurableEventWriter.replicationWriter(WriterId, log)) .toMat(TestSink.probe[DurableEvent])(Keep.both) .run() val expected = Seq( ("a", WriterId, logId, logId, 1L, VectorTime(SrcLogId -> 11L, logId -> 1L)), ("b", WriterId, logId, logId, 2L, VectorTime(SrcLogId -> 12L, logId -> 2L)), ("c", WriterId, logId, logId, 3L, VectorTime(SrcLogId -> 13L, logId -> 3L))) def extract(e: DurableEvent) = (e.payload, e.emitterId, e.processId, e.localLogId, e.localSequenceNr, e.vectorTimestamp) def durableEvent(payload: String, sequenceNr: Long): DurableEvent = DurableEvent(payload, SrcEmitterId, processId = SrcLogId, localLogId = SrcLogId, localSequenceNr = sequenceNr, vectorTimestamp = VectorTime(SrcLogId -> sequenceNr)) snk.request(3) src.sendNext(Seq(durableEvent("a", 11))) src.sendNext(Seq(durableEvent("b", 12), durableEvent("c", 13))) snk.expectNextN(3).map(extract) should be(expected) snk.cancel() Source.fromGraph(DurableEventSource(log)).map(extract).take(3).toMat(Sink.seq)(Keep.right).run().await should be(expected) } } }
Example 41
Source File: DurableEventProcessorIntegrationSpec.scala From eventuate with Apache License 2.0 | 5 votes |
package com.rbmhtechnology.eventuate.adapter.stream import akka.actor._ import akka.stream._ import akka.stream.scaladsl._ import akka.stream.testkit.scaladsl._ import akka.testkit.TestKit import com.rbmhtechnology.eventuate._ import org.scalatest._ import scala.collection.immutable.Seq class DurableEventProcessorIntegrationSpec extends TestKit(ActorSystem("test")) with WordSpecLike with Matchers with SingleLocationSpecLeveldb { implicit val materializer: Materializer = ActorMaterializer() val SrcEmitterId = "src-emitter" val SrcLogId = "src-log" val ProcessorId = "processor" def durableEvent(payload: String, sequenceNr: Long): DurableEvent = DurableEvent(payload, SrcEmitterId, processId = SrcLogId, localLogId = SrcLogId, localSequenceNr = sequenceNr, vectorTimestamp = VectorTime(SrcLogId -> sequenceNr)) "A DurableEventProcessor" must { "support stateless DurableEvent payload stream processing" in { def logic(event: DurableEvent): Seq[String] = { val common = Seq("1", "2").map(s => s"${event.payload}$s") event.payload match { case "c" => common.filter(_.startsWith("a")) case _ => common.filterNot(_ == "b1") } } val (src, snk) = TestSource.probe[DurableEvent] .via(DurableEventProcessor.statelessProcessor(ProcessorId, log)(logic)) .toMat(TestSink.probe[DurableEvent])(Keep.both) .run() snk.request(3) src.sendNext(durableEvent("a", 11)) src.sendNext(durableEvent("b", 12)) src.sendNext(durableEvent("c", 13)) snk.expectNextN(3).map(_.payload) should be(Seq("a1", "a2", "b2")) snk.cancel() } "support stateful DurableEvent payload stream processing" in { def logic(s: Int, event: DurableEvent): (Int, Seq[String]) = { val payload = event.payload.toString val counter = if (payload.contains("b")) s + 1 else s (counter, Seq(s"${payload}1($counter)", s"${payload}2($counter)")) } val (src, snk) = TestSource.probe[DurableEvent] .via(DurableEventProcessor.statefulProcessor(ProcessorId, log)(0)(logic)) .toMat(TestSink.probe[DurableEvent])(Keep.both) .run() snk.request(6) src.sendNext(durableEvent("a", 11)) src.sendNext(durableEvent("b", 12)) src.sendNext(durableEvent("c", 13)) snk.expectNextN(6).map(_.payload) should be(Seq("a1(0)", "a2(0)", "b1(1)", "b2(1)", "c1(1)", "c2(1)")) snk.cancel() } } "support idempotent stream processing" in { def logic(event: DurableEvent) = Seq(s"${event.payload}-${event.localSequenceNr}") val graph = TestSource.probe[DurableEvent] .via(DurableEventProcessor.statelessProcessor(ProcessorId, log)(logic)) .toMat(TestSink.probe[DurableEvent])(Keep.both) val (src1, snk1) = graph.run() snk1.request(2) src1.sendNext(durableEvent("a", 11)) src1.sendNext(durableEvent("b", 12)) snk1.expectNextN(2).map(_.payload) should be(Seq("a-11", "b-12")) snk1.cancel() val (src2, snk2) = graph.run() snk2.request(1) src2.sendNext(durableEvent("a", 11)) src2.sendNext(durableEvent("b", 12)) src2.sendNext(durableEvent("c", 13)) snk2.expectNextN(1).map(_.payload) should be(Seq("c-13")) snk2.cancel() } }
Example 42
Source File: EventLogPartitioningSpecCassandra.scala From eventuate with Apache License 2.0 | 5 votes |
package com.rbmhtechnology.eventuate.log import akka.actor.ActorSystem import akka.testkit.{ TestKit, TestProbe } import com.rbmhtechnology.eventuate.EventsourcingProtocol._ import com.rbmhtechnology.eventuate.SingleLocationSpecCassandra import com.typesafe.config._ import scala.collection.immutable.Seq object EventLogPartitioningSpecCassandra { val config: Config = ConfigFactory.parseString( """ |akka.loglevel = "ERROR" |akka.test.single-expect-default = 20s | |eventuate.snapshot.filesystem.dir = target/test-snapshot | |eventuate.log.write-batch-size = 3 |eventuate.log.cassandra.partition-size = 5 |eventuate.log.cassandra.default-port = 9142 """.stripMargin) } class EventLogPartitioningSpecCassandra extends TestKit(ActorSystem("test", EventLogPartitioningSpecCassandra.config)) with EventLogSpecSupport with SingleLocationSpecCassandra { import EventLogSpec._ def replay(fromSequenceNr: Long): Seq[(Any, Long)] = { val probe = TestProbe() log.tell(Replay(fromSequenceNr, None, 0), replyToProbe.ref) replyToProbe.expectMsgClass(classOf[ReplaySuccess]).events.map { event => (event.payload, event.localSequenceNr) } } "A Cassandra event log" must { "fill a partition with a single batch" in { writeEmittedEvents(List(event("a"), event("b"), event("c"), event("d"), event("e"))) replay(1L) should be(List(("a", 1L), ("b", 2L), ("c", 3L), ("d", 4L), ("e", 5L))) replay(4L) should be(List(("d", 4L), ("e", 5L))) replay(5L) should be(List(("e", 5L))) replay(6L) should be(List()) } "fill a partition with more than one batch" in { writeEmittedEvents(List(event("a"), event("b"), event("c"))) writeEmittedEvents(List(event("d"), event("e"))) replay(1L) should be(List(("a", 1L), ("b", 2L), ("c", 3L), ("d", 4L), ("e", 5L))) replay(5L) should be(List(("e", 5L))) replay(6L) should be(List()) } "switch to the next partition if the current partition is full" in { writeEmittedEvents(List(event("a"), event("b"), event("c"), event("d"), event("e"))) writeEmittedEvents(List(event("f"), event("g"))) replay(1L) should be(List(("a", 1L), ("b", 2L), ("c", 3L), ("d", 4L), ("e", 5L), ("f", 6L), ("g", 7L))) replay(5L) should be(List(("e", 5L), ("f", 6L), ("g", 7L))) replay(6L) should be(List(("f", 6L), ("g", 7L))) } "switch to the next partition if the current partition isn't full but doesn't provide enough remaining space for a batch" in { val eventsA = List(event("a"), event("b"), event("c"), event("d")) val eventsB = List(event("f"), event("g")) log ! Write(eventsA, system.deadLetters, replyToProbe.ref, 0, 0) log ! Write(eventsB, system.deadLetters, replyToProbe.ref, 0, 0) val expectedA = eventsA.zipWithIndex.map { case (event, idx) => event.copy(vectorTimestamp = timestamp(1L + idx), processId = logId, localLogId = logId, localSequenceNr = 1L + idx) } val expectedB = eventsB.zipWithIndex.map { case (event, idx) => event.copy(vectorTimestamp = timestamp(6L + idx), processId = logId, localLogId = logId, localSequenceNr = 6L + idx) } replyToProbe.expectMsg(WriteSuccess(expectedA, 0, 0)) replyToProbe.expectMsg(WriteSuccess(expectedB, 0, 0)) replay(1L) should be(List(("a", 1L), ("b", 2L), ("c", 3L), ("d", 4L), ("f", 6L), ("g", 7L))) replay(5L) should be(List(("f", 6L), ("g", 7L))) replay(6L) should be(List(("f", 6L), ("g", 7L))) } "reject batches larger than the maximum partition size" in { val events = Vector(event("a"), event("b"), event("c"), event("d"), event("e"), event("f")) log ! Write(events, system.deadLetters, replyToProbe.ref, 0, 0) replyToProbe.expectMsgClass(classOf[WriteFailure]) } } }
Example 43
Source File: LocationSpecsCassandra.scala From eventuate with Apache License 2.0 | 5 votes |
package com.rbmhtechnology.eventuate import akka.actor.{ Props, ActorSystem } import akka.testkit.TestKit // -------------------------------------------------------------------------- // Provider-specific single-location specs // -------------------------------------------------------------------------- class EventsourcedProcessorIntegrationSpecCassandra extends TestKit(ActorSystem("test")) with EventsourcedProcessorIntegrationSpec with SingleLocationSpecCassandra { override def beforeEach(): Unit = { super.beforeEach() init() } } class EventsourcedActorIntegrationSpecCassandra extends TestKit(ActorSystem("test")) with EventsourcedActorIntegrationSpec with SingleLocationSpecCassandra { override def batching = false } class PersistOnEventIntegrationSpecCassandra extends TestKit(ActorSystem("test")) with PersistOnEventIntegrationSpec with SingleLocationSpecCassandra class EventsourcedActorThroughputSpecCassandra extends TestKit(ActorSystem("test")) with EventsourcedActorThroughputSpec with SingleLocationSpecCassandra // -------------------------------------------------------------------------- // Provider-specific multi-location specs // -------------------------------------------------------------------------- class EventsourcedActorCausalitySpecCassandra extends EventsourcedActorCausalitySpec with MultiLocationSpecCassandra { override val logFactory: String => Props = id => SingleLocationSpecCassandra.TestEventLog.props(id, batching = true, aggregateIndexing = true) } class ReplicationIntegrationSpecCassandra extends ReplicationIntegrationSpec with MultiLocationSpecCassandra { def customPort = 2554 } class ReplicationCycleSpecCassandra extends ReplicationCycleSpec with MultiLocationSpecCassandra
Example 44
Source File: VertxAdapterSpec.scala From eventuate with Apache License 2.0 | 5 votes |
package com.rbmhtechnology.eventuate.adapter.vertx import akka.actor.ActorSystem import akka.testkit.TestKit import com.rbmhtechnology.eventuate.adapter.vertx.api.{ EventProducer, VertxAdapterConfig } import com.rbmhtechnology.eventuate.log.EventLogWriter import com.rbmhtechnology.eventuate.log.leveldb.LeveldbEventLog import com.rbmhtechnology.eventuate.utilities._ import com.rbmhtechnology.eventuate.{ LocationCleanupLeveldb, ReplicationEndpoint } import com.typesafe.config.Config import org.scalatest.{ BeforeAndAfterAll, MustMatchers, WordSpecLike } import scala.collection.immutable.Seq object VertxAdapterSpec { case class Event(id: String) val Config = TestConfig.withReplayBatchSize(10) } class VertxAdapterSpec extends TestKit(ActorSystem("test", VertxAdapterSpec.Config)) with WordSpecLike with MustMatchers with BeforeAndAfterAll with StopSystemAfterAll with LocationCleanupLeveldb with VertxEnvironment with VertxEventBusProbes { import VertxAdapterSpec._ import utilities._ val logName = "logA" val adapterId = "adapter1" var storage: ActorStorageProvider = _ var endpoint: ReplicationEndpoint = _ override def config: Config = VertxAdapterSpec.Config override def beforeAll(): Unit = { super.beforeAll() storage = new ActorStorageProvider(adapterId) endpoint = new ReplicationEndpoint(id = "1", logNames = Set(logName), logFactory = logId => LeveldbEventLog.props(logId), connections = Set()) } "A VertxAdapter" must { "read events from an inbound log and deliver them to the Vert.x eventbus" in { val log = endpoint.logs(logName) val adapterConfig = VertxAdapterConfig() .addProducer(EventProducer.fromLog(log) .publishTo { case _ => endpoint1.address } .as("adapter1")) .registerDefaultCodecFor(classOf[Event]) val vertxAdapter = VertxAdapter(adapterConfig, vertx, storage) val logWriter = new EventLogWriter("w1", endpoint.logs(logName)) endpoint.activate() vertxAdapter.start() logWriter.write(Seq(Event("1"))).await.head storage.expectRead(replySequenceNr = 0) storage.expectWrite(sequenceNr = 1) endpoint1.probe.expectVertxMsg(body = Event("1")) logWriter.write(Seq(Event("2"))).await storage.expectWrite(sequenceNr = 2) endpoint1.probe.expectVertxMsg(body = Event("2")) logWriter.write(Seq(Event("3"), Event("4"))).await storage.expectWriteAnyOf(sequenceNrs = Seq(3, 4)) endpoint1.probe.expectVertxMsg(body = Event("3")) endpoint1.probe.expectVertxMsg(body = Event("4")) } } }
Example 45
Source File: VertxEnvironment.scala From eventuate with Apache License 2.0 | 5 votes |
package com.rbmhtechnology.eventuate.adapter.vertx import java.util.UUID import akka.testkit.TestKit import io.vertx.core.Vertx import org.scalatest.{ BeforeAndAfterEach, Suite } trait VertxEnvironment extends BeforeAndAfterEach { this: TestKit with Suite => var vertx: Vertx = _ override def beforeEach(): Unit = { super.beforeEach() vertx = Vertx.vertx() } def registerEventBusCodec(clazz: Class[_]): Unit = { vertx.eventBus().registerDefaultCodec(clazz.asInstanceOf[Class[AnyRef]], AkkaSerializationMessageCodec(clazz)) } def endpointAddress(id: String): String = s"vertx-endpoint-$id-${UUID.randomUUID().toString}" }
Example 46
Source File: VertxEventBusProbes.scala From eventuate with Apache License 2.0 | 5 votes |
package com.rbmhtechnology.eventuate.adapter.vertx import akka.actor.ActorSystem import akka.testkit.{ TestKit, TestProbe } import com.rbmhtechnology.eventuate.adapter.vertx.utilities.EventBusMessage import io.vertx.core.eventbus.Message import org.scalatest.{ BeforeAndAfterEach, Suite } trait VertxEventBusProbes extends BeforeAndAfterEach { this: TestKit with Suite with VertxEnvironment => import VertxHandlerConverters._ var endpoint1: EventBusEndpoint = _ var endpoint2: EventBusEndpoint = _ override def beforeEach(): Unit = { super.beforeEach() endpoint1 = EventBusEndpoint.withId("1") endpoint2 = EventBusEndpoint.withId("2") } def eventBusProbe(endpoint: String): TestProbe = { val probe = TestProbe() val handler = (m: Message[String]) => probe.ref ! EventBusMessage(m.body(), m, endpoint) vertx.eventBus().consumer[String](endpoint, handler.asVertxHandler) probe } object EventBusEndpoint { def apply(address: String): EventBusEndpoint = new EventBusEndpoint(address, eventBusProbe(address)) def withId(id: String): EventBusEndpoint = apply(endpointAddress(id)) } case class EventBusEndpoint(address: String, probe: TestProbe) }
Example 47
Source File: LocationSpecsLeveldb.scala From eventuate with Apache License 2.0 | 5 votes |
package com.rbmhtechnology.eventuate import akka.actor.{ Props, ActorSystem } import akka.testkit.TestKit // -------------------------------------------------------------------------- // Provider-specific single-location specs // -------------------------------------------------------------------------- class EventsourcedProcessorIntegrationSpecLeveldb extends TestKit(ActorSystem("test")) with EventsourcedProcessorIntegrationSpec with SingleLocationSpecLeveldb { override def beforeEach(): Unit = { super.beforeEach() init() } } class EventsourcedActorIntegrationSpecLeveldb extends TestKit(ActorSystem("test")) with EventsourcedActorIntegrationSpec with SingleLocationSpecLeveldb { override def batching = false } class PersistOnEventIntegrationSpecLeveldb extends TestKit(ActorSystem("test")) with PersistOnEventIntegrationSpec with SingleLocationSpecLeveldb class EventsourcedActorThroughputSpecLeveldb extends TestKit(ActorSystem("test")) with EventsourcedActorThroughputSpec with SingleLocationSpecLeveldb // -------------------------------------------------------------------------- // Provider-specific multi-location specs // -------------------------------------------------------------------------- class EventsourcedActorCausalitySpecLeveldb extends EventsourcedActorCausalitySpec with MultiLocationSpecLeveldb { override val logFactory: String => Props = id => SingleLocationSpecLeveldb.TestEventLog.props(id, batching = true) } class ReplicationIntegrationSpecLeveldb extends ReplicationIntegrationSpec with MultiLocationSpecLeveldb { def customPort = 2553 } class ReplicationCycleSpecLeveldb extends ReplicationCycleSpec with MultiLocationSpecLeveldb
Example 48
Source File: ClickhouseClientSpec.scala From clickhouse-scala-client with GNU Lesser General Public License v3.0 | 5 votes |
package com.crobox.clickhouse import java.util.UUID import akka.actor.ActorSystem import akka.stream.{ActorMaterializer, Materializer} import akka.testkit.TestKit import com.typesafe.config.{Config, ConfigFactory} import org.scalatest.BeforeAndAfterAll import org.scalatest.concurrent.ScalaFutures import org.scalatest.flatspec.AnyFlatSpecLike import org.scalatest.matchers.should.Matchers import scala.concurrent.duration._ import scala.concurrent.{Await, ExecutionContext} import scala.util.Random abstract class ClickhouseClientSpec(val config: Config = ConfigFactory.load()) extends TestKit(ActorSystem("clickhouseClientTestSystem", config.getConfig("crobox.clickhouse.client"))) with AnyFlatSpecLike with Matchers with BeforeAndAfterAll with ScalaFutures { implicit val materializer: Materializer = ActorMaterializer() implicit val ec: ExecutionContext = system.dispatcher override implicit def patienceConfig: PatienceConfig = PatienceConfig(1.seconds, 50.millis) override protected def afterAll(): Unit = { try super.afterAll() finally Await.result(system.terminate(), 10.seconds) } def randomUUID: UUID = UUID.randomUUID def randomString: String = Random.alphanumeric.take(10).mkString def randomInt: Int = Random.nextInt(100000) }
Example 49
Source File: ClickhouseClientAsyncSpec.scala From clickhouse-scala-client with GNU Lesser General Public License v3.0 | 5 votes |
package com.crobox.clickhouse import akka.actor.{ActorRef, ActorSystem} import akka.http.scaladsl.model.Uri import akka.pattern.ask import akka.stream.{ActorMaterializer, Materializer} import akka.testkit.TestKit import akka.util.Timeout import akka.util.Timeout.durationToTimeout import com.crobox.clickhouse.balancing.HostBalancer import com.crobox.clickhouse.balancing.discovery.ConnectionManagerActor.GetConnection import com.typesafe.config.{Config, ConfigFactory} import org.scalatest._ import scala.concurrent.{Await, Future} import scala.concurrent.duration._ import org.scalatest.flatspec.AsyncFlatSpecLike import org.scalatest.matchers.should.Matchers abstract class ClickhouseClientAsyncSpec(val config: Config = ConfigFactory.load()) extends TestKit(ActorSystem("clickhouseClientAsyncTestSystem", config.getConfig("crobox.clickhouse.client"))) with AsyncFlatSpecLike with Matchers with BeforeAndAfterAll with BeforeAndAfterEach { implicit val timeout: Timeout = 5.second implicit val materializer: Materializer = ActorMaterializer() override protected def afterAll(): Unit = { try super.afterAll() finally Await.result(system.terminate(), 10.seconds) } def requestParallelHosts(balancer: HostBalancer, connections: Int = 10): Future[Seq[Uri]] = Future.sequence( (1 to connections) .map(_ => { balancer.nextHost }) ) def getConnections(manager: ActorRef, connections: Int = 10): Future[Seq[Uri]] = Future.sequence( (1 to connections) .map(_ => { (manager ? GetConnection()).mapTo[Uri] }) ) // TODO change this methods to custom matchers def returnsConnectionsInRoundRobinFashion(manager: ActorRef, expectedConnections: Set[Uri]): Future[Assertion] = { val RequestConnectionsPerHost = 100 getConnections(manager, RequestConnectionsPerHost * expectedConnections.size) .map(connections => { expectedConnections.foreach( uri => connections .count(_ == uri) shouldBe (RequestConnectionsPerHost +- RequestConnectionsPerHost / 10) //10% delta for warm-up phase ) succeed }) } }
Example 50
Source File: HttpRequestRecorderSpec.scala From rokku with Apache License 2.0 | 5 votes |
package com.ing.wbaa.rokku.proxy.persistence import java.net.InetAddress import akka.actor.{ ActorSystem, PoisonPill, Props } import akka.http.scaladsl.model.HttpHeader.ParsingResult import akka.http.scaladsl.model._ import akka.testkit.{ ImplicitSender, TestKit } import com.ing.wbaa.rokku.proxy.data._ import com.ing.wbaa.rokku.proxy.persistence.HttpRequestRecorder.{ ExecutedRequestCmd, LatestRequests, LatestRequestsResult } import org.scalatest.BeforeAndAfterAll import org.scalatest.diagrams.Diagrams import org.scalatest.wordspec.AnyWordSpecLike import scala.collection.immutable class HttpRequestRecorderSpec extends TestKit(ActorSystem("RequestRecorderTest")) with ImplicitSender with AnyWordSpecLike with Diagrams with BeforeAndAfterAll { override def afterAll: Unit = { TestKit.shutdownActorSystem(system) } private def convertStringsToAkkaHeaders(headers: List[String]): immutable.Seq[HttpHeader] = headers.map { p => val kv = p.split("=") HttpHeader.parse(kv(0), kv(1)) match { case ParsingResult.Ok(header, _) => header case ParsingResult.Error(error) => throw new Exception(s"Unable to convert to HttpHeader: ${error.summary}") } } val requestRecorder = system.actorOf(Props(classOf[HttpRequestRecorder]), "localhost-1") val headers = List("Remote-Address=0:0:0:0:0:0:0:1:58170", "Host=localhost:8987", "X-Amz-Content-SHA256=02502914aca52472205417e4c418ee499ba39ca1b283d99da26e295df2eccf32", "User-Agent=aws-cli/1.16.30 Python/2.7.5 Linux/3.10.0-862.14.4.el7.x86_64 botocore/1.12.20", "Content-MD5=Wf7l+rCPsVw8eqc34kVJ1g==", "Authorization=AWS4-HMAC-SHA256 Credential=6r24619bHVWvrxR5AMHNkGZ6vNRXoGCP/20190704/us-east-1/s3/aws4_request", "SignedHeaders=content-md5;host;x-amz-content-sha256;x-amz-date;x-amz-security-token", "Signature=271dda503da6fcf04cc058cb514b28a6d522a9b712ab553bfb88fb7814ab082f") val httpRequest = HttpRequest( HttpMethods.PUT, Uri("http://127.0.0.1:8010/home/testuser/file34"), convertStringsToAkkaHeaders(headers), HttpEntity.Empty.withContentType(ContentTypes.`application/octet-stream`).toString(), HttpProtocols.`HTTP/1.1` ) val userSTS = User(UserName("okUser"), Set(UserGroup("okGroup")), AwsAccessKey("accesskey"), AwsSecretKey("secretkey"), UserAssumeRole("")) val clientIPAddress = RemoteAddress(InetAddress.getByName("localhost"), Some(1234)) "RequestRecorder" should { "persist Http request event" in { requestRecorder ! ExecutedRequestCmd(httpRequest, userSTS, clientIPAddress) requestRecorder ! LatestRequests(1) expectMsg(LatestRequestsResult(List(ExecutedRequestEvt(httpRequest, userSTS, clientIPAddress)))) requestRecorder ! PoisonPill val requestRecorder1 = system.actorOf(Props(classOf[HttpRequestRecorder]), "localhost-2") requestRecorder1 ! LatestRequests(1) expectMsg(LatestRequestsResult(List(ExecutedRequestEvt(httpRequest, userSTS, clientIPAddress)))) } } }
Example 51
Source File: StreamingConnectorSpec.scala From scalanda with MIT License | 5 votes |
package com.msilb.scalanda.streamapi import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit} import com.msilb.scalanda.common.model.Side.Buy import com.msilb.scalanda.common.model.Transaction.MarketOrderCreate import com.msilb.scalanda.restapi.Request.{ClosePositionRequest, CreateOrderRequest} import com.msilb.scalanda.restapi.RestConnector import com.msilb.scalanda.restapi.model.OrderType.Market import com.msilb.scalanda.streamapi.StreamingConnector._ import com.msilb.scalanda.streamapi.model.Tick import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import scala.concurrent.duration._ class StreamingConnectorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with FlatSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("test")) override def afterAll() { TestKit.shutdownActorSystem(system) } val testAccountId = 6535195 val restConnector = system.actorOf(RestConnector.props(accountId = testAccountId)) val streamingConnector = system.actorOf(StreamingConnector.props) "StreamingConnector" should "successfully connect to the streaming end-point" in { within(5.seconds) { streamingConnector ! Connect() expectMsg(ConnectionEstablished) } } it should "register listeners" in { within(5.seconds) { streamingConnector ! AddListeners(Set(testActor)) expectMsg(Set(testActor)) } } it should "subscribe for price stream and receive price ticks" in { within(5.seconds) { streamingConnector ! StartRatesStreaming(testAccountId, Set("EUR_USD")) expectMsgType[Tick] } } it should "subscribe for events stream and receive account events" in { within(5.seconds) { streamingConnector ! StartEventsStreaming(Some(Set(testAccountId))) restConnector ! CreateOrderRequest("EUR_USD", 10000, Buy, Market) restConnector ! ClosePositionRequest("EUR_USD") fishForMessage() { case t: MarketOrderCreate if t.instrument == "EUR_USD" && t.side == Buy && t.units == 10000 => true case _ => false } } } it should "de-register listeners" in { within(5.seconds) { streamingConnector ! RemoveListeners(Set(testActor)) fishForMessage() { case s: Set[_] if s.isEmpty => true case _ => false } } } }
Example 52
Source File: StorageNodeActorTest.scala From JustinDB with Apache License 2.0 | 5 votes |
package justin.db.actors import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestActorRef, TestKit} import com.typesafe.config.ConfigFactory import justin.db.actors.protocol.RegisterNode import justin.db.cluster.datacenter.Datacenter import justin.db.consistenthashing.{NodeId, Ring} import justin.db.replica.N import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} class StorageNodeActorTest extends TestKit(StorageNodeActorTest.actorSystem) with FlatSpecLike with ImplicitSender with Matchers with ScalaFutures with BeforeAndAfterAll { behavior of "Storage Node Actor" it should "send msg back with targeted NodeId when registration of other node has correctly happened" in { // given val nodeId = NodeId(1) val testActor = TestActorRef(new TestActor(nodeId, Ring.apply(3, 1))) // when testActor ! RegisterNode(NodeId(2)) // then expectMsg(RegisterNode(nodeId)) } it should "has defined role \"storagenode\"" in { StorageNodeActor.role shouldBe "storagenode" } it should "compose its name based on datacenter it belongs to and given id" in { StorageNodeActor.name(NodeId(0), Datacenter("dc1")) shouldBe "dc1-id-0" StorageNodeActor.name(NodeId(10), Datacenter("dc2")) shouldBe "dc2-id-10" StorageNodeActor.name(NodeId(20), Datacenter("dc1")) shouldBe "dc1-id-20" StorageNodeActor.name(NodeId(999), Datacenter("dc1")) shouldBe "dc1-id-999" } override def afterAll: Unit = { TestKit.shutdownActorSystem(system) } class TestActor(nodeId: NodeId, ring: Ring) extends StorageNodeActor(nodeId, Datacenter("default"), null, ring, N(1)) } object StorageNodeActorTest { def actorSystem: ActorSystem = { val config = ConfigFactory.parseString( """ |akka.loglevel = off |akka.actor.provider = cluster |akka.cluster.auto-join = off |akka.cluster.metrics.enabled = off """.stripMargin).withFallback(ConfigFactory.load()) ActorSystem("test-system", config) } }
Example 53
Source File: ReplicaRemoteWriterTest.scala From JustinDB with Apache License 2.0 | 5 votes |
package justin.db.replica.write import java.util.UUID import akka.actor.{Actor, ActorSystem} import akka.testkit.{TestActorRef, TestKit} import justin.db.Data import justin.db.actors.StorageNodeActorRef import justin.db.actors.protocol.{StorageNodeFailedWrite, StorageNodeSuccessfulWrite, StorageNodeWriteDataLocal} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.duration._ class ReplicaRemoteWriterTest extends TestKit(ActorSystem("test-system")) with FlatSpecLike with Matchers with ScalaFutures { behavior of "Replica Remote Writer" override implicit def patienceConfig: PatienceConfig = PatienceConfig(10.seconds, 50.millis) it should "get info back that one of the saving is successful and second one has failed" in { // given val service = new ReplicaRemoteWriter()(system.dispatcher) val data = Data(id = UUID.randomUUID(), value = "exemplary-value") val storageSuccessfulActorRef = testActorRef(msgBack = StorageNodeSuccessfulWrite(data.id)) val storageFailedActorRef = testActorRef(msgBack = StorageNodeFailedWrite(data.id)) val storageNodeRefs = List(storageSuccessfulActorRef, storageFailedActorRef).map(StorageNodeActorRef) // when val writingResult = service.apply(storageNodeRefs, data) // then whenReady(writingResult) { _ shouldBe List(StorageNodeSuccessfulWrite(data.id), StorageNodeFailedWrite(data.id)) } } it should "recover failed behavior of actor" in { // given val service = new ReplicaRemoteWriter()(system.dispatcher) val data = Data(id = UUID.randomUUID(), value = "exemplary-value") val storageActorRef = testActorRef(new Exception) val storageNodeRefs = List(StorageNodeActorRef(storageActorRef)) // when val writingResult = service.apply(storageNodeRefs, data) // then whenReady(writingResult) { _ shouldBe List(StorageNodeFailedWrite(data.id)) } } private def testActorRef(msgBack: => Any) = { TestActorRef(new Actor { override def receive: Receive = { case StorageNodeWriteDataLocal(id) => sender() ! msgBack } }) } }
Example 54
Source File: ReplicaRemoteReaderTest.scala From JustinDB with Apache License 2.0 | 5 votes |
package justin.db.replica.read import java.util.UUID import akka.actor.{Actor, ActorSystem} import akka.testkit.{TestActorRef, TestKit} import justin.db.Data import justin.db.actors.StorageNodeActorRef import justin.db.actors.protocol._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.duration._ class ReplicaRemoteReaderTest extends TestKit(ActorSystem("test-system")) with FlatSpecLike with Matchers with ScalaFutures { behavior of "Replica Remote Reader" override implicit def patienceConfig: PatienceConfig = PatienceConfig(10.seconds, 50.millis) it should "get info back that one of the value could be found and second one is obsolete" in { // given val service = new ReplicaRemoteReader()(system.dispatcher) val id = UUID.randomUUID() val foundData = Data(id, "value") val notFoundId = UUID.randomUUID() val storageNotFoundActorRef = testActorRef(msgBack = StorageNodeNotFoundRead(notFoundId)) val storageFoundActorRef = testActorRef(msgBack = StorageNodeFoundRead(foundData)) val storageNodeRefs = List(storageNotFoundActorRef, storageFoundActorRef).map(StorageNodeActorRef) // when val readingResult = service.apply(storageNodeRefs, id) // then whenReady(readingResult) { _ shouldBe List(StorageNodeNotFoundRead(notFoundId), StorageNodeFoundRead(foundData)) } } it should "recover failed behavior of actor" in { // given val service = new ReplicaRemoteReader()(system.dispatcher) val id = UUID.randomUUID() val storageActorRef = testActorRef(new Exception) val storageNodeRefs = List(StorageNodeActorRef(storageActorRef)) // when val readingResult = service.apply(storageNodeRefs, id) // then whenReady(readingResult) { _ shouldBe List(StorageNodeFailedRead(id)) } } private def testActorRef(msgBack: => Any) = { TestActorRef(new Actor { override def receive: Receive = { case StorageNodeLocalRead(id) => sender() ! msgBack } }) } }
Example 55
Source File: DatadogRegistrySpec.scala From akka-http-metrics with Apache License 2.0 | 5 votes |
package fr.davit.akka.http.metrics.datadog import java.net.InetSocketAddress import akka.actor.ActorSystem import akka.http.scaladsl.model.StatusCodes import akka.io.{IO, Udp} import akka.testkit.{TestKit, TestProbe} import com.timgroup.statsd.NonBlockingStatsDClient import fr.davit.akka.http.metrics.core.HttpMetricsRegistry.{PathDimension, StatusGroupDimension} import org.scalatest.BeforeAndAfterAll import org.scalatest.flatspec.AnyFlatSpecLike import org.scalatest.matchers.should.Matchers import scala.concurrent.duration._ class DatadogRegistrySpec extends TestKit(ActorSystem("DatadogRegistrySpec")) with AnyFlatSpecLike with Matchers with BeforeAndAfterAll { val dimensions = Seq(StatusGroupDimension(StatusCodes.OK), PathDimension("/api")) def withFixture(test: (TestProbe, DatadogRegistry) => Any) = { val statsd = TestProbe() statsd.send(IO(Udp), Udp.Bind(statsd.ref, new InetSocketAddress(0))) val port = statsd.expectMsgType[Udp.Bound].localAddress.getPort val socket = statsd.sender() val client = new NonBlockingStatsDClient("", "localhost", port) val registry = DatadogRegistry(client) try { test(statsd, registry) } finally { client.close() socket ! Udp.Unbind } } override def afterAll(): Unit = { shutdown() super.afterAll() } "DatadogRegistry" should "send active datagrams to the statsd server" in withFixture { (statsd, registry) => registry.active.inc() statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.requests_active:1|c" } it should "send requests datagrams to the statsd server" in withFixture { (statsd, registry) => registry.requests.inc() statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.requests_count:1|c" } it should "send receivedBytes datagrams to the statsd server" in withFixture { (statsd, registry) => registry.receivedBytes.update(3) statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.requests_bytes:3|d" registry.receivedBytes.update(3, dimensions) statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.requests_bytes:3|d|#path:/api,status:2xx" } it should "send responses datagrams to the statsd server" in withFixture { (statsd, registry) => registry.responses.inc() statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.responses_count:1|c" registry.responses.inc(dimensions) statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.responses_count:1|c|#path:/api,status:2xx" } it should "send errors datagrams to the statsd server" in withFixture { (statsd, registry) => registry.errors.inc() statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.responses_errors_count:1|c" registry.errors.inc(dimensions) statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.responses_errors_count:1|c|#path:/api,status:2xx" } it should "send duration datagrams to the statsd server" in withFixture { (statsd, registry) => registry.duration.observe(3.seconds) statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.responses_duration:3000|d" registry.duration.observe(3.seconds, dimensions) statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.responses_duration:3000|d|#path:/api,status:2xx" } it should "send sentBytes datagrams to the statsd server" in withFixture { (statsd, registry) => registry.sentBytes.update(3) statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.responses_bytes:3|d" registry.sentBytes.update(3, dimensions) statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.responses_bytes:3|d|#path:/api,status:2xx" } it should "send connected datagrams to the statsd server" in withFixture { (statsd, registry) => registry.connected.inc() statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.connections_active:1|c" } it should "send connections datagrams to the statsd server" in withFixture { (statsd, registry) => registry.connections.inc() statsd.expectMsgType[Udp.Received].data.utf8String shouldBe "akka.http.connections_count:1|c" } }
Example 56
Source File: ServiceBrokerSpec.scala From reactive-consul with MIT License | 5 votes |
package stormlantern.consul.client import akka.actor.{ ActorRef, ActorSystem } import akka.actor.Status.Failure import akka.testkit.{ ImplicitSender, TestKit } import org.scalamock.scalatest.MockFactory import org.scalatest.concurrent.ScalaFutures import org.scalatest.{ BeforeAndAfterAll, FlatSpecLike, Matchers } import stormlantern.consul.client.dao.ConsulHttpClient import stormlantern.consul.client.discovery.ConnectionHolder import stormlantern.consul.client.helpers.CallingThreadExecutionContext import stormlantern.consul.client.loadbalancers.LoadBalancerActor import stormlantern.consul.client.util.Logging import scala.concurrent.Future class ServiceBrokerSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with FlatSpecLike with Matchers with ScalaFutures with BeforeAndAfterAll with MockFactory with Logging { implicit val ec = CallingThreadExecutionContext() def this() = this(ActorSystem("ServiceBrokerSpec")) override def afterAll() { TestKit.shutdownActorSystem(system) } trait TestScope { val connectionHolder: ConnectionHolder = mock[ConnectionHolder] val httpClient: ConsulHttpClient = mock[ConsulHttpClient] val loadBalancer: ActorRef = self } "The ServiceBroker" should "return a service connection when requested" in new TestScope { (connectionHolder.connection _).expects().returns(Future.successful(true)) (connectionHolder.loadBalancer _).expects().returns(loadBalancer) val sut = new ServiceBroker(self, httpClient) val result: Future[Boolean] = sut.withService("service1") { service: Boolean ⇒ Future.successful(service) } expectMsgPF() { case ServiceBrokerActor.GetServiceConnection("service1") ⇒ lastSender ! connectionHolder result.map(_ shouldEqual true).futureValue } expectMsg(LoadBalancerActor.ReturnConnection(connectionHolder)) } it should "return the connection when an error occurs" in new TestScope { (connectionHolder.connection _).expects().returns(Future.successful(true)) (connectionHolder.loadBalancer _).expects().returns(loadBalancer) val sut = new ServiceBroker(self, httpClient) val result: Future[Boolean] = sut.withService[Boolean, Boolean]("service1") { service: Boolean ⇒ throw new RuntimeException() } expectMsgPF() { case ServiceBrokerActor.GetServiceConnection("service1") ⇒ lastSender ! connectionHolder an[RuntimeException] should be thrownBy result.futureValue } expectMsg(LoadBalancerActor.ReturnConnection(connectionHolder)) } it should "throw an error when an excpetion is returned" in new TestScope { val sut = new ServiceBroker(self, httpClient) val result: Future[Boolean] = sut.withService("service1") { service: Boolean ⇒ Future.successful(service) } expectMsgPF() { case ServiceBrokerActor.GetServiceConnection("service1") ⇒ lastSender ! Failure(new RuntimeException()) an[RuntimeException] should be thrownBy result.futureValue } } }
Example 57
Source File: ServiceAvailabilityActorSpec.scala From reactive-consul with MIT License | 5 votes |
package stormlantern.consul.client.discovery import akka.actor.ActorSystem import akka.testkit.{ ImplicitSender, TestActorRef, TestKit } import org.scalamock.scalatest.MockFactory import org.scalatest.{ BeforeAndAfterAll, FlatSpecLike, Matchers } import stormlantern.consul.client.dao.{ ConsulHttpClient, IndexedServiceInstances } import stormlantern.consul.client.discovery.ServiceAvailabilityActor.Start import stormlantern.consul.client.helpers.ModelHelpers import stormlantern.consul.client.util.Logging import scala.concurrent.Future import scala.concurrent.duration._ class ServiceAvailabilityActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with FlatSpecLike with Matchers with BeforeAndAfterAll with MockFactory with Logging { def this() = this(ActorSystem("ServiceAvailabilityActorSpec")) override def afterAll() { TestKit.shutdownActorSystem(system) } "The ServiceAvailabilityActor" should "receive one service update when there are no changes" in { val httpClient: ConsulHttpClient = mock[ConsulHttpClient] val sut = TestActorRef(ServiceAvailabilityActor.props(httpClient, ServiceDefinition("bogus123", "bogus"), self)) (httpClient.getService _).expects("bogus", None, Some(0L), Some("1s"), None).returns(Future.successful(IndexedServiceInstances(1, Set.empty))) (httpClient.getService _).expects("bogus", None, Some(1L), Some("1s"), None).onCall { p ⇒ sut.stop() Future.successful(IndexedServiceInstances(1, Set.empty)) } sut ! Start expectMsg(1.second, ServiceAvailabilityActor.ServiceAvailabilityUpdate("bogus123")) expectMsg(1.second, ServiceAvailabilityActor.Started) expectNoMsg(1.second) } it should "receive two service updates when there is a change" in { val httpClient: ConsulHttpClient = mock[ConsulHttpClient] lazy val sut = TestActorRef(ServiceAvailabilityActor.props(httpClient, ServiceDefinition("bogus123", "bogus"), self)) val service = ModelHelpers.createService("bogus123", "bogus") (httpClient.getService _).expects("bogus", None, Some(0L), Some("1s"), None).returns(Future.successful(IndexedServiceInstances(1, Set.empty))) (httpClient.getService _).expects("bogus", None, Some(1L), Some("1s"), None).returns(Future.successful(IndexedServiceInstances(2, Set(service)))) (httpClient.getService _).expects("bogus", None, Some(2L), Some("1s"), None).onCall { p ⇒ sut.stop() Future.successful(IndexedServiceInstances(2, Set(service))) } sut ! Start expectMsg(1.second, ServiceAvailabilityActor.ServiceAvailabilityUpdate("bogus123")) expectMsg(1.second, ServiceAvailabilityActor.Started) expectMsg(1.second, ServiceAvailabilityActor.ServiceAvailabilityUpdate("bogus123", Set(service), Set.empty)) expectNoMsg(1.second) } it should "receive one service update when there are two with different tags" in { val httpClient: ConsulHttpClient = mock[ConsulHttpClient] lazy val sut = TestActorRef(ServiceAvailabilityActor.props(httpClient, ServiceDefinition("bogus123", "bogus", Set("one", "two")), self)) val nonMatchingservice = ModelHelpers.createService("bogus123", "bogus", tags = Set("one")) val matchingService = nonMatchingservice.copy(serviceTags = Set("one", "two")) (httpClient.getService _).expects("bogus", Some("one"), Some(0L), Some("1s"), None).returns(Future.successful(IndexedServiceInstances(1, Set.empty))) (httpClient.getService _).expects("bogus", Some("one"), Some(1L), Some("1s"), None).returns(Future.successful(IndexedServiceInstances(2, Set(nonMatchingservice, matchingService)))) (httpClient.getService _).expects("bogus", Some("one"), Some(2L), Some("1s"), None).onCall { p ⇒ sut.stop() Future.successful(IndexedServiceInstances(2, Set(nonMatchingservice, matchingService))) } sut ! Start expectMsg(1.second, ServiceAvailabilityActor.ServiceAvailabilityUpdate("bogus123")) expectMsg(1.second, ServiceAvailabilityActor.Started) expectMsg(1.second, ServiceAvailabilityActor.ServiceAvailabilityUpdate("bogus123", Set(matchingService), Set.empty)) expectNoMsg(1.second) } }
Example 58
Source File: LeaderFollowerActorSpec.scala From reactive-consul with MIT License | 5 votes |
package stormlantern.consul.client.election import java.util import java.util.UUID import akka.actor.ActorSystem import akka.testkit.{ TestActorRef, ImplicitSender, TestKit } import org.scalamock.scalatest.MockFactory import org.scalatest.{ BeforeAndAfterAll, Matchers, FlatSpecLike } import stormlantern.consul.client.dao.{ BinaryData, KeyData, AcquireSession, ConsulHttpClient } import stormlantern.consul.client.election.LeaderFollowerActor.Participate import scala.concurrent.Future class LeaderFollowerActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with FlatSpecLike with Matchers with BeforeAndAfterAll with MockFactory { def this() = this(ActorSystem("LeaderFollowerActorSpec")) override def afterAll() { TestKit.shutdownActorSystem(system) } trait TestScope { val sessionId: UUID = UUID.fromString("9A3BB9C-E2E7-43DF-BFD5-845417146552") val key = "path/to/our/key" val host = "myhost.mynetwork.net" val port = 1337 val consulHttpClient: ConsulHttpClient = mock[ConsulHttpClient] val leaderInfoBytes: Array[Byte] = s"""{"host":"$host","port":$port}""".getBytes("UTF-8") } "The LeaderFollowerActor" should "participate in an election, win, watch for changes and participate again when session is lost" in new TestScope { val sut = TestActorRef(LeaderFollowerActor.props(consulHttpClient, sessionId, key, host, port)) (consulHttpClient.putKeyValuePair _).expects(where { (k, lib, op) ⇒ k == key && util.Arrays.equals(lib, leaderInfoBytes) && op.contains(AcquireSession(sessionId)) }).returns(Future.successful(true)) (consulHttpClient.getKeyValuePair _).expects(key, Some(0L), Some("1s"), false, false).returns { Future.successful(Seq(KeyData(key, 1, 1, 1, 0, BinaryData(leaderInfoBytes), Some(sessionId)))) } (consulHttpClient.getKeyValuePair _).expects(key, Some(1L), Some("1s"), false, false).returns { Future.successful(Seq(KeyData(key, 1, 2, 1, 0, BinaryData(leaderInfoBytes), None))) } (consulHttpClient.putKeyValuePair _).expects(where { (k, lib, op) ⇒ k == key && util.Arrays.equals(lib, leaderInfoBytes) && op.contains(AcquireSession(sessionId)) }).onCall { p ⇒ sut.stop() Future.successful(false) } sut ! Participate } it should "participate in an election, lose, watch for changes and participate again when session is lost" in new TestScope { val otherSessionId: UUID = UUID.fromString("9A3BB9C-E2E7-43DF-BFD5-845417146553") val sut = TestActorRef(LeaderFollowerActor.props(consulHttpClient, sessionId, key, host, port)) (consulHttpClient.putKeyValuePair _).expects(where { (k, lib, op) ⇒ k == key && util.Arrays.equals(lib, leaderInfoBytes) && op.contains(AcquireSession(sessionId)) }).returns(Future.successful(false)) (consulHttpClient.getKeyValuePair _).expects(key, Some(0L), Some("1s"), false, false).returns { Future.successful(Seq(KeyData(key, 1, 1, 1, 0, BinaryData(leaderInfoBytes), Some(otherSessionId)))) } (consulHttpClient.getKeyValuePair _).expects(key, Some(1L), Some("1s"), false, false).returns { Future.successful(Seq(KeyData(key, 1, 2, 1, 0, BinaryData(leaderInfoBytes), None))) } (consulHttpClient.putKeyValuePair _).expects(where { (k, lib, op) ⇒ k == key && util.Arrays.equals(lib, leaderInfoBytes) && op.contains(AcquireSession(sessionId)) }).onCall { p ⇒ sut.stop() Future.successful(true) } sut ! Participate } }
Example 59
Source File: ProducerStreamSpec.scala From reactive-kafka-microservice-template with Apache License 2.0 | 5 votes |
package akka.kafka import akka.actor.ActorSystem import akka.stream.scaladsl.{Sink, Source} import akka.testkit.{DefaultTimeout, ImplicitSender, TestKit, TestProbe} import com.omearac.consumers.ConsumerStream import com.omearac.producers.ProducerStream import com.omearac.settings.Settings import com.omearac.shared.JsonMessageConversion.Conversion import com.omearac.shared.KafkaMessages.{ExampleAppEvent, KafkaMessage} import org.apache.kafka.clients.producer.ProducerRecord import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class ProducerStreamSpec extends TestKit(ActorSystem("ProducerStreamSpec")) with DefaultTimeout with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with ConsumerStream with ProducerStream { val settings = Settings(system).KafkaProducers val probe = TestProbe() override def afterAll: Unit = { shutdown() } "Sending KafkaMessages to the KafkaMessage producerStream" should { "be converted to JSON and obtained by the Stream Sink " in { //Creating Producer Stream Components for publishing KafkaMessages val producerProps = settings.KafkaProducerInfo("KafkaMessage") val numOfMessages = 50 val kafkaMsgs = for { i <- 0 to numOfMessages} yield KafkaMessage("sometime", "somestuff", i) val producerSource= Source(kafkaMsgs) val producerFlow = createStreamFlow[KafkaMessage](producerProps) val producerSink = Sink.actorRef(probe.ref, "complete") val jsonKafkaMsgs = for { msg <- kafkaMsgs} yield Conversion[KafkaMessage].convertToJson(msg) producerSource.via(producerFlow).runWith(producerSink) for (i <- 0 to jsonKafkaMsgs.length) { probe.expectMsgPF(){ case m: ProducerRecord[_,_] => if (jsonKafkaMsgs.contains(m.value())) () else fail() case "complete" => () } } } } "Sending ExampleAppEvent messages to the EventMessage producerStream" should { "be converted to JSON and obtained by the Stream Sink " in { //Creating Producer Stream Components for publishing ExampleAppEvent messages val producerProps = settings.KafkaProducerInfo("ExampleAppEvent") val numOfMessages = 50 val eventMsgs = for { i <- 0 to 50} yield ExampleAppEvent("sometime", "senderID", s"Event number $i occured") val producerSource= Source(eventMsgs) val producerFlow = createStreamFlow[ExampleAppEvent](producerProps) val producerSink = Sink.actorRef(probe.ref, "complete") val jsonAppEventMsgs = for{ msg <- eventMsgs} yield Conversion[ExampleAppEvent].convertToJson(msg) producerSource.via(producerFlow).runWith(producerSink) for (i <- 0 to jsonAppEventMsgs.length){ probe.expectMsgPF(){ case m: ProducerRecord[_,_] => if (jsonAppEventMsgs.contains(m.value())) () else fail() case "complete" => () } } } } }
Example 60
Source File: EventConsumerSpec.scala From reactive-kafka-microservice-template with Apache License 2.0 | 5 votes |
package akka.kafka import akka.actor.{Actor, ActorSystem, Props} import akka.testkit.{DefaultTimeout, ImplicitSender, TestActorRef, TestKit} import com.omearac.consumers.ConsumerStreamManager.{InitializeConsumerStream, TerminateConsumerStream} import com.omearac.consumers.DataConsumer.{ConsumerActorReply, ManuallyInitializeStream, ManuallyTerminateStream} import com.omearac.consumers.EventConsumer import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.collection.mutable.ArrayBuffer class EventConsumerSpec extends TestKit(ActorSystem("EventConsumerSpec")) with DefaultTimeout with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { //Creating the Actors val testConsumer = TestActorRef(new EventConsumer) val mockStreamAndManager = system.actorOf(Props(new MockStreamAndManager), "mockStreamAndManager") override def afterAll: Unit = { shutdown() } class MockStreamAndManager extends Actor { val receive: Receive = { case InitializeConsumerStream(_, _) => testConsumer ! "STREAM_INIT" case TerminateConsumerStream(_) => testConsumer ! "STREAM_DONE" } } "Sending ManuallyTerminateStream to EventConsumer in receive state" should { "return a Stream Already Stopped reply " in { testConsumer ! ManuallyTerminateStream expectMsg(ConsumerActorReply("Event Consumer Stream Already Stopped")) } } "Sending ManuallyInitializeStream to EventConsumer in receive state" should { "forward the message to the ConsumerStreamManager and change state to consuming" in { testConsumer.underlyingActor.consumerStreamManager = mockStreamAndManager testConsumer ! ManuallyInitializeStream expectMsg(ConsumerActorReply("Event Consumer Stream Started")) //Now check for state change Thread.sleep(750) testConsumer ! ManuallyInitializeStream expectMsg(ConsumerActorReply("Event Consumer Already Started")) } } "Sending STREAM_DONE to EventConsumer while in consuming state" should { "change state to idle state" in { val consuming = testConsumer.underlyingActor.consumingEvents testConsumer.underlyingActor.context.become(consuming) testConsumer ! "STREAM_DONE" //Now check for state change Thread.sleep(750) testConsumer ! ManuallyTerminateStream expectMsg(ConsumerActorReply("Event Consumer Stream Already Stopped")) } } "Sending ManuallyTerminateStream to EventConsumer while in consuming state" should { "forward the message to the ConsumerStreamManager and then upon reply, change state to idle" in { val consuming = testConsumer.underlyingActor.consumingEvents testConsumer.underlyingActor.context.become(consuming) testConsumer ! ManuallyTerminateStream expectMsg(ConsumerActorReply("Event Consumer Stream Stopped")) //Now check for state change Thread.sleep(750) testConsumer ! ManuallyTerminateStream expectMsg(ConsumerActorReply("Event Consumer Stream Already Stopped")) } } "Sending ConsumerMessageBatch message" should { "reply OK" in { val msgBatch: ArrayBuffer[String] = ArrayBuffer("test1") val consuming = testConsumer.underlyingActor.consumingEvents testConsumer.underlyingActor.context.become(consuming) testConsumer.underlyingActor.consumerStreamManager = mockStreamAndManager testConsumer ! msgBatch expectMsg("OK") } } }
Example 61
Source File: EventProducerSpec.scala From reactive-kafka-microservice-template with Apache License 2.0 | 5 votes |
package akka.kafka import java.util.Date import akka.Done import akka.actor.ActorSystem import akka.serialization.Serialization import akka.stream.QueueOfferResult import akka.stream.QueueOfferResult.Enqueued import akka.stream.scaladsl.SourceQueueWithComplete import akka.testkit.{DefaultTimeout, EventFilter, ImplicitSender, TestActorRef, TestKit, TestProbe} import com.omearac.producers.EventProducer import com.omearac.shared.AkkaStreams import com.omearac.shared.EventMessages.{ActivatedProducerStream, MessagesPublished} import com.omearac.shared.KafkaMessages.ExampleAppEvent import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.Future class EventProducerSpec extends TestKit(ActorSystem("EventProducerSpec",ConfigFactory.parseString(""" akka.loggers = ["akka.testkit.TestEventListener"] """))) with DefaultTimeout with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with AkkaStreams { val testProducer = TestActorRef(new EventProducer) val producerActor = testProducer.underlyingActor val mockProducerStream: SourceQueueWithComplete[Any] = new SourceQueueWithComplete[Any] { override def complete(): Unit = println("complete") override def fail(ex: Throwable): Unit = println("fail") override def offer(elem: Any): Future[QueueOfferResult] = Future{Enqueued} override def watchCompletion(): Future[Done] = Future{Done} } override def afterAll: Unit = { shutdown() } //Create an test event listener for the local message bus val testEventListener = TestProbe() system.eventStream.subscribe(testEventListener.ref, classOf[ExampleAppEvent]) "Sending ActivatedProducerStream to EventProducer in receive state" should { "save the stream ref and change state to producing " in { testProducer ! ActivatedProducerStream(mockProducerStream, "TestTopic") Thread.sleep(500) producerActor.producerStream should be(mockProducerStream) EventFilter.error(message = "EventProducer got the unknown message while producing: testMessage", occurrences = 1) intercept { testProducer ! "testMessage" } } } "Sending ExampleAppEvent to system bus while EventProducer is in publishEvent state" should { "offer the ExampleAppEvent to the stream " in { val producingState = producerActor.publishEvent producerActor.context.become(producingState) producerActor.producerStream = mockProducerStream val dateFormat = new java.text.SimpleDateFormat("dd:MM:yy:HH:mm:ss.SSS") lazy val timetag = dateFormat.format(new Date(System.currentTimeMillis())) val eventMsg = MessagesPublished(5) val testMessage = ExampleAppEvent(timetag,Serialization.serializedActorPath(self),eventMsg.toString) system.eventStream.publish(testMessage) testEventListener.expectMsgPF(){ case ExampleAppEvent(_,_,m) => if (m == eventMsg.toString) () else fail() } } } }
Example 62
Source File: DataProducerSpec.scala From reactive-kafka-microservice-template with Apache License 2.0 | 5 votes |
package akka.kafka import akka.Done import akka.actor.ActorSystem import akka.stream.QueueOfferResult import akka.stream.QueueOfferResult.Enqueued import akka.stream.scaladsl.SourceQueueWithComplete import akka.testkit.{DefaultTimeout, EventFilter, ImplicitSender, TestActorRef, TestKit, TestProbe} import com.omearac.producers.DataProducer import com.omearac.producers.DataProducer.PublishMessages import com.omearac.shared.AkkaStreams import com.omearac.shared.EventMessages.{ActivatedProducerStream, MessagesPublished} import com.omearac.shared.KafkaMessages.ExampleAppEvent import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.Future class DataProducerSpec extends TestKit(ActorSystem("DataProducerSpec", ConfigFactory.parseString( """ akka.loggers = ["akka.testkit.TestEventListener"] """))) with DefaultTimeout with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with AkkaStreams { val testProducer = TestActorRef(new DataProducer) val producerActor = testProducer.underlyingActor val mockProducerStream: SourceQueueWithComplete[Any] = new SourceQueueWithComplete[Any] { override def complete(): Unit = println("complete") override def fail(ex: Throwable): Unit = println("fail") override def offer(elem: Any): Future[QueueOfferResult] = Future { Enqueued } override def watchCompletion(): Future[Done] = Future { Done } } override def afterAll: Unit = { shutdown() } //Create an test event listener for the local message bus val testEventListener = TestProbe() system.eventStream.subscribe(testEventListener.ref, classOf[ExampleAppEvent]) "Sending ActivatedProducerStream to DataProducer in receive state" should { "save the stream ref and change state to producing " in { testProducer ! ActivatedProducerStream(mockProducerStream, "TestTopic") Thread.sleep(500) producerActor.producerStream should be(mockProducerStream) EventFilter.error(message = "DataProducer got the unknown message while producing: testMessage", occurrences = 1) intercept { testProducer ! "testMessage" } } } "Sending PublishMessages(number: Int) to DataProducer in publishData state" should { "return MessagesPublished(number: Int) and publish the local event " in { val producing = producerActor.publishData producerActor.context.become(producing) producerActor.producerStream = mockProducerStream val resultMessage = MessagesPublished(5) testProducer ! PublishMessages(5) expectMsg(resultMessage) testEventListener.expectMsgPF() { case ExampleAppEvent(_, _, m) => if (m == resultMessage.toString) () else fail() } } } }
Example 63
Source File: DataConsumerSpec.scala From reactive-kafka-microservice-template with Apache License 2.0 | 5 votes |
package akka.kafka import akka.actor.{Actor, ActorSystem, Props} import akka.testkit.{DefaultTimeout, ImplicitSender, TestActorRef, TestKit} import com.omearac.consumers.ConsumerStreamManager.{InitializeConsumerStream, TerminateConsumerStream} import com.omearac.consumers.DataConsumer import com.omearac.consumers.DataConsumer.{ConsumerActorReply, ManuallyInitializeStream, ManuallyTerminateStream} import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.collection.mutable.ArrayBuffer class DataConsumerSpec extends TestKit(ActorSystem("DataConsumerSpec")) with DefaultTimeout with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { //Creating the Actors val testConsumer = TestActorRef(new DataConsumer) val mockStreamAndManager = system.actorOf(Props(new MockStreamAndManager), "mockStreamAndManager") override def afterAll: Unit = { shutdown() } class MockStreamAndManager extends Actor { val receive: Receive = { case InitializeConsumerStream(_, _) => testConsumer ! "STREAM_INIT" case TerminateConsumerStream(_) => testConsumer ! "STREAM_DONE" } } "Sending ManuallyTerminateStream to DataConsumer in receive state" should { "return a Stream Already Stopped reply " in { testConsumer ! ManuallyTerminateStream expectMsg(ConsumerActorReply("Data Consumer Stream Already Stopped")) } } "Sending ManuallyInitializeStream to DataConsumer in receive state" should { "forward the message to the ConsumerStreamManager and change state to consuming" in { testConsumer.underlyingActor.consumerStreamManager = mockStreamAndManager testConsumer ! ManuallyInitializeStream expectMsg(ConsumerActorReply("Data Consumer Stream Started")) //Now check for state change Thread.sleep(750) testConsumer ! ManuallyInitializeStream expectMsg(ConsumerActorReply("Data Consumer Already Started")) } } "Sending STREAM_DONE to DataConsumer while in consuming state" should { "change state to idle state" in { val consuming = testConsumer.underlyingActor.consumingData testConsumer.underlyingActor.context.become(consuming) testConsumer ! "STREAM_DONE" //Now check for state change Thread.sleep(750) testConsumer ! ManuallyTerminateStream expectMsg(ConsumerActorReply("Data Consumer Stream Already Stopped")) } } "Sending ManuallyTerminateStream to DataConsumer while in consuming state" should { "forward the message to the ConsumerStreamManager and then upon reply, change state to idle" in { val consuming = testConsumer.underlyingActor.consumingData testConsumer.underlyingActor.context.become(consuming) testConsumer ! ManuallyTerminateStream expectMsg(ConsumerActorReply("Data Consumer Stream Stopped")) //Now check for state change Thread.sleep(750) testConsumer ! ManuallyTerminateStream expectMsg(ConsumerActorReply("Data Consumer Stream Already Stopped")) } } "Sending ConsumerMessageBatch message" should { "reply OK" in { val msgBatch: ArrayBuffer[String] = ArrayBuffer("test1") val consuming = testConsumer.underlyingActor.consumingData testConsumer.underlyingActor.context.become(consuming) testConsumer.underlyingActor.consumerStreamManager = mockStreamAndManager testConsumer ! msgBatch expectMsg("OK") } } }
Example 64
Source File: ProducerStreamManagerSpec.scala From reactive-kafka-microservice-template with Apache License 2.0 | 5 votes |
package akka.kafka import akka.actor.ActorSystem import akka.stream.scaladsl.SourceQueueWithComplete import akka.testkit.{DefaultTimeout, ImplicitSender, TestActorRef, TestKit, TestProbe} import com.omearac.producers.ProducerStreamManager import com.omearac.producers.ProducerStreamManager.InitializeProducerStream import com.omearac.shared.AkkaStreams import com.omearac.shared.EventMessages.ActivatedProducerStream import com.omearac.shared.KafkaMessages.{ExampleAppEvent, KafkaMessage} import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class ProducerStreamManagerSpec extends TestKit(ActorSystem("ProducerStreamManagerSpec")) with DefaultTimeout with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with AkkaStreams { val testProducerStreamManager = TestActorRef(new ProducerStreamManager) val producerStreamManagerActor = testProducerStreamManager.underlyingActor //Create an test event listener for the local message bus val testEventListener = TestProbe() system.eventStream.subscribe(testEventListener.ref, classOf[ExampleAppEvent]) override def afterAll: Unit = { shutdown() } "Sending InitializeProducerStream(self, KafkaMessage) to ProducerStreamManager" should { "initialize the stream for that particular message type, return ActivatedProducerStream(streaRef, \"TempChannel1\") and produce local event " in { testProducerStreamManager ! InitializeProducerStream(self, KafkaMessage) Thread.sleep(500) var streamRef: SourceQueueWithComplete[Any] = null expectMsgPF() { case ActivatedProducerStream(sr, kt) => if (kt == "TempChannel1") { streamRef = sr; () } else fail() } Thread.sleep(500) val resultMessage = ActivatedProducerStream(streamRef, "TempChannel1") testEventListener.expectMsgPF() { case ExampleAppEvent(_, _, m) => if (m == resultMessage.toString) () else fail() } } } "Sending InitializeProducerStream(self, ExampleAppEvent) to ProducerStreamManager" should { "initialize the stream for that particular message type, return ActivatedProducerStream(streaRef, \"TempChannel2\") and produce local event " in { testProducerStreamManager ! InitializeProducerStream(self, ExampleAppEvent) Thread.sleep(500) var streamRef: SourceQueueWithComplete[Any] = null expectMsgPF() { case ActivatedProducerStream(sr, kt) => if (kt == "TempChannel2") { streamRef = sr; () } else fail() } Thread.sleep(500) val resultMessage = ActivatedProducerStream(streamRef, "TempChannel2") testEventListener.expectMsgPF() { case ExampleAppEvent(_, _, m) => if (m == resultMessage.toString) () else fail() } } } }
Example 65
Source File: LogDriverLogStoreTests.scala From openwhisk with Apache License 2.0 | 5 votes |
package org.apache.openwhisk.core.containerpool.logging import akka.actor.ActorSystem import akka.testkit.TestKit import org.junit.runner.RunWith import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.scalatest.junit.JUnitRunner import org.apache.openwhisk.core.containerpool.ContainerArgsConfig @RunWith(classOf[JUnitRunner]) class LogDriverLogStoreTests extends TestKit(ActorSystem("LogDriverLogStore")) with FlatSpecLike with Matchers with BeforeAndAfterAll { val testConfig = ContainerArgsConfig( network = "network", extraArgs = Map("log-driver" -> Set("fluentd"), "log-opt" -> Set("fluentd-address=localhost:24225", "tag=OW_CONTAINER"))) behavior of "LogDriver LogStore" override def afterAll(): Unit = { TestKit.shutdownActorSystem(system) super.afterAll() } it should "set the container parameters from the config" in { val logDriverLogStore = new LogDriverLogStore(system) logDriverLogStore.containerParameters shouldBe Map.empty } }
Example 66
Source File: GrpcSpec.scala From mleap with Apache License 2.0 | 5 votes |
package ml.combust.mleap.grpc.server import akka.actor.ActorSystem import akka.stream.{ActorMaterializer, Materializer} import akka.testkit.TestKit import io.grpc.{ManagedChannel, Server} import ml.combust.mleap.executor.service.TransformService import ml.combust.mleap.executor.testkit.TransformServiceSpec import org.scalatest.{BeforeAndAfterAll, BeforeAndAfterEach} import org.scalatest.concurrent.ScalaFutures import scala.concurrent.duration._ import ml.combust.mleap.grpc.server.TestUtil._ class GrpcSpec extends TestKit(ActorSystem("grpc-server-test")) with TransformServiceSpec with BeforeAndAfterEach with BeforeAndAfterAll with ScalaFutures { private lazy val server = createServer(system) private lazy val channel = inProcessChannel private lazy val client = createClient(channel) override lazy val transformService: TransformService = { server client } override implicit def materializer: Materializer = ActorMaterializer()(system) override protected def afterAll(): Unit = { server.shutdown() channel.shutdown() TestKit.shutdownActorSystem(system, 5.seconds, verifySystemShutdown = true) } }
Example 67
Source File: MleapExecutorSpec.scala From mleap with Apache License 2.0 | 5 votes |
package ml.combust.mleap.executor import akka.actor.ActorSystem import akka.stream.{ActorMaterializer, Materializer} import akka.testkit.TestKit import ml.combust.mleap.executor.testkit.{TestUtil, TransformServiceSpec} import org.scalatest.concurrent.ScalaFutures import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ class MleapExecutorSpec extends TestKit(ActorSystem("MleapExecutorSpec")) with TransformServiceSpec with BeforeAndAfterAll with ScalaFutures { override lazy val transformService: MleapExecutor = MleapExecutor(system) private val frame = TestUtil.frame override implicit val materializer: Materializer = ActorMaterializer()(system) override protected def afterAll(): Unit = { TestKit.shutdownActorSystem(system, 5.seconds, verifySystemShutdown = true) } }
Example 68
Source File: Base.scala From changestream with MIT License | 5 votes |
package changestream.helpers import akka.actor.ActorSystem import akka.testkit.{DefaultTimeout, ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest._ class Base extends TestKit(ActorSystem("changestream_test", ConfigFactory.load("test.conf"))) with DefaultTimeout with ImplicitSender with Matchers with Inside with WordSpecLike with BeforeAndAfterAll with BeforeAndAfter { implicit val ec = system.dispatcher override def afterAll() = { TestKit.shutdownActorSystem(system) } }
Example 69
Source File: MetadataLoggerActorTest.scala From schedoscope with Apache License 2.0 | 5 votes |
package org.schedoscope.scheduler.actors import akka.actor.{Actor, ActorRef, ActorSystem} import akka.testkit.{EventFilter, ImplicitSender, TestActorRef, TestKit, TestProbe} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.schedoscope.Schedoscope class MetadataLoggerActorTest extends TestKit(ActorSystem("schedoscope", ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]"""))) with ImplicitSender with FlatSpecLike with Matchers with BeforeAndAfterAll { override def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } val msgHub = TestProbe() val settings = Schedoscope.settings case class toPCA(msg: String) class TestRouter(to: ActorRef) extends Actor { val pca = TestActorRef(new MetadataLoggerActor("", "", "") { override def getSchemaManager(jdbcUrl: String, metaStoreUri: String, serverKerberosPrincipal: String) = { null } override def schemaRouter = msgHub.ref }) def receive = { case toPCA(m) => pca forward (m) case "tick" => to forward "tick" } } it should "send tick msg upon start" in { TestActorRef(new TestRouter(msgHub.ref)) msgHub.expectMsg("tick") } it should "change to active state upon receive of tick msg" in { val router = TestActorRef(new TestRouter(msgHub.ref)) EventFilter.info(message = "METADATA LOGGER ACTOR: changed to active state.", occurrences = 1) intercept { msgHub.send(router, toPCA("tick")) } } }
Example 70
Source File: SchemaManagerRouterTest.scala From schedoscope with Apache License 2.0 | 5 votes |
package org.schedoscope.scheduler.actors import akka.actor.{Actor, ActorRef, ActorSystem, Props} import akka.testkit.{TestActorRef, TestKit, TestProbe} import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.schedoscope.conf.SchedoscopeSettings import org.schedoscope.{Settings, TestUtils} import scala.concurrent.duration._ class SchemaManagerRouterTest extends TestKit(ActorSystem("schedoscope")) with FlatSpecLike with Matchers with BeforeAndAfterAll { override def afterAll() { TestKit.shutdownActorSystem(system) } // common vars val settings: SchedoscopeSettings = Settings() class ForwardChildActor(to: ActorRef) extends Actor { def receive = { case x => to.forward(x) } } trait SchemaManagerRouterTest { val partitionCreatorRouterActor = TestProbe() val metadataLoggerActorTest = TestProbe() def getSchemaManager(s: SchedoscopeSettings): ActorRef = { TestActorRef(new SchemaManagerRouter(s) { override def preStart { context.actorOf(Props(new ForwardChildActor(partitionCreatorRouterActor.ref)), "partition-creator") context.actorOf(Props(new ForwardChildActor(metadataLoggerActorTest.ref)), "metadata-logger") } }) } } it should "set an exponential backoff time for restarting drivers" in new SchemaManagerRouterTest { val newSettings = TestUtils.createSettings( "schedoscope.metastore.actor-backoff-slot-time=10", "schedoscope.metastore.actor-backoff-minimum-delay=0") var schemaManagerRouter: ActorRef = getSchemaManager(newSettings) partitionCreatorRouterActor.send(schemaManagerRouter, "tick") partitionCreatorRouterActor.expectMsg("tick") partitionCreatorRouterActor.send(schemaManagerRouter, "tick") partitionCreatorRouterActor.expectMsg("tick") metadataLoggerActorTest.send(schemaManagerRouter, "tick") metadataLoggerActorTest.expectMsg("tick") metadataLoggerActorTest.send(schemaManagerRouter, "tick") metadataLoggerActorTest.expectMsg("tick") } it should "set an exponential backoff time too big for the test to get it" in new SchemaManagerRouterTest { val newSettings = TestUtils.createSettings( "schedoscope.metastore.actor-backoff-slot-time=10000", "schedoscope.metastore.actor-backoff-minimum-delay=10000") var schemaManagerRouter: ActorRef = getSchemaManager(newSettings) partitionCreatorRouterActor.send(schemaManagerRouter, "tick") partitionCreatorRouterActor.expectMsg("tick") partitionCreatorRouterActor.send(schemaManagerRouter, "tick") partitionCreatorRouterActor.expectNoMsg(3 seconds) metadataLoggerActorTest.send(schemaManagerRouter, "tick") metadataLoggerActorTest.expectMsg("tick") metadataLoggerActorTest.send(schemaManagerRouter, "tick") metadataLoggerActorTest.expectNoMsg(3 seconds) } }
Example 71
Source File: PartitionCreatorActorTest.scala From schedoscope with Apache License 2.0 | 5 votes |
package org.schedoscope.scheduler.actors import akka.actor.{Actor, ActorRef, ActorSystem} import akka.testkit.{EventFilter, ImplicitSender, TestActorRef, TestKit, TestProbe} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.schedoscope.Schedoscope class PartitionCreatorActorTest extends TestKit(ActorSystem("schedoscope", ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]"""))) with ImplicitSender with FlatSpecLike with Matchers with BeforeAndAfterAll { override def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } val msgHub = TestProbe() val settings = Schedoscope.settings case class ToPCA(msg: String) class TestRouter(to: ActorRef) extends Actor { val pca = TestActorRef(new PartitionCreatorActor("", "", "", msgHub.ref) { override def getSchemaManager(jdbcUrl: String, metaStoreUri: String, serverKerberosPrincipal: String) = { null } override def schemaRouter = msgHub.ref }) def receive = { case ToPCA(m) => pca forward (m) case "tick" => to forward "tick" } } it should "send tick msg upon start" in { TestActorRef(new TestRouter(msgHub.ref)) msgHub.expectMsg("tick") } it should "change to active state upon receive of tick msg" in { val router = TestActorRef(new TestRouter(msgHub.ref)) EventFilter.info(message = "PARTITION CREATOR ACTOR: changed to active state.", occurrences = 1) intercept { msgHub.send(router, ToPCA("tick")) } } }
Example 72
Source File: ViewSchedulingListenerActorSpec.scala From schedoscope with Apache License 2.0 | 5 votes |
package org.schedoscope.scheduler.actors import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe} import org.joda.time.LocalDateTime import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.schedoscope.dsl.Parameter._ import org.schedoscope.scheduler.listeners.{RetryableViewSchedulingListenerException, ViewSchedulingListenerException} import org.schedoscope.scheduler.messages.{RegisterFailedListener, ViewSchedulingMonitoringEvent} import org.schedoscope.scheduler.states._ import test.views.Brand import scala.concurrent.duration._ class ViewSchedulingListenerActorSpec extends TestKit(ActorSystem("schedoscope")) with ImplicitSender with FlatSpecLike with Matchers with BeforeAndAfterAll { override def afterAll() = { TestKit.shutdownActorSystem(system) } val TIMEOUT = 5 seconds "A viewSchedulingListenerActor" should "execute listener handler methods" in { val viewSchedulingListenerManagerActor = TestProbe() val handlerClassName = "org.schedoscope.test.TestViewListener" val viewSchedulingListenerActor = TestActorRef(ViewSchedulingListenerActor.props( handlerClassName, viewSchedulingListenerManagerActor.ref)) val view = Brand(p("ec01")) val prevState1 = CreatedByViewManager(view) // confirm listener method is being executed correctly intercept[RetryableViewSchedulingListenerException] { viewSchedulingListenerActor.receive( ViewSchedulingMonitoringEvent(prevState1, prevState1, Set(Transform(view)), new LocalDateTime())) } // since at it, confirm that listener actor handles retryable exceptions // and tries to cache in viewSchedulingListenerManagerActor as receiver of // latest events viewSchedulingListenerManagerActor.expectMsg(RegisterFailedListener(handlerClassName)) val newState1 = Failed(view) // confirm listener method is being executed correctly intercept[ViewSchedulingListenerException] { viewSchedulingListenerActor.receive( ViewSchedulingMonitoringEvent(prevState1, newState1, Set(Transform(view)), new LocalDateTime())) } // Confirm that listener actor does not register for receiving latest events! viewSchedulingListenerManagerActor.expectNoMsg(TIMEOUT) } }
Example 73
Source File: BackOffSupervisionTest.scala From schedoscope with Apache License 2.0 | 5 votes |
package org.schedoscope.scheduler.utils import akka.actor.ActorSystem import akka.testkit.{TestKit, TestProbe} import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ class BackOffSupervisionTest extends TestKit(ActorSystem("schedoscope")) with FlatSpecLike with BeforeAndAfterAll with Matchers { override def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } val managedActor = TestProbe() it should "send an immediate tick to a actor that booted for the first time" in { val bos = new BackOffSupervision("THE MANAGER", system) val backOffSlot = 100 millis val backOffMinDelay = 10 millis val tickTime = bos.manageActorLifecycle(managedActor.ref, backOffSlot, backOffMinDelay) system.scheduler.scheduleOnce(tickTime, managedActor.ref, "tick") managedActor.expectMsg(max = 1 seconds, "tick") } it should "schedule a tick for an actor that is rebooting" in { val bos = new BackOffSupervision("THE MANAGER", system) val backOffSlot = 100 millis val backOffMinDelay = 1 seconds val tickTime = bos.manageActorLifecycle(managedActor.ref, backOffSlot, backOffMinDelay) system.scheduler.scheduleOnce(tickTime, managedActor.ref, "tick") managedActor.expectMsg(max = 1 seconds, "tick") val tickTime2 = bos.manageActorLifecycle(managedActor.ref) system.scheduler.scheduleOnce(tickTime2, managedActor.ref, "tick") managedActor.expectMsg(max = 3 seconds, "tick") } it should "schedule a tick for an actor that is rebooting " + "(assure that tick is happening in the future only)" in { val bos = new BackOffSupervision("THE MANAGER", system) val backOffSlot = 100 millis val backOffMinDelay = 5 seconds val tickTime = bos.manageActorLifecycle(managedActor.ref, backOffSlot, backOffMinDelay) system.scheduler.scheduleOnce(tickTime, managedActor.ref, "tick") managedActor.expectMsg(max = 1 seconds, "tick") val tickTime2 = bos.manageActorLifecycle(managedActor.ref) system.scheduler.scheduleOnce(tickTime2, managedActor.ref, "tick") managedActor.expectNoMsg(max = 3 seconds) } }
Example 74
Source File: BakerySpec.scala From Learn-Scala-Programming with MIT License | 5 votes |
package ch11 import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import ch11.Cook.RawCookies import ch11.Manager.ShoppingList import ch11.Oven.Cookies import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.duration._ import scala.language.postfixOps import scala.util.Random class BakerySpec(_system: ActorSystem) extends TestKit(_system) with Matchers with WordSpecLike with BeforeAndAfterAll with ImplicitSender { def this() = this(ActorSystem("BakerySpec")) override def afterAll: Unit = shutdown(system) "The boy should" should { val boyProps = Boy.props(system.actorSelection(testActor.path)) val boy = system.actorOf(boyProps) "forward given ShoppingList to the seller" in { val list = ShoppingList(0, 0, 0, 0) boy ! list within(3 millis, 20 millis) { expectMsg(list) lastSender shouldBe testActor } } "ignore other message types" in { boy ! 'GoHome expectNoMessage(500 millis) } } "The baker should" should { val parent = TestProbe() val baker = parent.childActorOf(Props(classOf[Baker], 0 millis)) "bake cookies in batches" in { val count = Random.nextInt(100) baker ! RawCookies(Oven.size * count) parent.expectMsgAllOf(List.fill(count)(Cookies(Oven.size)):_*) } } }
Example 75
Source File: StoreSpec.scala From Learn-Scala-Programming with MIT License | 5 votes |
package ch11 import akka.testkit.TestKit import ch11.Manager.ShoppingList import ch11.Mixer.Groceries import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.language.postfixOps class StoreSpec(store: Store) extends TestKit(store.store) with Matchers with WordSpecLike with BeforeAndAfterAll { def this() = this(new Store {}) override def afterAll: Unit = shutdown(system) "A seller in store" should { "do nothing for all unexpected message types" in { store.seller ! 'UnexpectedMessage expectNoMessage() } "return groceries if given a shopping list" in { store.seller.tell(ShoppingList(1, 1, 1, 1), testActor) expectMsg(Groceries(1,1,1,1)) } } }
Example 76
Source File: AkkaHttpClientEndpointsTest.scala From endpoints4s with MIT License | 5 votes |
package endpoints4s.akkahttp.client import akka.actor.ActorSystem import akka.stream.Materializer import akka.stream.scaladsl.{Sink, Source} import akka.testkit.TestKit import endpoints4s.algebra import endpoints4s.algebra.ChunkedJsonEntitiesTestApi import scala.concurrent.{ExecutionContext, Future} import scala.util.control.NonFatal class TestClient(settings: EndpointsSettings)(implicit EC: ExecutionContext, M: Materializer ) extends Endpoints(settings) with BasicAuthentication with algebra.EndpointsTestApi with algebra.BasicAuthenticationTestApi with algebra.TextEntitiesTestApi with algebra.JsonFromCodecTestApi with algebra.SumTypedEntitiesTestApi with algebra.circe.JsonFromCirceCodecTestApi with JsonEntitiesFromCodecs with algebra.circe.JsonEntitiesFromCodecs with ChunkedJsonEntities with ChunkedJsonEntitiesTestApi with algebra.circe.ChunkedJsonEntitiesTestApi class AkkaHttpClientEndpointsTest extends algebra.client.EndpointsTestSuite[TestClient] with algebra.client.BasicAuthTestSuite[TestClient] with algebra.client.JsonFromCodecTestSuite[TestClient] with algebra.client.TextEntitiesTestSuite[TestClient] with algebra.client.SumTypedEntitiesTestSuite[TestClient] with algebra.client.ChunkedJsonEntitiesTestSuite[TestClient] { implicit val system = ActorSystem() implicit val ec = system.dispatcher val client: TestClient = new TestClient( EndpointsSettings( AkkaHttpRequestExecutor .cachedHostConnectionPool("localhost", wiremockPort) ) ) val streamingClient: TestClient = new TestClient( EndpointsSettings( AkkaHttpRequestExecutor .cachedHostConnectionPool("localhost", streamingPort) ) ) def call[Req, Resp]( endpoint: client.Endpoint[Req, Resp], args: Req ): Future[Resp] = endpoint(args) def encodeUrl[A](url: client.Url[A])(a: A): String = url.encode(a) def callStreamedEndpoint[A, B]( endpoint: streamingClient.Endpoint[A, streamingClient.Chunks[B]], req: A ): Future[Seq[Either[String, B]]] = Source .futureSource(endpoint(req)) .map(Right(_)) .recover { case NonFatal(t) => Left(t.toString) } .runWith(Sink.seq) def callStreamedEndpoint[A, B]( endpoint: streamingClient.Endpoint[streamingClient.Chunks[A], B], req: Source[A, _] ): Future[B] = endpoint(req) clientTestSuite() basicAuthSuite() jsonFromCodecTestSuite() textEntitiesTestSuite() sumTypedRequestsTestSuite() override def afterAll(): Unit = { TestKit.shutdownActorSystem(system) super.afterAll() } }
Example 77
Source File: AkkaHttpClientEndpointsJsonSchemaTest.scala From endpoints4s with MIT License | 5 votes |
package endpoints4s.akkahttp.client import akka.actor.ActorSystem import akka.stream.Materializer import akka.testkit.TestKit import endpoints4s.algebra.client.{BasicAuthTestSuite, JsonTestSuite} import endpoints4s.algebra.{Address, BasicAuthenticationTestApi, JsonTestApi, User} import endpoints4s.generic import scala.concurrent.{ExecutionContext, Future} class TestJsonSchemaClient(settings: EndpointsSettings)(implicit EC: ExecutionContext, M: Materializer ) extends Endpoints(settings) with BasicAuthentication with BasicAuthenticationTestApi with generic.JsonSchemas with JsonTestApi with JsonEntitiesFromSchemas { implicit def userCodec: JsonSchema[User] = genericJsonSchema[User] implicit def addresCodec: JsonSchema[Address] = genericJsonSchema[Address] } class AkkaHttpClientEndpointsJsonSchemaTest extends JsonTestSuite[TestJsonSchemaClient] with BasicAuthTestSuite[TestJsonSchemaClient] { implicit val system = ActorSystem() implicit val ec = system.dispatcher val client: TestJsonSchemaClient = new TestJsonSchemaClient( EndpointsSettings( AkkaHttpRequestExecutor .cachedHostConnectionPool("localhost", wiremockPort) ) ) def call[Req, Resp]( endpoint: client.Endpoint[Req, Resp], args: Req ): Future[Resp] = endpoint(args) def encodeUrl[A](url: client.Url[A])(a: A): String = url.encode(a) clientTestSuite() basicAuthSuite() override def afterAll(): Unit = { TestKit.shutdownActorSystem(system) super.afterAll() } }
Example 78
Source File: AkkaMoneyScope.scala From money with Apache License 2.0 | 5 votes |
package com.comcast.money.akka import akka.actor.ActorSystem import akka.stream.ActorMaterializer import akka.testkit.TestKit import com.comcast.money.akka.SpanHandlerMatchers.clearHandlerChain import com.typesafe.config.ConfigFactory import org.scalatest.{ BeforeAndAfterAll, BeforeAndAfterEach, Matchers, WordSpecLike } abstract class AkkaMoneyScope extends WordSpecLike with Matchers with BeforeAndAfterAll with BeforeAndAfterEach { val configString: String = """ | money { | handling = { | async = false | handlers = [ | { | class = "com.comcast.money.akka.CollectingSpanHandler" | log-level = "INFO" | }] | } | }""".stripMargin implicit val actorSystem: ActorSystem = ActorSystem("MoneyAkkaScope", ConfigFactory.parseString(configString)) implicit val moneyExtension: MoneyExtension = MoneyExtension(actorSystem) implicit val matierializer: ActorMaterializer = ActorMaterializer() override def afterAll(): Unit = TestKit.shutdownActorSystem(actorSystem) override def beforeEach(): Unit = clearHandlerChain }
Example 79
Source File: MoneyExtensionSpec.scala From money with Apache License 2.0 | 5 votes |
package com.comcast.money.akka.acceptance.stream import akka.actor.ActorSystem import akka.testkit.TestKit import com.comcast.money.akka.MoneyExtension import com.typesafe.config.ConfigFactory import org.scalatest.{ Matchers, WordSpecLike } class MoneyExtensionSpec(_system: ActorSystem) extends TestKit(_system) with WordSpecLike with Matchers { def this() = this{ val configString: String = """ | money { | enabled = false | }""".stripMargin ActorSystem("MoneyExtensionSpec", ConfigFactory.parseString(configString)) } "A MoneyExtension" should { "construct a new MoneyExtension from an ActorSystem without Money config" in { MoneyExtension(system) shouldBe a[MoneyExtension] } } }
Example 80
Source File: BrokerTest.scala From scalachain with MIT License | 5 votes |
package com.elleflorio.scalachain.actor import akka.actor.{ActorRef, ActorSystem} import akka.cluster.pubsub.DistributedPubSub import akka.testkit.{ImplicitSender, TestKit} import com.elleflorio.scalachain.actor.Broker.{AddTransaction, Clear, GetTransactions} import com.elleflorio.scalachain.blockchain.Transaction import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import scala.concurrent.duration._ class BrokerTest(sys: ActorSystem) extends TestKit(sys) with ImplicitSender with Matchers with FlatSpecLike with BeforeAndAfterAll { def this() = this(ActorSystem("broker-test")) val mediator: ActorRef = DistributedPubSub(this.system).mediator override def afterAll: Unit = { shutdown(system) } "A Broker Actor" should "start with an empty list of transactions" in { val broker = system.actorOf(Broker.props) broker ! GetTransactions expectMsg(500 millis, List()) } "A Broker Actor" should "return the correct list of added transactions" in { val broker = system.actorOf(Broker.props) val transaction1 = Transaction("A", "B", 100) val transaction2 = Transaction("C", "D", 1000) broker ! AddTransaction(transaction1) broker ! AddTransaction(transaction2) broker ! GetTransactions expectMsg(500 millis, List(transaction2, transaction1)) } "A Broker Actor" should "clear the transaction lists when requested" in { val broker = system.actorOf(Broker.props) val transaction1 = Transaction("A", "B", 100) val transaction2 = Transaction("C", "D", 1000) broker ! AddTransaction(transaction1) broker ! AddTransaction(transaction2) broker ! Clear broker ! GetTransactions expectMsg(500 millis, List()) } }
Example 81
Source File: RawStageTest.scala From sparta with Apache License 2.0 | 5 votes |
package com.stratio.sparta.driver.test.stage import akka.actor.ActorSystem import akka.testkit.TestKit import com.stratio.sparta.driver.stage.{LogError, RawDataStage} import com.stratio.sparta.sdk.pipeline.autoCalculations.AutoCalculatedField import com.stratio.sparta.sdk.properties.JsoneyString import com.stratio.sparta.serving.core.models.policy.writer.{AutoCalculatedFieldModel, WriterModel} import com.stratio.sparta.serving.core.models.policy.{PolicyModel, RawDataModel} import org.junit.runner.RunWith import org.mockito.Mockito.when import org.scalatest.junit.JUnitRunner import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpecLike, ShouldMatchers} @RunWith(classOf[JUnitRunner]) class RawStageTest extends TestKit(ActorSystem("RawStageTest")) with FlatSpecLike with ShouldMatchers with MockitoSugar { case class TestRawData(policy: PolicyModel) extends RawDataStage with LogError def mockPolicy: PolicyModel = { val policy = mock[PolicyModel] when(policy.id).thenReturn(Some("id")) policy } "rawDataStage" should "Generate a raw data" in { val field = "field" val timeField = "time" val tableName = Some("table") val outputs = Seq("output") val partitionBy = Some("field") val autocalculateFields = Seq(AutoCalculatedFieldModel()) val configuration = Map.empty[String, JsoneyString] val policy = mockPolicy val rawData = mock[RawDataModel] val writerModel = mock[WriterModel] when(policy.rawData).thenReturn(Some(rawData)) when(rawData.dataField).thenReturn(field) when(rawData.timeField).thenReturn(timeField) when(rawData.writer).thenReturn(writerModel) when(writerModel.tableName).thenReturn(tableName) when(writerModel.outputs).thenReturn(outputs) when(writerModel.partitionBy).thenReturn(partitionBy) when(writerModel.autoCalculatedFields).thenReturn(autocalculateFields) when(rawData.configuration).thenReturn(configuration) val result = TestRawData(policy).rawDataStage() result.timeField should be(timeField) result.dataField should be(field) result.writerOptions.tableName should be(tableName) result.writerOptions.partitionBy should be(partitionBy) result.configuration should be(configuration) result.writerOptions.outputs should be(outputs) } "rawDataStage" should "Fail with bad table name" in { val field = "field" val timeField = "time" val tableName = None val outputs = Seq("output") val partitionBy = Some("field") val configuration = Map.empty[String, JsoneyString] val policy = mockPolicy val rawData = mock[RawDataModel] val writerModel = mock[WriterModel] when(policy.rawData).thenReturn(Some(rawData)) when(rawData.dataField).thenReturn(field) when(rawData.timeField).thenReturn(timeField) when(rawData.writer).thenReturn(writerModel) when(writerModel.tableName).thenReturn(tableName) when(writerModel.outputs).thenReturn(outputs) when(writerModel.partitionBy).thenReturn(partitionBy) when(rawData.configuration).thenReturn(configuration) the[IllegalArgumentException] thrownBy { TestRawData(policy).rawDataStage() } should have message "Something gone wrong saving the raw data. Please re-check the policy." } }
Example 82
Source File: ControllerActorTest.scala From sparta with Apache License 2.0 | 5 votes |
package com.stratio.sparta.serving.api.actor import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit} import com.stratio.sparta.driver.service.StreamingContextService import com.stratio.sparta.serving.core.actor.{RequestActor, FragmentActor, StatusActor} import com.stratio.sparta.serving.core.config.SpartaConfig import com.stratio.sparta.serving.core.constants.AkkaConstant import org.apache.curator.framework.CuratorFramework import org.junit.runner.RunWith import org.scalamock.scalatest.MockFactory import org.scalatest._ import org.scalatest.junit.JUnitRunner @RunWith(classOf[JUnitRunner]) class ControllerActorTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with MockFactory { SpartaConfig.initMainConfig() SpartaConfig.initApiConfig() val curatorFramework = mock[CuratorFramework] val statusActor = _system.actorOf(Props(new StatusActor(curatorFramework))) val executionActor = _system.actorOf(Props(new RequestActor(curatorFramework))) val streamingContextService = new StreamingContextService(curatorFramework) val fragmentActor = _system.actorOf(Props(new FragmentActor(curatorFramework))) val policyActor = _system.actorOf(Props(new PolicyActor(curatorFramework, statusActor))) val sparkStreamingContextActor = _system.actorOf( Props(new LauncherActor(streamingContextService, curatorFramework))) val pluginActor = _system.actorOf(Props(new PluginActor())) val configActor = _system.actorOf(Props(new ConfigActor())) def this() = this(ActorSystem("ControllerActorSpec", SpartaConfig.daemonicAkkaConfig)) implicit val actors = Map( AkkaConstant.StatusActorName -> statusActor, AkkaConstant.FragmentActorName -> fragmentActor, AkkaConstant.PolicyActorName -> policyActor, AkkaConstant.LauncherActorName -> sparkStreamingContextActor, AkkaConstant.PluginActorName -> pluginActor, AkkaConstant.ExecutionActorName -> executionActor, AkkaConstant.ConfigActorName -> configActor ) override def afterAll { TestKit.shutdownActorSystem(system) } "ControllerActor" should { "set up the controller actor that contains all sparta's routes without any error" in { _system.actorOf(Props(new ControllerActor(actors, curatorFramework))) } } }
Example 83
Source File: DriverActorTest.scala From sparta with Apache License 2.0 | 5 votes |
package com.stratio.sparta.serving.api.actor import java.nio.file.{Files, Path} import akka.actor.{ActorSystem, Props} import akka.testkit.{DefaultTimeout, ImplicitSender, TestKit} import akka.util.Timeout import com.stratio.sparta.serving.api.actor.DriverActor.UploadDrivers import com.stratio.sparta.serving.core.config.{SpartaConfig, SpartaConfigFactory} import com.stratio.sparta.serving.core.models.SpartaSerializer import com.stratio.sparta.serving.core.models.files.{SpartaFile, SpartaFilesResponse} import com.typesafe.config.{Config, ConfigFactory} import org.junit.runner.RunWith import org.scalatest._ import org.scalatest.junit.JUnitRunner import org.scalatest.mock.MockitoSugar import spray.http.BodyPart import scala.concurrent.duration._ import scala.language.postfixOps import scala.util.{Failure, Success} @RunWith(classOf[JUnitRunner]) class DriverActorTest extends TestKit(ActorSystem("PluginActorSpec")) with DefaultTimeout with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with BeforeAndAfterEach with MockitoSugar with SpartaSerializer { val tempDir: Path = Files.createTempDirectory("test") tempDir.toFile.deleteOnExit() val localConfig: Config = ConfigFactory.parseString( s""" |sparta{ | api { | host = local | port= 7777 | } |} | |sparta.config.driverPackageLocation = "$tempDir" """.stripMargin) val fileList = Seq(BodyPart("reference.conf", "file")) override def beforeEach(): Unit = { SpartaConfig.initMainConfig(Option(localConfig), SpartaConfigFactory(localConfig)) SpartaConfig.initApiConfig() } override def afterAll: Unit = { shutdown() } override implicit val timeout: Timeout = Timeout(15 seconds) "DriverActor " must { "Not save files with wrong extension" in { val driverActor = system.actorOf(Props(new DriverActor())) driverActor ! UploadDrivers(fileList) expectMsgPF() { case SpartaFilesResponse(Success(f: Seq[SpartaFile])) => f.isEmpty shouldBe true } } "Not upload empty files" in { val driverActor = system.actorOf(Props(new DriverActor())) driverActor ! UploadDrivers(Seq.empty) expectMsgPF() { case SpartaFilesResponse(Failure(f)) => f.getMessage shouldBe "At least one file is expected" } } "Save a file" in { val driverActor = system.actorOf(Props(new DriverActor())) driverActor ! UploadDrivers(Seq(BodyPart("reference.conf", "file.jar"))) expectMsgPF() { case SpartaFilesResponse(Success(f: Seq[SpartaFile])) => f.head.fileName.endsWith("file.jar") shouldBe true } } } }
Example 84
Source File: PluginActorTest.scala From sparta with Apache License 2.0 | 5 votes |
package com.stratio.sparta.serving.api.actor import java.nio.file.{Files, Path} import akka.actor.{ActorSystem, Props} import akka.testkit.{DefaultTimeout, ImplicitSender, TestKit} import akka.util.Timeout import com.stratio.sparta.serving.api.actor.PluginActor.{PluginResponse, UploadPlugins} import com.stratio.sparta.serving.api.constants.HttpConstant import com.stratio.sparta.serving.core.config.{SpartaConfig, SpartaConfigFactory} import com.stratio.sparta.serving.core.models.SpartaSerializer import com.stratio.sparta.serving.core.models.files.{SpartaFile, SpartaFilesResponse} import com.typesafe.config.{Config, ConfigFactory} import org.junit.runner.RunWith import org.scalatest._ import org.scalatest.junit.JUnitRunner import org.scalatest.mock.MockitoSugar import spray.http.BodyPart import scala.concurrent.duration._ import scala.language.postfixOps import scala.util.{Failure, Success} @RunWith(classOf[JUnitRunner]) class PluginActorTest extends TestKit(ActorSystem("PluginActorSpec")) with DefaultTimeout with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with BeforeAndAfterEach with MockitoSugar with SpartaSerializer { val tempDir: Path = Files.createTempDirectory("test") tempDir.toFile.deleteOnExit() val localConfig: Config = ConfigFactory.parseString( s""" |sparta{ | api { | host = local | port= 7777 | } |} | |sparta.config.pluginPackageLocation = "$tempDir" """.stripMargin) val fileList = Seq(BodyPart("reference.conf", "file")) override def beforeEach(): Unit = { SpartaConfig.initMainConfig(Option(localConfig), SpartaConfigFactory(localConfig)) SpartaConfig.initApiConfig() } override def afterAll: Unit = { shutdown() } override implicit val timeout: Timeout = Timeout(15 seconds) "PluginActor " must { "Not save files with wrong extension" in { val pluginActor = system.actorOf(Props(new PluginActor())) pluginActor ! UploadPlugins(fileList) expectMsgPF() { case SpartaFilesResponse(Success(f: Seq[SpartaFile])) => f.isEmpty shouldBe true } } "Not upload empty files" in { val pluginActor = system.actorOf(Props(new PluginActor())) pluginActor ! UploadPlugins(Seq.empty) expectMsgPF() { case SpartaFilesResponse(Failure(f)) => f.getMessage shouldBe "At least one file is expected" } } "Save a file" in { val pluginActor = system.actorOf(Props(new PluginActor())) pluginActor ! UploadPlugins(Seq(BodyPart("reference.conf", "file.jar"))) expectMsgPF() { case SpartaFilesResponse(Success(f: Seq[SpartaFile])) => f.head.fileName.endsWith("file.jar") shouldBe true } } } }
Example 85
Source File: WorkerServiceSpec.scala From incubator-retired-gearpump with Apache License 2.0 | 5 votes |
package org.apache.gearpump.services import scala.concurrent.duration._ import scala.util.{Success, Try} import akka.actor.ActorRef import akka.http.scaladsl.model.headers.`Cache-Control` import akka.http.scaladsl.testkit.{RouteTestTimeout, ScalatestRouteTest} import akka.testkit.TestActor.{AutoPilot, KeepRunning} import akka.testkit.{TestKit, TestProbe} import com.typesafe.config.{Config, ConfigFactory} import org.scalatest.{BeforeAndAfterAll, FlatSpec, Matchers} import org.apache.gearpump.cluster.AppMasterToMaster.{GetWorkerData, WorkerData} import org.apache.gearpump.cluster.ClientToMaster.{QueryHistoryMetrics, QueryWorkerConfig, ResolveWorkerId} import org.apache.gearpump.cluster.MasterToClient.{HistoryMetrics, HistoryMetricsItem, ResolveWorkerIdResult, WorkerConfig} import org.apache.gearpump.cluster.TestUtil import org.apache.gearpump.cluster.worker.{WorkerId, WorkerSummary} // NOTE: This cannot be removed!!! import org.apache.gearpump.services.util.UpickleUtil._ class WorkerServiceSpec extends FlatSpec with ScalatestRouteTest with Matchers with BeforeAndAfterAll { override def testConfig: Config = TestUtil.DEFAULT_CONFIG protected def actorRefFactory = system val mockWorker = TestProbe() protected def master = mockMaster.ref protected def workerRoute = new WorkerService(master, system).route mockWorker.setAutoPilot { new AutoPilot { def run(sender: ActorRef, msg: Any): AutoPilot = msg match { case GetWorkerData(workerId) => sender ! WorkerData(WorkerSummary.empty) KeepRunning case QueryWorkerConfig(workerId) => sender ! WorkerConfig(null) KeepRunning case QueryHistoryMetrics(path, _, _, _) => sender ! HistoryMetrics(path, List.empty[HistoryMetricsItem]) KeepRunning } } } val mockMaster = TestProbe() mockMaster.setAutoPilot { new AutoPilot { def run(sender: ActorRef, msg: Any): AutoPilot = msg match { case ResolveWorkerId(workerId) => sender ! ResolveWorkerIdResult(Success(mockWorker.ref)) KeepRunning } } } "ConfigQueryService" should "return config for worker" in { implicit val customTimeout = RouteTestTimeout(15.seconds) (Get(s"/api/$REST_VERSION/worker/${WorkerId.render(WorkerId(0, 0L))}/config") ~> workerRoute) ~> check { val responseBody = responseAs[String] val config = Try(ConfigFactory.parseString(responseBody)) assert(config.isSuccess) } } it should "return WorkerData" in { implicit val customTimeout = RouteTestTimeout(15.seconds) (Get(s"/api/$REST_VERSION/worker/${WorkerId.render(WorkerId(1, 0L))}") ~> workerRoute) ~> check { val responseBody = responseAs[String] val config = Try(ConfigFactory.parseString(responseBody)) assert(config.isSuccess) // Check the header, should contains no-cache header. // Cache-Control:no-cache, max-age=0 val noCache = header[`Cache-Control`].get.value() assert(noCache == "no-cache, max-age=0") } } "MetricsQueryService" should "return history metrics" in { implicit val customTimeout = RouteTestTimeout(15.seconds) (Get(s"/api/$REST_VERSION/worker/${WorkerId.render(WorkerId(0, 0L))}/metrics/worker") ~> workerRoute) ~> check { val responseBody = responseAs[String] val config = Try(ConfigFactory.parseString(responseBody)) assert(config.isSuccess) } } override def afterAll { TestKit.shutdownActorSystem(system) } }
Example 86
Source File: TimeOutSchedulerSpec.scala From incubator-retired-gearpump with Apache License 2.0 | 5 votes |
package org.apache.gearpump.util import scala.concurrent.duration._ import akka.actor._ import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe} import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import org.slf4j.Logger import org.apache.gearpump.cluster.TestUtil class TimeOutSchedulerSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("WorkerSpec", TestUtil.DEFAULT_CONFIG)) val mockActor = TestProbe() override def afterAll { TestKit.shutdownActorSystem(system) } "The TimeOutScheduler" should { "handle the time out event" in { val testActorRef = TestActorRef(Props(classOf[TestActor], mockActor.ref)) val testActor = testActorRef.underlyingActor.asInstanceOf[TestActor] testActor.sendMsgToIgnore() mockActor.expectMsg(30.seconds, MessageTimeOut) } } } case object Echo case object MessageTimeOut class TestActor(mock: ActorRef) extends Actor with TimeOutScheduler { private val LOG: Logger = LogUtil.getLogger(getClass) val target = context.actorOf(Props(classOf[EchoActor])) override def receive: Receive = { case _ => } def sendMsgToIgnore(): Unit = { sendMsgWithTimeOutCallBack(target, Echo, 2000, sendMsgTimeOut()) } private def sendMsgTimeOut(): Unit = { mock ! MessageTimeOut } } class EchoActor extends Actor { override def receive: Receive = { case _ => } }
Example 87
Source File: SignatureProducerActorSpecForIntegration.scala From incubator-toree with Apache License 2.0 | 5 votes |
package integration.security import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit} import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.communication.security.{Hmac, SignatureProducerActor} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers} object SignatureProducerActorSpecForIntegration { val config = """ akka { loglevel = "WARNING" }""" } class SignatureProducerActorSpecForIntegration extends TestKit( ActorSystem( "SignatureProducerActorSpec", ConfigFactory.parseString(SignatureProducerActorSpecForIntegration.config) ) ) with ImplicitSender with FunSpecLike with Matchers with BeforeAndAfter { private val sigKey = "12345" private var signatureProducer: ActorRef = _ before { val hmac = Hmac(sigKey) signatureProducer = system.actorOf(Props(classOf[SignatureProducerActor], hmac)) } after { signatureProducer = null } describe("SignatureProducerActor") { describe("#receive") { it("should return the correct signature for a kernel message") { val expectedSignature = "1c4859a7606fd93eb5f73c3d9642f9bc860453ba42063961a00d02ed820147b5" val message = KernelMessage( null, "", Header("a", "b", "c", "d", "e"), ParentHeader("f", "g", "h", "i", "j"), Metadata(), "<STRING>" ) signatureProducer ! message expectMsg(expectedSignature) } } } }
Example 88
Source File: SignatureCheckerActorSpecForIntegration.scala From incubator-toree with Apache License 2.0 | 5 votes |
package integration.security import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit} import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.communication.security.{Hmac, SignatureCheckerActor} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers} import play.api.libs.json.Json object SignatureCheckerActorSpecForIntegration { val config = """ akka { loglevel = "WARNING" }""" } class SignatureCheckerActorSpecForIntegration extends TestKit( ActorSystem( "SignatureCheckerActorSpec", ConfigFactory.parseString(SignatureCheckerActorSpecForIntegration.config) ) ) with ImplicitSender with FunSpecLike with Matchers with BeforeAndAfter { private val sigKey = "12345" private val signature = "1c4859a7606fd93eb5f73c3d9642f9bc860453ba42063961a00d02ed820147b5" private val goodMessage = KernelMessage( null, signature, Header("a", "b", "c", "d", "e"), ParentHeader("f", "g", "h", "i", "j"), Metadata(), "<STRING>" ) private val badMessage = KernelMessage( null, "wrong signature", Header("a", "b", "c", "d", "e"), ParentHeader("f", "g", "h", "i", "j"), Metadata(), "<STRING>" ) private var signatureChecker: ActorRef = _ before { val hmac = Hmac(sigKey) signatureChecker = system.actorOf(Props(classOf[SignatureCheckerActor], hmac)) } after { signatureChecker = null } describe("SignatureCheckerActor") { describe("#receive") { it("should return true if the kernel message is valid") { val blob = Json.stringify(Json.toJson(goodMessage.header)) :: Json.stringify(Json.toJson(goodMessage.parentHeader)) :: Json.stringify(Json.toJson(goodMessage.metadata)) :: goodMessage.contentString :: Nil signatureChecker ! ((goodMessage.signature, blob)) expectMsg(true) } it("should return false if the kernel message is invalid") { val blob = Json.stringify(Json.toJson(badMessage.header)) :: Json.stringify(Json.toJson(badMessage.parentHeader)) :: Json.stringify(Json.toJson(badMessage.metadata)) :: badMessage.contentString :: Nil signatureChecker ! ((badMessage.signature, blob)) expectMsg(false) } } } }
Example 89
Source File: OrderedSupportSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.communication.utils import akka.actor._ import akka.testkit.{ImplicitSender, TestKit} import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} case class OrderedType() case class NotOrderedType() case class FinishProcessingMessage() case class ReceiveMessageCount(count: Int) class TestOrderedSupport extends OrderedSupport { var receivedCounter = 0 override def orderedTypes(): Seq[Class[_]] = Seq(classOf[OrderedType]) override def receive: Receive = { case OrderedType() => startProcessing() receivedCounter = receivedCounter + 1 sender ! ReceiveMessageCount(receivedCounter) case NotOrderedType() => receivedCounter = receivedCounter + 1 sender ! ReceiveMessageCount(receivedCounter) case FinishProcessingMessage() => finishedProcessing() } } class OrderedSupportSpec extends TestKit(ActorSystem("OrderedSupportSystem")) with ImplicitSender with Matchers with FunSpecLike with MockitoSugar { describe("OrderedSupport"){ describe("#waiting"){ it("should wait for types defined in orderedTypes"){ val testOrderedSupport = system.actorOf(Props[TestOrderedSupport]) // Send a message having a type in orderedTypes // Starts processing and is handled with receive() testOrderedSupport ! new OrderedType // This message should be handled with waiting() testOrderedSupport ! new OrderedType // Verify receive was not called for the second OrderedType expectMsg(ReceiveMessageCount(1)) } it("should process types not defined in orderedTypes"){ val testOrderedSupport = system.actorOf(Props[TestOrderedSupport]) // Send a message that starts the processing testOrderedSupport ! new OrderedType // Send a message having a type not in orderedTypes testOrderedSupport ! new NotOrderedType // Verify receive did get called for NotOrderedType expectMsg(ReceiveMessageCount(1)) expectMsg(ReceiveMessageCount(2)) } } describe("#finishedProcessing"){ it("should switch actor to receive method"){ val testOrderedSupport = system.actorOf(Props[TestOrderedSupport]) // Switch actor to waiting mode testOrderedSupport ! new OrderedType // Call finishedProcessing testOrderedSupport ! new FinishProcessingMessage // Sending something that would match in receive, and is in orderedTypes testOrderedSupport ! new OrderedType expectMsg(ReceiveMessageCount(1)) expectMsg(ReceiveMessageCount(2)) } } } }
Example 90
Source File: ShellClientSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.client.socket import java.util.UUID import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{TestProbe, ImplicitSender, TestKit} import org.apache.toree.communication.ZMQMessage import org.apache.toree.communication.security.SecurityActorType import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.client.ActorLoader import org.apache.toree.kernel.protocol.v5.content.ExecuteRequest import org.scalatest.mock.MockitoSugar import org.scalatest.{Matchers, FunSpecLike} import org.mockito.Mockito._ import org.mockito.Matchers._ import play.api.libs.json.Json class ShellClientSpec extends TestKit(ActorSystem("ShellActorSpec")) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { private val SignatureEnabled = true describe("ShellClientActor") { val socketFactory = mock[SocketFactory] val mockActorLoader = mock[ActorLoader] val probe : TestProbe = TestProbe() when(socketFactory.ShellClient( any(classOf[ActorSystem]), any(classOf[ActorRef]) )).thenReturn(probe.ref) val signatureManagerProbe = TestProbe() doReturn(system.actorSelection(signatureManagerProbe.ref.path.toString)) .when(mockActorLoader).load(SecurityActorType.SignatureManager) val shellClient = system.actorOf(Props( classOf[ShellClient], socketFactory, mockActorLoader, SignatureEnabled )) describe("send execute request") { it("should send execute request") { val request = ExecuteRequest( "foo", false, true, UserExpressions(), true ) val header = Header( UUID.randomUUID().toString, "spark", UUID.randomUUID().toString, MessageType.Incoming.ExecuteRequest.toString, "5.0" ) val kernelMessage = KernelMessage( Seq[Array[Byte]](), "", header, HeaderBuilder.empty, Metadata(), Json.toJson(request).toString ) shellClient ! kernelMessage // Echo back the kernel message sent to have a signature injected signatureManagerProbe.expectMsgClass(classOf[KernelMessage]) signatureManagerProbe.reply(kernelMessage) probe.expectMsgClass(classOf[ZMQMessage]) } } } }
Example 91
Source File: HeartbeatClientSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.client.socket import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{TestProbe, ImplicitSender, TestKit} import org.apache.toree.communication.ZMQMessage import org.apache.toree.kernel.protocol.v5.client.ActorLoader import org.scalatest.mock.MockitoSugar import org.scalatest.{Matchers, FunSpecLike} import org.mockito.Matchers._ import org.mockito.Mockito._ class HeartbeatClientSpec extends TestKit(ActorSystem("HeartbeatActorSpec")) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("HeartbeatClientActor") { val socketFactory = mock[SocketFactory] val mockActorLoader = mock[ActorLoader] val probe : TestProbe = TestProbe() when(socketFactory.HeartbeatClient(any(classOf[ActorSystem]), any(classOf[ActorRef]))).thenReturn(probe.ref) val heartbeatClient = system.actorOf(Props( classOf[HeartbeatClient], socketFactory, mockActorLoader, true )) describe("send heartbeat") { it("should send ping ZMQMessage") { heartbeatClient ! HeartbeatMessage probe.expectMsgClass(classOf[ZMQMessage]) } } } }
Example 92
Source File: SparkKernelClientSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.client import akka.actor.ActorSystem import akka.testkit.{TestKit, TestProbe} import org.apache.toree.comm.{CommCallbacks, CommStorage, CommRegistrar} import org.apache.toree.kernel.protocol.v5 import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.client.execution.ExecuteRequestTuple import scala.concurrent.duration._ import org.mockito.Mockito._ import org.mockito.Matchers.{eq => mockEq, _} import org.scalatest.mock.MockitoSugar import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers} class SparkKernelClientSpec extends TestKit(ActorSystem("SparkKernelClientActorSystem")) with Matchers with MockitoSugar with FunSpecLike with BeforeAndAfter { private val TestTargetName = "some target" private var mockActorLoader: ActorLoader = _ private var mockCommRegistrar: CommRegistrar = _ private var sparkKernelClient: SparkKernelClient = _ private var executeRequestProbe: TestProbe = _ private var shellClientProbe: TestProbe = _ before { mockActorLoader = mock[ActorLoader] mockCommRegistrar = mock[CommRegistrar] executeRequestProbe = TestProbe() when(mockActorLoader.load(MessageType.Incoming.ExecuteRequest)) .thenReturn(system.actorSelection(executeRequestProbe.ref.path.toString)) shellClientProbe = TestProbe() when(mockActorLoader.load(SocketType.ShellClient)) .thenReturn(system.actorSelection(shellClientProbe.ref.path.toString)) sparkKernelClient = new SparkKernelClient( mockActorLoader, system, mockCommRegistrar) } describe("SparkKernelClient") { describe("#execute") { it("should send an ExecuteRequest message") { val func = (x: Any) => println(x) sparkKernelClient.execute("val foo = 2") executeRequestProbe.expectMsgClass(classOf[ExecuteRequestTuple]) } } } }
Example 93
Source File: CodeCompleteHandlerSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.handler import akka.actor._ import akka.testkit.{TestProbe, ImplicitSender, TestKit} import org.apache.toree.Main import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.content.CompleteRequest import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader import org.apache.toree.kernel.protocol.v5Test._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, BeforeAndAfter, Matchers} import org.mockito.Mockito._ import test.utils.MaxAkkaTestTimeout class CodeCompleteHandlerSpec extends TestKit( ActorSystem("CodeCompleteHandlerSpec", None, Some(Main.getClass.getClassLoader)) ) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar with BeforeAndAfter { var actorLoader: ActorLoader = _ var handlerActor: ActorRef = _ var kernelMessageRelayProbe: TestProbe = _ var interpreterProbe: TestProbe = _ var statusDispatchProbe: TestProbe = _ before { actorLoader = mock[ActorLoader] handlerActor = system.actorOf(Props(classOf[CodeCompleteHandler], actorLoader)) kernelMessageRelayProbe = TestProbe() when(actorLoader.load(SystemActorType.KernelMessageRelay)) .thenReturn(system.actorSelection(kernelMessageRelayProbe.ref.path.toString)) interpreterProbe = new TestProbe(system) when(actorLoader.load(SystemActorType.Interpreter)) .thenReturn(system.actorSelection(interpreterProbe.ref.path.toString)) statusDispatchProbe = new TestProbe(system) when(actorLoader.load(SystemActorType.StatusDispatch)) .thenReturn(system.actorSelection(statusDispatchProbe.ref.path.toString)) } def replyToHandlerWithOkAndResult() = { val expectedClass = classOf[CompleteRequest] interpreterProbe.expectMsgClass(expectedClass) interpreterProbe.reply((0, List[String]())) } def replyToHandlerWithOkAndBadResult() = { val expectedClass = classOf[CompleteRequest] interpreterProbe.expectMsgClass(expectedClass) interpreterProbe.reply("hello") } describe("CodeCompleteHandler (ActorLoader)") { it("should send a CompleteRequest") { handlerActor ! MockCompleteRequestKernelMessage replyToHandlerWithOkAndResult() kernelMessageRelayProbe.fishForMessage(MaxAkkaTestTimeout) { case KernelMessage(_, _, header, _, _, _) => header.msg_type == MessageType.Outgoing.CompleteReply.toString } } it("should throw an error for bad JSON") { handlerActor ! MockKernelMessageWithBadJSON var result = false try { replyToHandlerWithOkAndResult() } catch { case t: Throwable => result = true } result should be (true) } it("should throw an error for bad code completion") { handlerActor ! MockCompleteRequestKernelMessage try { replyToHandlerWithOkAndBadResult() } catch { case error: Exception => error.getMessage should be ("Parse error in CodeCompleteHandler") } } it("should send an idle message") { handlerActor ! MockCompleteRequestKernelMessage replyToHandlerWithOkAndResult() statusDispatchProbe.fishForMessage(MaxAkkaTestTimeout) { case Tuple2(status, _) => status == KernelStatusType.Idle } } } }
Example 94
Source File: GenericSocketMessageHandlerSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.handler import akka.actor.{ActorSystem, Props, ActorRef, ActorSelection} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader import org.apache.toree.kernel.protocol.v5Test._ import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{Matchers, FunSpecLike} import test.utils.MaxAkkaTestTimeout class GenericSocketMessageHandlerSpec extends TestKit( ActorSystem( "GenericSocketMessageHandlerSystem", None, Some(org.apache.toree.Main.getClass.getClassLoader) )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("GenericSocketMessageHandler( ActorLoader, SocketType )") { // Create a mock ActorLoader for the Relay we are going to test val actorLoader: ActorLoader = mock[ActorLoader] // Create a probe for the ActorSelection that the ActorLoader will return val selectionProbe: TestProbe = TestProbe() val selection: ActorSelection = system.actorSelection(selectionProbe.ref.path.toString) when(actorLoader.load(SocketType.Control)).thenReturn(selection) // The Relay we are going to be testing against val genericHandler: ActorRef = system.actorOf( Props(classOf[GenericSocketMessageHandler], actorLoader, SocketType.Control) ) describe("#receive( KernelMessage )") { genericHandler ! MockKernelMessage it("should send the message to the selected actor"){ selectionProbe.expectMsg(MaxAkkaTestTimeout, MockKernelMessage) } } } }
Example 95
Source File: KernelInfoRequestHandlerSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.handler import akka.actor.{ActorSelection, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.apache.toree.Main import org.apache.toree.kernel.protocol.v5.content.KernelInfoReply import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader import org.apache.toree.kernel.protocol.v5._ import org.mockito.AdditionalMatchers.{not => mockNot} import org.mockito.Matchers.{eq => mockEq} import com.typesafe.config.ConfigFactory import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} import play.api.libs.json.Json import test.utils.MaxAkkaTestTimeout object KernelInfoRequestHandlerSpec { val config = """ akka { loglevel = "WARNING" }""" } class KernelInfoRequestHandlerSpec extends TestKit( ActorSystem("KernelInfoRequestHandlerSpec", ConfigFactory.parseString(KernelInfoRequestHandlerSpec.config), Main.getClass.getClassLoader) ) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { val actorLoader: ActorLoader = mock[ActorLoader] val actor = system.actorOf(Props(classOf[KernelInfoRequestHandler], actorLoader, LanguageInfo("test", "1.0.0", Some(".test")))) val relayProbe : TestProbe = TestProbe() val relaySelection : ActorSelection = system.actorSelection(relayProbe.ref.path) when(actorLoader.load(SystemActorType.KernelMessageRelay)) .thenReturn(relaySelection) when(actorLoader.load(mockNot(mockEq(SystemActorType.KernelMessageRelay)))) .thenReturn(system.actorSelection("")) val header = Header("","","","","") val kernelMessage = new KernelMessage( Seq[Array[Byte]](), "test message", header, header, Metadata(), "{}" ) describe("Kernel Info Request Handler") { it("should return a KernelMessage containing kernel info response") { actor ! kernelMessage val reply = relayProbe.receiveOne(MaxAkkaTestTimeout).asInstanceOf[KernelMessage] val kernelInfo = Json.parse(reply.contentString).as[KernelInfoReply] kernelInfo.implementation should be ("spark") } } }
Example 96
Source File: ShellSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel.socket import java.nio.charset.Charset import akka.actor.{ActorSelection, ActorRef, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import akka.util.ByteString import org.apache.toree.communication.ZMQMessage import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.kernel.{ActorLoader, Utilities} import org.apache.toree.kernel.protocol.v5Test._ import Utilities._ import com.typesafe.config.ConfigFactory import org.mockito.Matchers._ import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} import test.utils.MaxAkkaTestTimeout object ShellSpec { val config =""" akka { loglevel = "WARNING" }""" } class ShellSpec extends TestKit( ActorSystem( "ShellActorSpec", ConfigFactory.parseString(ShellSpec.config), org.apache.toree.Main.getClass.getClassLoader )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("Shell") { val socketFactory = mock[SocketFactory] val actorLoader = mock[ActorLoader] val socketProbe : TestProbe = TestProbe() when(socketFactory.Shell(any(classOf[ActorSystem]), any(classOf[ActorRef]))).thenReturn(socketProbe.ref) val relayProbe : TestProbe = TestProbe() val relaySelection : ActorSelection = system.actorSelection(relayProbe.ref.path) when(actorLoader.load(SystemActorType.KernelMessageRelay)).thenReturn(relaySelection) val shell = system.actorOf(Props(classOf[Shell], socketFactory, actorLoader)) describe("#receive") { it("( KernelMessage ) should reply with a ZMQMessage via the socket") { // Use the implicit to convert the KernelMessage to ZMQMessage val MockZMQMessage : ZMQMessage = MockKernelMessage shell ! MockKernelMessage socketProbe.expectMsg(MockZMQMessage) } it("( ZMQMessage ) should forward ZMQ Strings and KernelMessage to Relay") { // Use the implicit to convert the KernelMessage to ZMQMessage val MockZMQMessage : ZMQMessage = MockKernelMessage shell ! MockZMQMessage // Should get the last four (assuming no buffer) strings in UTF-8 val zmqStrings = MockZMQMessage.frames.map((byteString: ByteString) => new String(byteString.toArray, Charset.forName("UTF-8")) ).takeRight(4) val kernelMessage: KernelMessage = MockZMQMessage relayProbe.expectMsg(MaxAkkaTestTimeout, (zmqStrings, kernelMessage)) } } } }
Example 97
Source File: IOPubSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel.socket import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.apache.toree.communication.ZMQMessage import org.apache.toree.kernel.protocol.v5.kernel.Utilities import org.apache.toree.kernel.protocol.v5Test._ import Utilities._ import com.typesafe.config.ConfigFactory import org.mockito.Matchers._ import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} import test.utils.MaxAkkaTestTimeout object IOPubSpec { val config =""" akka { loglevel = "WARNING" }""" } class IOPubSpec extends TestKit( ActorSystem("IOPubActorSpec", ConfigFactory.parseString(IOPubSpec.config), org.apache.toree.Main.getClass.getClassLoader )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("IOPubActor") { val socketFactory = mock[SocketFactory] val probe : TestProbe = TestProbe() when(socketFactory.IOPub(any(classOf[ActorSystem]))).thenReturn(probe.ref) val socket = system.actorOf(Props(classOf[IOPub], socketFactory)) // TODO test that the response type changed describe("#receive") { it("should reply with a ZMQMessage") { // Use the implicit to convert the KernelMessage to ZMQMessage val MockZMQMessage : ZMQMessage = MockKernelMessage socket ! MockKernelMessage probe.expectMsg(MaxAkkaTestTimeout, MockZMQMessage) } } } }
Example 98
Source File: HeartbeatSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel.socket import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import akka.util.ByteString import org.apache.toree.communication.ZMQMessage import com.typesafe.config.ConfigFactory import org.mockito.Matchers._ import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} import test.utils.MaxAkkaTestTimeout object HeartbeatSpec { val config = """ akka { loglevel = "WARNING" }""" } class HeartbeatSpec extends TestKit( ActorSystem( "HeartbeatActorSpec", ConfigFactory.parseString(HeartbeatSpec.config), org.apache.toree.Main.getClass.getClassLoader )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { val SomeMessage: String = "some message" val SomeZMQMessage: ZMQMessage = ZMQMessage(ByteString(SomeMessage.getBytes)) describe("HeartbeatActor") { val socketFactory = mock[SocketFactory] val probe : TestProbe = TestProbe() when(socketFactory.Heartbeat(any(classOf[ActorSystem]), any(classOf[ActorRef]))).thenReturn(probe.ref) val heartbeat = system.actorOf(Props(classOf[Heartbeat], socketFactory)) describe("send heartbeat") { it("should receive and send same ZMQMessage") { heartbeat ! SomeZMQMessage probe.expectMsg(MaxAkkaTestTimeout, SomeZMQMessage) } } } }
Example 99
Source File: StdinSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel.socket import java.nio.charset.Charset import akka.actor.{Props, ActorSelection, ActorRef, ActorSystem} import akka.testkit.{TestProbe, ImplicitSender, TestKit} import akka.util.ByteString import org.apache.toree.communication.ZMQMessage import org.apache.toree.kernel.protocol.v5.kernel.Utilities._ import org.apache.toree.kernel.protocol.v5Test._ import org.apache.toree.kernel.protocol.v5.{KernelMessage, SystemActorType} import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader import com.typesafe.config.ConfigFactory import org.scalatest.mock.MockitoSugar import org.scalatest.{Matchers, FunSpecLike} import org.mockito.Mockito._ import org.mockito.Matchers._ import test.utils.MaxAkkaTestTimeout object StdinSpec { val config =""" akka { loglevel = "WARNING" }""" } class StdinSpec extends TestKit(ActorSystem( "StdinActorSpec", ConfigFactory.parseString(StdinSpec.config), org.apache.toree.Main.getClass.getClassLoader )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("Stdin") { val socketFactory = mock[SocketFactory] val actorLoader = mock[ActorLoader] val socketProbe : TestProbe = TestProbe() when(socketFactory.Stdin(any(classOf[ActorSystem]), any(classOf[ActorRef]))).thenReturn(socketProbe.ref) val relayProbe : TestProbe = TestProbe() val relaySelection : ActorSelection = system.actorSelection(relayProbe.ref.path) when(actorLoader.load(SystemActorType.KernelMessageRelay)).thenReturn(relaySelection) val stdin = system.actorOf(Props(classOf[Stdin], socketFactory, actorLoader)) describe("#receive") { it("( KernelMessage ) should reply with a ZMQMessage via the socket") { // Use the implicit to convert the KernelMessage to ZMQMessage val MockZMQMessage : ZMQMessage = MockKernelMessage stdin ! MockKernelMessage socketProbe.expectMsg(MockZMQMessage) } it("( ZMQMessage ) should forward ZMQ Strings and KernelMessage to Relay") { // Use the implicit to convert the KernelMessage to ZMQMessage val MockZMQMessage : ZMQMessage = MockKernelMessage stdin ! MockZMQMessage // Should get the last four (assuming no buffer) strings in UTF-8 val zmqStrings = MockZMQMessage.frames.map((byteString: ByteString) => new String(byteString.toArray, Charset.forName("UTF-8")) ).takeRight(4) val kernelMessage: KernelMessage = MockZMQMessage relayProbe.expectMsg(MaxAkkaTestTimeout, (zmqStrings, kernelMessage)) } } } }
Example 100
Source File: ActorLoaderSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.apache.toree.kernel.protocol.v5.{MessageType, SocketType} import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} import test.utils.TestProbeProxyActor import test.utils.MaxAkkaTestTimeout class ActorLoaderSpec extends TestKit( ActorSystem( "ActorLoaderSpecSystem", None, Some(org.apache.toree.Main.getClass.getClassLoader) )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("ActorLoader"){ describe("#load( MessageType )"){ it("should load an ActorSelection that has been loaded into the system"){ val testProbe: TestProbe = TestProbe() system.actorOf(Props(classOf[TestProbeProxyActor], testProbe), MessageType.Outgoing.ClearOutput.toString) val actorLoader: ActorLoader = SimpleActorLoader(system) actorLoader.load(MessageType.Outgoing.ClearOutput) ! "<Test Message>" testProbe.expectMsg("<Test Message>") } it("should expect no message when there is no actor"){ val testProbe: TestProbe = TestProbe() val actorLoader: ActorLoader = SimpleActorLoader(system) actorLoader.load(MessageType.Outgoing.CompleteReply) ! "<Test Message>" testProbe.expectNoMessage(MaxAkkaTestTimeout) // This is to test to see if there the messages go to the actor inbox or the dead mail inbox system.actorOf(Props(classOf[TestProbeProxyActor], testProbe), MessageType.Outgoing.CompleteReply.toString) testProbe.expectNoMessage(MaxAkkaTestTimeout) } } describe("#load( SocketType )"){ it("should load an ActorSelection that has been loaded into the system"){ val testProbe: TestProbe = TestProbe() system.actorOf(Props(classOf[TestProbeProxyActor], testProbe), SocketType.Shell.toString) val actorLoader: ActorLoader = SimpleActorLoader(system) actorLoader.load(SocketType.Shell) ! "<Test Message>" testProbe.expectMsg("<Test Message>") } it("should expect no message when there is no actor"){ val testProbe: TestProbe = TestProbe() val actorLoader: ActorLoader = SimpleActorLoader(system) actorLoader.load(SocketType.IOPub) ! "<Test Message>" testProbe.expectNoMessage(MaxAkkaTestTimeout) // This is to test to see if there the messages go to the actor inbox or the dead mail inbox system.actorOf(Props(classOf[TestProbeProxyActor], testProbe), SocketType.IOPub.toString) testProbe.expectNoMessage(MaxAkkaTestTimeout) } } } }
Example 101
Source File: SimpleActorLoaderSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel import akka.actor.{ActorSelection, ActorSystem, Props} import akka.testkit.{TestKit, TestProbe} import org.apache.toree.kernel.protocol.v5.MessageType import org.scalatest.{FunSpecLike, Matchers} import test.utils.TestProbeProxyActor import test.utils.MaxAkkaTestTimeout class SimpleActorLoaderSpec extends TestKit( ActorSystem( "SimpleActorLoaderSpecSystem", None, Some(org.apache.toree.Main.getClass.getClassLoader) ) ) with FunSpecLike with Matchers { describe("SimpleActorLoader") { //val system = ActorSystem("SimpleActorLoaderSystem") val testMessage: String = "Hello Message" describe("#load( MessageType )") { it("should load a MessageType Actor"){ // Create a new test probe to verify our selection works val messageTypeProbe: TestProbe = new TestProbe(system) // Add an actor to the system to send a message to system.actorOf( Props(classOf[TestProbeProxyActor], messageTypeProbe), name = MessageType.Outgoing.ExecuteInput.toString ) // Create the ActorLoader with our test system val actorLoader: SimpleActorLoader = SimpleActorLoader(system) // Get the actor and send it a message val loadedMessageActor: ActorSelection = actorLoader.load(MessageType.Outgoing.ExecuteInput) loadedMessageActor ! testMessage // Assert the probe received the message messageTypeProbe.expectMsg(MaxAkkaTestTimeout, testMessage) } } } }
Example 102
Source File: StatusDispatchSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.dispatch import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{TestKit, TestProbe} import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.content.KernelStatus import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers} import play.api.libs.json.Json import test.utils.MaxAkkaTestTimeout class StatusDispatchSpec extends TestKit( ActorSystem( "StatusDispatchSystem", None, Some(org.apache.toree.Main.getClass.getClassLoader) ) ) with FunSpecLike with Matchers with MockitoSugar with BeforeAndAfter{ var statusDispatchRef: ActorRef = _ var relayProbe: TestProbe = _ before { // Mock the relay with a probe relayProbe = TestProbe() // Mock the ActorLoader val mockActorLoader: ActorLoader = mock[ActorLoader] when(mockActorLoader.load(SystemActorType.KernelMessageRelay)) .thenReturn(system.actorSelection(relayProbe.ref.path.toString)) statusDispatchRef = system.actorOf(Props(classOf[StatusDispatch],mockActorLoader)) } describe("StatusDispatch") { describe("#receive( KernelStatusType )") { it("should send a status message to the relay") { statusDispatchRef ! KernelStatusType.Busy // Check the kernel message is the correct type val statusMessage: KernelMessage = relayProbe.receiveOne(MaxAkkaTestTimeout).asInstanceOf[KernelMessage] statusMessage.header.msg_type should be (MessageType.Outgoing.Status.toString) // Check the status is what we sent val status: KernelStatus = Json.parse(statusMessage.contentString).as[KernelStatus] status.execution_state should be (KernelStatusType.Busy.toString) } } describe("#receive( KernelStatusType, Header )") { it("should send a status message to the relay") { val tuple = Tuple2(KernelStatusType.Busy, mock[Header]) statusDispatchRef ! tuple // Check the kernel message is the correct type val statusMessage: KernelMessage = relayProbe.receiveOne(MaxAkkaTestTimeout).asInstanceOf[KernelMessage] statusMessage.header.msg_type should be (MessageType.Outgoing.Status.toString) // Check the status is what we sent val status: KernelStatus = Json.parse(statusMessage.contentString).as[KernelStatus] status.execution_state should be (KernelStatusType.Busy.toString) } } } }
Example 103
Source File: StreamMethodsSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.api import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.apache.toree.kernel.protocol.v5 import org.apache.toree.kernel.protocol.v5.KernelMessage import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, BeforeAndAfter, Matchers} import play.api.libs.json.Json import test.utils.MaxAkkaTestTimeout import org.mockito.Mockito._ class StreamMethodsSpec extends TestKit( ActorSystem( "StreamMethodsSpec", None, Some(org.apache.toree.Main.getClass.getClassLoader) ) ) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar with BeforeAndAfter { private var kernelMessageRelayProbe: TestProbe = _ private var mockParentHeader: v5.ParentHeader = _ private var mockActorLoader: v5.kernel.ActorLoader = _ private var mockKernelMessage: v5.KernelMessage = _ private var streamMethods: StreamMethods = _ before { kernelMessageRelayProbe = TestProbe() mockParentHeader = mock[v5.ParentHeader] mockActorLoader = mock[v5.kernel.ActorLoader] doReturn(system.actorSelection(kernelMessageRelayProbe.ref.path)) .when(mockActorLoader).load(v5.SystemActorType.KernelMessageRelay) mockKernelMessage = mock[v5.KernelMessage] doReturn(mockParentHeader).when(mockKernelMessage).header streamMethods = new StreamMethods(mockActorLoader, mockKernelMessage) } describe("StreamMethods") { describe("#()") { it("should put the header of the given message as the parent header") { val expected = mockKernelMessage.header val actual = streamMethods.kmBuilder.build.parentHeader actual should be (expected) } } describe("#sendAll") { it("should send a message containing all of the given text") { val expected = "some text" streamMethods.sendAll(expected) val outgoingMessage = kernelMessageRelayProbe.receiveOne(MaxAkkaTestTimeout) val kernelMessage = outgoingMessage.asInstanceOf[KernelMessage] val actual = Json.parse(kernelMessage.contentString) .as[v5.content.StreamContent].text actual should be (expected) } } } }
Example 104
Source File: DeadLetterTest.scala From 006877 with MIT License | 5 votes |
package aia.channels import akka.testkit.{ ImplicitSender, TestProbe, TestKit } import akka.actor.{ PoisonPill, Props, DeadLetter, ActorSystem } import org.scalatest.{WordSpecLike, BeforeAndAfterAll, MustMatchers} import java.util.Date class DeadLetterTest extends TestKit(ActorSystem("DeadLetterTest")) with WordSpecLike with BeforeAndAfterAll with MustMatchers with ImplicitSender { override def afterAll() { system.terminate() } "DeadLetter" must { "catch messages send to deadLetters" in { val deadLetterMonitor = TestProbe() system.eventStream.subscribe( deadLetterMonitor.ref, classOf[DeadLetter]) val msg = new StateEvent(new Date(), "Connected") system.deadLetters ! msg val dead = deadLetterMonitor.expectMsgType[DeadLetter] dead.message must be(msg) dead.sender must be(testActor) dead.recipient must be(system.deadLetters) } "catch deadLetter messages send to deadLetters" in { val deadLetterMonitor = TestProbe() val actor = system.actorOf(Props[EchoActor], "echo") system.eventStream.subscribe( deadLetterMonitor.ref, classOf[DeadLetter]) val msg = new Order("me", "Akka in Action", 1) val dead = DeadLetter(msg, testActor, actor) system.deadLetters ! dead deadLetterMonitor.expectMsg(dead) system.stop(actor) } "catch messages send to terminated Actor" in { val deadLetterMonitor = TestProbe() system.eventStream.subscribe( deadLetterMonitor.ref, classOf[DeadLetter]) val actor = system.actorOf(Props[EchoActor], "echo") actor ! PoisonPill val msg = new Order("me", "Akka in Action", 1) actor ! msg val dead = deadLetterMonitor.expectMsgType[DeadLetter] dead.message must be(msg) dead.sender must be(testActor) dead.recipient must be(actor) } } }
Example 105
Source File: MonitorActorTest.scala From 006877 with MIT License | 5 votes |
package aia.performance.monitor import org.scalatest.{WordSpecLike, BeforeAndAfterAll, MustMatchers} import akka.testkit.{ TestProbe, TestKit } import akka.actor.{ Props, ActorSystem } import concurrent.duration._ class MonitorActorTest extends TestKit(ActorSystem("MonitorActorTest")) with WordSpecLike with BeforeAndAfterAll with MustMatchers { "Actor" must { "send statistics" in { val statProbe = TestProbe() system.eventStream.subscribe( statProbe.ref, classOf[ActorStatistics]) val testActor = system.actorOf(Props( new ProcessTestActor(1.second) with MonitorActor), "monitorActor") statProbe.send(testActor, "message") statProbe.send(testActor, "message2") statProbe.send(testActor, "message3") val stat = statProbe.expectMsgType[ActorStatistics] println(stat) stat.exitTime - stat.entryTime must be(1000L +- 20) val stat2 = statProbe.expectMsgType[ActorStatistics] println(stat2) stat2.exitTime - stat2.entryTime must be(1000L +- 20) val stat3 = statProbe.expectMsgType[ActorStatistics] println(stat3) stat3.exitTime - stat3.entryTime must be(1000L +- 20) Thread.sleep(2000) system.stop(testActor) system.eventStream.unsubscribe(statProbe.ref) } } }
Example 106
Source File: TicketSellerSpec.scala From 006877 with MIT License | 5 votes |
package com.goticks import akka.actor.{Props, ActorSystem} import akka.testkit.{ImplicitSender, TestKit} import org.scalatest.{WordSpecLike, MustMatchers} class TickerSellerSpec extends TestKit(ActorSystem("testTickets")) with WordSpecLike with MustMatchers with ImplicitSender with StopSystemAfterAll { "The TicketSeller" must { "Sell tickets until they are sold out" in { import TicketSeller._ def mkTickets = (1 to 10).map(i=>Ticket(i)).toVector val event = "RHCP" val ticketingActor = system.actorOf(TicketSeller.props(event)) ticketingActor ! Add(mkTickets) ticketingActor ! Buy(1) expectMsg(Tickets(event, Vector(Ticket(1)))) val nrs = (2 to 10) nrs.foreach(_ => ticketingActor ! Buy(1)) val tickets = receiveN(9) tickets.zip(nrs).foreach { case (Tickets(event, Vector(Ticket(id))), ix) => id must be(ix) } ticketingActor ! Buy(1) expectMsg(Tickets(event)) } "Sell tickets in batches until they are sold out" in { import TicketSeller._ val firstBatchSize = 10 def mkTickets = (1 to (10 * firstBatchSize)).map(i=>Ticket(i)).toVector val event = "Madlib" val ticketingActor = system.actorOf(TicketSeller.props(event)) ticketingActor ! Add(mkTickets) ticketingActor ! Buy(firstBatchSize) val bought = (1 to firstBatchSize).map(Ticket).toVector expectMsg(Tickets(event, bought)) val secondBatchSize = 5 val nrBatches = 18 val batches = (1 to nrBatches * secondBatchSize) batches.foreach(_ => ticketingActor ! Buy(secondBatchSize)) val tickets = receiveN(nrBatches) tickets.zip(batches).foreach { case (Tickets(event, bought), ix) => bought.size must equal(secondBatchSize) val last = ix * secondBatchSize + firstBatchSize val first = ix * secondBatchSize + firstBatchSize - (secondBatchSize - 1) bought.map(_.id) must equal((first to last).toVector) case _ => } ticketingActor ! Buy(1) expectMsg(Tickets(event)) ticketingActor ! Buy(10) expectMsg(Tickets(event)) } } }
Example 107
Source File: BoxOfficeSpec.scala From 006877 with MIT License | 5 votes |
package com.goticks import akka.actor.{ ActorRef, ActorSystem, Props } import akka.testkit.{ DefaultTimeout, ImplicitSender, TestKit } import com.goticks.BoxOffice._ import com.goticks.TicketSeller._ import org.scalatest.{ MustMatchers, WordSpecLike } class BoxOfficeSpec extends TestKit(ActorSystem("testBoxOffice")) with WordSpecLike with MustMatchers with ImplicitSender with DefaultTimeout with StopSystemAfterAll { "The BoxOffice" must { "Create an event and get tickets from the correct Ticket Seller" in { val boxOffice = system.actorOf(BoxOffice.props) val eventName = "RHCP" boxOffice ! CreateEvent(eventName, 10) expectMsg(EventCreated(Event(eventName, 10))) boxOffice ! GetEvents expectMsg(Events(Vector(Event(eventName, 10)))) boxOffice ! BoxOffice.GetEvent(eventName) expectMsg(Some(Event(eventName, 10))) boxOffice ! GetTickets(eventName, 1) expectMsg(Tickets(eventName, Vector(Ticket(1)))) boxOffice ! GetTickets("DavidBowie", 1) expectMsg(Tickets("DavidBowie")) } "Create a child actor when an event is created and sends it a Tickets message" in { val boxOffice = system.actorOf(Props( new BoxOffice { override def createTicketSeller(name: String): ActorRef = testActor } ) ) val tickets = 3 val eventName = "RHCP" val expectedTickets = (1 to tickets).map(Ticket).toVector boxOffice ! CreateEvent(eventName, tickets) expectMsg(Add(expectedTickets)) expectMsg(EventCreated(Event(eventName, tickets))) } "Get and cancel an event that is not created yet" in { val boxOffice = system.actorOf(BoxOffice.props) val noneExitEventName = "noExitEvent" boxOffice ! BoxOffice.GetEvent(noneExitEventName) expectMsg(None) boxOffice ! CancelEvent(noneExitEventName) expectMsg(None) } "Cancel a ticket which event is not created " in { val boxOffice = system.actorOf(BoxOffice.props) val noneExitEventName = "noExitEvent" boxOffice ! CancelEvent(noneExitEventName) expectMsg(None) } "Cancel a ticket which event is created" in { val boxOffice = system.actorOf(BoxOffice.props) val eventName = "RHCP" val tickets = 10 boxOffice ! CreateEvent(eventName, tickets) expectMsg(EventCreated(Event(eventName, tickets))) boxOffice ! CancelEvent(eventName) expectMsg(Some(Event(eventName, tickets))) } } }
Example 108
Source File: HelloWorldTest.scala From 006877 with MIT License | 5 votes |
package aia.deploy import org.scalatest.{BeforeAndAfterAll, WordSpecLike} import org.scalatest.MustMatchers import akka.testkit.{TestActorRef, ImplicitSender, TestKit} import akka.actor.ActorSystem class HelloWorldTest extends TestKit(ActorSystem("HelloWorldTest")) with ImplicitSender with WordSpecLike with MustMatchers with BeforeAndAfterAll { val actor = TestActorRef[HelloWorld] override def afterAll(): Unit = { system.terminate() } "HelloWorld" must { "reply when sending a string" in { actor ! "everybody" expectMsg("Hello everybody") } } }
Example 109
Source File: LocalWordsSpec.scala From 006877 with MIT License | 5 votes |
package aia.cluster package words import akka.testkit.{ImplicitSender, TestKit} import akka.actor._ import org.scalatest._ import org.scalatest.MustMatchers import JobReceptionist._ import akka.routing.BroadcastPool trait CreateLocalWorkerRouter extends CreateWorkerRouter { this: Actor => override def createWorkerRouter: ActorRef = { context.actorOf(BroadcastPool(5).props(Props[JobWorker]), "worker-router") } } class TestJobMaster extends JobMaster with CreateLocalWorkerRouter class TestReceptionist extends JobReceptionist with CreateMaster { override def createMaster(name: String): ActorRef = context.actorOf(Props[TestJobMaster], name) } class LocalWordsSpec extends TestKit(ActorSystem("test")) with WordSpecLike with MustMatchers with StopSystemAfterAll with ImplicitSender { val receptionist = system.actorOf(Props[TestReceptionist], JobReceptionist.name) "The words system" must { "count the occurrence of words in a text" in { receptionist ! JobRequest("test2", List("this is a test ", "this is a test", "this is", "this")) expectMsg(JobSuccess("test2", Map("this" -> 4, "is"-> 3, "a" -> 2, "test" -> 2))) expectNoMsg } "count many occurences of words in a text" in { val words = List("this is a test ", "this is a test", "this is", "this") receptionist ! JobRequest("test3", (1 to 100).map(i=> words ++ words).flatten.toList) expectMsg(JobSuccess("test3", Map("this" -> 800, "is"-> 600, "a" -> 400, "test" -> 400))) expectNoMsg } "continue to process a job with intermittent failures" in { // the failure is simulated by a job worker throwing an exception on finding the word FAIL in the text. receptionist ! JobRequest("test4", List("this", "is", "a", "test", "FAIL!")) expectMsg(JobSuccess("test4", Map("this" -> 1, "is"-> 1, "a" -> 1, "test" -> 1))) expectNoMsg } } }
Example 110
Source File: TicketSellerSpec.scala From 006877 with MIT License | 5 votes |
package com.goticks import akka.actor.{ ActorSystem } import akka.testkit.{ImplicitSender, TestKit} import org.scalatest.{WordSpecLike, MustMatchers} class TickerSellerSpec extends TestKit(ActorSystem("testTickets")) with WordSpecLike with MustMatchers with ImplicitSender with StopSystemAfterAll { "The TicketSeller" must { "Sell tickets until they are sold out" in { import TicketSeller._ def mkTickets = (1 to 10).map(i=>Ticket(i)).toVector val event = "RHCP" val ticketingActor = system.actorOf(TicketSeller.props(event)) ticketingActor ! Add(mkTickets) ticketingActor ! Buy(1) expectMsg(Tickets(event, Vector(Ticket(1)))) val nrs = (2 to 10) nrs.foreach(_ => ticketingActor ! Buy(1)) val tickets = receiveN(9) tickets.zip(nrs).foreach { case (Tickets(event, Vector(Ticket(id))), ix) => id must be(ix) } ticketingActor ! Buy(1) expectMsg(Tickets(event)) } "Sell tickets in batches until they are sold out" in { import TicketSeller._ val firstBatchSize = 10 def mkTickets = (1 to (10 * firstBatchSize)).map(i=>Ticket(i)).toVector val event = "Madlib" val ticketingActor = system.actorOf(TicketSeller.props(event)) ticketingActor ! Add(mkTickets) ticketingActor ! Buy(firstBatchSize) val bought = (1 to firstBatchSize).map(Ticket).toVector expectMsg(Tickets(event, bought)) val secondBatchSize = 5 val nrBatches = 18 val batches = (1 to nrBatches * secondBatchSize) batches.foreach(_ => ticketingActor ! Buy(secondBatchSize)) val tickets = receiveN(nrBatches) tickets.zip(batches).foreach { case (Tickets(event, bought), ix) => bought.size must equal(secondBatchSize) val last = ix * secondBatchSize + firstBatchSize val first = ix * secondBatchSize + firstBatchSize - (secondBatchSize - 1) bought.map(_.id) must equal((first to last).toVector) case _ => } ticketingActor ! Buy(1) expectMsg(Tickets(event)) ticketingActor ! Buy(10) expectMsg(Tickets(event)) } } }
Example 111
Source File: BoxOfficeSpec.scala From 006877 with MIT License | 5 votes |
package com.goticks import akka.actor.{ ActorRef, Props, ActorSystem } import akka.testkit.{ TestKit, ImplicitSender, DefaultTimeout } import org.scalatest.{ WordSpecLike, MustMatchers } class BoxOfficeSpec extends TestKit(ActorSystem("testBoxOffice")) with WordSpecLike with MustMatchers with ImplicitSender with DefaultTimeout with StopSystemAfterAll { "The BoxOffice" must { "Create an event and get tickets from the correct Ticket Seller" in { import BoxOffice._ import TicketSeller._ val boxOffice = system.actorOf(BoxOffice.props) val eventName = "RHCP" boxOffice ! CreateEvent(eventName, 10) expectMsg(EventCreated(Event(eventName, 10))) boxOffice ! GetTickets(eventName, 1) expectMsg(Tickets(eventName, Vector(Ticket(1)))) boxOffice ! GetTickets("DavidBowie", 1) expectMsg(Tickets("DavidBowie")) } "Create a child actor when an event is created and sends it a Tickets message" in { import BoxOffice._ import TicketSeller._ val boxOffice = system.actorOf(Props( new BoxOffice { override def createTicketSeller(name: String): ActorRef = testActor } ) ) val tickets = 3 val eventName = "RHCP" val expectedTickets = (1 to tickets).map(Ticket).toVector boxOffice ! CreateEvent(eventName, tickets) expectMsg(Add(expectedTickets)) expectMsg(EventCreated(Event(eventName, tickets))) } } }
Example 112
Source File: FilteringActorTest.scala From 006877 with MIT License | 5 votes |
package aia.testdriven import akka.testkit.TestKit import akka.actor.{ Actor, Props, ActorRef, ActorSystem } import org.scalatest.{MustMatchers, WordSpecLike } class FilteringActorTest extends TestKit(ActorSystem("testsystem")) with WordSpecLike with MustMatchers with StopSystemAfterAll { "A Filtering Actor" must { "filter out particular messages" in { import FilteringActor._ val props = FilteringActor.props(testActor, 5) val filter = system.actorOf(props, "filter-1") filter ! Event(1) filter ! Event(2) filter ! Event(1) filter ! Event(3) filter ! Event(1) filter ! Event(4) filter ! Event(5) filter ! Event(5) filter ! Event(6) val eventIds = receiveWhile() { case Event(id) if id <= 5 => id } eventIds must be(List(1, 2, 3, 4, 5)) expectMsg(Event(6)) } "filter out particular messages using expectNoMsg" in { import FilteringActor._ val props = FilteringActor.props(testActor, 5) val filter = system.actorOf(props, "filter-2") filter ! Event(1) filter ! Event(2) expectMsg(Event(1)) expectMsg(Event(2)) filter ! Event(1) expectNoMsg filter ! Event(3) expectMsg(Event(3)) filter ! Event(1) expectNoMsg filter ! Event(4) filter ! Event(5) filter ! Event(5) expectMsg(Event(4)) expectMsg(Event(5)) expectNoMsg() } } } object FilteringActor { def props(nextActor: ActorRef, bufferSize: Int) = Props(new FilteringActor(nextActor, bufferSize)) case class Event(id: Long) } class FilteringActor(nextActor: ActorRef, bufferSize: Int) extends Actor { import FilteringActor._ var lastMessages = Vector[Event]() def receive = { case msg: Event => if (!lastMessages.contains(msg)) { lastMessages = lastMessages :+ msg nextActor ! msg if (lastMessages.size > bufferSize) { // 가장 오래된 것을 버린다 lastMessages = lastMessages.tail } } } }
Example 113
Source File: CoordinatorCleanupTests.scala From sparkplug with MIT License | 5 votes |
package springnz.sparkplug.client import akka.actor.{ ActorRef, ActorSystem } import akka.testkit.{ ImplicitSender, TestKit } import org.scalatest._ import springnz.sparkplug.executor.MessageTypes.{ CancelAllJobs, JobRequest, JobSuccess, ShutDown } import scala.concurrent.duration._ class CoordinatorCleanupTests(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with BeforeAndAfterAll with Matchers { def this() = this(ActorSystem(Constants.actorSystemName, ClientExecutor.defaultClientAkkaConfig)) var coordinator: ActorRef = null "client coordinator" should { "successfuly execute a job request" in { val request = JobRequest("springnz.sparkplug.executor.WaitPlugin", None) coordinator ! request expectMsgType[JobSuccess](30.seconds) } "cancel all job requests" in { val request = JobRequest("springnz.sparkplug.executor.WaitPlugin", None) coordinator ! request Thread.sleep(500) coordinator ! CancelAllJobs Thread.sleep(500) expectMsgType[JobSuccess](30.seconds) } } override def beforeAll { coordinator = system.actorOf(Coordinator.props(None), "TestCoordinator") } override def afterAll { system.actorSelection(s"/user/TestCoordinator") ! ShutDown TestKit.shutdownActorSystem(system) Thread.sleep(1000) } }
Example 114
Source File: LinearRegressionActorSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.actors.transform import akka.actor.{ActorRef, ActorSystem} import akka.testkit.{TestProbe, TestActorRef, ImplicitSender, TestKit} import io.coral.actors.CoralActorFactory import io.coral.api.DefaultModule import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import akka.util.Timeout import org.json4s.native.Serialization.write import scala.concurrent.duration._ class LinearRegressionActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("LinearRegressionActorSpec")) implicit val timeout = Timeout(100.millis) implicit val injector = new DefaultModule(system.settings.config) override def afterAll() { TestKit.shutdownActorSystem(system) } def createLinearRegressionActor(intercept: Double, weights: Map[String, Double]) = { implicit val formats = DefaultFormats val str = s"""{ "type":"linearregression", |"params": { "intercept": $intercept, |"weights": ${write(weights)} |}}""".stripMargin val createJson = parse(str).asInstanceOf[JObject] val props = CoralActorFactory.getProps(createJson).get val actorTestRef = TestActorRef[LinearRegressionActor](props) val probe = TestProbe() actorTestRef.underlyingActor.emitTargets += probe.ref (actorTestRef, probe) } "LinearRegressionActor" should { "Instantiate from companion object" in { val (actor, _) = createLinearRegressionActor(0, Map("salary" -> 2000)) actor.underlyingActor.intercept should be(0) actor.underlyingActor.weights should be(Map("salary" -> 2000)) } "process trigger data when all the features are available even with different order" in { val (actor, probe) = createLinearRegressionActor(0, Map("age" -> 0.2, "salary" -> 0.1)) val message = parse( s"""{"salary": 4000, "age": 40}""").asInstanceOf[JObject] actor ! message probe.expectMsg(parse( s"""{"score": 408.0, "salary": 4000, "age": 40}""")) } "emit when score is calculated" in { val (actor, probe) = createLinearRegressionActor(0, Map("salary" -> 10)) val message = parse( s"""{"salary": 2000}""").asInstanceOf[JObject] actor ! message probe.expectMsg(parse( s"""{"score": 20000.0, "salary": 2000}""")) } "not emit when keys are missing" in { val (actor, probe) = createLinearRegressionActor(0, Map("age" -> 0.2, "salary" -> 10)) val message = parse( s"""{"salary": 2000}""").asInstanceOf[JObject] actor ! message probe.expectNoMsg } } }
Example 115
Source File: MinMaxActorSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.actors.transform import akka.actor.{Actor, ActorSystem, Props} import akka.testkit.{TestProbe, ImplicitSender, TestActorRef, TestKit} import akka.util.Timeout import io.coral.actors.CoralActorFactory import io.coral.api.DefaultModule import org.json4s.JsonDSL._ import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.junit.runner.RunWith import org.scalatest.junit.JUnitRunner import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.duration._ @RunWith(classOf[JUnitRunner]) class MinMaxActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { implicit val timeout = Timeout(100.millis) implicit val formats = org.json4s.DefaultFormats implicit val injector = new DefaultModule(system.settings.config) def this() = this(ActorSystem("ZscoreActorSpec")) override def afterAll() { TestKit.shutdownActorSystem(system) } "A MinMaxActor" must { val createJson = parse( """{ "type": "minmax", "params": { "field": "field1", "min": 10.0, "max": 13.5 }}""" .stripMargin).asInstanceOf[JObject] implicit val injector = new DefaultModule(system.settings.config) val props = CoralActorFactory.getProps(createJson).get val threshold = TestActorRef[MinMaxActor](props) // subscribe the testprobe for emitting val probe = TestProbe() threshold.underlyingActor.emitTargets += probe.ref "Emit the minimum when lower than the min" in { val json = parse( """{"field1": 7 }""").asInstanceOf[JObject] threshold ! json probe.expectMsg(parse( """{ "field1": 10.0 }""")) } "Emit the maximum when higher than the max" in { val json = parse( """{"field1": 15.3 }""").asInstanceOf[JObject] threshold ! json probe.expectMsg(parse( """{"field1": 13.5 }""")) } "Emit the value itself when between the min and the max" in { val json = parse( """{"field1": 11.7 }""").asInstanceOf[JObject] threshold ! json probe.expectMsg(parse( """{"field1": 11.7 }""")) } "Emit object unchanged when key is not present in triggering json" in { val json = parse( """{"otherfield": 15.3 }""").asInstanceOf[JObject] threshold ! json probe.expectMsg(parse( """{"otherfield": 15.3 }""")) } } }
Example 116
Source File: CheckerSpec.scala From cave with MIT License | 5 votes |
package worker import akka.actor.{ActorSystem, Props} import akka.testkit.TestKit import com.cave.metrics.data.evaluator.DataFetcher import com.cave.metrics.data.influxdb.InfluxClientFactory import com.cave.metrics.data.{AlertJsonData, Check} import org.scalatest.mockito.MockitoSugar import org.scalatest.{BeforeAndAfterAll, WordSpecLike} import scala.concurrent.{ExecutionContext, Future} import scala.util.{Try, Success} class CheckerSpec extends TestKit(ActorSystem()) with WordSpecLike with BeforeAndAfterAll with AlertJsonData with MockitoSugar { override def afterAll() = { system.shutdown() } final val SomeReason = "BOOM!" val mockClientFactory = mock[InfluxClientFactory] def fakeChecker(check: Check): Props = Props(new Checker(check) { override def fetcher = new DataFetcher(mockClientFactory) override def run(check: Check)(implicit ec: ExecutionContext): Future[Try[Boolean]] = { if (check.schedule.alert.description == AlertDescription) Future.successful(Success(true)) else if (check.schedule.alert.description == AlertFiveDescription) Future.successful(Success(false)) else Future.failed(new RuntimeException(SomeReason)) } }) "A checker" must { "send Done(true) if an alarm condition has been detected" in { val checker = system.actorOf(Props(new StepParent(fakeChecker(InsufficientOrders), testActor)), "alarm") expectMsg(Checker.Done(alarm = Success(true))) watch(checker) expectTerminated(checker) } "send Done(false) if no alarm condition has been detected" in { val checker = system.actorOf(Props(new StepParent(fakeChecker(InsufficientOrdersFive), testActor)), "notAlarm") expectMsg(Checker.Done(alarm = Success(false))) watch(checker) expectTerminated(checker) } "properly finish in case of error" in { val checker = system.actorOf(Props(new StepParent(fakeChecker(OrdersLessThanPredicted), testActor)), "error") expectMsg(Checker.Aborted(SomeReason)) watch(checker) expectTerminated(checker) } } }
Example 117
Source File: NotifierSpec.scala From cave with MIT License | 5 votes |
package worker import java.util.concurrent.Executor import akka.actor._ import akka.testkit.TestKit import com.cave.metrics.data.{AlertJsonData, Check} import org.scalatest.{BeforeAndAfterAll, WordSpecLike} import worker.web.{BadStatus, NotificationSender} import scala.concurrent.Future object NotifierSpec extends AlertJsonData { object FakeNotificationSender extends NotificationSender { def send(check: Check)(implicit exec: Executor): Future[Boolean] = if (check.schedule.alert.description == AlertDescription) Future.successful(true) else if (check.schedule.alert.description == AlertFiveDescription) Future.successful(false) else Future.failed(BadStatus(401)) def shutdown(): Unit = { } } def fakeNotifier(n: Check): Props = Props(new Notifier(n) { override def client = FakeNotificationSender }) } class NotifierSpec extends TestKit(ActorSystem()) with WordSpecLike with BeforeAndAfterAll { import worker.NotifierSpec._ override def afterAll() = { system.shutdown() } "A notifier" must { "send Done(true) when successful" in { val notifier = system.actorOf(Props(new StepParent(fakeNotifier(InsufficientOrders), testActor)), "successful") expectMsg(Notifier.Done(result = true)) watch(notifier) expectTerminated(notifier) } "send Done(false) when unsuccessful" in { val notifier = system.actorOf(Props(new StepParent(fakeNotifier(InsufficientOrdersFive), testActor)), "unsuccessful") expectMsg(Notifier.Done(result = false)) watch(notifier) expectTerminated(notifier) } "properly finish in case of error" in { val notifier = system.actorOf(Props(new StepParent(fakeNotifier(OrdersLessThanPredicted), testActor)), "error") watch(notifier) expectTerminated(notifier) } } }
Example 118
Source File: CoordinatorSpec.scala From cave with MIT License | 5 votes |
package worker import akka.actor._ import akka.testkit.{ImplicitSender, TestActorRef, TestKit} import com.cave.metrics.data._ import init.AwsWrapper import init.AwsWrapper.WorkItem import org.mockito.Matchers._ import org.mockito.Mockito._ import org.scalatest.mockito.MockitoSugar import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.collection.mutable import scala.concurrent.{ExecutionContext, Future} import scala.util.Success class CoordinatorSpec extends TestKit(ActorSystem()) with WordSpecLike with Matchers with ImplicitSender with BeforeAndAfterAll with AlertJsonData with MockitoSugar { def fakeCoordinator(awsWrapper: AwsWrapper, mockCheckers: mutable.Map[ActorRef, WorkItem]): Props = Props(new Coordinator(awsWrapper, shouldSendHistory = false) { override val checkers = mockCheckers override def createNotifier(item: WorkItem): Unit = { } }) def fakeChecker(parentCoordinator: ActorRef): Props = Props(new Actor { def receive = { case "abort" => parentCoordinator ! Checker.Aborted("Boom!") context stop self case "true" => parentCoordinator ! Checker.Done(Success(true)) context stop self case "false" => parentCoordinator ! Checker.Done(Success(false)) context stop self } }) val mockAwsWrapper = mock[AwsWrapper] val mockDataManager = mock[CacheDataManager] override def afterAll() = { system.shutdown() } "A coordinator" must { "return its status" in { when(mockAwsWrapper.receiveMessages()(any[ExecutionContext])).thenReturn(Future.successful(List.empty[WorkItem])) val checkers = mutable.Map.empty[ActorRef, WorkItem] val mockItem = mock[WorkItem] val coordinator = TestActorRef(fakeCoordinator(mockAwsWrapper, checkers)) val checker1 = TestActorRef(fakeChecker(coordinator)) val checker2 = TestActorRef(fakeChecker(coordinator)) val checker3 = TestActorRef(fakeChecker(coordinator)) val checker4 = TestActorRef(fakeChecker(coordinator)) val checker5 = TestActorRef(fakeChecker(coordinator)) val checker6 = TestActorRef(fakeChecker(coordinator)) checkers ++= mutable.Map(checker1 -> mockItem, checker2 -> mockItem, checker3 -> mockItem, checker4 -> mockItem, checker5 -> mockItem, checker6 -> mockItem) checker1 ! "abort" checker2 ! "abort" checker3 ! "false" checker4 ! "false" checker5 ! "false" checker6 ! "true" coordinator ! Coordinator.StatusRequest expectMsgPF() { case Coordinator.StatusResponse(currentlyActive, aborted, totalProcessed, noOfAlarmsTriggered) => currentlyActive should be(0) aborted should be(2) noOfAlarmsTriggered should be(1) totalProcessed should be(4) case _ => fail("Unexpected message received.") } coordinator ! PoisonPill watch(coordinator) expectTerminated(coordinator) } } }
Example 119
Source File: CoordinatorSpec.scala From cave with MIT License | 5 votes |
package actors import akka.actor.{ActorSystem, PoisonPill, Props} import akka.testkit.{ImplicitSender, TestActorRef, TestKit} import com.cave.metrics.data._ import init.AwsWrapper import init.AwsWrapper.WorkItem import org.mockito.Mockito._ import org.mockito.Matchers._ import org.scalatest.mockito.MockitoSugar import org.scalatest.{BeforeAndAfterAll, WordSpecLike} import org.specs2.matcher.ShouldMatchers import scala.concurrent.{Future, ExecutionContext} import scala.util.Success class CoordinatorSpec extends TestKit(ActorSystem()) with WordSpecLike with ShouldMatchers with ImplicitSender with BeforeAndAfterAll with AlertJsonData with MockitoSugar { val mockAwsWrapper = mock[AwsWrapper] val mockDataManager = mock[CacheDataManager] override def afterAll() = { system.shutdown() } "A coordinator" must { "create schedulers for all enabled alerts" in { val SomeId = "1234" val AnotherId = "4321" val OtherId = "12345" val alerts = List( Schedule(OrgName, Some(TeamName), None, NotificationUrl, Alert(Some(SomeId), AlertDescription, AlertEnabled, AlertPeriod, AlertCondition, Some(AlertHandbookUrl), Some(AlertRouting))), Schedule(OrgName, Some(TeamName), None, NotificationUrl, Alert(Some(AnotherId), AlertDescription, AlertEnabled, AlertPeriod, AlertCondition, Some(AlertHandbookUrl), Some(AlertRouting)))) val moreAlerts = List( Schedule(TeamName, None, None, NotificationUrl, Alert(Some(OtherId), AlertDescription, AlertEnabled, AlertPeriod, AlertCondition, Some(AlertHandbookUrl), Some(AlertRouting))) ) when(mockDataManager.getEnabledAlerts()).thenReturn(Success(Map(OrgName -> alerts, TeamName -> moreAlerts))) when(mockAwsWrapper.receiveMessages()(any[ExecutionContext])).thenReturn(Future.successful(List.empty[WorkItem])) val coordinator = TestActorRef(Props(new Coordinator(mockAwsWrapper, mockDataManager) { override def createScheduler(schedule: Schedule) = {} })) coordinator ! Coordinator.StatusRequest expectMsgPF() { case Coordinator.StatusResponse(cache, schedules) => cache.schedulesByOrganization should haveSize(2) val forOrgName = cache.schedulesByOrganization(OrgName) forOrgName should haveSize(2) val forTeamName = cache.schedulesByOrganization(TeamName) forTeamName should haveSize(1) schedules should haveSize(3) case _ => fail("Unexpected message received.") } coordinator ! PoisonPill watch(coordinator) expectTerminated(coordinator) } } }
Example 120
Source File: ExecutorServiceBrokerDeathTests.scala From sparkplug with MIT License | 5 votes |
package springnz.sparkplug import akka.actor._ import akka.testkit.{ ImplicitSender, TestKit } import org.scalatest._ import springnz.sparkplug.executor.ExecutorService import springnz.sparkplug.executor.MessageTypes._ import scala.concurrent.Await import scala.concurrent.duration._ class ExecutorServiceBrokerDeathTests(_system: ActorSystem) extends TestKit(_system) with ExecutorServiceBase with ImplicitSender with WordSpecLike with BeforeAndAfterAll { case object ServerTerminated def this() = this(ActorSystem("TestSystemDeathWatch", ExecutorService.defaultRemoteAkkaConfig)) override def afterAll { TestKit.shutdownActorSystem(system) } "deathwatch on client (base case)" in new ExecutorServiceFixture(self, "client1", "testBroker1") { val requestBroker = system.actorSelection(s"/user/testBroker1") // give it something to do for a while val request = JobRequest("springnz.sparkplug.executor.WaitPlugin", None) Await.ready(readyPromise.future, 3.seconds) requestBroker ! request expectMsg(3.seconds, ServerReady) expectMsgType[JobSuccess](3.second) } // TODO: make it so this doesn't have to be the last test "deathwatch on client (with poison pill should terminate server)" in new ExecutorServiceFixture(self, "client2", "testBroker2") { val requestBroker = system.actorSelection(s"/user/testBroker2") // give it something to do for a while val request = JobRequest("springnz.sparkplug.executor.WaitPlugin", None) Await.ready(readyPromise.future, 3.seconds) requestBroker ! request clientActor ! PoisonPill expectMsg(3.seconds, ServerReady) expectNoMsg(3.second) } }
Example 121
Source File: ExecutorServiceStandardTests.scala From sparkplug with MIT License | 5 votes |
package springnz.sparkplug import akka.actor._ import akka.testkit.{ ImplicitSender, TestKit } import org.scalatest._ import springnz.sparkplug.executor.ExecutorService import springnz.sparkplug.executor.MessageTypes._ import scala.concurrent._ import scala.concurrent.duration._ class ExecutorServiceStandardTests(_system: ActorSystem) extends TestKit(_system) with ExecutorServiceBase with ImplicitSender with WordSpecLike with BeforeAndAfterAll { case object ServerTerminated def this() = this(ActorSystem("TestSystemStandard", ExecutorService.defaultRemoteAkkaConfig)) override def afterAll { TestKit.shutdownActorSystem(system) } "notify the client that server is ready" in new ExecutorServiceFixture(self, "client1", "testBroker1") { expectMsg(3.seconds, ServerReady) } "successfuly execute a job request via a plugin" in new ExecutorServiceFixture(self, "client2", "testBroker2") { val requestBroker = system.actorSelection(s"/user/testBroker2") val request = JobRequest("springnz.sparkplug.executor.LetterCountPlugin", None) Await.ready(readyPromise.future, 3.seconds) requestBroker ! request expectMsg(3.seconds, ServerReady) expectMsg[JobSuccess](20.seconds, JobSuccess(request, (2, 2))) } "deathwatch on job processor should produce jobfailed message" in new ExecutorServiceFixture(self, "client3", "testBroker3") { import scala.concurrent._ val requestBroker = system.actorSelection(s"/user/testBroker3") // give it something to do for a while val request = JobRequest("springnz.sparkplug.executor.WaitPlugin", Some(6000)) Await.ready(readyPromise.future, 3.seconds) requestBroker ! request blocking { Thread.sleep(1000) } system.actorSelection(s"/user/testBroker3/jobProcessor-0") ! PoisonPill blocking { Thread.sleep(1000) } expectMsg(3.seconds, ServerReady) expectMsgType[JobFailure](3.seconds) } }
Example 122
Source File: CoordinatorTests.scala From sparkplug with MIT License | 5 votes |
package springnz.sparkplug.client import akka.actor.{ ExtendedActorSystem, ActorRef, ActorSystem } import akka.pattern.ask import akka.testkit.{ ImplicitSender, TestKit } import akka.util.Timeout import com.typesafe.config.ConfigFactory import org.scalatest._ import springnz.sparkplug.executor.MessageTypes.{ JobFailure, JobRequest, JobSuccess, ShutDown } import scala.concurrent.Await import scala.concurrent.duration._ import scala.collection.JavaConverters._ class CoordinatorTests(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with BeforeAndAfterAll with Matchers { def this() = this(ActorSystem(Constants.actorSystemName, ConfigFactory.parseMap(Map( "akka.remote.netty.tcp.port" -> new Integer(0)).asJava).withFallback(ClientExecutor.defaultClientAkkaConfig))) var coordinator: ActorRef = null "client coordinator" should { "successfuly execute a job request" in { val request = JobRequest("springnz.sparkplug.executor.LetterCountPlugin", None) coordinator ! request expectMsg[JobSuccess](30.seconds, JobSuccess(request, (2, 2))) } "successfuly execute a job request after a failure" in { val invalidRequest = JobRequest("springnz.sparkplug.executor.InvalidClass", None) coordinator ! invalidRequest expectMsgType[JobFailure](30.seconds) val goodRequest = JobRequest("springnz.sparkplug.executor.LetterCountPlugin", None) coordinator ! goodRequest expectMsg[JobSuccess](30.seconds, JobSuccess(goodRequest, (2, 2))) } "work with the ask pattern as well" in { implicit val timeout = Timeout(30.seconds) val request = JobRequest("springnz.sparkplug.executor.LetterCountPlugin", None) val replyFuture = coordinator ? request val result = Await.result(replyFuture, 30.seconds) result shouldBe JobSuccess(request, (2, 2)) } } override def beforeAll { val configSection = s"sparkplug.${springnz.sparkplug.executor.Constants.defaultAkkaRemoteConfigSection}" val port = system.asInstanceOf[ExtendedActorSystem].provider.getDefaultAddress.port.get val akkaClientConfig = ConfigFactory.parseMap(Map( "akka.remote.netty.tcp.port" -> new Integer(port)).asJava).withFallback(ClientExecutor.defaultClientAkkaConfig) coordinator = system.actorOf(Coordinator.props(None, akkaRemoteConfig = Some(ConfigFactory.load.getConfig(configSection)), akkaClientConfig = akkaClientConfig), "TestCoordinator") } override def afterAll { system.actorSelection(s"/user/TestCoordinator") ! ShutDown TestKit.shutdownActorSystem(system, verifySystemShutdown = true) } }
Example 123
Source File: JsonActorSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.actors.transform import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestActorRef, TestKit} import akka.util.Timeout import org.json4s.JsonAST.JValue import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.duration._ class JsonActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("JsonActorSpec")) override def afterAll() { TestKit.shutdownActorSystem(system) } implicit val timeout = Timeout(100.millis) def createJsonActor(json: JValue): JsonActor = { val props = JsonActor(json).get val actorRef = TestActorRef[JsonActor](props) actorRef.underlyingActor } "JsonActor" should { "have a standard coral props supplier" in { val json = parse("""{ "type": "json", "params": { "template": {} } }""") val props = JsonActor(json).get props.actorClass shouldBe classOf[JsonActor] } "read the template parameter" in { val template = """{ "a": "someReference" }""" val json = parse(s"""{ "type": "json", "params": { "template": $template } }""") val actor = createJsonActor(json) actor.template.template shouldBe parse(template) } "emit the json based on template" in { val templateJson = """{ "a": "ALPHA", | "b": "${beta}", | "c": { "d": 123, | "e": "${epsilon}" | }, | "f": 1, | "g": 1.0 |}""".stripMargin val json = parse(s"""{ "type": "json", "params": { "template": ${templateJson} } }""") val actor = createJsonActor(json) val triggerJson = parse( """{ "beta": "xyz", | "epsilon": 987 |}""".stripMargin) val expectedJson = parse( """{ "a": "ALPHA", | "c": { "d": 123, | "e": 987 | }, | "f": 1, | "b": "xyz", | "g": 1.0 |}""".stripMargin) actor.simpleEmitTrigger(triggerJson.asInstanceOf[JObject]) shouldBe Some(expectedJson) } } }
Example 124
Source File: PropertiesLoaderSuite.scala From iep-apps with Apache License 2.0 | 5 votes |
package com.netflix.iep.archaius import akka.actor.ActorSystem import akka.testkit.ImplicitSender import akka.testkit.TestActorRef import akka.testkit.TestKit import com.amazonaws.services.dynamodbv2.model.AttributeValue import com.amazonaws.services.dynamodbv2.model.ScanResult import com.netflix.atlas.json.Json import com.netflix.spectator.api.DefaultRegistry import com.netflix.spectator.api.ManualClock import com.typesafe.config.ConfigFactory import org.scalatest.BeforeAndAfterAll import org.scalatest.funsuite.AnyFunSuiteLike class PropertiesLoaderSuite extends TestKit(ActorSystem()) with ImplicitSender with AnyFunSuiteLike with BeforeAndAfterAll { val config = ConfigFactory.parseString(""" |netflix.iep.archaius.table = "test" """.stripMargin) val clock = new ManualClock() val registry = new DefaultRegistry(clock) val propContext = new PropertiesContext(registry) val ddb = new MockDynamoDB val service = new DynamoService(ddb.client, config) val items = newItems("foo-main", Map("a" -> "b", "1" -> "2")) items.addAll(newItems("bar-main", Map("c" -> "d"))) ddb.scanResult = new ScanResult().withItems(items) val ref = TestActorRef(new PropertiesLoader(config, propContext, service)) override def afterAll(): Unit = { system.terminate() } private def waitForUpdate(): Unit = { val latch = propContext.latch ref ! PropertiesLoader.Tick latch.await() } test("init") { waitForUpdate() assert(propContext.initialized) assert( propContext.getAll === List( PropertiesApi.Property("foo-main::a", "foo-main", "a", "b", 12345L), PropertiesApi.Property("foo-main::1", "foo-main", "1", "2", 12345L), PropertiesApi.Property("bar-main::c", "bar-main", "c", "d", 12345L) ) ) } test("update") { val items = newItems("foo-main", Map("a" -> "b")) items.addAll(newItems("bar-main", Map("c" -> "d"))) ddb.scanResult = new ScanResult().withItems(items) waitForUpdate() assert( propContext.getAll === List( PropertiesApi.Property("foo-main::a", "foo-main", "a", "b", 12345L), PropertiesApi.Property("bar-main::c", "bar-main", "c", "d", 12345L) ) ) } private def newItems(cluster: String, props: Map[String, String]): Items = { val items = new java.util.ArrayList[AttrMap]() props.foreach { case (k, v) => val prop = PropertiesApi.Property(s"$cluster::$k", cluster, k, v, 12345L) val value = new AttributeValue().withS(Json.encode(prop)) val timestamp = new AttributeValue().withS("12345") val m = new java.util.HashMap[String, AttributeValue]() m.put("data", value) m.put("timestamp", timestamp) items.add(m) } items } }
Example 125
Source File: KryoSerializerInitSpec.scala From nexus-kg with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.kg.serializers import java.nio.file.Paths import akka.actor.ActorSystem import akka.serialization.SerializationExtension import akka.testkit.TestKit import ch.epfl.bluebrain.nexus.kg.TestHelper import io.altoo.akka.serialization.kryo.KryoSerializer import org.scalatest.TryValues import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike class KryoSerializerInitSpec extends TestKit(ActorSystem("KryoSerializerInitSpec")) with AnyWordSpecLike with Matchers with TryValues with TestHelper { private val serialization = SerializationExtension(system) "A Path Kryo serialization" should { "succeed" in { val path = Paths.get("resources/application.conf") // Find the Serializer for it val serializer = serialization.findSerializerFor(path) serializer.getClass.equals(classOf[KryoSerializer]) shouldEqual true // Check serialization/deserialization val serialized = serialization.serialize(path) serialized.isSuccess shouldEqual true val deserialized = serialization.deserialize(serialized.get, path.getClass) deserialized.isSuccess shouldEqual true deserialized.success.value shouldEqual path } } }
Example 126
Source File: TarFlowSpec.scala From nexus-kg with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.kg.archives import java.nio.file.Files import java.time.{Clock, Instant, ZoneId} import akka.actor.ActorSystem import akka.stream.scaladsl.FileIO import akka.testkit.TestKit import ch.epfl.bluebrain.nexus.kg.TestHelper import ch.epfl.bluebrain.nexus.kg.storage.digestSink import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike import scala.concurrent.duration._ class TarFlowSpec extends TestKit(ActorSystem("TarFlowSpec")) with AnyWordSpecLike with Matchers with TestHelper with ScalaFutures { private implicit val ec = system.dispatcher private implicit val clock = Clock.fixed(Instant.EPOCH, ZoneId.systemDefault()) override implicit def patienceConfig: PatienceConfig = PatienceConfig(55.second, 150.milliseconds) "A TarFlow" should { "tar a bunch of sources" in { val digest = "3fef41c5afe7a7ee11ee9d556a564fb57784cc5247b24c6ca70783f396fa158a1c7952504d3e1aa441de20cf065d740eec454c6ffb7fbc4b6351b950ee51c886" val elems = 500 val contents = List.tabulate(2) { i => val content = (i until (i + elems)).toList.mkString(",") + "\n" ArchiveSource(content.length.toLong, s"some/path$i/$i.txt", produce(content)) } val path = Files.createTempFile("test", ".tar") TarFlow.write(contents).runWith(FileIO.toPath(path)).futureValue FileIO.fromPath(path).runWith(digestSink("SHA-512")).futureValue.value shouldEqual digest Files.delete(path) } } }
Example 127
Source File: DonutBakingActorFSMTests.scala From learn-akka with Apache License 2.0 | 5 votes |
package com.allaboutscala.learn.akka.fsm import akka.actor.ActorSystem import akka.testkit.{TestKit, ImplicitSender, DefaultTimeout, TestFSMRef} import com.allaboutscala.learn.akka.fsm.Tutorial_09_AkkaFSM_PartSix._ import org.scalatest.{WordSpecLike, BeforeAndAfterAll, Matchers} class DonutBakingActorFSMTests extends TestKit(ActorSystem("DonutActorFSM")) with ImplicitSender with DefaultTimeout with WordSpecLike with BeforeAndAfterAll with Matchers { private var donutBakingActorFSM: TestFSMRef[BakingStates, BakingData, DonutBakingActor] = _ override protected def beforeAll(): Unit = { donutBakingActorFSM = TestFSMRef(new DonutBakingActor()) } "DonutBakingActor" should { "have initial state of BakingStates.Stop" in { donutBakingActorFSM.stateName shouldEqual Stop } } import scala.concurrent.duration._ "DonutBakingActor" should { "process BakeDonut event and switch to the BakingStates.Start state" in { donutBakingActorFSM ! BakeDonut awaitCond(donutBakingActorFSM.stateName == Start, 2 second, 1 second) } } "DonutBakingActor" should { "process StopBaking event and switch to BakingStates.Stop state" in { donutBakingActorFSM ! StopBaking awaitCond(donutBakingActorFSM.stateName == Stop, 2 second, 1 second) } } "DonutBakingActor current donut quantity" should { "equal to 1 after the StopBaking event" in { donutBakingActorFSM.stateData.qty shouldEqual 1 } } override protected def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } }
Example 128
Source File: StreamMethodsSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.api import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.apache.toree.kernel.protocol.v5 import org.apache.toree.kernel.protocol.v5.KernelMessage import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, BeforeAndAfter, Matchers} import play.api.libs.json.Json import test.utils.MaxAkkaTestTimeout import org.mockito.Mockito._ class StreamMethodsSpec extends TestKit( ActorSystem( "StreamMethodsSpec", None, Some(org.apache.toree.Main.getClass.getClassLoader) ) ) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar with BeforeAndAfter { private var kernelMessageRelayProbe: TestProbe = _ private var mockParentHeader: v5.ParentHeader = _ private var mockActorLoader: v5.kernel.ActorLoader = _ private var mockKernelMessage: v5.KernelMessage = _ private var streamMethods: StreamMethods = _ before { kernelMessageRelayProbe = TestProbe() mockParentHeader = mock[v5.ParentHeader] mockActorLoader = mock[v5.kernel.ActorLoader] doReturn(system.actorSelection(kernelMessageRelayProbe.ref.path)) .when(mockActorLoader).load(v5.SystemActorType.KernelMessageRelay) mockKernelMessage = mock[v5.KernelMessage] doReturn(mockParentHeader).when(mockKernelMessage).header streamMethods = new StreamMethods(mockActorLoader, mockKernelMessage) } describe("StreamMethods") { describe("#()") { it("should put the header of the given message as the parent header") { val expected = mockKernelMessage.header val actual = streamMethods.kmBuilder.build.parentHeader actual should be (expected) } } describe("#sendAll") { it("should send a message containing all of the given text") { val expected = "some text" streamMethods.sendAll(expected) val outgoingMessage = kernelMessageRelayProbe.receiveOne(MaxAkkaTestTimeout) val kernelMessage = outgoingMessage.asInstanceOf[KernelMessage] val actual = Json.parse(kernelMessage.contentString) .as[v5.content.StreamContent].text actual should be (expected) } } } }
Example 129
Source File: StatusDispatchSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.dispatch import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{TestKit, TestProbe} import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.content.KernelStatus import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers} import play.api.libs.json.Json import test.utils.MaxAkkaTestTimeout class StatusDispatchSpec extends TestKit( ActorSystem( "StatusDispatchSystem", None, Some(org.apache.toree.Main.getClass.getClassLoader) ) ) with FunSpecLike with Matchers with MockitoSugar with BeforeAndAfter{ var statusDispatchRef: ActorRef = _ var relayProbe: TestProbe = _ before { // Mock the relay with a probe relayProbe = TestProbe() // Mock the ActorLoader val mockActorLoader: ActorLoader = mock[ActorLoader] when(mockActorLoader.load(SystemActorType.KernelMessageRelay)) .thenReturn(system.actorSelection(relayProbe.ref.path.toString)) statusDispatchRef = system.actorOf(Props(classOf[StatusDispatch],mockActorLoader)) } describe("StatusDispatch") { describe("#receive( KernelStatusType )") { it("should send a status message to the relay") { statusDispatchRef ! KernelStatusType.Busy // Check the kernel message is the correct type val statusMessage: KernelMessage = relayProbe.receiveOne(MaxAkkaTestTimeout).asInstanceOf[KernelMessage] statusMessage.header.msg_type should be (MessageType.Outgoing.Status.toString) // Check the status is what we sent val status: KernelStatus = Json.parse(statusMessage.contentString).as[KernelStatus] status.execution_state should be (KernelStatusType.Busy.toString) } } describe("#receive( KernelStatusType, Header )") { it("should send a status message to the relay") { val tuple = Tuple2(KernelStatusType.Busy, mock[Header]) statusDispatchRef ! tuple // Check the kernel message is the correct type val statusMessage: KernelMessage = relayProbe.receiveOne(MaxAkkaTestTimeout).asInstanceOf[KernelMessage] statusMessage.header.msg_type should be (MessageType.Outgoing.Status.toString) // Check the status is what we sent val status: KernelStatus = Json.parse(statusMessage.contentString).as[KernelStatus] status.execution_state should be (KernelStatusType.Busy.toString) } } } }
Example 130
Source File: SimpleActorLoaderSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel import akka.actor.{ActorSelection, ActorSystem, Props} import akka.testkit.{TestKit, TestProbe} import org.apache.toree.kernel.protocol.v5.MessageType import org.scalatest.{FunSpecLike, Matchers} import test.utils.TestProbeProxyActor import test.utils.MaxAkkaTestTimeout class SimpleActorLoaderSpec extends TestKit( ActorSystem( "SimpleActorLoaderSpecSystem", None, Some(org.apache.toree.Main.getClass.getClassLoader) ) ) with FunSpecLike with Matchers { describe("SimpleActorLoader") { //val system = ActorSystem("SimpleActorLoaderSystem") val testMessage: String = "Hello Message" describe("#load( MessageType )") { it("should load a MessageType Actor"){ // Create a new test probe to verify our selection works val messageTypeProbe: TestProbe = new TestProbe(system) // Add an actor to the system to send a message to system.actorOf( Props(classOf[TestProbeProxyActor], messageTypeProbe), name = MessageType.Outgoing.ExecuteInput.toString ) // Create the ActorLoader with our test system val actorLoader: SimpleActorLoader = SimpleActorLoader(system) // Get the actor and send it a message val loadedMessageActor: ActorSelection = actorLoader.load(MessageType.Outgoing.ExecuteInput) loadedMessageActor ! testMessage // Assert the probe received the message messageTypeProbe.expectMsg(MaxAkkaTestTimeout, testMessage) } } } }
Example 131
Source File: ActorLoaderSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.apache.toree.kernel.protocol.v5.{MessageType, SocketType} import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} import test.utils.TestProbeProxyActor import test.utils.MaxAkkaTestTimeout class ActorLoaderSpec extends TestKit( ActorSystem( "ActorLoaderSpecSystem", None, Some(org.apache.toree.Main.getClass.getClassLoader) )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("ActorLoader"){ describe("#load( MessageType )"){ it("should load an ActorSelection that has been loaded into the system"){ val testProbe: TestProbe = TestProbe() system.actorOf(Props(classOf[TestProbeProxyActor], testProbe), MessageType.Outgoing.ClearOutput.toString) val actorLoader: ActorLoader = SimpleActorLoader(system) actorLoader.load(MessageType.Outgoing.ClearOutput) ! "<Test Message>" testProbe.expectMsg("<Test Message>") } it("should expect no message when there is no actor"){ val testProbe: TestProbe = TestProbe() val actorLoader: ActorLoader = SimpleActorLoader(system) actorLoader.load(MessageType.Outgoing.CompleteReply) ! "<Test Message>" testProbe.expectNoMessage(MaxAkkaTestTimeout) // This is to test to see if there the messages go to the actor inbox or the dead mail inbox system.actorOf(Props(classOf[TestProbeProxyActor], testProbe), MessageType.Outgoing.CompleteReply.toString) testProbe.expectNoMessage(MaxAkkaTestTimeout) } } describe("#load( SocketType )"){ it("should load an ActorSelection that has been loaded into the system"){ val testProbe: TestProbe = TestProbe() system.actorOf(Props(classOf[TestProbeProxyActor], testProbe), SocketType.Shell.toString) val actorLoader: ActorLoader = SimpleActorLoader(system) actorLoader.load(SocketType.Shell) ! "<Test Message>" testProbe.expectMsg("<Test Message>") } it("should expect no message when there is no actor"){ val testProbe: TestProbe = TestProbe() val actorLoader: ActorLoader = SimpleActorLoader(system) actorLoader.load(SocketType.IOPub) ! "<Test Message>" testProbe.expectNoMessage(MaxAkkaTestTimeout) // This is to test to see if there the messages go to the actor inbox or the dead mail inbox system.actorOf(Props(classOf[TestProbeProxyActor], testProbe), SocketType.IOPub.toString) testProbe.expectNoMessage(MaxAkkaTestTimeout) } } } }
Example 132
Source File: BlockingBrainTest.scala From sumobot with Apache License 2.0 | 5 votes |
package com.sumologic.sumobot.brain import akka.actor.{ActorSystem, Props} import akka.testkit.TestKit import com.sumologic.sumobot.test.annotated.SumoBotTestKit import org.scalatest.BeforeAndAfterAll class BlockingBrainTest() extends SumoBotTestKit(ActorSystem("BlockingBrainTest")) with BeforeAndAfterAll { override def afterAll() { TestKit.shutdownActorSystem(system) } "BlockingBrain" should { "allow storing and reading back values" in { val brain = system.actorOf(Props(classOf[InMemoryBrain])) val sut = new BlockingBrain(brain) sut.retrieve("test") should not be 'defined sut.store("test", "value") sut.retrieve("test") should be(Some("value")) } "allow listing all values" in { val brain = system.actorOf(Props(classOf[InMemoryBrain])) val sut = new BlockingBrain(brain) sut.retrieve("test") should not be 'defined sut.store("test1", "value1") sut.store("test2", "value2") val returnedValues = sut.listValues() returnedValues.size should be(2) returnedValues.contains("test1") should be(true) returnedValues.contains("test2") should be(true) } "allow listing values with a filter" in { val brain = system.actorOf(Props(classOf[InMemoryBrain])) val sut = new BlockingBrain(brain) sut.retrieve("test") should not be 'defined sut.store("test1", "value1") sut.store("test2", "value2") sut.store("not3", "value2") val returnedValues = sut.listValues("test") returnedValues.size should be(2) returnedValues.contains("test1") should be(true) returnedValues.contains("test2") should be(true) } "support removing values" in { val brain = system.actorOf(Props(classOf[InMemoryBrain])) val sut = new BlockingBrain(brain) sut.retrieve("test") should not be 'defined sut.store("test", "value1") sut.listValues().size should be(1) sut.retrieve("test") should be('defined) sut.remove("test") sut.listValues().size should be(0) sut.retrieve("test") should not be 'defined } } }
Example 133
Source File: ClientSpec.scala From izanami with Apache License 2.0 | 5 votes |
package izanami import java.time.ZoneId import akka.actor.ActorSystem import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import izanami.IzanamiBackend.SseBackend import izanami.scaladsl.IzanamiClient class ClientSpec extends IzanamiSpec { "client config" should { "config" in { //#configure-client implicit val system = ActorSystem( "izanami-client", ConfigFactory.parseString(""" izanami-example.blocking-io-dispatcher { type = Dispatcher executor = "thread-pool-executor" thread-pool-executor { fixed-pool-size = 32 } throughput = 1 } """) ) val client = IzanamiClient( ClientConfig( host = "http://localhost:9000", clientId = Some("xxxx"), clientIdHeaderName = "Another-Client-Id-Header", clientSecret = Some("xxxx"), clientSecretHeaderName = "Another-Client-Id-Header", backend = SseBackend, pageSize = 50, zoneId = ZoneId.of("Europe/Paris"), dispatcher = "izanami-example.blocking-io-dispatcher" ) ) //#configure-client TestKit.shutdownActorSystem(system) } } }
Example 134
Source File: FetchWithCacheConfigClientSpec.scala From izanami with Apache License 2.0 | 5 votes |
package izanami.configs import akka.actor.ActorSystem import akka.stream.ActorMaterializer import akka.testkit.TestKit import izanami.Strategy.FetchWithCacheStrategy import izanami._ import izanami.scaladsl.{Config, Configs, IzanamiClient} import org.scalatest.BeforeAndAfterAll import org.scalatest.mockito.MockitoSugar import play.api.libs.json.Json import scala.concurrent.duration.DurationInt class FetchWithCacheConfigClientSpec extends IzanamiSpec with BeforeAndAfterAll with MockitoSugar with ConfigServer { implicit val system = ActorSystem("test") implicit val materializer = ActorMaterializer() override def afterAll: Unit = { TestKit.shutdownActorSystem(system) } "FetchWithCacheFeatureStrategy" should { "List configs" in { runServer { ctx => //#config-fetch-cache val strategy = IzanamiClient( ClientConfig(ctx.host) ).configClient( strategy = FetchWithCacheStrategy(maxElement = 2, duration = 1.second), fallback = Configs( "test2" -> Json.obj("value" -> 2) ) ) //#config-fetch-cache val initialConfigs = Seq( Config("test", Json.obj("value" -> 1)) ) ctx.setValues(initialConfigs) val configs: Configs = strategy.configs("*").futureValue strategy.configs("*").futureValue strategy.configs("*").futureValue strategy.configs("*").futureValue configs.configs must be(initialConfigs) ctx.calls.size must be(1) configs.get("test") must be(Json.obj("value" -> 1)) configs.get("test2") must be(Json.obj("value" -> 2)) configs.get("other") must be(Json.obj()) } } "Test feature active" in { runServer { ctx => val strategy = IzanamiClient( ClientConfig(ctx.host) ).configClient( strategy = FetchWithCacheStrategy(2, 5.second), fallback = Configs( "test5" -> Json.obj("value" -> 2) ) ) val initialConfigs = Seq( Config("test1", Json.obj("value" -> 1)), Config("test2", Json.obj("value" -> 2)), Config("test3", Json.obj("value" -> 3)), Config("test4", Json.obj("value" -> 4)) ) ctx.setValues(initialConfigs) strategy.config("test1").futureValue must be(Json.obj("value" -> 1)) ctx.calls must have size 1 strategy.config("test2").futureValue must be(Json.obj("value" -> 2)) ctx.calls must have size 2 strategy.config("test1").futureValue must be(Json.obj("value" -> 1)) ctx.calls must have size 2 strategy.config("test2").futureValue must be(Json.obj("value" -> 2)) ctx.calls must have size 2 strategy.config("test3").futureValue must be(Json.obj("value" -> 3)) ctx.calls must have size 3 } } } }
Example 135
Source File: PagerDutyTest.scala From sumobot with Apache License 2.0 | 5 votes |
package com.sumologic.sumobot.plugins.pagerduty import akka.actor.ActorSystem import akka.testkit.{TestActorRef, TestKit} import com.sumologic.sumobot.plugins.BotPlugin import com.sumologic.sumobot.test.annotated.{MatchTextUtil, SumoBotSpec, SumoBotTestKit} import org.scalatest.BeforeAndAfterAll class PagerDutyTest extends SumoBotTestKit(ActorSystem("PagerDutyTest")) with BeforeAndAfterAll with MatchTextUtil { "PagerDuty.WhosOnCall" should { "match expected input" in { shouldMatch(PagerDuty.WhosOnCall, "who's on call?") shouldMatch(PagerDuty.WhosOnCall, "who's on call") shouldMatch(PagerDuty.WhosOnCall, "who's oncall?") shouldMatch(PagerDuty.WhosOnCall, "who's oncall") shouldMatch(PagerDuty.WhosOnCall, "whos oncall") "who's oncall for prod?" match { case PagerDuty.WhosOnCall(filter) => filter should be("prod") case _ => fail("Did not match filter case") } shouldNotMatch(PagerDuty.WhosOnCall, "test") } } "various regexes" should { "page on-calls" in { shouldMatch(PagerDuty.PageOnCalls, "page oncalls something") shouldMatch(PagerDuty.PageOnCalls, "page on-calls something") shouldMatch(PagerDuty.PageOnCalls, "page on-calls: something") shouldMatch(PagerDuty.PageOnCalls, "page oncalls: something") } } override protected def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } }
Example 136
Source File: PluginRegistryTest.scala From sumobot with Apache License 2.0 | 5 votes |
package com.sumologic.sumobot.core import akka.actor.{ActorSystem, Props} import akka.pattern.ask import akka.testkit.TestKit import akka.util.Timeout import com.sumologic.sumobot.core.PluginRegistry.{Plugin, PluginList, RequestPluginList} import com.sumologic.sumobot.plugins.BotPlugin.{PluginAdded, PluginRemoved} import com.sumologic.sumobot.plugins.help.Help import com.sumologic.sumobot.test.annotated.SumoBotTestKit import org.scalatest.BeforeAndAfterAll import scala.concurrent.Await import scala.concurrent.duration._ class PluginRegistryTest extends SumoBotTestKit(ActorSystem("PluginRegistryTest")) with BeforeAndAfterAll { "PluginRegistry" should { "maintain a list of all registered plugins" in { implicit val timeout = Timeout(1.second) val reg = system.actorOf(Props[PluginRegistry]) def checkList(func: Seq[Plugin] => Unit) = { Await.result(reg ? RequestPluginList, 1.second) match { case PluginList(list) => func(list) case other => fail(s"Got $other instead.") } } val fakePlugin = system.actorOf(Props[Help]) checkList(_.isEmpty should be(true)) reg ! PluginAdded(fakePlugin, "hah") checkList(_.size should be(1)) reg ! PluginRemoved(fakePlugin) checkList(_.isEmpty should be(true)) } } override protected def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } }
Example 137
Source File: QuartzExtensionTest.scala From sumobot with Apache License 2.0 | 5 votes |
package com.sumologic.sumobot.quartz import akka.actor.ActorSystem import akka.testkit.{TestKit, TestProbe} import com.sumologic.sumobot.test.SumoBotSpec import com.sumologic.sumobot.test.annotated.SumoBotTestKit import org.quartz.CronExpression import scala.concurrent.duration._ class QuartzExtensionTest extends SumoBotTestKit(ActorSystem("QuartzExtensionTest")) { object TestMessage "QuartzExtension" should { "allow scheduling jobs using cron" in { val quartz = QuartzExtension(system) val probe = TestProbe() new CronExpression("0 0 8,12,20 ? * MON-FRI") // This expression should trigger every second. quartz.scheduleMessage("test", "* * * * * ?", probe.ref, TestMessage) probe.expectMsg(5.seconds, TestMessage) } } }
Example 138
Source File: HttpOutcomingSenderTest.scala From sumobot with Apache License 2.0 | 5 votes |
package com.sumologic.sumobot.http_frontend import akka.actor.{ActorSystem, Props} import akka.http.scaladsl.model.ws.TextMessage import akka.testkit.{TestActorRef, TestActors, TestKit, TestProbe} import com.sumologic.sumobot.core.HttpReceptionist import com.sumologic.sumobot.core.model.{IncomingMessage, OutgoingMessage} import com.sumologic.sumobot.test.SumoBotSpec import com.sumologic.sumobot.test.annotated.SumoBotTestKit import org.scalatest.BeforeAndAfterAll class HttpOutcomingSenderTest extends SumoBotTestKit(ActorSystem("HttpOutcomingSenderTest")) with BeforeAndAfterAll { private val probe = new TestProbe(system) system.eventStream.subscribe(probe.ref, classOf[TextMessage.Strict]) private val httpOutcomingSender = TestActorRef(new HttpOutcomingSender(probe.ref)) "HttpOutcomingSender" should { "send TextMessage" when { "received OutgoingMessage" in { val outgoingMessage = OutgoingMessage(HttpReceptionist.DefaultSumoBotChannel, "hello!") system.eventStream.publish(outgoingMessage) val result = probe.expectMsgClass(classOf[TextMessage.Strict]) result.getStrictText should be ("hello!") } } "stop publisher" when { "it is stopped" in { val dummyActor = TestActorRef(TestActors.blackholeProps) val testProbe = TestProbe() testProbe.watch(dummyActor) val stoppedSender = TestActorRef(new HttpOutcomingSender(dummyActor)) system.stop(stoppedSender) testProbe.expectTerminated(dummyActor) } } } override def afterAll: Unit = { TestKit.shutdownActorSystem(system) } }
Example 139
Source File: HttpIncomingReceiverTest.scala From sumobot with Apache License 2.0 | 5 votes |
package com.sumologic.sumobot.http_frontend import java.time.Instant import akka.actor.{ActorSystem, Props} import akka.http.scaladsl.model.ws.TextMessage import akka.stream.scaladsl.Source import akka.testkit.{TestActorRef, TestActors, TestKit, TestProbe} import com.sumologic.sumobot.core.HttpReceptionist import com.sumologic.sumobot.core.model.IncomingMessage import com.sumologic.sumobot.test.SumoBotSpec import com.sumologic.sumobot.test.annotated.SumoBotTestKit import org.scalatest.BeforeAndAfterAll class HttpIncomingReceiverTest extends SumoBotTestKit(ActorSystem("HttpIncomingReceiverTest")) with BeforeAndAfterAll { private val probe = new TestProbe(system) system.eventStream.subscribe(probe.ref, classOf[IncomingMessage]) private val dummyActor = TestActorRef(TestActors.blackholeProps) private val httpIncomingReceiver = TestActorRef(new HttpIncomingReceiver(dummyActor)) "HttpIncomingReceiver" should { "publish IncomingMessage" when { "received streamed TextMessage" in { val msgSource = Source(List("hello")) val streamedMsg = TextMessage.Streamed(msgSource) httpIncomingReceiver ! streamedMsg val result = probe.expectMsgClass(classOf[IncomingMessage]) result.canonicalText should be ("hello") result.addressedToUs should be (true) result.channel should be (HttpReceptionist.DefaultSumoBotChannel) result.attachments should be (Seq.empty) result.sentBy.plainTextReference should be (HttpReceptionist.DefaultClientUser.id) } "received strict TextMessage" in { val strictMsg = TextMessage.Strict("hi!") httpIncomingReceiver ! strictMsg val result = probe.expectMsgClass(classOf[IncomingMessage]) result.canonicalText should be ("hi!") result.addressedToUs should be (true) result.channel should be (HttpReceptionist.DefaultSumoBotChannel) result.attachments should be (Seq.empty) result.sentBy.plainTextReference should be (HttpReceptionist.DefaultClientUser.id) } "properly format date" when { "sending IncomingMessage" in { val strictMsg = TextMessage.Strict("test") httpIncomingReceiver ! strictMsg val result = probe.expectMsgClass(classOf[IncomingMessage]) val currentDate = Instant.now().getEpochSecond.toDouble val messageDate = result.idTimestamp.toDouble messageDate should be (currentDate +- 5.0) } } } "stop itself and outcoming actor" when { "stream ended" in { val outcomingActor = TestActorRef(TestActors.blackholeProps) val testProbeOutcoming = TestProbe() testProbeOutcoming.watch(outcomingActor) val shutdownReceiver = TestActorRef(new HttpIncomingReceiver(outcomingActor)) val testProbeShutdown = TestProbe() testProbeShutdown.watch(shutdownReceiver) shutdownReceiver ! HttpIncomingReceiver.StreamEnded testProbeOutcoming.expectTerminated(outcomingActor) testProbeShutdown.expectTerminated(shutdownReceiver) } } } override def afterAll: Unit = { TestKit.shutdownActorSystem(system) } }
Example 140
Source File: S3BrainTest.scala From sumobot with Apache License 2.0 | 5 votes |
package com.sumologic.sumobot.brain import akka.actor.ActorSystem import akka.pattern.ask import akka.testkit.TestKit import akka.util.Timeout import com.amazonaws.auth.{AWSCredentials, AWSStaticCredentialsProvider} import com.amazonaws.services.s3.AmazonS3ClientBuilder import com.sumologic.sumobot.brain.Brain.ValueRetrieved import com.sumologic.sumobot.core.aws.AWSAccounts import com.sumologic.sumobot.test.annotated.SumoBotTestKit import org.scalatest.{BeforeAndAfterAll, Matchers} import scala.collection.JavaConverters._ import scala.concurrent.Await import scala.concurrent.duration._ import scala.util.Random class S3BrainTest extends SumoBotTestKit(ActorSystem("S3SingleObjectBrainTest")) with BeforeAndAfterAll with Matchers { lazy val credsOption = AWSAccounts.load(system.settings.config).values.headOption val bucketPrefix = "sumobot-s3-brain" // The tests here only run if there are valid AWS credentials in the configuration. Otherwise, // they're skipped. credsOption foreach { creds => cleanupBuckets(creds) val bucket = bucketPrefix + randomString(5) "S3 brain" should { "persist the contents across reloads" in { implicit val timeout = Timeout(5.seconds) val s3Key = randomString(16) val firstBrain = system.actorOf(S3Brain.props(creds, bucket, s3Key)) firstBrain ! Brain.Store("hello", "world") // Just wait for the next message to return. val firstRetrieval = firstBrain ? Brain.Retrieve("hello") val firstResult = Await.result(firstRetrieval, 5.seconds) firstResult match { case ValueRetrieved(k, v) => k should be("hello") v should be("world") case wrongResult => fail(s"Did not get what we expected: $wrongResult") } // Since we wrote to S3, the 2nd brain should now have the value. val secondBrain = system.actorOf(S3Brain.props(creds, bucket, s3Key)) val secondRetrieval = secondBrain ? Brain.Retrieve("hello") val secondResult = Await.result(secondRetrieval, 5.seconds) secondResult match { case ValueRetrieved(k, v) => k should be("hello") v should be("world") case wrongResult => fail(s"Did not get what we expected: $wrongResult") } } } } private def randomString(length: Int): String = { val alphabet = ('a' to 'z').mkString + ('0' to '9').mkString (1 to length). map(_ => Random.nextInt(alphabet.length)). map(alphabet.charAt).mkString } override def afterAll() { TestKit.shutdownActorSystem(system) credsOption.foreach(cleanupBuckets) } def cleanupBuckets(creds: AWSCredentials): Unit = { val s3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(creds)).build() s3.listBuckets().asScala.filter(_.getName.startsWith(bucketPrefix)).foreach { bucket => println(s"Deleting S3 bucket ${bucket.getName}") val objects = s3.listObjects(bucket.getName).getObjectSummaries.asScala.map(_.getKey) objects.foreach { obj => s3.deleteObject(bucket.getName, obj) } s3.deleteBucket(bucket.getName) } } }
Example 141
Source File: StdinSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel.socket import java.nio.charset.Charset import akka.actor.{Props, ActorSelection, ActorRef, ActorSystem} import akka.testkit.{TestProbe, ImplicitSender, TestKit} import akka.util.ByteString import org.apache.toree.communication.ZMQMessage import org.apache.toree.kernel.protocol.v5.kernel.Utilities._ import org.apache.toree.kernel.protocol.v5Test._ import org.apache.toree.kernel.protocol.v5.{KernelMessage, SystemActorType} import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader import com.typesafe.config.ConfigFactory import org.scalatest.mock.MockitoSugar import org.scalatest.{Matchers, FunSpecLike} import org.mockito.Mockito._ import org.mockito.Matchers._ import test.utils.MaxAkkaTestTimeout object StdinSpec { val config =""" akka { loglevel = "WARNING" }""" } class StdinSpec extends TestKit(ActorSystem( "StdinActorSpec", ConfigFactory.parseString(StdinSpec.config), org.apache.toree.Main.getClass.getClassLoader )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("Stdin") { val socketFactory = mock[SocketFactory] val actorLoader = mock[ActorLoader] val socketProbe : TestProbe = TestProbe() when(socketFactory.Stdin(any(classOf[ActorSystem]), any(classOf[ActorRef]))).thenReturn(socketProbe.ref) val relayProbe : TestProbe = TestProbe() val relaySelection : ActorSelection = system.actorSelection(relayProbe.ref.path) when(actorLoader.load(SystemActorType.KernelMessageRelay)).thenReturn(relaySelection) val stdin = system.actorOf(Props(classOf[Stdin], socketFactory, actorLoader)) describe("#receive") { it("( KernelMessage ) should reply with a ZMQMessage via the socket") { // Use the implicit to convert the KernelMessage to ZMQMessage val MockZMQMessage : ZMQMessage = MockKernelMessage stdin ! MockKernelMessage socketProbe.expectMsg(MockZMQMessage) } it("( ZMQMessage ) should forward ZMQ Strings and KernelMessage to Relay") { // Use the implicit to convert the KernelMessage to ZMQMessage val MockZMQMessage : ZMQMessage = MockKernelMessage stdin ! MockZMQMessage // Should get the last four (assuming no buffer) strings in UTF-8 val zmqStrings = MockZMQMessage.frames.map((byteString: ByteString) => new String(byteString.toArray, Charset.forName("UTF-8")) ).takeRight(4) val kernelMessage: KernelMessage = MockZMQMessage relayProbe.expectMsg(MaxAkkaTestTimeout, (zmqStrings, kernelMessage)) } } } }
Example 142
Source File: BotPluginTestKit.scala From sumobot with Apache License 2.0 | 5 votes |
package com.sumologic.sumobot.test.annotated import akka.actor.ActorSystem import akka.testkit.{TestKit, TestProbe} import com.sumologic.sumobot.core.model.{IncomingMessage, InstantMessageChannel, OutgoingMessage, UserSender} import org.junit.runner.RunWith import org.scalatest.concurrent.Eventually import org.scalatest.junit.JUnitRunner import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import slack.models.User import scala.concurrent.duration.{FiniteDuration, _} @RunWith(classOf[JUnitRunner]) abstract class BotPluginTestKit(actorSystem: ActorSystem) extends TestKit(actorSystem) with WordSpecLike with Eventually with Matchers with BeforeAndAfterAll { protected val outgoingMessageProbe = TestProbe() system.eventStream.subscribe(outgoingMessageProbe.ref, classOf[OutgoingMessage]) protected def confirmOutgoingMessage(test: OutgoingMessage => Unit, timeout: FiniteDuration = 1.second): Unit = { outgoingMessageProbe.expectMsgClass(timeout, classOf[OutgoingMessage]) match { case msg: OutgoingMessage => test(msg) } } protected def instantMessage(text: String, user: User = mockUser("123", "jshmoe")): IncomingMessage = { IncomingMessage(text, true, InstantMessageChannel("125", user), "1527239216000090", sentBy = UserSender(user)) } protected def mockUser(id: String, name: String): User = { User(id, name, None, None, None, None, None, None, None, None, None, None, None, None, None, None) } protected def send(message: IncomingMessage): Unit = { system.eventStream.publish(message) } override protected def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } }
Example 143
Source File: BotPluginTestKit.scala From sumobot with Apache License 2.0 | 5 votes |
package com.sumologic.sumobot.test import akka.actor.ActorSystem import akka.testkit.{TestKit, TestProbe} import com.sumologic.sumobot.core.model.{IncomingMessage, InstantMessageChannel, OutgoingMessage, UserSender} import org.scalatest.BeforeAndAfterAll import slack.models.User import scala.concurrent.duration.{FiniteDuration, _} @deprecated("use com.sumologic.sumobot.test.annotated.BotPluginTestKit", "1.0.2") class BotPluginTestKit(_system: ActorSystem) extends TestKit(_system) with SumoBotSpec with BeforeAndAfterAll { protected val outgoingMessageProbe = TestProbe() system.eventStream.subscribe(outgoingMessageProbe.ref, classOf[OutgoingMessage]) protected def confirmOutgoingMessage(test: OutgoingMessage => Unit, timeout: FiniteDuration = 1.second): Unit = { outgoingMessageProbe.expectMsgClass(timeout, classOf[OutgoingMessage]) match { case msg: OutgoingMessage => test(msg) } } protected def instantMessage(text: String, user: User = mockUser("123", "jshmoe")): IncomingMessage = { IncomingMessage(text, true, InstantMessageChannel("125", user), "1527239216000090", sentBy = UserSender(user)) } protected def mockUser(id: String, name: String): User = { User(id, name, None, None, None, None, None, None, None, None, None, None, None, None, None, None) } protected def send(message: IncomingMessage): Unit = { system.eventStream.publish(message) } override protected def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } }
Example 144
Source File: ClusterInternalsPublisherSpec.scala From lithium with Apache License 2.0 | 5 votes |
package akka.cluster.swissborg import akka.actor.ActorSystem import akka.cluster.ClusterEvent.{ReachabilityChanged, SeenChanged} import akka.cluster.Reachability import akka.testkit.{ImplicitSender, TestKit, TestProbe} import com.swissborg.lithium.internals.{LithiumReachabilityChanged, LithiumSeenChanged} import org.scalatest.BeforeAndAfterAll import org.scalatest.wordspec.AnyWordSpecLike import scala.collection.immutable.IndexedSeq import org.scalatest.matchers.should.Matchers class ClusterInternalsPublisherSpec extends TestKit(ActorSystem("lithium")) with ImplicitSender with AnyWordSpecLike with Matchers with BeforeAndAfterAll { override def afterAll(): Unit = TestKit.shutdownActorSystem(system) "ClusterInternalsPublisher" must { "convert and publish ReachabilityChanged events" in { system.actorOf(ClusterInternalsPublisher.props) val probe = TestProbe() system.eventStream.subscribe(probe.ref, classOf[LithiumReachabilityChanged]) system.eventStream.publish(ReachabilityChanged(Reachability(IndexedSeq.empty[Reachability.Record], Map.empty))) probe.expectMsgType[LithiumReachabilityChanged] } "convert and publish SeenChanged events" in { system.actorOf(ClusterInternalsPublisher.props) val probe = TestProbe() system.eventStream.subscribe(probe.ref, classOf[LithiumSeenChanged]) system.eventStream.publish(SeenChanged(false, Set.empty)) probe.expectMsg(LithiumSeenChanged(false, Set.empty)) } } }
Example 145
Source File: KafkaIntSpec.scala From scala-kafka-client with MIT License | 5 votes |
package cakesolutions.kafka.akka import akka.actor.ActorSystem import akka.testkit.TestKit import cakesolutions.kafka.testkit.KafkaServer import org.scalatest.concurrent.Waiters import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} class KafkaIntSpec(_system: ActorSystem) extends TestKit(_system) with Waiters with FlatSpecLike with Matchers with BeforeAndAfterAll { val kafkaServer = new KafkaServer() val kafkaPort = kafkaServer.kafkaPort override def beforeAll() = { kafkaServer.startup() } override def afterAll() = { kafkaServer.close() TestKit.shutdownActorSystem(system) } }
Example 146
Source File: DefaultModuleSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.actors import akka.actor.{ActorSystem, Props} import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import io.coral.api.DefaultModule import org.json4s.JsonAST.JValue import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scaldi.Injectable._ class DefaultModuleSpec(_system: ActorSystem) extends TestKit(_system) with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("testSystem")) override def afterAll() { TestKit.shutdownActorSystem(system) } "The DefaultModule" should { "have the DefaultActorPropFactory when no configuration is made" in { implicit val module = new DefaultModule(ConfigFactory.empty) val actorPropFactories = inject[List[ActorPropFactory]] assert(actorPropFactories.size == 1) assert(actorPropFactories(0).getClass == classOf[DefaultActorPropFactory]) } "have the DefaultActorPropFactory when a configuration is made" in { val config = """injections.actorPropFactories = ["io.coral.actors.AdditionalActorPropFactoryOne"]""" implicit val module = new DefaultModule(ConfigFactory.parseString(config)) val actorPropFactories = inject[List[ActorPropFactory]] assert(actorPropFactories.size == 2) assert(actorPropFactories(0).getClass == classOf[DefaultActorPropFactory]) assert(actorPropFactories(1).getClass == classOf[AdditionalActorPropFactoryOne]) } "should have the ActorPropFactories in the defined order" in { val config = """injections.actorPropFactories = ["io.coral.actors.AdditionalActorPropFactoryOne", |"io.coral.actors.AdditionalActorPropFactoryTwo"]""".stripMargin implicit val module = new DefaultModule(ConfigFactory.parseString(config)) val actorPropFactories = inject[List[ActorPropFactory]] assert(actorPropFactories.size == 3) assert(actorPropFactories(0).getClass == classOf[DefaultActorPropFactory]) assert(actorPropFactories(1).getClass == classOf[AdditionalActorPropFactoryOne]) assert(actorPropFactories(2).getClass == classOf[AdditionalActorPropFactoryTwo]) } } } class AdditionalActorPropFactoryOne extends ActorPropFactory { override def getProps(actorType: String, params: JValue): Option[Props] = None } class AdditionalActorPropFactoryTwo extends ActorPropFactory { override def getProps(actorType: String, params: JValue): Option[Props] = None }
Example 147
Source File: StatsActorSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.actors.transform import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestActorRef, TestKit} import akka.util.Timeout import io.coral.actors.CoralActorFactory import io.coral.api.DefaultModule import org.json4s.JsonAST.JValue import org.json4s.JsonDSL._ import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.Await import scala.concurrent.duration._ class StatsActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("StatsActorSpec")) override def afterAll() { TestKit.shutdownActorSystem(system) } implicit val timeout = Timeout(100.millis) implicit val injector = new DefaultModule(system.settings.config) def createStatsActor: StatsActor = { val createJson = parse( """{ "type": "stats", "params": { "field": "val" } }""") .asInstanceOf[JObject] val props = CoralActorFactory.getProps(createJson).get val actorRef = TestActorRef[StatsActor](props) actorRef.underlyingActor } val expectedInitialState = Map( ("count", render(0L)), ("avg", render(JNull)), ("sd", render(JNull)), ("min", render(JNull)), ("max", render(JNull)) ) "StatsActor" should { "have a field corresponding to the json definition" in { val actor = createStatsActor actor.field should be("val") } "supply it's state" in { val actor = createStatsActor actor.state should be(expectedInitialState) } "accept a value as trigger" in { val actor = createStatsActor val triggerJson = parse( """{ "bla": 1.0, "val": 2.7 }""").asInstanceOf[JObject] actor.trigger(triggerJson) actor.state should be( Map( ("count", render(1L)), ("avg", render(2.7)), ("sd", render(0.0)), ("min", render(2.7)), ("max", render(2.7)) )) } "have timer reset statistics" in { val actor = createStatsActor val triggerJson = parse( """{ "val": 2.7 }""").asInstanceOf[JObject] actor.trigger(triggerJson) actor.state should be( Map( ("count", render(1L)), ("avg", render(2.7)), ("sd", render(0.0)), ("min", render(2.7)), ("max", render(2.7)) )) val future = actor.timer val json = Await.result(future, timeout.duration).get json should be(JNothing) actor.state should be(expectedInitialState) } } }
Example 148
Source File: GroupByActorSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.actors.transform import java.util.UUID import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestActorRef, TestKit} import akka.util.Timeout import io.coral.actors.RuntimeActor import io.coral.api.DefaultModule import org.json4s.JsonDSL._ import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.duration._ import scala.languageFeature.postfixOps class GroupByActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with ScalaFutures { def this() = this(ActorSystem("GroupByActorSpec")) implicit val ec = scala.concurrent.ExecutionContext.Implicits.global implicit val injector = new DefaultModule(system.settings.config) val name = "runtime1" val userUUID1 = UUID.randomUUID() implicit val runtime = system.actorOf(Props(new RuntimeActor(name, userUUID1)), "coral") implicit val timeout = Timeout(100.millis) implicit val formats = org.json4s.DefaultFormats override def afterAll() { TestKit.shutdownActorSystem(system) } // here is a dependency on the stats actor // in the current situation (the CoralActorFactory) it seems unavoidable // to depend in some tests on an existing actor instead of injecting a test actor def statsGroupBy: GroupByActor = { val createJson = parse( """{ "type": "stats", | "params": { "field": "amount" }, | "group": { "by": "tag" } | }""".stripMargin ).asInstanceOf[JObject] TestActorRef[GroupByActor](GroupByActor(createJson).get).underlyingActor } "A GroupByActor" should { } }
Example 149
Source File: SampleActorSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.actors.transform import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe} import akka.util.Timeout import io.coral.lib.{NotSoRandom, Random} import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.duration._ import scala.language.postfixOps class SampleActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with ScalaFutures { def this() = this(ActorSystem("SampleActorSpec")) override def afterAll() { TestKit.shutdownActorSystem(system) } def arbitrarySampleActor(): SampleActor = { val json = parse( """{ "type": "sample", | "params": { "fraction": 0.707 } } """.stripMargin) val props = SampleActor(json).get TestActorRef[SampleActor](props).underlyingActor } def notSoRandomSampleActor(fraction: Double, randoms: Double*): SampleActor = { val json = parse( s"""{ "type": "sample", "params": { "fraction": ${fraction} } } """.stripMargin) val source = NotSoRandom(randoms: _*) val props = Props(classOf[SampleActor], json, Random(source)) TestActorRef[SampleActor](props).underlyingActor } implicit val timeout = Timeout(100 millis) "A SampleActor" should { "Be instantiated with sample fraction" in { val json = parse("""{ "type": "sample", "params": { "fraction": 0.5 }}""".stripMargin) val props = SampleActor(json).get props.actorClass() should be(classOf[SampleActor]) val actor = TestActorRef[SampleActor](props).underlyingActor actor.fraction should be(0.5) } "Not be instantiated without fraction or percentage" in { val json = parse("""{ "type": "sample", "params": { "bla": "blabla" }}""".stripMargin) SampleActor(json) should be(None) } "Be constructible with a io.coral.lib.Random for random boolean stream" in { val actor = notSoRandomSampleActor(fraction = 0.5, randoms = 0.1, 0.49, 0.50, 0.51, 0.8, 0.4) actor.next() should be(true) actor.next() should be(true) actor.next() should be(false) actor.next() should be(false) actor.next() should be(false) actor.next() should be(true) } "Should trigger true or false according to random binomial sequence" in { val actor = notSoRandomSampleActor(fraction = 0.7, randoms = 0.8, 0.6) val json = parse( """{ "something": "whatever" }""").asInstanceOf[JObject] val result1 = actor.simpleEmitTrigger(json) result1 should be(Some(JNothing)) val result2 = actor.simpleEmitTrigger(json) result2 should be(Some(json)) } "Should have trigger and emit cooperate" in { val actor = notSoRandomSampleActor(fraction = 0.7, randoms = 0.6, 0.8) val ref = actor.self val json = parse( """{ "something": "whatever" }""").asInstanceOf[JObject] val probe = TestProbe() actor.emitTargets += probe.ref ref ! json probe.expectMsg(json) ref ! json probe.expectNoMsg(100 millis) } } }
Example 150
Source File: FailedFlow1Spec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.pattern._ import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalatest.OptionValues._ import org.scalatest.{AsyncFlatSpecLike, Matchers} import scala.util.Failure object FailedFlow1Spec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPath = dummyJarsDir + "/DummyFailedFlowSvc1/META-INF/squbs-meta.conf" val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = FailedFlow1Spec | ${JMX.prefixConfig} = true |} |default-listener.bind-port = 0 |akka.http.server.remote-address-header = on """.stripMargin ) import Timeouts._ val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanResources(withClassPath = false, classPath) .start(startupTimeout) } class FailedFlow1Spec extends TestKit(FailedFlow1Spec.boot.actorSystem) with AsyncFlatSpecLike with Matchers { "The DummyFailedFlowSvc1" should "fail" in { import Timeouts._ Unicomplex(system).uniActor ? SystemState map { state => state shouldBe Failed } } "The DummyFailedFlowSvc1" should "expose errors" in { import Timeouts._ (Unicomplex(system).uniActor ? ReportStatus).mapTo[StatusReport] map { report => report.state shouldBe Failed val initTry = report.cubes.values.head._2.value.reports.values.head.value initTry should matchPattern { case Failure(e: InstantiationException) => } } } }
Example 151
Source File: FriendEntitySpec.scala From lagom-scala-chirper with Apache License 2.0 | 5 votes |
package sample.chirper.friend.impl import akka.Done import akka.actor.ActorSystem import akka.testkit.TestKit import com.lightbend.lagom.scaladsl.persistence.PersistentEntity.InvalidCommandException import com.lightbend.lagom.scaladsl.playjson.JsonSerializerRegistry import com.lightbend.lagom.scaladsl.testkit.PersistentEntityTestDriver import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpec} import sample.chirper.friend.api.User class FriendEntitySpec extends WordSpec with Matchers with BeforeAndAfterAll { val system = ActorSystem("FriendEntitySpec", JsonSerializerRegistry.actorSystemSetupFor(FriendSerializerRegistry)) override protected def afterAll() = { TestKit.shutdownActorSystem(system) } def withTestDriver(test: PersistentEntityTestDriver[FriendCommand[_], FriendEvent, FriendState] => Unit): Unit = { val testDriver = new PersistentEntityTestDriver(system, new FriendEntity, "user-1") test(testDriver) testDriver.getAllIssues should have size 0 } "Friend entity" should { "not be initialized by default" in withTestDriver { driver => val outcome = driver.run(GetUser()) outcome.replies should contain only GetUserReply(None) } "create user" in withTestDriver { driver => val alice = User("alice", "Alice") val outcome = driver.run(CreateUser(alice)) outcome.replies should contain only Done outcome.events.size should ===(1) outcome.events.head should matchPattern { case UserCreated("alice", "Alice", _) => } } "reject duplicate create" in withTestDriver { driver => val alice = User("alice", "Alice") driver.run(CreateUser(alice)) val outcome = driver.run(CreateUser(alice)) outcome.replies should contain only InvalidCommandException("User Alice is already created") } "create user with initial friends" in withTestDriver { driver => val alice = User("alice", "Alice", List("bob", "peter")) val outcome = driver.run(CreateUser(alice)) outcome.replies should contain only Done outcome.events.size should ===(3) outcome.events(0) should matchPattern { case UserCreated("alice", "Alice", _) => } outcome.events(1) should matchPattern { case FriendAdded("alice", "bob", _) => } outcome.events(2) should matchPattern { case FriendAdded("alice", "peter", _) => } } "not add friend if not initialized" in withTestDriver { driver => val outcome = driver.run(AddFriend("bob")) outcome.replies should contain only InvalidCommandException("User user-1 is not created") } "add friend" in withTestDriver { driver => val alice = User("alice", "Alice") driver.run(CreateUser(alice)) val outcome = driver.run(AddFriend("bob"), AddFriend("peter")) outcome.replies should contain only Done outcome.events(0) should matchPattern { case FriendAdded("alice", "bob", _) => } outcome.events(1) should matchPattern { case FriendAdded("alice", "peter", _) => } } "add duplicate friend" in withTestDriver { driver => val alice = User("alice", "Alice") driver.run(CreateUser(alice)) driver.run(AddFriend("bob"), AddFriend("peter")) val outcome = driver.run(AddFriend("bob")) outcome.replies should contain only Done outcome.events.size should ===(0) } "get user" in withTestDriver {driver => val alice = User("alice", "Alice") driver.run(CreateUser(alice)) val outcome = driver.run(GetUser()) outcome.replies should contain only GetUserReply(Some(alice)) outcome.events.size should ===(0) } } }
Example 152
Source File: ArtifactS3SaverTest.scala From marvin-engine-executor with Apache License 2.0 | 5 votes |
package org.marvin.artifact.manager import java.io.File import akka.Done import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit} import com.amazonaws.services.s3.AmazonS3 import com.amazonaws.services.s3.model.GetObjectRequest import com.typesafe.config.ConfigFactory import org.apache.hadoop.fs.Path import org.marvin.artifact.manager.ArtifactSaver.{SaveToLocal, SaveToRemote} import org.marvin.fixtures.MetadataMock import org.marvin.model.EngineMetadata import org.scalamock.scalatest.MockFactory import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class ArtifactS3SaverTest extends TestKit( ActorSystem("ArtifactS3SaverTest", ConfigFactory.parseString("""akka.loggers = ["akka.testkit.TestEventListener"]"""))) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with MockFactory { override def afterAll { TestKit.shutdownActorSystem(system) } "s3 saver" should { "receive SaveToLocal message" in { val metadata = MetadataMock.simpleMockedMetadata() val _s3Client = mock[AmazonS3] val actor = system.actorOf(Props(new ArtifactS3SaverMock(metadata, _s3Client, true))) val protocol = "protocol" val artifactName = "model" (_s3Client.getObject(_ : GetObjectRequest, _ : File)).expects(*, *).once() actor ! SaveToLocal(artifactName, protocol) expectMsg(Done) } "receive SaveToRemote message" in { val metadata = MetadataMock.simpleMockedMetadata() val _s3Client = mock[AmazonS3] val actor = system.actorOf(Props(new ArtifactS3SaverMock(metadata, _s3Client, true))) val protocol = "protocol" val artifactName = "model" (_s3Client.putObject(_ : String, _: String, _ : File)).expects(metadata.s3BucketName, *, *).once() actor ! SaveToRemote(artifactName, protocol) expectMsg(Done) } } "call preStart method wth success" in { val metadata = MetadataMock.simpleMockedMetadata() try{ system.actorOf(Props(new ArtifactS3Saver(metadata))) assert(true) }catch { case _: Throwable => assert(false) } } class ArtifactS3SaverMock(metadata: EngineMetadata, _s3Client: AmazonS3, _isRemote: Boolean) extends ArtifactS3Saver(metadata) { def _preStart(): Unit = super.preStart() override def preStart(): Unit = { s3Client = _s3Client } override def validatePath(path: Path, isRemote: Boolean): Boolean = { if (_isRemote) true else false } } }
Example 153
Source File: OutletTap.scala From cloudflow with Apache License 2.0 | 5 votes |
package cloudflow.akkastream.testkit.scaladsl import scala.concurrent._ import akka.{ Done, NotUsed } import akka.actor.ActorSystem import akka.stream.scaladsl._ import akka.testkit.TestKit import cloudflow.streamlets._ import cloudflow.akkastream.testkit.PartitionedValue case class Failed(e: Throwable) case class SinkOutletTap[T](outlet: CodecOutlet[T], val snk: Sink[(String, T), NotUsed]) extends OutletTap[T] { private[testkit] val sink: Sink[PartitionedValue[T], Future[Done]] = Flow[PartitionedValue[T]] .alsoTo( Flow[PartitionedValue[T]] .map(pv ⇒ (pv.key, pv.value)) .to(snk) ) .toMat(Sink.ignore)(Keep.right) } case class ProbeOutletTap[T](outlet: CodecOutlet[T])(implicit system: ActorSystem) extends OutletTap[T] { val probe = new TestKit(system) // This will emit Tuple2 elements to the test actor (partitioning key -> data) // for easy usage in Scala-based tests private[testkit] val sink: Sink[PartitionedValue[T], Future[Done]] = Flow[PartitionedValue[T]] .alsoTo( Flow[PartitionedValue[T]] .map(pv ⇒ (pv.key, pv.value)) .to(Sink.actorRef[Tuple2[String, T]](probe.testActor, Completed, Failed)) ) .toMat(Sink.ignore)(Keep.right) }
Example 154
Source File: NoWellKnownActorsSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.actorregistry import java.lang.management.ManagementFactory import javax.management.ObjectName import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, FunSpecLike, Matchers} import org.squbs.lifecycle.GracefulStop import org.squbs.unicomplex.JMX.prefix import org.squbs.unicomplex._ object NoWellKnownActorsSpec { val classPaths = Array(getClass.getClassLoader.getResource("classpaths/NoWellKnownActorsCube").getPath) val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = ActorRegistryNoWellKnownActorsSpec | ${JMX.prefixConfig} = true |} """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class NoWellKnownActorsSpec extends TestKit(NoWellKnownActorsSpec.boot.actorSystem) with ImplicitSender with FunSpecLike with Matchers with BeforeAndAfterAll { import NoWellKnownActorsSpec._ override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } describe("ActorRegistry") { it ("should initialize even if there is no well-known actor in the classpath") { awaitAssert { boot.started shouldBe true Unicomplex(system).uniActor ! SystemState expectMsg(Active) } } it ("should show well-known actor count as zero") { val o = new ObjectName(prefix(boot.actorSystem) + "org.squbs.unicomplex:type=ActorRegistry") val count = ManagementFactory.getPlatformMBeanServer.getAttribute(o, "Count").asInstanceOf[Int] count should be (0) } } }
Example 155
Source File: ResolverRegistryJMXSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.resolver import java.lang.management.ManagementFactory import javax.management.{InstanceNotFoundException, ObjectName} import javax.management.openmbean.CompositeData import akka.actor.ActorSystem import akka.testkit.TestKit import org.scalatest.{FlatSpecLike, Matchers} import scala.language.postfixOps class ResolverRegistryJMXSpec extends TestKit(ActorSystem("ResolverRegistryJMXSpec")) with FlatSpecLike with Matchers { private val oName = ObjectName.getInstance(s"org.squbs.configuration.${system.name}:type=ResolverRegistry") it should "not be registered at all when not accessed" in { an [InstanceNotFoundException] should be thrownBy { ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "ResolverInfo"). asInstanceOf[Array[CompositeData]] } } it should "not list any endpoint resolvers when not registered" in { ResolverRegistry(system) val resolvers = ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "ResolverInfo"). asInstanceOf[Array[CompositeData]] resolvers should have length 0 } it should "list all resolvers with position" in { val dummyLocalhostResolver = new DummyLocalhostResolver val dummyServiceEndpointResolver = new DummyServiceResolver ResolverRegistry(system).register(dummyLocalhostResolver) ResolverRegistry(system).register(dummyServiceEndpointResolver) val resolvers = ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "ResolverInfo"). asInstanceOf[Array[CompositeData]] resolvers should have length 2 resolvers(0).get("position") shouldBe 0 resolvers(0).get("name") shouldEqual dummyServiceEndpointResolver.name resolvers(0).get("className") shouldEqual dummyServiceEndpointResolver.getClass.getName resolvers(1).get("position") shouldBe 1 resolvers(1).get("name") shouldEqual dummyLocalhostResolver.name resolvers(1).get("className") shouldEqual dummyLocalhostResolver.getClass.getName } }
Example 156
Source File: CircuitBreakerStateSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.streams.circuitbreaker import java.lang.management.ManagementFactory import javax.management.ObjectName import akka.actor.ActorSystem import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalatest.{FlatSpecLike, Matchers} import org.squbs.streams.circuitbreaker.impl.AtomicCircuitBreakerState import scala.language.postfixOps class CircuitBreakerStateSpec extends TestKit(ActorSystem("CircuitBreakerStateSpec")) with FlatSpecLike with Matchers { implicit val scheduler = system.scheduler import system.dispatcher import scala.concurrent.duration._ it should "use default exponential backoff settings" in { AtomicCircuitBreakerState( "params-with-default-exponential-backoff", 1, 50.milliseconds, 20.milliseconds) assertJmxValue("params-with-default-exponential-backoff", "MaxFailures", 1) assertJmxValue("params-with-default-exponential-backoff", "CallTimeout", "50 milliseconds") assertJmxValue("params-with-default-exponential-backoff", "ResetTimeout", "20 milliseconds") assertJmxValue("params-with-default-exponential-backoff", "MaxResetTimeout", "36500 days") assertJmxValue("params-with-default-exponential-backoff", "ExponentialBackoffFactor", 1.0) } it should "create circuit breaker state with provided exponential backoff settings" in { AtomicCircuitBreakerState( "params-with-custom-exponential-backoff", 1, 50.milliseconds, 20.milliseconds, 2.minutes, 16.0) assertJmxValue("params-with-custom-exponential-backoff", "MaxFailures", 1) assertJmxValue("params-with-custom-exponential-backoff", "CallTimeout", "50 milliseconds") assertJmxValue("params-with-custom-exponential-backoff", "ResetTimeout", "20 milliseconds") assertJmxValue("params-with-custom-exponential-backoff", "MaxResetTimeout", "2 minutes") assertJmxValue("params-with-custom-exponential-backoff", "ExponentialBackoffFactor", 16.0) } it should "create circuit breaker state from configuration" in { val config = ConfigFactory.parseString( """ |max-failures = 1 |call-timeout = 50 ms |reset-timeout = 20 ms |max-reset-timeout = 1 minute |exponential-backoff-factor = 16.0 """.stripMargin) AtomicCircuitBreakerState("from-config", config) assertJmxValue("from-config", "MaxFailures", 1) assertJmxValue("from-config", "CallTimeout", "50 milliseconds") assertJmxValue("from-config", "ResetTimeout", "20 milliseconds") assertJmxValue("from-config", "MaxResetTimeout", "1 minute") assertJmxValue("from-config", "ExponentialBackoffFactor", 16.0) } it should "fallback to default values when configuration is empty" in { AtomicCircuitBreakerState("empty-config", ConfigFactory.empty()) assertJmxValue("empty-config", "MaxFailures", 5) assertJmxValue("empty-config", "CallTimeout", "1 second") assertJmxValue("empty-config", "ResetTimeout", "5 seconds") assertJmxValue("empty-config", "MaxResetTimeout", "36500 days") assertJmxValue("empty-config", "ExponentialBackoffFactor", 1.0) } def assertJmxValue(name: String, key: String, expectedValue: Any) = { val oName = ObjectName.getInstance( s"org.squbs.configuration:type=squbs.circuitbreaker,name=${ObjectName.quote(name)}") val actualValue = ManagementFactory.getPlatformMBeanServer.getAttribute(oName, key) actualValue shouldEqual expectedValue } }
Example 157
Source File: EnvironmentResolverRegistryJMXSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.env import java.lang.management.ManagementFactory import javax.management.{InstanceNotFoundException, ObjectName} import javax.management.openmbean.CompositeData import akka.actor.ActorSystem import akka.testkit.TestKit import org.scalatest.{FlatSpecLike, Matchers} import scala.language.postfixOps class EnvironmentResolverRegistryJMXSpec extends TestKit(ActorSystem("EnvironmentResolverRegistryJMXSpec")) with FlatSpecLike with Matchers { val oName = ObjectName.getInstance(s"org.squbs.configuration.${system.name}:type=EnvironmentResolverRegistry") it should "not be registered if not accessed at all" in { an [InstanceNotFoundException] should be thrownBy { ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "EnvironmentResolverInfo"). asInstanceOf[Array[CompositeData]] } } it should "not list any environment resolvers when not registered but accessed" in { EnvironmentResolverRegistry(system).resolve val resolvers = ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "EnvironmentResolverInfo"). asInstanceOf[Array[CompositeData]] resolvers should have length 0 } it should "list all environment resolvers with position" in { EnvironmentResolverRegistry(system).register(DummyProdEnvironmentResolver) EnvironmentResolverRegistry(system).register(DummyQAEnvironmentResolver) val resolvers = ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "EnvironmentResolverInfo"). asInstanceOf[Array[CompositeData]] resolvers should have length 2 resolvers(0).get("position") shouldBe 0 resolvers(0).get("name") shouldEqual DummyQAEnvironmentResolver.name resolvers(0).get("className") shouldEqual DummyQAEnvironmentResolver.getClass.getName resolvers(1).get("position") shouldBe 1 resolvers(1).get("name") shouldEqual DummyProdEnvironmentResolver.name resolvers(1).get("className") shouldEqual DummyProdEnvironmentResolver.getClass.getName } }
Example 158
Source File: EnvironmentSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.env import akka.actor.ActorSystem import akka.testkit.TestKit import org.scalatest._ class EnvironmentSpec extends TestKit(ActorSystem("EnvironmentSpec")) with FlatSpecLike with Matchers with BeforeAndAfterEach{ override def beforeEach(): Unit = { EnvironmentResolverRegistry(system).register(DummyProdEnvironmentResolver) } override def afterEach(): Unit = { EnvironmentResolverRegistry(system).environmentResolvers = List[EnvironmentResolver]() } "EnvironmentResolverRegistry" should "contain DummyProdEnvironmentResolver" in { EnvironmentResolverRegistry(system).environmentResolvers should have size 1 EnvironmentResolverRegistry(system).environmentResolvers.head should be (DummyProdEnvironmentResolver) } it should "resolve the environment" in { EnvironmentResolverRegistry(system).resolve should be (PROD) } it should "give priority to resolvers in the reverse order of registration" in { EnvironmentResolverRegistry(system).register(DummyQAEnvironmentResolver) EnvironmentResolverRegistry(system).resolve should be (QA) } it should "try the chain of resolvers till the environment can be resolved" in { EnvironmentResolverRegistry(system).register(DummyNotResolveEnvironmentResolver) EnvironmentResolverRegistry(system).resolve should be (PROD) } it should "unregister a resolver" in { EnvironmentResolverRegistry(system).register(DummyQAEnvironmentResolver) EnvironmentResolverRegistry(system).resolve should be (QA) EnvironmentResolverRegistry(system).unregister("DummyQAEnvironmentResolver") EnvironmentResolverRegistry(system).resolve should be (PROD) } it should "not throw exceptions when unregister non-existing resolver" in { val resolverCount = EnvironmentResolverRegistry(system).environmentResolvers.size noException shouldBe thrownBy { EnvironmentResolverRegistry(system).unregister("DummyQAEnvironmentResolver") } EnvironmentResolverRegistry(system).environmentResolvers.size shouldBe resolverCount } it should "represent the correct lowercase name" in { PROD.lowercaseName shouldBe "prod" QA.lowercaseName shouldBe "qa" DEV.lowercaseName shouldBe "dev" } }
Example 159
Source File: ChirpTimelineEntitySpec.scala From lagom-scala-chirper with Apache License 2.0 | 5 votes |
package sample.chirper.chirp.impl import akka.actor.ActorSystem import akka.stream.scaladsl.Source import akka.testkit.TestKit import akka.{Done, NotUsed} import com.lightbend.lagom.scaladsl.playjson.JsonSerializerRegistry import com.lightbend.lagom.scaladsl.testkit.PersistentEntityTestDriver import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpec} import sample.chirper.chirp.api.Chirp class ChirpTimelineEntitySpec extends WordSpec with Matchers with BeforeAndAfterAll { val system = ActorSystem("ChirpTimelineEntitySpec", JsonSerializerRegistry.actorSystemSetupFor(ChirpTimelineSerializerRegistry)) override protected def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } def withTestDriver(test: PersistentEntityTestDriver[ChirpTimelineCommand[_], ChirpTimelineEvent, NotUsed] => Unit): Unit = { val topic = new ChirpTopicStub val testDriver = new PersistentEntityTestDriver(system, new ChirpTimelineEntity(topic), "chirp-1") test(testDriver) testDriver.getAllIssues should have size 0 } "Chirp timeline entity" should { "add chirp" in withTestDriver { driver => val chirp = Chirp("user-1", "Hello, world") val outcome = driver.run(new AddChirp(chirp)) outcome.replies should contain only Done outcome.events.size should ===(1) outcome.events(0).asInstanceOf[ChirpAdded].chirp should ===(chirp) } } } class ChirpTopicStub extends ChirpTopic { var chirps = List.empty[Chirp] override def publish(chirp: Chirp): Unit = chirps = chirps :+ chirp override def subscriber(userId: String): Source[Chirp, NotUsed] = Source(chirps) }
Example 160
Source File: InvalidPipelineFlowSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.pattern._ import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalatest.OptionValues._ import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.Await import scala.util.Failure object InvalidPipelineFlowSpec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPath = dummyJarsDir + "/InvalidPipelineFlowSvc/META-INF/squbs-meta.conf" val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = InvalidPipelineFlowSpec | ${JMX.prefixConfig} = true |} |default-listener.bind-port = 0 |akka.http.server.remote-address-header = on """.stripMargin ) import Timeouts._ val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanResources(withClassPath = false, classPath) .start(startupTimeout) } class InvalidPipelineFlowSpec extends TestKit(InvalidPipelineFlowSpec.boot.actorSystem) with FlatSpecLike with Matchers { "The InvalidPipelineFlowSvc" should "fail" in { import Timeouts._ Await.result(Unicomplex(system).uniActor ? SystemState, awaitMax) shouldBe Failed } "The InvalidPipelineFlowSvc" should "expose errors" in { import Timeouts._ val report = Await.result((Unicomplex(system).uniActor ? ReportStatus).mapTo[StatusReport], awaitMax) report.state shouldBe Failed val initTry = report.cubes.values.head._2.value.reports.values.head.value initTry should matchPattern { case Failure(e: IllegalArgumentException) => } } }
Example 161
Source File: JavaRouteNoHandlerSvcSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.pattern._ import akka.stream.ActorMaterializer import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalatest.{AsyncFlatSpecLike, BeforeAndAfterAll, Matchers} import org.squbs.lifecycle.GracefulStop import org.squbs.unicomplex.Timeouts._ object JavaRouteNoHandlerSvcSpec { val classPaths = Array(getClass.getClassLoader.getResource("classpaths/JavaRouteNoHandlerSvc").getPath) val config = ConfigFactory.parseString( s""" |default-listener.bind-port = 0 |squbs { | actorsystem-name = JavaRouteNoHandlerSvcSpec | ${JMX.prefixConfig} = true |} """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class JavaRouteNoHandlerSvcSpec extends TestKit( JavaRouteNoHandlerSvcSpec.boot.actorSystem) with AsyncFlatSpecLike with BeforeAndAfterAll with Matchers { implicit val am = ActorMaterializer() val portBindingsF = (Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]] val portF = portBindingsF map { bindings => bindings("default-listener") } override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } it should "handle a normal request" in { for { port <- portF response <- entityAsString(s"http://127.0.0.1:$port/javaroutenohandlersvc/ping") } yield { response shouldBe "pong" } } it should "apply the rejection handler to the service" in { for { port <- portF response <- entityAsString(s"http://127.0.0.1:$port/javaroutenohandlersvc/reject") } yield { response shouldBe "There was an internal server error." } } it should "apply the exception handler to the service" in { for { port <- portF response <- entityAsString(s"http://127.0.0.1:$port/javaroutenohandlersvc/exception") } yield { response shouldBe "There was an internal server error." } } }
Example 162
Source File: StreamTestSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor._ import akka.http.scaladsl.Http import akka.http.scaladsl.model._ import akka.pattern._ import akka.stream.ActorMaterializer import akka.stream.scaladsl.FileIO import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest.concurrent.Waiters import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import org.squbs.lifecycle.GracefulStop import org.squbs.unicomplex.Timeouts._ import scala.concurrent.Await object StreamTestSpec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPaths = Array( "StreamCube", "StreamSvc" ) map (dummyJarsDir + "/" + _) val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = StreamTestSpec | ${JMX.prefixConfig} = true |} |default-listener.bind-port = 0 """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions .start() } class StreamTestSpec extends TestKit(StreamTestSpec.boot.actorSystem) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with Waiters { implicit val am = ActorMaterializer() import system.dispatcher val portBindings = Await.result((Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]], awaitMax) val port = portBindings("default-listener") override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "UniComplex" must { "upload file with correct parts" in { val filePath = StreamTestSpec.getClass.getResource("/classpaths/StreamSvc/dummy.txt").getPath val file = new java.io.File(filePath) require(file.exists() && file.canRead) val chunkSize = 8192 val responseF = Http().singleRequest(HttpRequest(HttpMethods.POST, uri = s"http://127.0.0.1:$port/streamsvc/file-upload", entity = HttpEntity(MediaTypes.`application/octet-stream`, FileIO.fromPath(file.toPath, chunkSize)))) val actualResponseEntity = Await.result(responseF flatMap extractEntityAsString, awaitMax) val expectedNumberOfChunks = Math.ceil(file.length.toDouble / chunkSize).toInt val expectedResponseEntity = s"Chunk Count: $expectedNumberOfChunks ByteCount: ${file.length}" actualResponseEntity should be (expectedResponseEntity) } } }
Example 163
Source File: JavaRootSvcSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.pattern._ import akka.stream.ActorMaterializer import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalatest.{AsyncFlatSpecLike, BeforeAndAfterAll, Matchers} import org.squbs.lifecycle.GracefulStop import org.squbs.unicomplex.Timeouts._ object JavaRootSvcSpec { val classPaths = Array(getClass.getClassLoader.getResource("classpaths/JavaRootSvc").getPath) val config = ConfigFactory.parseString( s""" |default-listener.bind-port = 0 |squbs { | actorsystem-name = JavaRootSvcSpec | ${JMX.prefixConfig} = true |} """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class JavaRootSvcSpec extends TestKit( JavaRootSvcSpec.boot.actorSystem) with AsyncFlatSpecLike with BeforeAndAfterAll with Matchers { implicit val am = ActorMaterializer() val portBindingsF = (Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]] val portF = portBindingsF map { bindings => bindings("default-listener") } override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } it should "handle a normal request" in { for { port <- portF response <- entityAsString(s"http://127.0.0.1:$port/ping") } yield { response shouldBe "pong" } } it should "apply the rejection handler to the service" in { for { port <- portF response <- entityAsString(s"http://127.0.0.1:$port/reject") } yield { response shouldBe "rejected" } } it should "apply the exception handler to the service" in { for { port <- portF response <- entityAsString(s"http://127.0.0.1:$port/exception") } yield { response shouldBe "exception" } } }
Example 164
Source File: UnicomplexTestModeOnSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest._ import org.squbs.lifecycle.GracefulStop import org.squbs.unicomplex.Timeouts._ import scala.concurrent.Await import scala.language.postfixOps object UnicomplexTestModeOnSpec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPaths = Array( "DummySvc" ) map (dummyJarsDir + "/" + _) val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = unicomplexTestModeSpec | ${JMX.prefixConfig} = true |} | |default-listener.bind-port = 0 """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class UnicomplexTestModeOnSpec extends TestKit(UnicomplexTestModeOnSpec.boot.actorSystem) with ImplicitSender with FlatSpecLike with Matchers with BeforeAndAfterAll { import akka.pattern.ask val portBindings = Await.result((Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]], awaitMax) override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "Unicomplex" should "let the system pick the port" in { portBindings("default-listener") should not be 8080 portBindings("default-listener") should not be 13000 // bind-port specified in src/test/resources/reference.conf } }
Example 165
Source File: RouteActorHandlerSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.http.scaladsl.server._ import akka.pattern._ import akka.stream.ActorMaterializer import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.squbs.lifecycle.GracefulStop import org.squbs.unicomplex.Timeouts._ import scala.concurrent.Await object RouteActorHandlerSpec { val classPaths = Array(getClass.getClassLoader.getResource("classpaths/RouteActorHandler").getPath) val config = ConfigFactory.parseString( s""" |default-listener.bind-port = 0 |squbs { | actorsystem-name = RouteActorHandlerSpec | ${JMX.prefixConfig} = true |} """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class RouteActorHandlerSpec extends TestKit( RouteActorHandlerSpec.boot.actorSystem) with FlatSpecLike with BeforeAndAfterAll with Matchers { implicit val am = ActorMaterializer() val portBindings = Await.result((Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]], awaitMax) val port = portBindings("default-listener") override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "Rejection handler" should "be applied to the route actor" in { Await.result(entityAsString(s"http://127.0.0.1:$port/ctx/reject"), awaitMax) should be("rejected") } "Exception handler" should "be applied to the route actor" in { Await.result(entityAsString(s"http://127.0.0.1:$port/ctx/exception"), awaitMax) should be("exception") } } class Service extends RouteDefinition { override def rejectionHandler: Option[RejectionHandler] = Some(RejectionHandler.newBuilder().handle { case ServiceRejection => complete("rejected") }.result()) override def exceptionHandler: Option[ExceptionHandler] = Some(ExceptionHandler { case _: ServiceException => complete("exception") }) override def route: Route = path("reject") { reject(ServiceRejection) } ~ path("exception") { ctx => throw new ServiceException } object ServiceRejection extends Rejection class ServiceException extends Exception }
Example 166
Source File: UnicomplexPortAutoSelectSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest._ import org.squbs.lifecycle.GracefulStop import org.squbs.unicomplex.Timeouts._ import scala.concurrent.Await import scala.language.postfixOps object UnicomplexPortAutoSelectSpec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPaths = Array( "DummySvc" ) map (dummyJarsDir + "/" + _) val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = UnicomplexPortAutoSelectSpec | ${JMX.prefixConfig} = true |} | |default-listener.bind-port = 0 """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class UnicomplexPortAutoSelectSpec extends TestKit(UnicomplexPortAutoSelectSpec.boot.actorSystem) with ImplicitSender with FlatSpecLike with Matchers with BeforeAndAfterAll { import akka.pattern.ask val portBindings = Await.result((Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]], awaitMax) override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "Unicomplex" should "let the system pick the port" in { portBindings("default-listener") should not be(8080) portBindings("default-listener") should not be(13000) // bind-port specified in src/test/resources/reference.conf } }
Example 167
Source File: ServiceRegistrySpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.http.scaladsl.model.Uri.Path import akka.testkit.TestKit import org.scalatest.{FlatSpecLike, Matchers} import org.squbs.unicomplex.FlowHandler._ class ServiceRegistrySpec extends TestKit(ActorSystem("ServiceRegistrySpec")) with FlatSpecLike with Matchers { "merge" should "work" in { val serviceRegistry = new ServiceRegistry(system.log) import serviceRegistry.merge val pipelineSetting = (None, None, None) val result = merge(Seq(), "abc", "old", pipelineSetting) result should have size 1 result(0)._2 should be ("old") val result1 = merge(result, "", "empty", pipelineSetting) result1 should have size 2 result1(0)._2 should be ("old") result1(1)._2 should be ("empty") val result2 = merge(result1, "abc/def", "abc/def", pipelineSetting) result2 should have size 3 result2(0)._2 should be ("abc/def") result2(1)._2 should be ("old") result2(2)._2 should be ("empty") val result3 = merge(result2, "abc", "new", pipelineSetting) result3 should have size 3 result3(0)._2 should be ("abc/def") result3(1)._2 should be ("new") result3(2)._2 should be ("empty") val finding = result3 find { entry => pathMatch(Path("abc"), entry._1) } finding should not be None finding.get._2 should be ("new") val finding2 = result3 find { entry => pathMatch(Path("abc/def"), entry._1) } finding2 should not be None finding2.get._2 should be ("abc/def") val finding3 = result3 find { entry => pathMatch(Path("aabc/def"), entry._1) } finding3 should not be None finding3.get._2 should be ("empty") val finding4 = result3 find { entry => pathMatch(Path("abc/defg"), entry._1) } finding4 should not be None finding4.get._2 should be ("new") val finding5 = result3 find { entry => pathMatch(Path("abcd/a"), entry._1) // abcd should not match either abc/def nor abc } finding5.get._2 should be ("empty") } }
Example 168
Source File: ShellClientSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.client.socket import java.util.UUID import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{TestProbe, ImplicitSender, TestKit} import org.apache.toree.communication.ZMQMessage import org.apache.toree.communication.security.SecurityActorType import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.client.ActorLoader import org.apache.toree.kernel.protocol.v5.content.ExecuteRequest import org.scalatest.mock.MockitoSugar import org.scalatest.{Matchers, FunSpecLike} import org.mockito.Mockito._ import org.mockito.Matchers._ import play.api.libs.json.Json class ShellClientSpec extends TestKit(ActorSystem("ShellActorSpec")) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { private val SignatureEnabled = true describe("ShellClientActor") { val socketFactory = mock[SocketFactory] val mockActorLoader = mock[ActorLoader] val probe : TestProbe = TestProbe() when(socketFactory.ShellClient( any(classOf[ActorSystem]), any(classOf[ActorRef]) )).thenReturn(probe.ref) val signatureManagerProbe = TestProbe() doReturn(system.actorSelection(signatureManagerProbe.ref.path.toString)) .when(mockActorLoader).load(SecurityActorType.SignatureManager) val shellClient = system.actorOf(Props( classOf[ShellClient], socketFactory, mockActorLoader, SignatureEnabled )) describe("send execute request") { it("should send execute request") { val request = ExecuteRequest( "foo", false, true, UserExpressions(), true ) val header = Header( UUID.randomUUID().toString, "spark", UUID.randomUUID().toString, MessageType.Incoming.ExecuteRequest.toString, "5.0" ) val kernelMessage = KernelMessage( Seq[Array[Byte]](), "", header, HeaderBuilder.empty, Metadata(), Json.toJson(request).toString ) shellClient ! kernelMessage // Echo back the kernel message sent to have a signature injected signatureManagerProbe.expectMsgClass(classOf[KernelMessage]) signatureManagerProbe.reply(kernelMessage) probe.expectMsgClass(classOf[ZMQMessage]) } } } }
Example 169
Source File: HeartbeatSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel.socket import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import akka.util.ByteString import org.apache.toree.communication.ZMQMessage import com.typesafe.config.ConfigFactory import org.mockito.Matchers._ import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} import test.utils.MaxAkkaTestTimeout object HeartbeatSpec { val config = """ akka { loglevel = "WARNING" }""" } class HeartbeatSpec extends TestKit( ActorSystem( "HeartbeatActorSpec", ConfigFactory.parseString(HeartbeatSpec.config), org.apache.toree.Main.getClass.getClassLoader )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { val SomeMessage: String = "some message" val SomeZMQMessage: ZMQMessage = ZMQMessage(ByteString(SomeMessage.getBytes)) describe("HeartbeatActor") { val socketFactory = mock[SocketFactory] val probe : TestProbe = TestProbe() when(socketFactory.Heartbeat(any(classOf[ActorSystem]), any(classOf[ActorRef]))).thenReturn(probe.ref) val heartbeat = system.actorOf(Props(classOf[Heartbeat], socketFactory)) describe("send heartbeat") { it("should receive and send same ZMQMessage") { heartbeat ! SomeZMQMessage probe.expectMsg(MaxAkkaTestTimeout, SomeZMQMessage) } } } }
Example 170
Source File: IOPubSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel.socket import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.apache.toree.communication.ZMQMessage import org.apache.toree.kernel.protocol.v5.kernel.Utilities import org.apache.toree.kernel.protocol.v5Test._ import Utilities._ import com.typesafe.config.ConfigFactory import org.mockito.Matchers._ import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} import test.utils.MaxAkkaTestTimeout object IOPubSpec { val config =""" akka { loglevel = "WARNING" }""" } class IOPubSpec extends TestKit( ActorSystem("IOPubActorSpec", ConfigFactory.parseString(IOPubSpec.config), org.apache.toree.Main.getClass.getClassLoader )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("IOPubActor") { val socketFactory = mock[SocketFactory] val probe : TestProbe = TestProbe() when(socketFactory.IOPub(any(classOf[ActorSystem]))).thenReturn(probe.ref) val socket = system.actorOf(Props(classOf[IOPub], socketFactory)) // TODO test that the response type changed describe("#receive") { it("should reply with a ZMQMessage") { // Use the implicit to convert the KernelMessage to ZMQMessage val MockZMQMessage : ZMQMessage = MockKernelMessage socket ! MockKernelMessage probe.expectMsg(MaxAkkaTestTimeout, MockZMQMessage) } } } }
Example 171
Source File: ShellSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.kernel.socket import java.nio.charset.Charset import akka.actor.{ActorSelection, ActorRef, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import akka.util.ByteString import org.apache.toree.communication.ZMQMessage import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.kernel.{ActorLoader, Utilities} import org.apache.toree.kernel.protocol.v5Test._ import Utilities._ import com.typesafe.config.ConfigFactory import org.mockito.Matchers._ import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} import test.utils.MaxAkkaTestTimeout object ShellSpec { val config =""" akka { loglevel = "WARNING" }""" } class ShellSpec extends TestKit( ActorSystem( "ShellActorSpec", ConfigFactory.parseString(ShellSpec.config), org.apache.toree.Main.getClass.getClassLoader )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("Shell") { val socketFactory = mock[SocketFactory] val actorLoader = mock[ActorLoader] val socketProbe : TestProbe = TestProbe() when(socketFactory.Shell(any(classOf[ActorSystem]), any(classOf[ActorRef]))).thenReturn(socketProbe.ref) val relayProbe : TestProbe = TestProbe() val relaySelection : ActorSelection = system.actorSelection(relayProbe.ref.path) when(actorLoader.load(SystemActorType.KernelMessageRelay)).thenReturn(relaySelection) val shell = system.actorOf(Props(classOf[Shell], socketFactory, actorLoader)) describe("#receive") { it("( KernelMessage ) should reply with a ZMQMessage via the socket") { // Use the implicit to convert the KernelMessage to ZMQMessage val MockZMQMessage : ZMQMessage = MockKernelMessage shell ! MockKernelMessage socketProbe.expectMsg(MockZMQMessage) } it("( ZMQMessage ) should forward ZMQ Strings and KernelMessage to Relay") { // Use the implicit to convert the KernelMessage to ZMQMessage val MockZMQMessage : ZMQMessage = MockKernelMessage shell ! MockZMQMessage // Should get the last four (assuming no buffer) strings in UTF-8 val zmqStrings = MockZMQMessage.frames.map((byteString: ByteString) => new String(byteString.toArray, Charset.forName("UTF-8")) ).takeRight(4) val kernelMessage: KernelMessage = MockZMQMessage relayProbe.expectMsg(MaxAkkaTestTimeout, (zmqStrings, kernelMessage)) } } } }
Example 172
Source File: KernelInfoRequestHandlerSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.handler import akka.actor.{ActorSelection, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.apache.toree.Main import org.apache.toree.kernel.protocol.v5.content.KernelInfoReply import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader import org.apache.toree.kernel.protocol.v5._ import org.mockito.AdditionalMatchers.{not => mockNot} import org.mockito.Matchers.{eq => mockEq} import com.typesafe.config.ConfigFactory import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} import play.api.libs.json.Json import test.utils.MaxAkkaTestTimeout object KernelInfoRequestHandlerSpec { val config = """ akka { loglevel = "WARNING" }""" } class KernelInfoRequestHandlerSpec extends TestKit( ActorSystem("KernelInfoRequestHandlerSpec", ConfigFactory.parseString(KernelInfoRequestHandlerSpec.config), Main.getClass.getClassLoader) ) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { val actorLoader: ActorLoader = mock[ActorLoader] val actor = system.actorOf(Props(classOf[KernelInfoRequestHandler], actorLoader, LanguageInfo("test", "1.0.0", Some(".test")))) val relayProbe : TestProbe = TestProbe() val relaySelection : ActorSelection = system.actorSelection(relayProbe.ref.path) when(actorLoader.load(SystemActorType.KernelMessageRelay)) .thenReturn(relaySelection) when(actorLoader.load(mockNot(mockEq(SystemActorType.KernelMessageRelay)))) .thenReturn(system.actorSelection("")) val header = Header("","","","","") val kernelMessage = new KernelMessage( Seq[Array[Byte]](), "test message", header, header, Metadata(), "{}" ) describe("Kernel Info Request Handler") { it("should return a KernelMessage containing kernel info response") { actor ! kernelMessage val reply = relayProbe.receiveOne(MaxAkkaTestTimeout).asInstanceOf[KernelMessage] val kernelInfo = Json.parse(reply.contentString).as[KernelInfoReply] kernelInfo.implementation should be ("spark") } } }
Example 173
Source File: GenericSocketMessageHandlerSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.handler import akka.actor.{ActorSystem, Props, ActorRef, ActorSelection} import akka.testkit.{ImplicitSender, TestKit, TestProbe} import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader import org.apache.toree.kernel.protocol.v5Test._ import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{Matchers, FunSpecLike} import test.utils.MaxAkkaTestTimeout class GenericSocketMessageHandlerSpec extends TestKit( ActorSystem( "GenericSocketMessageHandlerSystem", None, Some(org.apache.toree.Main.getClass.getClassLoader) )) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("GenericSocketMessageHandler( ActorLoader, SocketType )") { // Create a mock ActorLoader for the Relay we are going to test val actorLoader: ActorLoader = mock[ActorLoader] // Create a probe for the ActorSelection that the ActorLoader will return val selectionProbe: TestProbe = TestProbe() val selection: ActorSelection = system.actorSelection(selectionProbe.ref.path.toString) when(actorLoader.load(SocketType.Control)).thenReturn(selection) // The Relay we are going to be testing against val genericHandler: ActorRef = system.actorOf( Props(classOf[GenericSocketMessageHandler], actorLoader, SocketType.Control) ) describe("#receive( KernelMessage )") { genericHandler ! MockKernelMessage it("should send the message to the selected actor"){ selectionProbe.expectMsg(MaxAkkaTestTimeout, MockKernelMessage) } } } }
Example 174
Source File: CodeCompleteHandlerSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.handler import akka.actor._ import akka.testkit.{TestProbe, ImplicitSender, TestKit} import org.apache.toree.Main import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.content.CompleteRequest import org.apache.toree.kernel.protocol.v5.kernel.ActorLoader import org.apache.toree.kernel.protocol.v5Test._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, BeforeAndAfter, Matchers} import org.mockito.Mockito._ import test.utils.MaxAkkaTestTimeout class CodeCompleteHandlerSpec extends TestKit( ActorSystem("CodeCompleteHandlerSpec", None, Some(Main.getClass.getClassLoader)) ) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar with BeforeAndAfter { var actorLoader: ActorLoader = _ var handlerActor: ActorRef = _ var kernelMessageRelayProbe: TestProbe = _ var interpreterProbe: TestProbe = _ var statusDispatchProbe: TestProbe = _ before { actorLoader = mock[ActorLoader] handlerActor = system.actorOf(Props(classOf[CodeCompleteHandler], actorLoader)) kernelMessageRelayProbe = TestProbe() when(actorLoader.load(SystemActorType.KernelMessageRelay)) .thenReturn(system.actorSelection(kernelMessageRelayProbe.ref.path.toString)) interpreterProbe = new TestProbe(system) when(actorLoader.load(SystemActorType.Interpreter)) .thenReturn(system.actorSelection(interpreterProbe.ref.path.toString)) statusDispatchProbe = new TestProbe(system) when(actorLoader.load(SystemActorType.StatusDispatch)) .thenReturn(system.actorSelection(statusDispatchProbe.ref.path.toString)) } def replyToHandlerWithOkAndResult() = { val expectedClass = classOf[CompleteRequest] interpreterProbe.expectMsgClass(expectedClass) interpreterProbe.reply((0, List[String]())) } def replyToHandlerWithOkAndBadResult() = { val expectedClass = classOf[CompleteRequest] interpreterProbe.expectMsgClass(expectedClass) interpreterProbe.reply("hello") } describe("CodeCompleteHandler (ActorLoader)") { it("should send a CompleteRequest") { handlerActor ! MockCompleteRequestKernelMessage replyToHandlerWithOkAndResult() kernelMessageRelayProbe.fishForMessage(MaxAkkaTestTimeout) { case KernelMessage(_, _, header, _, _, _) => header.msg_type == MessageType.Outgoing.CompleteReply.toString } } it("should throw an error for bad JSON") { handlerActor ! MockKernelMessageWithBadJSON var result = false try { replyToHandlerWithOkAndResult() } catch { case t: Throwable => result = true } result should be (true) } it("should throw an error for bad code completion") { handlerActor ! MockCompleteRequestKernelMessage try { replyToHandlerWithOkAndBadResult() } catch { case error: Exception => error.getMessage should be ("Parse error in CodeCompleteHandler") } } it("should send an idle message") { handlerActor ! MockCompleteRequestKernelMessage replyToHandlerWithOkAndResult() statusDispatchProbe.fishForMessage(MaxAkkaTestTimeout) { case Tuple2(status, _) => status == KernelStatusType.Idle } } } }
Example 175
Source File: SparkKernelClientSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.client import akka.actor.ActorSystem import akka.testkit.{TestKit, TestProbe} import org.apache.toree.comm.{CommCallbacks, CommStorage, CommRegistrar} import org.apache.toree.kernel.protocol.v5 import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.kernel.protocol.v5.client.execution.ExecuteRequestTuple import scala.concurrent.duration._ import org.mockito.Mockito._ import org.mockito.Matchers.{eq => mockEq, _} import org.scalatest.mock.MockitoSugar import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers} class SparkKernelClientSpec extends TestKit(ActorSystem("SparkKernelClientActorSystem")) with Matchers with MockitoSugar with FunSpecLike with BeforeAndAfter { private val TestTargetName = "some target" private var mockActorLoader: ActorLoader = _ private var mockCommRegistrar: CommRegistrar = _ private var sparkKernelClient: SparkKernelClient = _ private var executeRequestProbe: TestProbe = _ private var shellClientProbe: TestProbe = _ before { mockActorLoader = mock[ActorLoader] mockCommRegistrar = mock[CommRegistrar] executeRequestProbe = TestProbe() when(mockActorLoader.load(MessageType.Incoming.ExecuteRequest)) .thenReturn(system.actorSelection(executeRequestProbe.ref.path.toString)) shellClientProbe = TestProbe() when(mockActorLoader.load(SocketType.ShellClient)) .thenReturn(system.actorSelection(shellClientProbe.ref.path.toString)) sparkKernelClient = new SparkKernelClient( mockActorLoader, system, mockCommRegistrar) } describe("SparkKernelClient") { describe("#execute") { it("should send an ExecuteRequest message") { val func = (x: Any) => println(x) sparkKernelClient.execute("val foo = 2") executeRequestProbe.expectMsgClass(classOf[ExecuteRequestTuple]) } } } }
Example 176
Source File: HeartbeatClientSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.kernel.protocol.v5.client.socket import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{TestProbe, ImplicitSender, TestKit} import org.apache.toree.communication.ZMQMessage import org.apache.toree.kernel.protocol.v5.client.ActorLoader import org.scalatest.mock.MockitoSugar import org.scalatest.{Matchers, FunSpecLike} import org.mockito.Matchers._ import org.mockito.Mockito._ class HeartbeatClientSpec extends TestKit(ActorSystem("HeartbeatActorSpec")) with ImplicitSender with FunSpecLike with Matchers with MockitoSugar { describe("HeartbeatClientActor") { val socketFactory = mock[SocketFactory] val mockActorLoader = mock[ActorLoader] val probe : TestProbe = TestProbe() when(socketFactory.HeartbeatClient(any(classOf[ActorSystem]), any(classOf[ActorRef]))).thenReturn(probe.ref) val heartbeatClient = system.actorOf(Props( classOf[HeartbeatClient], socketFactory, mockActorLoader, true )) describe("send heartbeat") { it("should send ping ZMQMessage") { heartbeatClient ! HeartbeatMessage probe.expectMsgClass(classOf[ZMQMessage]) } } } }
Example 177
Source File: RootCtxFlowSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.pattern._ import akka.stream.ActorMaterializer import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.squbs.lifecycle.GracefulStop import scala.concurrent.Await object RootCtxFlowSpec{ val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPath = dummyJarsDir + "/RootCtxFlowSpec/META-INF/squbs-meta.conf" val config = ConfigFactory.parseString( s""" |default-listener.bind-port = 0 |squbs { | actorsystem-name = RootCtxFlowSpec | ${JMX.prefixConfig} = true |} """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanResources(withClassPath = false, classPath) .initExtensions.start() } class RootCtxFlowSpec extends TestKit( RootCtxFlowSpec.boot.actorSystem) with FlatSpecLike with Matchers with ImplicitSender with BeforeAndAfterAll { implicit val am = ActorMaterializer() import org.squbs.unicomplex.Timeouts._ val portBindings = Await.result((Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]], awaitMax) val port = portBindings("default-listener") override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "Flow" should "handle request with empty web-context" in { Await.result(entityAsString(s"http://127.0.0.1:$port/ping"), awaitMax) should be("pong") } }
Example 178
Source File: OrderedSupportSpec.scala From incubator-toree with Apache License 2.0 | 5 votes |
package org.apache.toree.communication.utils import akka.actor._ import akka.testkit.{ImplicitSender, TestKit} import org.scalatest.mock.MockitoSugar import org.scalatest.{FunSpecLike, Matchers} case class OrderedType() case class NotOrderedType() case class FinishProcessingMessage() case class ReceiveMessageCount(count: Int) class TestOrderedSupport extends OrderedSupport { var receivedCounter = 0 override def orderedTypes(): Seq[Class[_]] = Seq(classOf[OrderedType]) override def receive: Receive = { case OrderedType() => startProcessing() receivedCounter = receivedCounter + 1 sender ! ReceiveMessageCount(receivedCounter) case NotOrderedType() => receivedCounter = receivedCounter + 1 sender ! ReceiveMessageCount(receivedCounter) case FinishProcessingMessage() => finishedProcessing() } } class OrderedSupportSpec extends TestKit(ActorSystem("OrderedSupportSystem")) with ImplicitSender with Matchers with FunSpecLike with MockitoSugar { describe("OrderedSupport"){ describe("#waiting"){ it("should wait for types defined in orderedTypes"){ val testOrderedSupport = system.actorOf(Props[TestOrderedSupport]) // Send a message having a type in orderedTypes // Starts processing and is handled with receive() testOrderedSupport ! new OrderedType // This message should be handled with waiting() testOrderedSupport ! new OrderedType // Verify receive was not called for the second OrderedType expectMsg(ReceiveMessageCount(1)) } it("should process types not defined in orderedTypes"){ val testOrderedSupport = system.actorOf(Props[TestOrderedSupport]) // Send a message that starts the processing testOrderedSupport ! new OrderedType // Send a message having a type not in orderedTypes testOrderedSupport ! new NotOrderedType // Verify receive did get called for NotOrderedType expectMsg(ReceiveMessageCount(1)) expectMsg(ReceiveMessageCount(2)) } } describe("#finishedProcessing"){ it("should switch actor to receive method"){ val testOrderedSupport = system.actorOf(Props[TestOrderedSupport]) // Switch actor to waiting mode testOrderedSupport ! new OrderedType // Call finishedProcessing testOrderedSupport ! new FinishProcessingMessage // Sending something that would match in receive, and is in orderedTypes testOrderedSupport ! new OrderedType expectMsg(ReceiveMessageCount(1)) expectMsg(ReceiveMessageCount(2)) } } } }
Example 179
Source File: SignatureCheckerActorSpecForIntegration.scala From incubator-toree with Apache License 2.0 | 5 votes |
package integration.security import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit} import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.communication.security.{Hmac, SignatureCheckerActor} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers} import play.api.libs.json.Json object SignatureCheckerActorSpecForIntegration { val config = """ akka { loglevel = "WARNING" }""" } class SignatureCheckerActorSpecForIntegration extends TestKit( ActorSystem( "SignatureCheckerActorSpec", ConfigFactory.parseString(SignatureCheckerActorSpecForIntegration.config) ) ) with ImplicitSender with FunSpecLike with Matchers with BeforeAndAfter { private val sigKey = "12345" private val signature = "1c4859a7606fd93eb5f73c3d9642f9bc860453ba42063961a00d02ed820147b5" private val goodMessage = KernelMessage( null, signature, Header("a", "b", "c", "d", "e"), ParentHeader("f", "g", "h", "i", "j"), Metadata(), "<STRING>" ) private val badMessage = KernelMessage( null, "wrong signature", Header("a", "b", "c", "d", "e"), ParentHeader("f", "g", "h", "i", "j"), Metadata(), "<STRING>" ) private var signatureChecker: ActorRef = _ before { val hmac = Hmac(sigKey) signatureChecker = system.actorOf(Props(classOf[SignatureCheckerActor], hmac)) } after { signatureChecker = null } describe("SignatureCheckerActor") { describe("#receive") { it("should return true if the kernel message is valid") { val blob = Json.stringify(Json.toJson(goodMessage.header)) :: Json.stringify(Json.toJson(goodMessage.parentHeader)) :: Json.stringify(Json.toJson(goodMessage.metadata)) :: goodMessage.contentString :: Nil signatureChecker ! ((goodMessage.signature, blob)) expectMsg(true) } it("should return false if the kernel message is invalid") { val blob = Json.stringify(Json.toJson(badMessage.header)) :: Json.stringify(Json.toJson(badMessage.parentHeader)) :: Json.stringify(Json.toJson(badMessage.metadata)) :: badMessage.contentString :: Nil signatureChecker ! ((badMessage.signature, blob)) expectMsg(false) } } } }
Example 180
Source File: SignatureProducerActorSpecForIntegration.scala From incubator-toree with Apache License 2.0 | 5 votes |
package integration.security import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit} import org.apache.toree.kernel.protocol.v5._ import org.apache.toree.communication.security.{Hmac, SignatureProducerActor} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfter, FunSpecLike, Matchers} object SignatureProducerActorSpecForIntegration { val config = """ akka { loglevel = "WARNING" }""" } class SignatureProducerActorSpecForIntegration extends TestKit( ActorSystem( "SignatureProducerActorSpec", ConfigFactory.parseString(SignatureProducerActorSpecForIntegration.config) ) ) with ImplicitSender with FunSpecLike with Matchers with BeforeAndAfter { private val sigKey = "12345" private var signatureProducer: ActorRef = _ before { val hmac = Hmac(sigKey) signatureProducer = system.actorOf(Props(classOf[SignatureProducerActor], hmac)) } after { signatureProducer = null } describe("SignatureProducerActor") { describe("#receive") { it("should return the correct signature for a kernel message") { val expectedSignature = "1c4859a7606fd93eb5f73c3d9642f9bc860453ba42063961a00d02ed820147b5" val message = KernelMessage( null, "", Header("a", "b", "c", "d", "e"), ParentHeader("f", "g", "h", "i", "j"), Metadata(), "<STRING>" ) signatureProducer ! message expectMsg(expectedSignature) } } } }
Example 181
Source File: IoCSpec.scala From vamp with Apache License 2.0 | 5 votes |
package io.vamp.common.akka import java.util.concurrent.TimeUnit import akka.actor.{ ActorSystem, Props } import akka.testkit.{ ImplicitSender, TestKit, TestProbe } import akka.util.Timeout import com.typesafe.scalalogging.LazyLogging import io.vamp.common.notification.Notification import io.vamp.common.{ ClassMapper, Namespace, NamespaceProvider } import org.scalatest.{ BeforeAndAfterAll, Matchers, WordSpecLike } import scala.concurrent.{ Await, Future } import scala.concurrent.duration._ class IoCSpec extends TestKit(ActorSystem("IoCSpec")) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with NamespaceProvider with LazyLogging { implicit val namespace: Namespace = Namespace("default") implicit val timeout: Timeout = Timeout(5L, TimeUnit.SECONDS) override def afterAll { TestKit.shutdownActorSystem(system) } "Echo actor" must { "echo message" in { val testProbe = TestProbe("test") val actors = Await.result(IoC.createActor(Props(classOf[EchoActor])).map(_ :: Nil)(system.dispatcher), 5.seconds) val actor = actors.head val testMessage = "Example Message" testProbe.send(actor, testMessage) testProbe.expectMsgPF(30.seconds) { case response: String ⇒ logger.info(response.toString) assert(response == testMessage) case _ ⇒ fail("Unexpected message") } } } } class EchoActorMapper extends ClassMapper { val name = "echo" val clazz: Class[_] = classOf[EchoActor] } class EchoActor extends CommonSupportForActors { override def receive: Receive = { case text: String ⇒ reply(echo(text)) } private def echo(text: String): Future[String] = Future { text } override def message(notification: Notification): String = "echo actor message" override def info(notification: Notification): Unit = log.info(s"echo actor info") override def reportException(notification: Notification): Exception = new Exception("Echo actor notification report") }
Example 182
Source File: InMemoryPersistenceActorSpec.scala From vamp with Apache License 2.0 | 5 votes |
package io.vamp.persistence import java.util.concurrent.TimeUnit import akka.actor.{ ActorSystem, Props } import akka.testkit.{ ImplicitSender, TestKit, TestProbe } import akka.util.Timeout import com.typesafe.scalalogging.LazyLogging import io.vamp.common.akka.IoC import io.vamp.common.vitals.InfoRequest import io.vamp.common.{ Artifact, Namespace, NamespaceProvider } import io.vamp.persistence.notification.UnsupportedPersistenceRequest import org.scalatest.{ BeforeAndAfterAll, Matchers, WordSpecLike } import scala.concurrent.Await import scala.concurrent.duration._ object TestArtifact { val kind: String = "TestArtifact" } class TestArtifact extends Artifact { override def name = "TestArtifact" override def kind = "TestArtifact" override def metadata = Map("name" → "testArtifact") } class TestInMemoryPersistenceActor extends InMemoryPersistenceActor { override protected def type2string(`type`: Class[_]): String = `type` match { // test artifact case t if classOf[TestArtifact].isAssignableFrom(t) ⇒ TestArtifact.kind case _ ⇒ throwException(UnsupportedPersistenceRequest(`type`)) } } class InMemoryPersistenceActorSpec extends TestKit(ActorSystem("InMemoryPersistenceActorSpec")) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with NamespaceProvider with LazyLogging { implicit val namespace: Namespace = Namespace("default") implicit val timeout: Timeout = Timeout(5L, TimeUnit.SECONDS) override def afterAll { TestKit.shutdownActorSystem(system) } "InMemoryPersistenceActor" must { "reply to InfoRequest" in { val testProbe = TestProbe("test") val actors = Await.result(IoC.createActor(Props(classOf[InMemoryPersistenceActor])).map(_ :: Nil)(system.dispatcher), 5.seconds) val actor = actors.head val expectedResponse = Map("database" → Map( "status" → "valid", "artifacts" → Map(), "type" → "in-memory [no persistence]" ), "archiving" → true) testProbe.send(actor, InfoRequest) testProbe.expectMsgPF(30.seconds) { case response: Map[_, _] ⇒ logger.info(response.toString) assert(response == expectedResponse) case _ ⇒ fail("Unexpected message") } } "reply to Create" in { val testProbe = TestProbe("test") val actors = Await.result(IoC.createActor(Props(classOf[TestInMemoryPersistenceActor])).map(_ :: Nil)(system.dispatcher), 5.seconds) val actor = actors.head val artifact = new TestArtifact() val expectedResponse = List[TestArtifact](artifact) val source = "testSource" testProbe.send(actor, PersistenceActor.Create(artifact, Option(source))) testProbe.expectMsgPF(30.seconds) { case response: List[_] ⇒ logger.info(response.toString) assert(response === expectedResponse) case _ ⇒ fail("Unexpected message") } } } }
Example 183
Source File: ActorSpec.scala From akka-ddd-cqrs-es-example with MIT License | 5 votes |
package com.github.j5ik2o.bank.adaptor.util import akka.actor.ActorSystem import akka.testkit.{ ImplicitSender, TestKit } import org.scalatest.concurrent.ScalaFutures import org.scalatest.prop.PropertyChecks import org.scalatest.{ BeforeAndAfterAll, FreeSpecLike, Matchers } abstract class ActorSpec(system: ActorSystem) extends TestKit(system) with FreeSpecLike with PropertyChecks with ImplicitSender with Matchers with BeforeAndAfterAll with ScalaFutures { override def afterAll: Unit = TestKit.shutdownActorSystem(system) }
Example 184
Source File: ActorSourceSpec.scala From akka-ddd-cqrs-es-example with MIT License | 5 votes |
package com.github.j5ik2o.bank.infrastrucuture.akka import akka.actor.{ ActorSystem, Props } import akka.stream.ActorMaterializer import akka.stream.scaladsl.Keep import akka.stream.testkit.scaladsl.TestSink import akka.testkit.TestKit import com.github.j5ik2o.bank.infrastrucuture.akka.dsl.ActorSource import org.scalatest.FreeSpecLike import org.scalatest.concurrent.ScalaFutures class ActorSourceSpec extends TestKit(ActorSystem("ActorSourceSpec")) with FreeSpecLike with ScalaFutures { implicit val mat = ActorMaterializer() "ActorSource" - { "should be able to send message via stream" in { val props = Props(SourceActor[String]({ case (subscriber, msg) => subscriber ! msg })) val (sourceRefFuture, sinkProbe) = ActorSource[String](props).toMat(TestSink.probe)(Keep.both).run() sourceRefFuture.futureValue ! "TEST" sinkProbe.request(1).expectNext("TEST") } "should be able to error handling" in { val props = Props(SourceActor[String]({ case (_, x) => throw new Exception(s"message = $x") })) val (sourceRefFuture, sinkProbe) = ActorSource[String](props).toMat(TestSink.probe)(Keep.both).run() sourceRefFuture.futureValue ! "TEST" sinkProbe.request(1).expectError() } } }
Example 185
Source File: ActorFlowSpec.scala From akka-ddd-cqrs-es-example with MIT License | 5 votes |
package com.github.j5ik2o.bank.infrastrucuture.akka import akka.actor.{ ActorSystem, Props } import akka.stream.ActorMaterializer import akka.stream.scaladsl.Source import akka.stream.testkit.scaladsl.TestSink import akka.testkit.TestKit import com.github.j5ik2o.bank.infrastrucuture.akka.dsl.ActorFlow import org.scalatest.FreeSpecLike class ActorFlowSpec extends TestKit(ActorSystem("ActorFlowSpec")) with FreeSpecLike { implicit val mat = ActorMaterializer() "ActorFlow" - { "should be able to send message via stream" in { val props = Props(FlowActor[String]({ case (subscriber, x) => subscriber ! x })) val flowActor = system.actorOf(props) val sinkProbe = Source.single("TEST").via(ActorFlow[String, String](flowActor)).runWith(TestSink.probe) sinkProbe.request(1).expectNext("TEST") } "should be able to error handling" in { val props = Props(FlowActor[String]({ case (_, x) => throw new Exception("message = " + x) })) val flowActor = system.actorOf(props) val sinkProbe = Source.single("TEST").via(ActorFlow[String, String](flowActor)).runWith(TestSink.probe) sinkProbe.request(1).expectError() } } }
Example 186
Source File: Greeter02Test.scala From 006877 with MIT License | 5 votes |
package aia.testdriven import akka.testkit.{ TestKit } import org.scalatest.WordSpecLike import akka.actor._ class Greeter02Test extends TestKit(ActorSystem("testsystem")) with WordSpecLike with StopSystemAfterAll { "The Greeter" must { "say Hello World! when a Greeting(\"World\") is sent to it" in { val props = Greeter02.props(Some(testActor)) val greeter = system.actorOf(props, "greeter02-1") greeter ! Greeting("World") expectMsg("Hello World!") } "say something else and see what happens" in { val props = Greeter02.props(Some(testActor)) val greeter = system.actorOf(props, "greeter02-2") system.eventStream.subscribe(testActor, classOf[UnhandledMessage]) greeter ! "World" expectMsg(UnhandledMessage("World", system.deadLetters, greeter)) } } } object Greeter02 { def props(listener: Option[ActorRef] = None) = Props(new Greeter02(listener)) } class Greeter02(listener: Option[ActorRef]) extends Actor with ActorLogging { def receive = { case Greeting(who) => val message = "Hello " + who + "!" log.info(message) listener.foreach(_ ! message) } }
Example 187
Source File: EchoActorTest.scala From 006877 with MIT License | 5 votes |
package aia.testdriven import akka.testkit.{ TestKit, ImplicitSender } import akka.actor.{ Props, Actor, ActorSystem } import org.scalatest.WordSpecLike import akka.util.Timeout import scala.concurrent.Await import scala.util.{ Success, Failure } import scala.language.postfixOps class EchoActorTest extends TestKit(ActorSystem("testsystem")) with WordSpecLike with ImplicitSender with StopSystemAfterAll { "An EchoActor" must { "Reply with the same message it receives" in { import akka.pattern.ask import scala.concurrent.duration._ implicit val timeout = Timeout(3 seconds) implicit val ec = system.dispatcher val echo = system.actorOf(Props[EchoActor], "echo1") val future = echo.ask("some message") future.onComplete { case Failure(_) => //실패 처리 case Success(msg) => //성공 처리 } Await.ready(future, timeout.duration) } "Reply with the same message it receives without ask" in { val echo = system.actorOf(Props[EchoActor], "echo2") echo ! "some message" expectMsg("some message") } } } class EchoActor extends Actor { def receive = { case msg => sender() ! msg } }
Example 188
Source File: SendingActorTest.scala From 006877 with MIT License | 5 votes |
package aia.testdriven import scala.util.Random import akka.testkit.TestKit import akka.actor.{ Props, ActorRef, Actor, ActorSystem } import org.scalatest.{WordSpecLike, MustMatchers} class SendingActorTest extends TestKit(ActorSystem("testsystem")) with WordSpecLike with MustMatchers with StopSystemAfterAll { "A Sending Actor" must { "send a message to another actor when it has finished processing" in { import SendingActor._ val props = SendingActor.props(testActor) val sendingActor = system.actorOf(props, "sendingActor") val size = 1000 val maxInclusive = 100000 def randomEvents() = (0 until size).map{ _ => Event(Random.nextInt(maxInclusive)) }.toVector val unsorted = randomEvents() val sortEvents = SortEvents(unsorted) sendingActor ! sortEvents expectMsgPF() { case SortedEvents(events) => events.size must be(size) unsorted.sortBy(_.id) must be(events) } } } } object SendingActor { def props(receiver: ActorRef) = Props(new SendingActor(receiver)) case class Event(id: Long) case class SortEvents(unsorted: Vector[Event]) case class SortedEvents(sorted: Vector[Event]) } class SendingActor(receiver: ActorRef) extends Actor { import SendingActor._ def receive = { case SortEvents(unsorted) => receiver ! SortedEvents(unsorted.sortBy(_.id)) } }
Example 189
Source File: SilentActorNextTest.scala From 006877 with MIT License | 5 votes |
package aia.testdriven import org.scalatest.WordSpecLike import org.scalatest.MustMatchers import akka.testkit.{ TestActorRef, TestKit } import akka.actor._ package silentactor02 { class SilentActorTest extends TestKit(ActorSystem("testsystem")) with WordSpecLike with MustMatchers with StopSystemAfterAll { "A Silent Actor" must { "change internal state when it receives a message, single" in { import SilentActor._ val silentActor = TestActorRef[SilentActor] silentActor ! SilentMessage("whisper") silentActor.underlyingActor.state must (contain("whisper")) } } } object SilentActor { case class SilentMessage(data: String) case class GetState(receiver: ActorRef) } class SilentActor extends Actor { import SilentActor._ var internalState = Vector[String]() def receive = { case SilentMessage(data) => internalState = internalState :+ data } def state = internalState } } package silentactor03 { class SilentActorTest extends TestKit(ActorSystem("testsystem")) with WordSpecLike with MustMatchers with StopSystemAfterAll { "A Silent Actor" must { "change internal state when it receives a message, multi" in { import SilentActor._ val silentActor = system.actorOf(Props[SilentActor], "s3") silentActor ! SilentMessage("whisper1") silentActor ! SilentMessage("whisper2") silentActor ! GetState(testActor) expectMsg(Vector("whisper1", "whisper2")) } } } object SilentActor { case class SilentMessage(data: String) case class GetState(receiver: ActorRef) } class SilentActor extends Actor { import SilentActor._ var internalState = Vector[String]() def receive = { case SilentMessage(data) => internalState = internalState :+ data case GetState(receiver) => receiver ! internalState } } }
Example 190
Source File: Greeter01Test.scala From 006877 with MIT License | 5 votes |
package aia.testdriven import akka.testkit.{ CallingThreadDispatcher, EventFilter, TestKit } import akka.actor.{ Props, ActorSystem } import com.typesafe.config.ConfigFactory import org.scalatest.WordSpecLike import Greeter01Test._ class Greeter01Test extends TestKit(testSystem) with WordSpecLike with StopSystemAfterAll { "The Greeter" must { "say Hello World! when a Greeting(\"World\") is sent to it" in { val dispatcherId = CallingThreadDispatcher.Id val props = Props[Greeter].withDispatcher(dispatcherId) val greeter = system.actorOf(props) EventFilter.info(message = "Hello World!", occurrences = 1).intercept { greeter ! Greeting("World") } } } } object Greeter01Test { val testSystem = { val config = ConfigFactory.parseString( """ akka.loggers = [akka.testkit.TestEventListener] """) ActorSystem("testsystem", config) } }
Example 191
Source File: HashRoutingTest.scala From 006877 with MIT License | 5 votes |
package aia.routing import scala.concurrent.duration._ import akka.actor._ import org.scalatest.{BeforeAndAfterAll, WordSpecLike} import akka.routing._ import akka.routing.ConsistentHashingRouter._ import akka.testkit.{TestProbe, TestKit} class HashRoutingTest extends TestKit(ActorSystem("PerfRoutingTest")) with WordSpecLike with BeforeAndAfterAll { override def afterAll() = { system.terminate() } "The HashRouting" must { "work using mapping" in { val endProbe = TestProbe() def hashMapping: ConsistentHashMapping = { case msg: GatherMessage => msg.id } val router = system.actorOf(ConsistentHashingPool(10, virtualNodesFactor = 10, hashMapping = hashMapping). props(Props(new SimpleGather(endProbe.ref))), name = "routerMapping") router ! GatherMessageNormalImpl("1", Seq("msg1")) endProbe.expectNoMsg(100.millis) router ! GatherMessageNormalImpl("1", Seq("msg2")) endProbe.expectMsg(GatherMessageNormalImpl("1",Seq("msg1","msg2"))) router ! GatherMessageNormalImpl("10", Seq("msg1")) endProbe.expectNoMsg(100.millis) router ! GatherMessageNormalImpl("10", Seq("msg2")) endProbe.expectMsg(GatherMessageNormalImpl("10",Seq("msg1","msg2"))) system.stop(router) } "work using messages" in { val endProbe = TestProbe() val router = system.actorOf(ConsistentHashingPool(10, virtualNodesFactor = 10). props(Props(new SimpleGather(endProbe.ref))), name = "routerMessage") router ! GatherMessageWithHash("1", Seq("msg1")) endProbe.expectNoMsg(100.millis) router ! GatherMessageWithHash("1", Seq("msg2")) endProbe.expectMsg(GatherMessageNormalImpl("1",Seq("msg1","msg2"))) router ! GatherMessageWithHash("10", Seq("msg1")) endProbe.expectNoMsg(100.millis) router ! GatherMessageWithHash("10", Seq("msg2")) endProbe.expectMsg(GatherMessageNormalImpl("10",Seq("msg1","msg2"))) system.stop(router) } "work using Envelope" in { val endProbe = TestProbe() val router = system.actorOf(ConsistentHashingPool(10, virtualNodesFactor = 10). props(Props(new SimpleGather(endProbe.ref))), name = "routerMessage") router ! ConsistentHashableEnvelope( message = GatherMessageNormalImpl("1", Seq("msg1")), hashKey = "someHash") endProbe.expectNoMsg(100.millis) router ! ConsistentHashableEnvelope( message = GatherMessageNormalImpl("1", Seq("msg2")), hashKey = "someHash") endProbe.expectMsg(GatherMessageNormalImpl("1",Seq("msg1","msg2"))) router ! ConsistentHashableEnvelope( message = GatherMessageNormalImpl("10", Seq("msg1")), hashKey = "10") endProbe.expectNoMsg(100.millis) router ! ConsistentHashableEnvelope( message = GatherMessageNormalImpl("10", Seq("msg2")), hashKey = "10") endProbe.expectMsg(GatherMessageNormalImpl("10",Seq("msg1","msg2"))) system.stop(router) } "fail without using hash" in { val endProbe = TestProbe() val router = system.actorOf(ConsistentHashingPool(10, virtualNodesFactor = 10). props(Props(new SimpleGather(endProbe.ref))), name = "routerMessage") router ! GatherMessageNormalImpl("1", Seq("msg1")) endProbe.expectNoMsg(100.millis) router ! GatherMessageNormalImpl("1", Seq("msg2")) endProbe.expectNoMsg(1000.millis) system.stop(router) } } }
Example 192
Source File: LifeCycleHooksTest.scala From 006877 with MIT License | 5 votes |
package aia.faulttolerance import aia.faulttolerance.LifeCycleHooks.{ForceRestart, SampleMessage} import akka.actor._ import akka.testkit.TestKit import org.scalatest.{BeforeAndAfterAll, WordSpecLike} class LifeCycleHooksTest extends TestKit(ActorSystem("LifCycleTest")) with WordSpecLike with BeforeAndAfterAll { override def afterAll(): Unit = { system.terminate() } "The Child" must { "log lifecycle hooks" in { val testActorRef = system.actorOf( Props[LifeCycleHooks], "LifeCycleHooks") watch(testActorRef) testActorRef ! ForceRestart testActorRef.tell(SampleMessage, testActor) expectMsg(SampleMessage) system.stop(testActorRef) expectTerminated(testActorRef) } } }
Example 193
Source File: ClientTest.scala From bitcoin-s-spv-node with MIT License | 5 votes |
package org.bitcoins.spvnode.networking import java.net.{InetSocketAddress, ServerSocket} import akka.actor.ActorSystem import akka.io.{Inet, Tcp} import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe} import org.bitcoins.core.config.TestNet3 import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil} import org.bitcoins.spvnode.messages.control.VersionMessage import org.bitcoins.spvnode.messages.{NetworkPayload, VersionMessage} import org.bitcoins.spvnode.util.BitcoinSpvNodeUtil import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FlatSpecLike, MustMatchers} import scala.concurrent.duration._ import scala.util.Try class ClientTest extends TestKit(ActorSystem("ClientTest")) with FlatSpecLike with MustMatchers with ImplicitSender with BeforeAndAfter with BeforeAndAfterAll with BitcoinSLogger { "Client" must "connect to a node on the bitcoin network, " + "send a version message to a peer on the network and receive a version message back, then close that connection" in { val probe = TestProbe() val client = TestActorRef(Client.props,probe.ref) val remote = new InetSocketAddress(TestNet3.dnsSeeds(0), TestNet3.port) val randomPort = 23521 //random port client ! Tcp.Connect(remote, Some(new InetSocketAddress(randomPort))) //val bound : Tcp.Bound = probe.expectMsgType[Tcp.Bound] val conn : Tcp.Connected = probe.expectMsgType[Tcp.Connected] //make sure the socket is currently bound Try(new ServerSocket(randomPort)).isSuccess must be (false) client ! Tcp.Abort val confirmedClosed = probe.expectMsg(Tcp.Aborted) //make sure the port is now available val boundSocket = Try(new ServerSocket(randomPort)) boundSocket.isSuccess must be (true) boundSocket.get.close() } it must "bind connect to two nodes on one port" in { //NOTE if this test case fails it is more than likely because one of the two dns seeds //below is offline val remote1 = new InetSocketAddress(TestNet3.dnsSeeds(0), TestNet3.port) val remote2 = new InetSocketAddress(TestNet3.dnsSeeds(2), TestNet3.port) val probe1 = TestProbe() val probe2 = TestProbe() val client1 = TestActorRef(Client.props, probe1.ref) val client2 = TestActorRef(Client.props, probe2.ref) val local1 = new InetSocketAddress(TestNet3.port) val options = List(Inet.SO.ReuseAddress(true)) client1 ! Tcp.Connect(remote1,Some(local1),options) probe1.expectMsgType[Tcp.Connected] client1 ! Tcp.Abort val local2 = new InetSocketAddress(TestNet3.port) client2 ! Tcp.Connect(remote2,Some(local2),options) probe2.expectMsgType[Tcp.Connected](5.seconds) client2 ! Tcp.Abort } override def afterAll: Unit = { TestKit.shutdownActorSystem(system) } }
Example 194
Source File: BlockActorTest.scala From bitcoin-s-spv-node with MIT License | 5 votes |
package org.bitcoins.spvnode.networking import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe} import org.bitcoins.core.crypto.DoubleSha256Digest import org.bitcoins.core.protocol.blockchain.BlockHeader import org.bitcoins.core.util.{BitcoinSLogger, BitcoinSUtil} import org.bitcoins.spvnode.messages.BlockMessage import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FlatSpecLike, MustMatchers} import scala.concurrent.duration.DurationInt class BlockActorTest extends TestKit(ActorSystem("BlockActorTest")) with FlatSpecLike with MustMatchers with ImplicitSender with BeforeAndAfter with BeforeAndAfterAll with BitcoinSLogger { def blockActor = TestActorRef(BlockActor.props,self) val blockHash = DoubleSha256Digest(BitcoinSUtil.flipEndianness("00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206")) "BlockActor" must "be able to send a GetBlocksMessage then receive that block back" in { blockActor ! blockHash val blockMsg = expectMsgType[BlockMessage](10.seconds) blockMsg.block.blockHeader.hash must be (blockHash) } it must "be able to request a block from it's block header" in { val blockHeader = BlockHeader("0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b672") blockActor ! blockHeader val blockMsg = expectMsgType[BlockMessage](10.seconds) blockMsg.block.blockHeader.hash must be (blockHash) } override def afterAll = { TestKit.shutdownActorSystem(system) } }
Example 195
Source File: ServiceSpec.scala From mqtt-mongo with MIT License | 5 votes |
package com.izmailoff.mm.service import akka.actor.ActorSystem import akka.testkit.{TestProbe, DefaultTimeout, ImplicitSender, TestKit} import com.izmailoff.mm.config.GlobalAppConfig import com.sandinh.paho.akka.MqttPubSub.{Subscribe, SubscribeAck, Message} import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.duration._ import scala.collection.JavaConversions._ class ServiceSpec extends TestKit(ActorSystem("test-mqtt-mongo-system", GlobalAppConfig.config)) with DefaultTimeout with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with TestMqttMongoServiceImpl with TestHelpers { override def afterAll { shutdown() } "Subscription between MQTT Broker and Consumer" should { "get established when consumer is started" in { val mqttBroker = startMqttIntermediary() val probe = TestProbe() val mqttConsumer = startMqttConsumer(probe.ref) probe.expectMsg(Subscribe(testTopic, mqttConsumer)) probe.forward(mqttBroker, Subscribe(testTopic, probe.ref)) probe.expectMsg(SubscribeAck(Subscribe(testTopic, probe.ref))) probe.forward(mqttConsumer, SubscribeAck(Subscribe(testTopic, mqttConsumer))) probe.expectNoMsg() } } "Sending a message to MQTT Broker" should { "forward it to MQTT Consumer and get saved in DB in proper JSON format" in { val collection = getCollectionName(testTopic).head db.getCollection(collection).count() should be(0) val mqttBroker = startMqttIntermediary() val mqttConsumer = startMqttConsumer(mqttBroker) expectNoMsg(1 second) mqttBroker ! new Message(testTopic, "test content".getBytes) mqttBroker ! new Message(testTopic, """{ "field1" : "str val", "field2" : 123 }""".getBytes) expectNoMsg(1 second) db.getCollection(collection).count() should be(2) val allDocsDb = db.getCollection(collection).find().iterator.toList allDocsDb.exists { d => val fields: Map[Any, Any] = d.toMap.toMap fields.size == 2 && fields("payload") == "test content" } should be(true) allDocsDb.exists { d => val fields: Map[Any, Any] = d.toMap.toMap fields.size == 3 && fields("field1") == "str val" && fields("field2") == 123 } should be(true) } } }
Example 196
Source File: OriginSpec.scala From kafka-journal with MIT License | 5 votes |
package com.evolutiongaming.kafka.journal import akka.actor.ActorSystem import akka.testkit.TestKit import cats.effect.IO import com.evolutiongaming.kafka.journal.IOSuite._ import org.scalatest.funsuite.AsyncFunSuite import org.scalatest.matchers.should.Matchers import scala.concurrent.duration._ class OriginSpec extends AsyncFunSuite with Matchers { test("hostName") { val result = for { hostName <- Origin.hostName[IO] result = hostName.isDefined shouldEqual true } yield result result.run() } withSystem { system => test("akkaHost") { val result = for { akkaHost <- Origin.akkaHost[IO](system) result = akkaHost.isDefined shouldEqual false } yield result result.run() } test("AkkaName") { Origin.akkaName(system) shouldEqual Origin("OriginSpec") } } private def withSystem[T](f: ActorSystem => T): T = { val system = ActorSystem("OriginSpec") try { f(system) } finally { TestKit.shutdownActorSystem(system, 3.seconds) } } }
Example 197
Source File: ServiceRegistryInteropSpec.scala From lagom with Apache License 2.0 | 5 votes |
package com.lightbend.lagom.registry.impl import java.net.URI import java.util.Collections import java.util.Optional import akka.actor.ActorSystem import akka.testkit.TestKit import akka.util.ByteString import com.lightbend.lagom.devmode.internal.scaladsl.registry.RegisteredService import com.lightbend.lagom.devmode.internal.scaladsl.registry.ServiceRegistryService import com.lightbend.lagom.internal.javadsl.registry.{ RegisteredService => jRegisteredService } import com.lightbend.lagom.internal.javadsl.registry.{ ServiceRegistryService => jServiceRegistryService } import com.lightbend.lagom.devmode.internal.scaladsl.registry.{ RegisteredService => sRegisteredService } import com.lightbend.lagom.devmode.internal.scaladsl.registry.{ ServiceRegistryService => sServiceRegistryService } import com.lightbend.lagom.javadsl.api.ServiceAcl import com.lightbend.lagom.javadsl.api.deser.MessageSerializer import com.lightbend.lagom.javadsl.api.deser.StrictMessageSerializer import com.lightbend.lagom.javadsl.api.transport.MessageProtocol import com.lightbend.lagom.javadsl.api.transport.Method import com.lightbend.lagom.javadsl.jackson.JacksonSerializerFactory import org.scalatest.BeforeAndAfterAll import org.scalatest.concurrent.Futures import play.api.libs.json.Format import play.api.libs.json.Json import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers class ServiceRegistryInteropSpec extends AnyFlatSpec with Matchers with Futures with BeforeAndAfterAll { val system = ActorSystem() val jacksonSerializerFactory = new JacksonSerializerFactory(system) protected override def afterAll(): Unit = { TestKit.shutdownActorSystem(actorSystem = system, verifySystemShutdown = true) } behavior.of("ServiceRegistry serializers") it should "should interop between java and scala (RegisteredService)" in { val msg = jRegisteredService.of("inventory", URI.create("https://localhost:123/asdf"), Optional.of("https")) roundTrip(msg) should be(msg) } it should "should interop between java and scala when optional fields are empty (RegisteredService)" in { val msg = jRegisteredService.of("inventory", URI.create("https://localhost:123/asdf"), Optional.empty[String]) roundTrip(msg) should be(msg) } it should "should interop between java and scala (ServiceRegistryService)" in { val msg = jServiceRegistryService.of( URI.create("https://localhost:123/asdf"), Collections.singletonList(ServiceAcl.methodAndPath(Method.GET, "/items")) ) roundTrip(msg) should be(msg) } it should "should interop between java and scala when optional fields are empty (ServiceRegistryService)" in { val msg = jServiceRegistryService.of(URI.create("https://localhost:123/asdf"), Collections.emptyList[ServiceAcl]) roundTrip(msg) should be(msg) } private def roundTrip(input: jServiceRegistryService): jServiceRegistryService = { roundTrip( input, jacksonSerializerFactory.messageSerializerFor[jServiceRegistryService](classOf[jServiceRegistryService]), com.lightbend.lagom.scaladsl.playjson.JsonSerializer[ServiceRegistryService].format )(sServiceRegistryService.format) } private def roundTrip(input: jRegisteredService): jRegisteredService = { roundTrip( input, jacksonSerializerFactory.messageSerializerFor[jRegisteredService](classOf[jRegisteredService]), com.lightbend.lagom.scaladsl.playjson.JsonSerializer[RegisteredService].format )(sRegisteredService.format) } private def roundTrip[J, S]( input: J, jacksonSerializer: StrictMessageSerializer[J], playJsonFormatter: Format[S] )(implicit format: Format[S]): J = { val byteString: ByteString = jacksonSerializer.serializerForRequest().serialize(input) val scalaValue: S = playJsonFormatter.reads(Json.parse(byteString.toArray)).get val str: String = playJsonFormatter.writes(scalaValue).toString() val jacksonDeserializer: MessageSerializer.NegotiatedDeserializer[J, ByteString] = jacksonSerializer.deserializer( new MessageProtocol(Optional.of("application/json"), Optional.empty[String], Optional.empty[String]) ) jacksonDeserializer.deserialize(ByteString(str)) } }
Example 198
Source File: LagomDevModeServiceDiscoverySpec.scala From lagom with Apache License 2.0 | 5 votes |
package com.lightbend.lagom.devmode.internal.registry import java.net.InetAddress import java.net.URI import akka.actor.ActorSystem import akka.discovery.ServiceDiscovery.Resolved import akka.discovery.ServiceDiscovery.ResolvedTarget import akka.testkit.TestKit import org.scalatest.BeforeAndAfterAll import org.scalatest.concurrent.ScalaFutures._ import scala.collection.immutable import scala.concurrent.Future import scala.concurrent.duration._ import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike class LagomDevModeServiceDiscoverySpec extends TestKit(ActorSystem("LagomDevModeSimpleServiceDiscoverySpec")) with AnyWordSpecLike with Matchers with BeforeAndAfterAll { private val client = new StaticServiceRegistryClient( Map( "test-service" -> List(URI.create("http://localhost:8080")), "test-service-without-port" -> List(URI.create("http://localhost")) ) ) protected override def afterAll(): Unit = { shutdown(verifySystemShutdown = true) } private val discovery = LagomDevModeServiceDiscovery(system) discovery.setServiceRegistryClient(client) "DevModeSimpleServiceDiscoverySpec" should { "resolve services in the registry" in { val expected = Resolved("test-service", List(ResolvedTarget("localhost", Some(8080), Some(InetAddress.getLocalHost)))) discovery.lookup("test-service", 100.milliseconds).futureValue shouldBe expected } "allow missing ports" in { val expected = Resolved("test-service-without-port", List(ResolvedTarget("localhost", None, Some(InetAddress.getLocalHost)))) discovery.lookup("test-service-without-port", 100.milliseconds).futureValue shouldBe expected } } } private class StaticServiceRegistryClient(registrations: Map[String, List[URI]]) extends ServiceRegistryClient { override def locateAll(serviceName: String, portName: Option[String]): Future[immutable.Seq[URI]] = Future.successful(registrations.getOrElse(serviceName, Nil)) }
Example 199
Source File: ActorServiceSpec.scala From lagom with Apache License 2.0 | 5 votes |
package docs.home.actor import com.lightbend.lagom.docs.ServiceSupport import scala.concurrent.duration._ import akka.actor.ActorSystem import akka.testkit.ImplicitSender import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalactic.TypeCheckedTripleEquals import org.scalatest.BeforeAndAfterAll import akka.cluster.Cluster import java.util.concurrent.TimeUnit object ActorServiceSpec { def config = ConfigFactory.parseString(""" akka.actor.provider = cluster akka.remote.artery.canonical.port = 0 akka.remote.artery.canonical.hostname = 127.0.0.1 """) } class ActorServiceSpec extends TestKit(ActorSystem("ActorServiceSpec", ActorServiceSpec.config)) with ServiceSupport with BeforeAndAfterAll with TypeCheckedTripleEquals with ImplicitSender { val workerRoleConfig = ConfigFactory.parseString("akka.cluster.roles = [worker-node]") val node2 = ActorSystem("ActorServiceSpec", workerRoleConfig.withFallback(system.settings.config)) val node3 = ActorSystem("ActorServiceSpec", workerRoleConfig.withFallback(system.settings.config)) override def beforeAll { Cluster(system).join(Cluster(system).selfAddress) Cluster(node2).join(Cluster(system).selfAddress) Cluster(node3).join(Cluster(system).selfAddress) node2.actorOf(Worker.props(), "worker"); node3.actorOf(Worker.props(), "worker"); within(15.seconds) { awaitAssert { Cluster(system).state.members.size should ===(3) } } } override def afterAll { shutdown() shutdown(node2) shutdown(node3) } "Integration with actors" must { "work with for example clustered consistent hashing" in withServiceInstance[WorkerService]( new WorkerServiceImpl(system) ).apply { app => client => { val job = Job.of("123", "compute", "abc") // might take a while until cluster is formed and router knows about the nodes within(15.seconds) { awaitAssert { client.doWork().invoke(job).toCompletableFuture.get(3, TimeUnit.SECONDS) should ===(JobAccepted.of("123")) } } } } } }
Example 200
Source File: ActorSystemSpec.scala From lagom with Apache License 2.0 | 5 votes |
package com.lightbend.lagom.persistence import java.lang.reflect.Modifier import akka.actor.ActorSystem import akka.actor.CoordinatedShutdown import akka.actor.setup.ActorSystemSetup import akka.event.Logging import akka.event.LoggingAdapter import akka.testkit.ImplicitSender import akka.testkit.TestKit import com.typesafe.config.Config import com.typesafe.config.ConfigFactory import org.scalactic.CanEqual import org.scalactic.TypeCheckedTripleEquals import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike object ActorSystemSpec { // taken from akka-testkit's AkkaSpec private def testNameFromCallStack(classToStartFrom: Class[_]): String = { def isAbstractClass(className: String): Boolean = { try { Modifier.isAbstract(Class.forName(className).getModifiers) } catch { case _: Throwable => false // yes catch everything, best effort check } } val startFrom = classToStartFrom.getName val filteredStack = Thread.currentThread.getStackTrace.iterator .map(_.getClassName) // drop until we find the first occurrence of classToStartFrom .dropWhile(!_.startsWith(startFrom)) // then continue to the next entry after classToStartFrom that makes sense .dropWhile { case `startFrom` => true case str if str.startsWith(startFrom + "$") => true // lambdas inside startFrom etc case str if isAbstractClass(str) => true case _ => false } if (filteredStack.isEmpty) throw new IllegalArgumentException(s"Couldn't find [${classToStartFrom.getName}] in call stack") // sanitize for actor system name scrubActorSystemName(filteredStack.next()) } // taken from akka-testkit's AkkaSpec private def scrubActorSystemName(name: String): String = { name .replaceFirst("""^.*\.""", "") // drop package name .replaceAll("""\$\$?\w+""", "") // drop scala anonymous functions/classes .replaceAll("[^a-zA-Z_0-9]", "_") } } abstract class ActorSystemSpec(actorSystemFactory: () => ActorSystem) extends TestKit(actorSystemFactory()) with AnyWordSpecLike with Matchers with BeforeAndAfterAll with TypeCheckedTripleEquals with ImplicitSender { def this(testName: String, config: Config) = this(() => ActorSystem(testName, config)) def this(config: Config) = this(ActorSystemSpec.testNameFromCallStack(classOf[ActorSystemSpec]), config) def this(setup: ActorSystemSetup) = this(() => ActorSystem(ActorSystemSpec.testNameFromCallStack(classOf[ActorSystemSpec]), setup)) def this() = this(ConfigFactory.empty()) override def afterAll(): Unit = { shutdown() super.afterAll() } val log: LoggingAdapter = Logging(system, this.getClass) val coordinatedShutdown: CoordinatedShutdown = CoordinatedShutdown(system) // for ScalaTest === compare of Class objects implicit def classEqualityConstraint[A, B]: CanEqual[Class[A], Class[B]] = new CanEqual[Class[A], Class[B]] { def areEqual(a: Class[A], b: Class[B]) = a == b } }