akka.testkit.ImplicitSender Scala Examples
The following examples show how to use akka.testkit.ImplicitSender.
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: 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 2
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 3
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 4
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 5
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 6
Source File: MultiNodeSampleSpec.scala From fusion-data with Apache License 2.0 | 5 votes |
package sample import akka.actor.{Actor, Props} import akka.remote.testconductor.RoleName import akka.remote.testkit.{MultiNodeConfig, MultiNodeSpec} import akka.testkit.ImplicitSender import mass.STMultiNodeSpec object MultiNodeSampleConfig extends MultiNodeConfig { val node1: RoleName = role("node1") val node2: RoleName = role("node2") } object MultiNodeSampleSpec { class Ponger extends Actor { def receive: Receive = { case "ping" => sender() ! "pong" } } } class MultiNodeSampleSpec extends MultiNodeSpec(MultiNodeSampleConfig) with STMultiNodeSpec with ImplicitSender { import MultiNodeSampleSpec._ import MultiNodeSampleConfig._ // 设置参与者数量,之后的Barrier(enterBarrier)需要满足此数量后才运行之后的代码。 def initialParticipants: Int = roles.size "A MultiNodeSampleSpec" must { "wait for all nodes to enter a barrier" in { enterBarrier("startup") } "send to and receive from a remote node" in { runOn(node1) { // 进入 deployed barrier,等待另一个节点实例化 actor 完成。 enterBarrier("deployed") val ponger = system.actorSelection(node(node2) / "user" / "ponger") ponger ! "ping" import scala.concurrent.duration._ expectMsg(10.seconds, "pong") // 阻塞接收并assert消息,10秒超时 } runOn(node2) { system.actorOf(Props[Ponger], "ponger") // 先实例化actor,再进入 deployed barrier enterBarrier("deployed") } enterBarrier("finished") } } } class MultiNodeSampleSpecMultiJvmNode1 extends MultiNodeSampleSpec class MultiNodeSampleSpecMultiJvmNode2 extends MultiNodeSampleSpec
Example 7
Source File: MultiNodeSampleTest.scala From fusion-data with Apache License 2.0 | 5 votes |
package sample.multinode import akka.actor.{Actor, Props} import akka.remote.testkit.{MultiNodeConfig, MultiNodeSpec} import akka.testkit.ImplicitSender object MultiNodeSampleConfig extends MultiNodeConfig { val node1 = role("node1") val node2 = role("node2") } class MultiNodeSampleTestMultiJvmNode1 extends MultiNodeSampleTest class MultiNodeSampleTestMultiJvmNode2 extends MultiNodeSampleTest object MultiNodeSampleTest { class Ponger extends Actor { def receive = { case "ping" => sender() ! "pong" } } } class MultiNodeSampleTest extends MultiNodeSpec(MultiNodeSampleConfig) with STMultiNodeSpec with ImplicitSender { import MultiNodeSampleConfig._ import MultiNodeSampleTest._ override def initialParticipants: Int = roles.size "A MultiNodeSample" must { "wait for all nodes to enter a barrier" in { enterBarrier("startup") // 当所有节点都发起栅栏消息:startup 后再继续之后代码的运行 } "send to and receive from a remote node" in { runOn(node1) { enterBarrier("deployed") // 等待另一个节点也发起栅栏 deployed val ponger = system.actorSelection(node(node2) / "user" / "ponger") ponger ! "ping" import scala.concurrent.duration._ expectMsg(10.seconds, "pong") println(System.getProperty("akka.remote.port") + " received pong") } runOn(node2) { system.actorOf(Props[Ponger], "ponger") enterBarrier("deployed") println(System.getProperty("akka.remote.port") + " started ponger") } enterBarrier("finished") } } }
Example 8
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 9
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 10
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 11
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 12
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 13
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 14
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 15
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 16
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 17
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 18
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 19
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 20
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 21
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 22
Source File: LithiumMultiNodeSpec.scala From lithium with Apache License 2.0 | 5 votes |
package com.swissborg.lithium import akka.actor.{ActorSystem, Address} import akka.cluster.Cluster import akka.cluster.MemberStatus._ import akka.remote.testconductor.RoleName import akka.remote.testkit.{MultiNodeConfig, MultiNodeSpec, MultiNodeSpecCallbacks} import akka.testkit.ImplicitSender import org.scalatest.BeforeAndAfterAll import org.scalatest.concurrent.{Eventually, IntegrationPatience} import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike abstract class LithiumMultiNodeSpec(val config: MultiNodeConfig) extends MultiNodeSpec(config) with MultiNodeSpecCallbacks with AnyWordSpecLike with Matchers with BeforeAndAfterAll with ImplicitSender with Eventually with IntegrationPatience { override def beforeAll(): Unit = multiNodeSpecBeforeAll() override def afterAll(): Unit = multiNodeSpecAfterAll() private val addresses: Map[RoleName, Address] = roles.map(r => r -> node(r).address).toMap protected def addressOf(roleName: RoleName): Address = addresses(roleName) protected def waitToBecomeUnreachable(roleNames: RoleName*): Unit = awaitCond(allUnreachable(roleNames: _*)) protected def waitForSurvivors(roleNames: RoleName*): Unit = awaitCond(allSurvivors(roleNames: _*)) protected def waitForUp(roleNames: RoleName*): Unit = awaitCond(allUp(roleNames: _*)) protected def waitForSelfDowning(implicit system: ActorSystem): Unit = awaitCond(downedItself) protected def waitForAllLeaving(roleNames: RoleName*): Unit = awaitCond(allLeaving(roleNames: _*)) protected def waitExistsAllDownOrGone(groups: Seq[Seq[RoleName]]): Unit = awaitCond(existsAllDownOrGone(groups)) private def allUnreachable(roleNames: RoleName*): Boolean = roleNames.forall( role => Cluster(system).state.unreachable.exists(_.address === addressOf(role)) ) private def allSurvivors(roleNames: RoleName*): Boolean = roleNames.forall(role => Cluster(system).state.members.exists(_.address === addressOf(role))) private def allUp(roleNames: RoleName*): Boolean = roleNames.forall( role => Cluster(system).state.members.exists(m => m.address === addressOf(role) && m.status === Up) ) private def existsAllDownOrGone(groups: Seq[Seq[RoleName]]): Boolean = groups.exists(group => allLeaving(group: _*)) private def downedItself(implicit system: ActorSystem): Boolean = { val selfAddress = Cluster(system).selfAddress Cluster(system).state.members .exists( m => m.address === selfAddress && (m.status === Exiting || m.status === Down || m.status === Removed) ) } private def allLeaving(roleNames: RoleName*): Boolean = roleNames.forall { role => val members = Cluster(system).state.members val unreachable = Cluster(system).state.unreachable val address = addressOf(role) unreachable.isEmpty && // no unreachable members (members.exists(m => m.address === address && (m.status === Down || m.status === Exiting)) || // member is down !members.exists(_.address === address)) // member is not in the cluster } }
Example 23
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 24
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 25
Source File: UnicomplexTimeoutSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.http.scaladsl.model.StatusCodes import akka.stream.ActorMaterializer import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest._ import org.scalatest.concurrent.Waiters import org.squbs.lifecycle.GracefulStop import org.squbs.unicomplex.Timeouts._ import scala.concurrent.Await object UnicomplexTimeoutSpec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPaths = Array( "DummySvcActor" ) map (dummyJarsDir + "/" + _) val aConfig = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = UnicomplexTimeoutSpec | ${JMX.prefixConfig} = true |} |default-listener { | bind-port = 0 |} |akka.http.server { | request-timeout = 3s |} """.stripMargin) val boot = UnicomplexBoot(aConfig) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class UnicomplexTimeoutSpec extends TestKit(UnicomplexTimeoutSpec.boot.actorSystem) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with Waiters { implicit val am = ActorMaterializer() import akka.pattern.ask val port = Await.result((Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]], awaitMax)("default-listener") override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "Unicomplex" must { "Cause a timeout event" in { system.settings.config getString "akka.http.server.request-timeout" should be ("3s") val response = Await.result(get(s"http://127.0.0.1:$port/dummysvcactor/timeout"), awaitMax) // TODO This test is useless to me.. Need to explore how we can intervene with timeouts.. Do we need to ? // There may be scenarios, where we may want to do some work when a timeout happens.. So, having a hook // would be useful.. response.status should be (StatusCodes.ServiceUnavailable) } } }
Example 26
Source File: FlowDefinitionSpec.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.http.scaladsl.model._ import akka.pattern._ import akka.stream.ActorMaterializer import akka.stream.scaladsl.Flow import akka.testkit.{ImplicitSender, 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 FlowDefinitionSpec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPath = dummyJarsDir + "/FlowDefinitionSpec/META-INF/squbs-meta.conf" val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = FlowDefinitionSpec | ${JMX.prefixConfig} = true |} |default-listener.bind-port = 0 """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanResources(withClassPath = false, classPath) .initExtensions.start() } class TestFlowDefinition extends FlowDefinition with WebContext { val firstPath = s"/$webContext/first" val secondPath = s"/$webContext/second" val thirdPath = s"/$webContext/third" @volatile var count = 0 def flow = Flow[HttpRequest].map { case HttpRequest(HttpMethods.GET, Uri(_, _, Path(`firstPath`), _, _), _, _, _) => count += 1 HttpResponse(StatusCodes.OK, entity = count.toString) case HttpRequest(HttpMethods.GET, Uri(_, _, Path(`secondPath`), _, _), _, _, _) => count += 1 HttpResponse(StatusCodes.OK, entity = count.toString) case HttpRequest(HttpMethods.GET, Uri(_, _, Path(`thirdPath`), _, _), _, _, _) => HttpResponse(StatusCodes.OK, entity = {count += 1; count.toString}) } } class FlowDefinitionSpec extends TestKit( FlowDefinitionSpec.boot.actorSystem) with FlatSpecLike with Matchers with ImplicitSender with BeforeAndAfterAll { 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 } "The test actor" should "return correct count value" in { // The behaviour is different than Spray. Not caching anymore. Await.result(entityAsString(s"http://127.0.0.1:$port/flowdef/first"), awaitMax) should be ("1") Await.result(entityAsString(s"http://127.0.0.1:$port/flowdef/first"), awaitMax) should be ("2") Await.result(entityAsString(s"http://127.0.0.1:$port/flowdef/second"), awaitMax) should be ("3") Await.result(entityAsString(s"http://127.0.0.1:$port/flowdef/third"), awaitMax) should be ("4") Await.result(entityAsString(s"http://127.0.0.1:$port/flowdef/third"), awaitMax) should be ("5") } }
Example 27
Source File: ScanResourceSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import java.util.concurrent.TimeUnit import javax.management.ObjectName import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit} import akka.util.Timeout import com.typesafe.config.ConfigFactory import org.scalatest.concurrent.Waiters import org.scalatest.{BeforeAndAfterAll, Inspectors, Matchers, WordSpecLike} import org.squbs.lifecycle.GracefulStop import scala.util.Try object ScanResourceSpec { val jmxPrefix = "ScanResourceSpec" val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = scanResourceSpec | ${JMX.prefixConfig} = true |} | |default-listener.bind-port = 0 """.stripMargin) implicit val akkaTimeout: Timeout = Try(System.getProperty("test.timeout").toLong) map { millis => akka.util.Timeout(millis, TimeUnit.MILLISECONDS) } getOrElse Timeouts.askTimeout val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanResources() .initExtensions.start() } class ScanResourceSpec extends TestKit(ScanResourceSpec.boot.actorSystem) with ImplicitSender with WordSpecLike with Matchers with Inspectors with BeforeAndAfterAll with Waiters { import ScanResourceSpec._ import system.dispatcher "The scanned resource" must { "have some actors started" in { val w = new Waiter system.actorSelection("/user/ScanResourceCube").resolveOne().onComplete { result => w { assert(result.isSuccess) } w.dismiss() } w.await() } "expose proper cube state through MXBean" in { import org.squbs.unicomplex.JMX._ val cubeName = "ScanResourceCube" val cubesName = new ObjectName(prefix(system) + cubeStateName + cubeName) get(cubesName, "Name") should be (cubeName) get(cubesName, "CubeState") should be ("Active") val wellKnownActors = get(cubesName, "WellKnownActors").asInstanceOf[String] println(wellKnownActors) wellKnownActors should include ("Actor[akka://scanResourceSpec/user/ScanResourceCube/Prepender#") wellKnownActors should include ("Actor[akka://scanResourceSpec/user/ScanResourceCube/Appender#") } } override protected def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } }
Example 28
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 29
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 30
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 31
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 32
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 33
Source File: ZkClusterTestHelper.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.cluster.test import akka.testkit.ImplicitSender import org.scalatest.{BeforeAndAfterAll, BeforeAndAfterEach, FlatSpecLike, Matchers} import org.squbs.cluster._ import org.squbs.testkit.Timeouts._ trait ZkClusterTestHelper extends FlatSpecLike with ImplicitSender with Matchers with BeforeAndAfterAll with BeforeAndAfterEach { me: ZkClusterMultiActorSystemTestKit => override def beforeAll(): Unit = startCluster() override def afterAll(): Unit = shutdownCluster() override val timeout = awaitMax override val clusterSize: Int = 6 override def afterEach(): Unit = { Thread.sleep(timeout.toMillis / 10) } protected def checkLeaderInSync(leader: ZkLeadership) = { zkClusterExts foreach { case (name, ext) => ext tell (ZkQueryLeadership, self) expectMsg(timeout, leader) } } protected def checkMembersInSync(expected: Set[String]) = { zkClusterExts foreach { case (name, ext) => ext tell (ZkQueryMembership, self) expectMsgType[ZkMembership](timeout).members map (_.system) should be (expected) } } protected def killLeader(leader: ZkLeadership) = { val toBeKilled = leader.address.system killSystem(toBeKilled) Thread.sleep(timeout.toMillis / 10) toBeKilled } protected def killFollower(leader: ZkLeadership) = { val leaderName = leader.address.system val toBeKilled = pickASystemRandomly(Some(leaderName)) killSystem(toBeKilled) Thread.sleep(timeout.toMillis / 10) toBeKilled } protected def getLeader(name: String) = { zkClusterExts(name) tell (ZkQueryLeadership, self) expectMsgType[ZkLeadership](timeout) } protected val originalMembers = (0 until clusterSize).map(int2SystemName).toSet }
Example 34
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 35
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 36
Source File: BadPipelineFactorySpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex.pipeline import akka.actor.ActorSystem 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 org.squbs.unicomplex._ object BadPipelineFactorySpec { val classPaths = Array(getClass.getClassLoader.getResource("classpaths/pipeline/BadPipelineFactorySpec").getPath) val config = ConfigFactory.parseString( s""" |default-listener.bind-port = 0 |squbs { | actorsystem-name = BadPipelineFactorySpec | ${JMX.prefixConfig} = true |} | |dummyFlow { | type = squbs.pipelineflow | factory = org.squbs.unicomplex.pipeline.NotExists |} """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class BadPipelineFactorySpec extends TestKit( BadPipelineFactorySpec.boot.actorSystem) with FlatSpecLike with Matchers with ImplicitSender with BeforeAndAfterAll { implicit val am = ActorMaterializer() override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "System state" should "be Failed" in { Unicomplex(system).uniActor ! ReportStatus val StatusReport(systemState, _, _) = expectMsgType[StatusReport] systemState should be(Failed) } }
Example 37
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 38
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 39
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 40
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 41
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 42
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 43
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 44
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 45
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 46
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 47
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 48
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 49
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 50
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 51
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 52
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 53
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 54
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 55
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 56
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 57
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 58
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 59
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 60
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 61
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 62
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 63
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 64
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 65
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 66
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 67
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 68
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 69
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 70
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 71
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 72
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 73
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 74
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 75
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 76
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 77
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 78
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 79
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 80
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 81
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 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: 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 86
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 87
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 88
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 89
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 90
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 91
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 92
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 93
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 94
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 95
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 96
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 97
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 98
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 99
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 100
Source File: ProxyMultiJvm.scala From 006877 with MIT License | 5 votes |
package aia.channels // multi-jvm:test-only aia.channels.ReliableProxySampleSpec 로 시작할것 import org.scalatest.{WordSpecLike, BeforeAndAfterAll, MustMatchers} import akka.testkit.ImplicitSender import akka.actor.{Props, Actor} import akka.remote.testkit.MultiNodeSpecCallbacks import akka.remote.testkit.MultiNodeConfig import akka.remote.testkit.MultiNodeSpec trait STMultiNodeSpec extends MultiNodeSpecCallbacks with WordSpecLike with MustMatchers with BeforeAndAfterAll { override def beforeAll() = multiNodeSpecBeforeAll() override def afterAll() = multiNodeSpecAfterAll() } object ReliableProxySampleConfig extends MultiNodeConfig { val client = role("Client") val server = role("Server") testTransport(on = true) } class ReliableProxySampleSpecMultiJvmNode1 extends ReliableProxySample class ReliableProxySampleSpecMultiJvmNode2 extends ReliableProxySample import akka.remote.transport.ThrottlerTransportAdapter.Direction import scala.concurrent.duration._ import concurrent.Await import akka.contrib.pattern.ReliableProxy class ReliableProxySample extends MultiNodeSpec(ReliableProxySampleConfig) with STMultiNodeSpec with ImplicitSender { import ReliableProxySampleConfig._ def initialParticipants = roles.size "A MultiNodeSample" must { "wait for all nodes to enter a barrier" in { enterBarrier("startup") } "send to and receive from a remote node" in { runOn(client) { enterBarrier("deployed") val pathToEcho = node(server) / "user" / "echo" val echo = system.actorSelection(pathToEcho) val proxy = system.actorOf( ReliableProxy.props(pathToEcho, 500.millis), "proxy") proxy ! "message1" expectMsg("message1") Await.ready( testConductor.blackhole( client, server, Direction.Both), 1 second) echo ! "DirectMessage" proxy ! "ProxyMessage" expectNoMsg(3 seconds) Await.ready( testConductor.passThrough( client, server, Direction.Both), 1 second) expectMsg("ProxyMessage") echo ! "DirectMessage2" expectMsg("DirectMessage2") } runOn(server) { system.actorOf(Props(new Actor { def receive = { case msg: AnyRef => { sender() ! msg } } }), "echo") enterBarrier("deployed") } enterBarrier("finished") } } }
Example 101
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 102
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 103
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 104
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 105
Source File: WordsClusterSpec.scala From 006877 with MIT License | 5 votes |
package aia.cluster package words import scala.concurrent.duration._ import akka.actor.Props import akka.cluster.Cluster import akka.cluster.ClusterEvent.{CurrentClusterState, MemberUp} import akka.testkit.ImplicitSender import akka.remote.testkit.MultiNodeSpec import JobReceptionist._ class WordsClusterSpecMultiJvmNode1 extends WordsClusterSpec class WordsClusterSpecMultiJvmNode2 extends WordsClusterSpec class WordsClusterSpecMultiJvmNode3 extends WordsClusterSpec class WordsClusterSpecMultiJvmNode4 extends WordsClusterSpec class WordsClusterSpec extends MultiNodeSpec(WordsClusterSpecConfig) with STMultiNodeSpec with ImplicitSender { import WordsClusterSpecConfig._ def initialParticipants = roles.size val seedAddress = node(seed).address val masterAddress = node(master).address val worker1Address = node(worker1).address val worker2Address = node(worker2).address muteDeadLetters(classOf[Any])(system) "A Words cluster" must { "form the cluster" in within(10 seconds) { Cluster(system).subscribe(testActor, classOf[MemberUp]) expectMsgClass(classOf[CurrentClusterState]) Cluster(system).join(seedAddress) receiveN(4).map { case MemberUp(m) => m.address }.toSet must be( Set(seedAddress, masterAddress, worker1Address, worker2Address)) Cluster(system).unsubscribe(testActor) enterBarrier("cluster-up") } "execute a words job once the cluster is running" in within(10 seconds) { runOn(master) { val receptionist = system.actorOf(Props[JobReceptionist], "receptionist") receptionist ! JobRequest("job-1", List("some", "some very long text", "some long text")) expectMsg(JobSuccess("job-1", Map("some" -> 3, "very" -> 1, "long" -> 2, "text" -> 2))) } enterBarrier("job-done") } "continue to process a job when failures occur" in within(10 seconds) { runOn(master) { val receptionist = system.actorSelection("/user/receptionist") receptionist ! JobRequest("job-2", List("some", "FAIL", "some very long text", "some long text")) expectMsg(JobSuccess("job-2", Map("some" -> 3, "very" -> 1, "long" -> 2, "text" -> 2))) } enterBarrier("job-done") } } }
Example 106
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 107
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 108
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 109
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 110
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 111
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 112
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 113
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 114
Source File: AbstractEmbeddedPersistentActorSpec.scala From lagom with Apache License 2.0 | 5 votes |
package com.lightbend.lagom.scaladsl.persistence.testkit import akka.actor.ActorRef import akka.actor.ActorSystem import akka.actor.Props import akka.actor.actorRef2Scala import akka.persistence.PersistentActor import akka.testkit.ImplicitSender import akka.testkit.TestKitBase import com.lightbend.lagom.persistence.ActorSystemSpec import com.lightbend.lagom.persistence.PersistenceSpec import scala.collection.immutable import com.lightbend.lagom.scaladsl.playjson.JsonSerializerRegistry import com.lightbend.lagom.scaladsl.playjson.JsonSerializer import scala.concurrent.duration._ object AbstractEmbeddedPersistentActorSpec { final case class Cmd(data: String) final case class Evt(data: String) case object Get final case class State(data: Vector[String] = Vector.empty) { def apply(evt: Evt): State = { copy(data :+ evt.data) } } def props(persistenceId: String): Props = Props(new Persistent(persistenceId)) class Persistent(override val persistenceId: String) extends PersistentActor { var state = State() override def receiveRecover = { case evt: Evt => state = state(evt) } override def receiveCommand = { case Cmd(data) => persist(Evt(data.toUpperCase)) { evt => state = state(evt) } case Get => sender() ! state } } object EmbeddedPersistentActorSerializers extends JsonSerializerRegistry { override def serializers: immutable.Seq[JsonSerializer[_]] = { import play.api.libs.json._ import JsonSerializer.emptySingletonFormat Vector( JsonSerializer(Json.format[Cmd]), JsonSerializer(Json.format[Evt]), JsonSerializer(emptySingletonFormat(Get)), JsonSerializer(Json.format[State]) ) } } } trait AbstractEmbeddedPersistentActorSpec { spec: ActorSystemSpec => import AbstractEmbeddedPersistentActorSpec._ "A persistent actor" must { "store events in the embedded journal" in within(15.seconds) { val p = system.actorOf(props("p1")) println(implicitly[ActorRef]) p ! Get expectMsg(State()) p ! Cmd("a") p ! Cmd("b") p ! Cmd("c") p ! Get expectMsg(State(Vector("A", "B", "C"))) // start another with same persistenceId should recover state val p2 = system.actorOf(props("p1")) p2 ! Get expectMsg(State(Vector("A", "B", "C"))) } } }
Example 115
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 } }
Example 116
Source File: ClusteredMultiNodeUtils.scala From lagom with Apache License 2.0 | 5 votes |
package com.lightbend.lagom.internal.cluster import akka.actor.ActorRef import akka.actor.Address import akka.cluster.Cluster import akka.cluster.MemberStatus import akka.remote.testconductor.RoleName import akka.remote.testkit.MultiNodeSpec import akka.testkit.ImplicitSender import com.lightbend.lagom.internal.cluster.ClusterMultiNodeConfig.node1 import scala.concurrent.duration._ abstract class ClusteredMultiNodeUtils(val numOfNodes: Int, multiNodeConfig: ClusterMultiNodeConfig) extends MultiNodeSpec(multiNodeConfig, ClusterMultiNodeActorSystemFactory.createActorSystem()) with STMultiNodeSpec with ImplicitSender { override def initialParticipants: Int = roles.size def join(from: RoleName, to: RoleName): Unit = { runOn(from) { Cluster(system).join(node(to).address) } enterBarrier(from.name + "-joined") } def fullAddress(ref: ActorRef): Address = if (ref.path.address.hasLocalScope) Cluster(system).selfAddress else ref.path.address protected override def atStartup(): Unit = { join(node1, node1) roles.tail.foreach(n => join(n, node1)) within(15.seconds) { awaitAssert(Cluster(system).state.members.size should be(numOfNodes)) awaitAssert( Cluster(system).state.members.toIndexedSeq.map(_.status).distinct should be(IndexedSeq(MemberStatus.Up)) ) } enterBarrier("startup") } }
Example 117
Source File: ClusteredTeskit.scala From lagom with Apache License 2.0 | 5 votes |
package com.lightbend.lagom.internal.cluster import akka.actor.ActorRef import akka.actor.ActorSystem import akka.actor.Address import akka.actor.BootstrapSetup import akka.actor.setup.ActorSystemSetup import akka.cluster.Cluster import akka.cluster.MemberStatus import akka.remote.testconductor.RoleName import com.typesafe.config.ConfigFactory import akka.remote.testkit.MultiNodeConfig import akka.remote.testkit.MultiNodeSpec import akka.testkit.ImplicitSender import com.lightbend.lagom.internal.cluster.ClusterMultiNodeConfig.node1 import com.typesafe.config.Config import scala.concurrent.duration._ object ClusterMultiNodeConfig extends ClusterMultiNodeConfig // this is reused in multiple multi-jvm tests. There's still some copy/paste around though. abstract class ClusterMultiNodeConfig extends MultiNodeConfig { val node1 = role("node1") val node2 = role("node2") val node3 = role("node3") protected def systemConfig: Config = ConfigFactory.parseString( """ akka.loglevel = INFO akka.actor.provider = cluster terminate-system-after-member-removed = 60s # increase default timeouts to leave wider margin for Travis. # 30s to 60s akka.testconductor.barrier-timeout=60s akka.test.single-expect-default = 15s akka.cluster.sharding.waiting-for-state-timeout = 5s # Don't terminate the actor system when doing a coordinated shutdown akka.coordinated-shutdown.terminate-actor-system = off akka.coordinated-shutdown.run-by-jvm-shutdown-hook = off akka.cluster.run-coordinated-shutdown-when-down = off ## The settings below are incidental because this code lives in a project that depends on lagom-cluster and ## lagom-akka-management-core. # multi-jvm tests forms the cluster programmatically # therefore we disable Akka Cluster Bootstrap lagom.cluster.bootstrap.enabled = off # no jvm exit on tests lagom.cluster.exit-jvm-when-system-terminated = off """ ) commonConfig(systemConfig) } // heavily inspired by AbstractClusteredPersistentEntitySpec // this is reused in multiple multi-jvm tests. There's still some copy/paste around though. object ClusterMultiNodeActorSystemFactory { // Copied from MultiNodeSpec private def getCallerName(clazz: Class[_]): String = { val s = Thread.currentThread.getStackTrace.map(_.getClassName).drop(1).dropWhile(_.matches(".*MultiNodeSpec.?$")) val reduced = s.lastIndexWhere(_ == clazz.getName) match { case -1 => s case z => s.drop(z + 1) } reduced.head.replaceFirst(""".*\.""", "").replaceAll("[^a-zA-Z_0-9]", "_") } def createActorSystem(): Config => ActorSystem = { config => val setup = ActorSystemSetup(BootstrapSetup(ConfigFactory.load(config))) ActorSystem(getCallerName(classOf[MultiNodeSpec]), setup) } }
Example 118
Source File: ClusterMessageSerializerSpec.scala From lagom with Apache License 2.0 | 5 votes |
package com.lightbend.lagom.internal.cluster import akka.actor.ActorSystem import akka.actor.ExtendedActorSystem import akka.testkit.ImplicitSender import akka.testkit.TestKit import com.lightbend.lagom.internal.cluster.ClusterDistribution.EnsureActive import com.lightbend.lagom.internal.cluster.protobuf.msg.ClusterMessages.{ EnsureActive => ProtobufEnsureActive } import com.typesafe.config.ConfigFactory import org.scalactic.TypeCheckedTripleEquals import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike object ClusterMessageSerializerSpec { def actorSystem(): ActorSystem = { val config = ConfigFactory.defaultReference() ActorSystem(classOf[ClusterMessageSerializerSpec].getSimpleName, config) } } class ClusterMessageSerializerSpec extends TestKit(ClusterMessageSerializerSpec.actorSystem()) with AnyWordSpecLike with Matchers with BeforeAndAfterAll with TypeCheckedTripleEquals with ImplicitSender { val clusterMessageSerializer = new ClusterMessageSerializer(system.asInstanceOf[ExtendedActorSystem]) "ClusterMessageSerializer" must { "serialize EnsureActive" in { val ensureActive = EnsureActive("entity-1") val bytes = clusterMessageSerializer.toBinary(ensureActive) ProtobufEnsureActive.parseFrom(bytes).getEntityId should be("entity-1") } "deserialize EnsureActive" in { val bytes = ProtobufEnsureActive.newBuilder().setEntityId("entity-2").build().toByteArray val ensureActive = clusterMessageSerializer.fromBinary(bytes, "E").asInstanceOf[EnsureActive] ensureActive.entityId should be("entity-2") } "fail to serialize other types" in { assertThrows[IllegalArgumentException] { clusterMessageSerializer.toBinary("Strings are not supported") } } "fail to deserialize with the wrong manifest" in { assertThrows[IllegalArgumentException] { val bytes = ProtobufEnsureActive.newBuilder().setEntityId("entity-2").build().toByteArray clusterMessageSerializer.fromBinary(bytes, "WRONG-MANIFEST") } } } protected override def afterAll(): Unit = { shutdown() super.afterAll() } }
Example 119
Source File: GovernorSpec.scala From chordial with BSD 3-Clause "New" or "Revised" License | 5 votes |
package com.tristanpenman.chordial.demo import akka.actor.{ActorRef, ActorSystem} import akka.testkit.{ImplicitSender, TestKit} import com.tristanpenman.chordial.demo.Governor._ import org.scalatest._ import scala.concurrent.duration._ final class GovernorSpec extends TestKit(ActorSystem("GovernorSpec")) with WordSpecLike with ImplicitSender { // Time to wait before concluding that no additional messages will be received private val spuriousMessageDuration = 150.milliseconds // Limit size of keyspace / number of nodes to 2^3 == 8 private val keyspaceBits = 3 // Function to return the ID of an arbitrarily chosen Node owned by a given Governor actor private def getFirstNodeId(governor: ActorRef): Long = { governor ! GetNodeIdSet expectMsgPF() { case GetNodeIdSetOk(nodeIds) => if (nodeIds.isEmpty) { fail("Governor returned an empty set of Node IDs") } else { nodeIds.head } } } "A Governor actor" when { "initially constructed" should { def newGovernor: ActorRef = system.actorOf(Governor.props(keyspaceBits)) "respond to a CreateNode message with a CreateNodeOk message, and then no further messages" in { newGovernor ! CreateNode expectMsgType[CreateNodeOk] expectNoMessage(spuriousMessageDuration) } "respond to two CreateNode messages with two unique CreateNodeOk messages, and then no further messages" in { val governor = newGovernor governor ! CreateNode expectMsgPF() { case CreateNodeOk(firstNodeId, _) => governor ! CreateNode expectMsgPF() { case CreateNodeOk(secondNodeId, _) => assert(firstNodeId != secondNodeId) } } } } "already at its Node capacity" should { def newGovernor: ActorRef = { val governor = system.actorOf(Governor.props(keyspaceBits)) 1 to (1 << keyspaceBits) foreach { _ => governor ! CreateNode expectMsgType[CreateNodeOk] } governor } "respond to a CreateNode message with a CreateNodeInvalidRequest message" in { newGovernor ! CreateNode expectMsgType[CreateNodeInvalidRequest] } "respond to a CreateNodeWithSeed message with a CreateNodeWithSeedInvalidRequest message" in { val governor = newGovernor val seedId = getFirstNodeId(governor) governor ! CreateNodeWithSeed(seedId) expectMsgType[CreateNodeWithSeedInvalidRequest] } } } }
Example 120
Source File: ActorSystemSpec.scala From akka-persistence-couchbase with Apache License 2.0 | 5 votes |
package com.lightbend.lagom.persistence import akka.actor.ActorSystem import akka.actor.setup.ActorSystemSetup import akka.event.{ Logging, LoggingAdapter } import akka.testkit.{ ImplicitSender, TestKit } import com.typesafe.config.{ Config, ConfigFactory } import org.scalactic.{ CanEqual, TypeCheckedTripleEquals } import org.scalatest.{ BeforeAndAfterAll, Matchers, WordSpecLike } object ActorSystemSpec { def getCallerName(clazz: Class[_]): String = { val s = (Thread.currentThread.getStackTrace map (_.getClassName) drop 1) .dropWhile(_ matches "(java.lang.Thread|.*ActorSystemSpec.?$)") val reduced = s.lastIndexWhere(_ == clazz.getName) match { case -1 ⇒ s case z ⇒ s drop (z + 1) } reduced.head.replaceFirst(""".*\.""", "").replaceAll("[^a-zA-Z_0-9]", "_") } } abstract class ActorSystemSpec(system: ActorSystem) extends TestKit(system) with WordSpecLike with Matchers with BeforeAndAfterAll with TypeCheckedTripleEquals with ImplicitSender { def this(testName: String, config: Config) = this(ActorSystem(testName, config)) def this(config: Config) = this(ActorSystemSpec.getCallerName(getClass), config) def this(setup: ActorSystemSetup) = this(ActorSystem(ActorSystemSpec.getCallerName(getClass), setup)) def this() = this(ConfigFactory.empty()) override protected def afterAll(): Unit = { shutdown() super.afterAll() } val log: LoggingAdapter = Logging(system, this.getClass) // 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 } }
Example 121
Source File: CouchbaseJournalIntegrationSpec.scala From akka-persistence-couchbase with Apache License 2.0 | 5 votes |
package akka.persistence.couchbase import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit, WithLogCapturing} import com.typesafe.config.ConfigFactory import org.scalatest.{Matchers, WordSpecLike} import scala.concurrent.duration._ class CouchbaseJournalIntegrationSpec extends TestKit( ActorSystem( "CouchbaseJournalIntegrationSpec", ConfigFactory.parseString(""" akka.loglevel = debug akka.loggers = ["akka.testkit.SilenceAllTestEventListener"] """).withFallback(ConfigFactory.load()) ) ) with ImplicitSender with WordSpecLike with Matchers with CouchbaseBucketSetup with WithLogCapturing { "The Couchbase Journal" must { "always replay to the latest written event" in { // even with outstanding writes - covers #140, and also that replay of a longer journal works val ref1 = system.actorOf(TestActor.props("latest-written")) ref1 ! TestActor.PersistAllAsync((0 to 500).map(_.toString)) expectMsg("PersistAllAsync-triggered") // large write to be in progress when replay happens _ => watch(ref1) ref1 ! TestActor.Stop expectTerminated(ref1) // if write is still happening, recovery finding highest seqnr should still work val ref2 = system.actorOf(TestActor.props("latest-written")) ref2 ! TestActor.GetLastRecoveredEvent expectMsg(10.seconds, "500") } } }
Example 122
Source File: ConsumerSpec.scala From akka-cluster-load-balancing with MIT License | 5 votes |
package kamkor.actor import scala.concurrent.duration.DurationInt import org.scalatest.{ BeforeAndAfterAll, Matchers, WordSpecLike } import com.typesafe.config.ConfigFactory import akka.actor.ActorSystem import akka.testkit.{ EventFilter, ImplicitSender, TestKit } class ConsumerSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this( ActorSystem("ClusterSystem", ConfigFactory.parseString(""" akka.loggers = ["akka.testkit.TestEventListener"] akka.loglevel = "DEBUG" """))) override def afterAll: Unit = TestKit.shutdownActorSystem(system) "A Customer actor that processes 1 message for 200 millis" must { "log endedProcessing with debug level 5 times within 1-1.3 seconds" in { val consumer = system.actorOf(Consumer.props(processingTimeMillis = 200)) val data: Array[Int] = Array(0, 1, 2) // akka scheduling is not 100% accurate http://doc.akka.io/docs/akka/snapshot/scala/scheduler.html within(999.millis, 1300.millis) { EventFilter.debug(pattern = "endProcessing", occurrences = 5) intercept { for (_ <- 0 until 5) { consumer ! data } } } } } }
Example 123
Source File: ProcessActorTest.scala From scastie with Apache License 2.0 | 5 votes |
package com.olegych.scastie.util import java.io.File import java.nio.file.{Files, StandardCopyOption} import akka.actor.{Actor, ActorRef, ActorSystem} import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe} import com.olegych.scastie.api.ProcessOutput import com.olegych.scastie.api.ProcessOutputType._ import com.olegych.scastie.util.ProcessActor._ import org.scalatest.BeforeAndAfterAll import org.scalatest.funsuite.AnyFunSuiteLike import scala.concurrent.duration._ class ProcessActorTest() extends TestKit(ActorSystem("ProcessActorTest")) with ImplicitSender with AnyFunSuiteLike with BeforeAndAfterAll { test("do it") { (1 to 10).foreach { i => println(s"--- Run $i ---") val command = new File("target", "echo.sh") Files.copy(getClass.getResourceAsStream("/echo.sh"), command.toPath, StandardCopyOption.REPLACE_EXISTING) command.setExecutable(true) val probe = TestProbe() val processActor = TestActorRef(new ProcessReceiver(command.getPath, probe.ref)) processActor ! Input("abcd") processActor ! Input("1234") processActor ! Input("quit") def expected(msg0: String): Unit = { probe.expectMsgPF(4000.milliseconds) { case ProcessOutput(msg1, StdOut, _) if msg0.trim == msg1.trim => true case ProcessOutput(msg1, StdOut, _) => println(s""""$msg1" != "$msg0"""") false } } expected("abcd") expected("1234") } } override def afterAll: Unit = { TestKit.shutdownActorSystem(system) } } class ProcessReceiver(command: String, probe: ActorRef) extends Actor { private val props = ProcessActor.props(command = List("bash", "-c", command.replace("\\", "/")), killOnExit = false) private val process = context.actorOf(props, name = "process-receiver") override def receive: Receive = { case output: ProcessOutput => probe ! output case input: Input => process ! input } }
Example 124
Source File: WarmupSpec.scala From cloudstate with Apache License 2.0 | 5 votes |
package io.cloudstate.proxy import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, WordSpecLike} class WarmupSpec extends TestKit(ActorSystem("WarmupSpec", ConfigFactory.load("test-in-memory"))) with WordSpecLike with BeforeAndAfterAll with ImplicitSender { override protected def afterAll(): Unit = TestKit.shutdownActorSystem(system) "The Warmup Actor" should { "successfully complete warmup when needsWarmup is true" in { val warmup = system.actorOf(Warmup.props(true)) awaitCond({ warmup ! Warmup.Ready expectMsgType[Boolean] }) } "successfully complete warmup when needsWarmup is false" in { val warmup = system.actorOf(Warmup.props(false)) awaitCond({ warmup ! Warmup.Ready expectMsgType[Boolean] }) } } }
Example 125
Source File: CheckpointTrackerActorSpec.scala From kinesis-stream with MIT License | 5 votes |
package px.kinesis.stream.consumer.checkpoint import akka.actor.Status.Failure import akka.actor.{ActorRef, ActorSystem} import akka.testkit.{ImplicitSender, TestKit} import org.scalamock.scalatest.MockFactory import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.must.Matchers import px.kinesis.stream.consumer.checkpoint.CheckpointTrackerActor._ import px.kinesis.stream.consumer.checkpoint.{ShardCheckpointTrackerActor => shard} import software.amazon.kinesis.retrieval.kpl.ExtendedSequenceNumber import scala.collection.immutable.Seq class CheckpointTrackerActorSpec extends TestKit(ActorSystem("CheckpointTrackerActorSpec")) with ImplicitSender with AnyFunSpecLike with Matchers with BeforeAndAfterAll with MockFactory { override def afterAll: Unit = { TestKit.shutdownActorSystem(system) } val workerId = "123" def toSequenceNum(i: Int): ExtendedSequenceNumber = new ExtendedSequenceNumber(i.toString) def createTracker(): ActorRef = system.actorOf( CheckpointTrackerActor .props(workerId, 10, 10)) describe("track") { it("should track successfully after creation of tracker") { val tracker = createTracker() val shardId = "01" tracker ! Command.Create(shardId) expectMsg(Response.Ack) tracker ! Command.Track(shardId, Seq(1).map(toSequenceNum)) expectMsg(shard.Response.Ack) } it("should fail if tracker is not active") { val tracker = createTracker() val shardId = "01" // shard tracker for 01 does not exist tracker ! Command.Track(shardId, Seq(1).map(toSequenceNum)) expectMsgPF() { case Failure(_) => true } } } describe("process") { it("should process successfully after creation of tracker") { val tracker = createTracker() val shardId = "01" tracker ! Command.Create(shardId) expectMsg(Response.Ack) tracker ! Command.Process(shardId, toSequenceNum(1)) expectMsg(shard.Response.Ack) } it("should process successfully even after shard tracker is shutdown") { val tracker = createTracker() val shardId = "01" tracker ! Command.Create(shardId) expectMsg(Response.Ack) tracker ! Command.Process(shardId, toSequenceNum(1)) expectMsg(shard.Response.Ack) tracker ! Command.ShutdownShard(shardId) expectMsg(Response.Ack) tracker ! Command.Process(shardId, toSequenceNum(2)) expectMsg(shard.Response.Ack) } } }
Example 126
Source File: HelloAkkaSpec.scala From akka-nbench with Apache License 2.0 | 5 votes |
import org.scalatest.{ BeforeAndAfterAll, FlatSpecLike, Matchers } import akka.actor.{ Actor, Props, ActorSystem } import akka.testkit.{ ImplicitSender, TestKit, TestActorRef } import scala.concurrent.duration._ class HelloAkkaSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with Matchers with FlatSpecLike with BeforeAndAfterAll { def this() = this(ActorSystem("HelloAkkaSpec")) override def afterAll: Unit = { system.shutdown() system.awaitTermination(10.seconds) } "An HelloAkkaActor" should "be able to set a new greeting" in { val greeter = TestActorRef(Props[Greeter]) greeter ! WhoToGreet("testkit") greeter.underlyingActor.asInstanceOf[Greeter].greeting should be("hello, testkit") } it should "be able to get a new greeting" in { val greeter = system.actorOf(Props[Greeter], "greeter") greeter ! WhoToGreet("testkit") greeter ! Greet expectMsgType[Greeting].message.toString should be("hello, testkit") } }
Example 127
Source File: AkkaTestKitSpecs2Context.scala From graphcool-framework with Apache License 2.0 | 5 votes |
package cool.graph.akkautil.specs2 import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.specs2.mutable.After import scala.concurrent.Await object TestConfig { val config = ConfigFactory.parseString(""" |akka { | log-dead-letters = 1 |} | """.stripMargin) } class AkkaTestKitSpecs2Context extends TestKit(ActorSystem("test-system", TestConfig.config)) with ImplicitSender with After { import scala.concurrent.duration._ def after = Await.result(system.terminate(), 10.seconds) }
Example 128
Source File: BulkIndexerActorTest.scala From elasticsearch-client with Apache License 2.0 | 5 votes |
package com.sumologic.elasticsearch.akkahelpers import java.util.concurrent.TimeUnit import akka.actor.{ActorSystem, Terminated} import akka.testkit.{ImplicitSender, TestActorRef, TestKit} import com.sumologic.elasticsearch.akkahelpers.BulkIndexerActor.{BulkSession, CreateRequest, DocumentIndexed, ForceFlush} import com.sumologic.elasticsearch.restlastic.{RestlasticSearchClient, RestlasticSearchClient6} import com.sumologic.elasticsearch.restlastic.RestlasticSearchClient.ReturnTypes.BulkItem import com.sumologic.elasticsearch.restlastic.dsl.Dsl._ import org.junit.runner.RunWith import org.mockito.ArgumentMatchers._ import org.mockito.Matchers._ import org.mockito.Mockito._ import org.scalatest._ import org.scalatest.concurrent.Eventually import org.scalatest.mock.MockitoSugar import org.scalatestplus.junit.JUnitRunner import scala.concurrent.duration._ import scala.concurrent.{Await, Future} import scala.concurrent.duration.Duration @RunWith(classOf[JUnitRunner]) class BulkIndexerActorTest extends TestKit(ActorSystem("TestSystem")) with WordSpecLike with Matchers with BeforeAndAfterAll with BeforeAndAfterEach with MockitoSugar with ImplicitSender with Eventually { val executionContext = scala.concurrent.ExecutionContext.Implicits.global var indexerActor: TestActorRef[BulkIndexerActor] = _ var mockEs = mock[RestlasticSearchClient] var flushTimeoutMs = 100000L var maxMessages = 100000 override def beforeEach(): Unit = { mockEs = mock[RestlasticSearchClient] when(mockEs.indexExecutionCtx).thenReturn(executionContext) def timeout() = Duration(flushTimeoutMs, TimeUnit.MILLISECONDS) def max() = maxMessages val config = BulkConfig(timeout, max) indexerActor = TestActorRef[BulkIndexerActor](BulkIndexerActor.props(mockEs, config)) } override def afterAll(): Unit = { val terminationFuture: Future[Terminated] = system.terminate() Await.result(terminationFuture, 5.seconds) } "BulkIndexerActor" should { "flush every message when set to 1" in { maxMessages = 1 when(mockEs.bulkIndex(any())).thenReturn(Future.successful(Seq(BulkItem("index","type", "_id", 201, None)))) val sess = BulkSession.create() indexerActor ! CreateRequest(sess, Index("i"), Type("tpe"), Document("id", Map("k" -> "v"))) eventually { mockEs.bulkIndex(any()) } val msg = expectMsgType[DocumentIndexed] msg.sessionId should be(sess) } "not flush when set to 2" in { maxMessages = 2 indexerActor ! CreateRequest(BulkSession.create(), Index("i"), Type("tpe"), Document("id", Map("k" -> "v"))) verify(mockEs, times(0)).bulkIndex(any()) } "not flush when there are no messages" in { indexerActor ! ForceFlush verify(mockEs, times(0)).bulkIndex(any()) } } }
Example 129
Source File: ReconnectSpec.scala From akka-persistence-cassandra with Apache License 2.0 | 5 votes |
package akka.persistence.cassandra import java.io.File import akka.actor.{ ActorSystem, Props } import akka.persistence.cassandra.CassandraLifecycle.AwaitPersistenceInit import akka.persistence.cassandra.testkit.CassandraLauncher import akka.testkit.{ ImplicitSender, SocketUtil, TestKit } import com.typesafe.config.ConfigFactory import org.scalatest.Suite import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike object ReconnectSpec { val freePort = SocketUtil.temporaryLocalPort() val config = ConfigFactory.parseString(s""" datastax-java-driver { basic.load-balancing-policy.local-datacenter = "datacenter1" // Will fail without this setting advanced.reconnect-on-init = true basic.contact-points = ["127.0.0.1:$freePort"] } """).withFallback(CassandraLifecycle.config) } // not using Cassandra Spec class ReconnectSpec extends TestKit(ActorSystem("ReconnectSpec", ReconnectSpec.config)) with Suite with ImplicitSender with AnyWordSpecLike with Matchers with ScalaFutures { "Reconnecting" must { "start with system off" in { val pa = system.actorOf(Props(new AwaitPersistenceInit("pid", "", ""))) pa ! "hello" expectNoMessage() CassandraLauncher.start( new File("target/ReconnectSpec"), configResource = CassandraLauncher.DefaultTestConfigResource, clean = true, port = ReconnectSpec.freePort, CassandraLauncher.classpathForResources("logback-test.xml")) try { CassandraLifecycle.awaitPersistenceInit(system) } finally { CassandraLauncher.stop() } } } }
Example 130
Source File: ClusterSpec.scala From akka-cqrs with Apache License 2.0 | 5 votes |
package test.support import java.io.{File, IOException} import java.nio.file._ import java.nio.file.attribute.BasicFileAttributes import akka.actor.{ActorIdentity, Identify, Props} import akka.cluster.Cluster import akka.persistence.Persistence import akka.persistence.journal.leveldb.{SharedLeveldbJournal, SharedLeveldbStore} import akka.remote.testconductor.RoleName import akka.remote.testkit.MultiNodeSpec import akka.testkit.ImplicitSender import scala.util.control.NonFatal abstract class ClusterSpec extends MultiNodeSpec(ClusterConfig) with SbtMultiNodeSpec with ImplicitSender { import ClusterConfig._ implicit val logger = system.log def initialParticipants = roles.size def deleteDirectory(path: Path): Unit = if (Files.exists(path)) { Files.walkFileTree(path, new SimpleFileVisitor[Path] { def deleteAndContinue(file: Path): FileVisitResult = { Files.delete(file) FileVisitResult.CONTINUE } override def visitFile(file: Path, attrs: BasicFileAttributes): FileVisitResult = deleteAndContinue(file) override def visitFileFailed(file: Path, exc: IOException): FileVisitResult = deleteAndContinue(file) override def postVisitDirectory(dir: Path, exc: IOException): FileVisitResult = { Option(exc).fold(deleteAndContinue(dir)) { case NonFatal(e) => throw e } } }) } val storageLocations = List( "akka.persistence.journal.leveldb.dir", "akka.persistence.journal.leveldb-shared.store.dir", "akka.persistence.snapshot-store.local.dir").map(s => new File(system.settings.config.getString(s))) override protected def atStartup() { on(node1) { storageLocations.foreach(dir => deleteDirectory(dir.toPath)) } } override protected def afterTermination() { on(node1) { storageLocations.foreach(dir => deleteDirectory(dir.toPath)) } } def join(startOn: RoleName, joinTo: RoleName) { on(startOn) { Cluster(system) join node(joinTo).address } enterBarrier(startOn.name + "-joined") } def setupSharedJournal() { Persistence(system) on(node1) { system.actorOf(Props[SharedLeveldbStore], "store") } enterBarrier("persistence-started") system.actorSelection(node(node1) / "user" / "store") ! Identify(None) val sharedStore = expectMsgType[ActorIdentity].ref.get SharedLeveldbJournal.setStore(sharedStore, system) enterBarrier("after-1") } def joinCluster() { join(startOn = node1, joinTo = node1) join(startOn = node2, joinTo = node1) enterBarrier("after-2") } def on(nodes: RoleName*)(thunk: => Unit): Unit = { runOn(nodes: _*)(thunk) } }
Example 131
Source File: EntitySupport.scala From akka-cqrs with Apache License 2.0 | 5 votes |
package com.productfoundry.akka.cqrs import akka.actor.{ActorRef, ActorSystem, PoisonPill, Terminated} import akka.testkit.{ImplicitSender, TestKit} import akka.util.Timeout import org.scalatest.concurrent.Eventually import org.scalatest.time.{Millis, Second, Span} import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.duration._ abstract class EntitySupport(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with BeforeAndAfter with Eventually { override def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } }
Example 132
Source File: PersistenceTestSupport.scala From akka-cqrs with Apache License 2.0 | 5 votes |
package com.productfoundry.support import java.util.UUID import akka.testkit.{ImplicitSender, TestKit} import org.scalatest.concurrent.Eventually import org.scalatest.time.{Millis, Span} import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} abstract class PersistenceTestSupport extends TestKit(TestConfig.testSystem) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with Eventually { def randomPersistenceId = UUID.randomUUID.toString implicit override val patienceConfig = PatienceConfig( timeout = scaled(Span(500, Millis)), interval = scaled(Span(10, Millis)) ) override protected def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } }
Example 133
Source File: SimpleDowningSpec.scala From simple-akka-downing with Apache License 2.0 | 5 votes |
package com.ajjpj.simpleakkadowning.util import akka.actor.Props import akka.cluster.{Cluster, MemberStatus} import akka.http.scaladsl.Http import akka.http.scaladsl.model.{HttpRequest, Uri} import akka.remote.testconductor.RoleName import akka.remote.testkit.MultiNodeSpec import akka.remote.transport.ThrottlerTransportAdapter.Direction import akka.stream.ActorMaterializer import akka.testkit.ImplicitSender import scala.concurrent.duration._ import scala.util.control.NonFatal abstract class SimpleDowningSpec(config: SimpleDowningConfig) extends MultiNodeSpec(config) with STMultiNodeSpec with ImplicitSender { def initialParticipants = roles.size private var portToNode = Map.empty[Int,RoleName] def init(): Unit = { if (roles.headOption contains myself) { enterBarrier("initialized") } else { val cluster = Cluster(system) cluster.joinSeedNodes(seedAddresses) system.actorOf(Props(new ClusterHttpInspector(httpPort(myself))), "http-server") while (cluster.state.members.count(_.status == MemberStatus.Up) < roles.tail.size) Thread.sleep(100) enterBarrier("initialized") } portToNode = roles.map(r => node(r).address.port.get -> r).toMap } def httpPort (node: RoleName) = { val nodeNo = roles.indexOf(node) require(nodeNo > 0) 8080 + nodeNo } def seedAddresses = roles.tail.map(node(_).root.address) private def httpGetNodes(node: RoleName, path: String): Set[RoleName] = { try { import system.dispatcher implicit val mat = ActorMaterializer() val uri = Uri (s"http://localhost:${httpPort (node)}$path") val response = Http (system).singleRequest (HttpRequest (uri = uri)).await val strict = response.entity.toStrict (10.seconds).await strict.data.decodeString ("utf-8") match { case s if s.isEmpty => Set.empty case s => s.split (' ').map (_.toInt).map (portToNode).toSet } } catch { case NonFatal(th) => th.printStackTrace() Set.empty } } def upNodesFor(node: RoleName) = httpGetNodes(node, "/cluster-members/up") def unreachableNodesFor (node: RoleName) = httpGetNodes(node, "/cluster-members/unreachable") def createPartition(nodes: RoleName*) = { val otherNodes = roles.tail.toSet -- nodes for (n1 <- nodes; n2 <- otherNodes) testConductor.blackhole(n1, n2, Direction.Both).await } def healPartition(): Unit = { for (n1 <- roles.tail; n2 <- roles.tail) testConductor.passThrough(n1, n2, Direction.Both).await } }
Example 134
Source File: ServiceLocatorSpec.scala From reactive-lib with Apache License 2.0 | 5 votes |
package com.lightbend.rp.servicediscovery.javadsl import akka.actor.ActorSystem import akka.testkit.{ ImplicitSender, TestKit } import com.lightbend.rp.servicediscovery.scaladsl.{ Service, Settings } import com.typesafe.config.ConfigFactory import java.net.URI import java.util.Optional import org.scalatest.{ AsyncFunSuiteLike, BeforeAndAfterAll, DiagrammedAssertions } import scala.collection.JavaConverters._ import scala.collection.immutable.Seq object ServiceLocatorSpec { def config = ConfigFactory .parseString( s"""|com.lightbend.platform-tooling.service-discovery { | external-service-addresses { | "has-one" = ["http://127.0.0.1:9000"] | "has-two" = ["http://127.0.0.1:8000", "http://127.0.0.1:8001"] | } |} |""".stripMargin) .withFallback(ConfigFactory.defaultApplication()) } class ServiceLocatorSpec extends TestKit(ActorSystem("service-locator", ServiceLocatorSpec.config)) with ImplicitSender with AsyncFunSuiteLike with DiagrammedAssertions with BeforeAndAfterAll { override def afterAll { TestKit.shutdownActorSystem(system) } implicit val settings = Settings(system) test("addressSelectionFirst should work for empty lists") { assert(ServiceLocator.addressSelectionFirst.select(Seq().asJava) === Optional.empty[URI]()) } test("addressSelectionFirst should work for non-empty lists") { assert(ServiceLocator.addressSelectionFirst.select( Seq( Service("myservice.com", new URI("http://127.0.0.1:9000")), Service("myotherservice.com", new URI("http://127.0.0.1:9001"))).asJava).get() === Service("myservice.com", new URI("http://127.0.0.1:9000"))) } test("addressSelectionRandom should work for empty lists") { assert(ServiceLocator.addressSelectionFirst.select(Seq().asJava) === Optional.empty[URI]()) } test("addressSelectionRandom should work for non-empty lists") { assert(ServiceLocator.addressSelectionFirst.select(Seq(Service("hello", new URI("http://127.0.0.1:9000"))).asJava).isPresent) } }
Example 135
Source File: ApiKeyAuthSpec.scala From shield with MIT License | 5 votes |
package shield.actors.middleware import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestActorRef, TestKit} import org.scalatest.{MustMatchers, WordSpecLike} import shield.actors.{DownstreamRequest, ForwardRequestCmd, ForwardResponseCmd, ResponseDetails} import shield.config.Settings import shield.proxying.FailBalancer import shield.routing._ import spray.http.HttpHeaders.RawHeader import spray.http._ class ApiKeyAuthSpec extends TestKit(ActorSystem("testSystem")) with WordSpecLike with MustMatchers with ImplicitSender { "ApiKeyAuthTest middleware actor" must { val stage = "myStage" val settings = Settings(system) val location = settings.DefaultServiceLocation val getEndpoint = EndpointTemplate(HttpMethods.GET, Path("/foobar")) val routingDestination = RoutingDestination(getEndpoint, List(), List(), FailBalancer) def httpRequest(headers: List[HttpHeader]): HttpRequest = HttpRequest(HttpMethods.GET, "/v4/mobile/stores", headers) def forwardResponseCmd(response: HttpResponse) = { ForwardResponseCmd( stage, ResponseDetails( location, settings.LocalServiceName, getEndpoint, None, response) ) } "reply with Forbidden when created with bad parameters" in { val actor = TestActorRef(ApiKeyAuth.props("", Set(""), true, location)) actor ! DownstreamRequest(stage, routingDestination, httpRequest(List())) expectMsg(forwardResponseCmd(HttpResponse(StatusCodes.Forbidden))) } "reply with Forbidden when given no headers" in { val actor = TestActorRef(ApiKeyAuth.props("pid", Set("BA914464-C559-4F81-A37E-521B830F1634"), true, location)) actor ! DownstreamRequest(stage, routingDestination, httpRequest(List())) expectMsg(forwardResponseCmd(HttpResponse(StatusCodes.Forbidden))) } "reply with Unauthorized when given an incorrect header" in { val actor = TestActorRef(ApiKeyAuth.props("pid", Set("BA914464-C559-4F81-A37E-521B830F1634"), true, location)) actor ! DownstreamRequest(stage, routingDestination, httpRequest(List(RawHeader("pid","asdasdada")))) expectMsg(forwardResponseCmd(HttpResponse(StatusCodes.Unauthorized))) } "succeed with a downstream request when given the correct header and value" in { val request = httpRequest(List(RawHeader("pid","BA914464-C559-4F81-A37E-521B830F1634"))) val actor = TestActorRef(ApiKeyAuth.props("pid", Set("BA914464-C559-4F81-A37E-521B830F1634"), true, location)) actor ! DownstreamRequest(stage, routingDestination, request) expectMsg(ForwardRequestCmd(stage, request, None)) } "succeed with a downstream request when given a correct but capitalized header" in { val request = httpRequest(List(RawHeader("PID","BA914464-C559-4F81-A37E-521B830F1634"))) val actor = TestActorRef(ApiKeyAuth.props("pid", Set("BA914464-C559-4F81-A37E-521B830F1634"), true, location)) actor ! DownstreamRequest(stage, routingDestination, request) expectMsg(ForwardRequestCmd(stage, request, None)) } "succeed with a downstream request when given a case-insensitive value and case sensitivity is off" in { val request = httpRequest(List(RawHeader("pid","ba914464-c559-4f81-a37e-521b830f1634"))) val actor = TestActorRef(ApiKeyAuth.props("pid", Set("BA914464-C559-4F81-A37E-521B830F1634"), false, location)) actor ! DownstreamRequest(stage, routingDestination, request) expectMsg(ForwardRequestCmd(stage, request, None)) } "reply with Unauthorized when given a case-insensitive value and case sensitivity is on" in { val request = httpRequest(List(RawHeader("pid","ba914464-c559-4f81-a37e-521b830f1634"))) val actor = TestActorRef(ApiKeyAuth.props("pid", Set("BA914464-C559-4F81-A37E-521B830F1634"), true, location)) actor ! DownstreamRequest(stage, routingDestination, request) expectMsg(forwardResponseCmd(HttpResponse(StatusCodes.Unauthorized))) } } }
Example 136
Source File: LogCollectorSpec.scala From shield with MIT License | 5 votes |
package shield.actors.listeners import akka.actor.{ActorRef, ActorSystem} import akka.testkit.{ImplicitSender, TestKit} import org.scalatest.WordSpecLike import org.specs2.matcher.MustMatchers import shield.config.{DomainSettings, Settings} import spray.http.HttpHeaders.RawHeader import spray.http.HttpRequest import spray.json.JsString class LogCollectorSpec extends TestKit(ActorSystem("testSystem")) // Using the ImplicitSender trait will automatically set `testActor` as the sender with ImplicitSender with WordSpecLike with MustMatchers { import akka.testkit.TestActorRef val settings = Settings(system) val domainSettings = new DomainSettings(settings.config.getConfigList("shield.domains").get(0), system) val actorRef = TestActorRef(new LogCollector("1",domainSettings,Seq[ActorRef](),5)) val actor = actorRef.underlyingActor "LogCollector" should { "Extracts headers and adds them to access logs" in { val request = HttpRequest().withHeaders( RawHeader("sample", "header"), RawHeader("test", "test1"), RawHeader("test2", "123"), RawHeader("test-header-3", "abc"), RawHeader("hh", "aaa"), RawHeader("hhh", "bbb") ) val extractedHeaders = actor.extractHeaders(request.headers, Set("test-header-3", "hh", "sample", "DNE")) extractedHeaders.keys.size must be equalTo 3 extractedHeaders.get("hh").get must be equalTo JsString("aaa") extractedHeaders.get("test-header-3").get must be equalTo JsString("abc") extractedHeaders.get("sample").get must be equalTo JsString("header") } } }
Example 137
Source File: AllPersistenceIdsSpec.scala From akka-persistence-redis with Apache License 2.0 | 5 votes |
package akka.persistence.query.journal.redis import scala.concurrent.duration._ import akka.persistence.query.PersistenceQuery import akka.persistence.query.scaladsl.PersistenceIdsQuery import akka.stream.ActorMaterializer import akka.stream.testkit.scaladsl.TestSink import akka.testkit.AkkaSpec import akka.testkit.ImplicitSender object AllPersistenceIdsSpec { val config = """ akka.loglevel = INFO akka.persistence.journal.plugin = "akka-persistence-redis.journal" akka.test.single-expect-default = 10s """ } class AllPersistenceIdsSpec extends AkkaSpec(AllPersistenceIdsSpec.config) with Cleanup with ImplicitSender { implicit val mat = ActorMaterializer()(system) val queries = PersistenceQuery(system).readJournalFor[ScalaReadJournal](RedisReadJournal.Identifier) "Redis query AllPersistenceIds" must { "implement standard AllPersistenceIdsQuery" in { queries.isInstanceOf[PersistenceIdsQuery] should ===(true) } "find existing persistenceIds" in { system.actorOf(TestActor.props("a")) ! "a1" expectMsg("a1-done") system.actorOf(TestActor.props("b")) ! "b1" expectMsg("b1-done") system.actorOf(TestActor.props("c")) ! "c1" expectMsg("c1-done") val src = queries.currentPersistenceIds() val probe = src.runWith(TestSink.probe[String]) probe.within(10.seconds) { probe.request(5) .expectNextUnordered("a", "b", "c") .expectComplete() } } "find new persistenceIds" in { // a, b, c created by previous step system.actorOf(TestActor.props("d")) ! "d1" expectMsg("d1-done") val src = queries.persistenceIds() val probe = src.runWith(TestSink.probe[String]) probe.within(10.seconds) { probe.request(5) .expectNextUnorderedN(List("a", "b", "c", "d")) system.actorOf(TestActor.props("e")) ! "e1" probe.expectNext("e") val more = (1 to 100).map("f" + _) more.foreach { p => system.actorOf(TestActor.props(p)) ! p } probe.request(100) probe.expectNextUnorderedN(more) } } } }
Example 138
Source File: MinNodeTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes.unary import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.messages.ChangeSet import ingraph.ire.nodes.unary.aggregation.{AggregationNode, StatefulMin} import ingraph.ire.util.TestUtil._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class MinNodeTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } "Min" must { "do simple min 0" in { val changeSet = ChangeSet( positive = tupleBag(tuple("a", 1), tuple("a", 2), tuple("a", 1.1), tuple("b", 3)) ) val echoActor = system.actorOf(TestActors.echoActorProps) val min = system.actorOf(Props( new AggregationNode(echoActor ! _, functionMask(0), () => Vector(new StatefulMin(1)), Vector(0, 1)))) min ! changeSet expectMsg(ChangeSet( positive = tupleBag(tuple("a", 1), tuple("b", 3)) )) min ! ChangeSet( negative = tupleBag(tuple("a", 1)) ) expectMsg(ChangeSet( positive = tupleBag(tuple("a", 1.1)), negative = tupleBag(tuple("a", 1)) )) } } }
Example 139
Source File: MaxNodeTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes.unary import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.messages.ChangeSet import ingraph.ire.nodes.unary.aggregation.{AggregationNode, StatefulMax} import ingraph.ire.util.TestUtil._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class MaxNodeTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } "Max" must { "do simple max 0" in { val changeSet = ChangeSet( positive = tupleBag(tuple("a", 1), tuple("a", 2), tuple("a", 1.1), tuple("b", 3)) ) val echoActor = system.actorOf(TestActors.echoActorProps) val max = system.actorOf(Props(new AggregationNode( echoActor ! _, functionMask(0), () => Vector(new StatefulMax(1)), Vector(0, 1)))) max ! changeSet expectMsg(ChangeSet( positive = tupleBag(tuple("a", 2), tuple("b", 3)) )) max ! ChangeSet( negative = tupleBag(tuple("a", 2)) ) expectMsg(ChangeSet( positive = tupleBag(tuple("a", 1.1)), negative = tupleBag(tuple("a", 2)) )) } } }
Example 140
Source File: DuplicateEliminationNodeTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes.unary import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.messages.ChangeSet import ingraph.ire.util.TestUtil._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class DuplicateEliminationNodeTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } "DuplicateElimination node" must { "do simple duplicate elimination 0" in { val echoActor = system.actorOf(TestActors.echoActorProps) val duplicateElimination = system.actorOf(Props(new DuplicateEliminationNode(echoActor ! _))) duplicateElimination ! ChangeSet( positive = tupleBag(tuple(1, 2)) ) expectMsg(ChangeSet( positive = tupleBag(tuple(1, 2)) )) duplicateElimination ! ChangeSet( positive = tupleBag(tuple(1, 2), tuple(3, 4)) ) expectMsg(ChangeSet( positive = tupleBag(tuple(3, 4)) )) duplicateElimination ! ChangeSet( positive = tupleBag(tuple(5, 6)), negative = tupleBag(tuple(1, 2)) ) expectMsg(ChangeSet( positive = tupleBag(tuple(5, 6)) )) duplicateElimination ! ChangeSet( positive = tupleBag(tuple(7, 8)), negative = tupleBag(tuple(1, 2)) ) expectMsg(ChangeSet( positive = tupleBag(tuple(7, 8)), negative = tupleBag(tuple(1, 2)) )) } "do simple duplicate elimination 1" in { val echoActor = system.actorOf(TestActors.echoActorProps) val duplicateElimination = system.actorOf(Props(new DuplicateEliminationNode(echoActor ! _))) duplicateElimination ! ChangeSet(positive = tupleBag(tuple(1))) expectMsg(ChangeSet(positive = tupleBag(tuple(1)))) duplicateElimination ! ChangeSet(positive = tupleBag(tuple(1))) duplicateElimination ! ChangeSet(positive = tupleBag(tuple(1))) duplicateElimination ! ChangeSet(negative = tupleBag(tuple(1))) duplicateElimination ! ChangeSet(negative = tupleBag(tuple(1))) duplicateElimination ! ChangeSet(negative = tupleBag(tuple(1))) expectMsg(ChangeSet(negative = tupleBag(tuple(1)))) } } }
Example 141
Source File: ProjectionNodeTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes.unary import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.messages.ChangeSet import ingraph.ire.util.TestUtil._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class ProjectionNodeTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } "Projection" must { "select the values" in { val changes = ChangeSet( positive = tupleBag(tuple(15, 16, 17, 18), tuple(4, 5, 6, 7)), negative = tupleBag(tuple(-0, -1, -2, -3), tuple(-10, -11, -12, -13)) ) val selectionMask = functionMask(0, 2) val expectedChanges = ChangeSet( positive = tupleBag(tuple(15, 17), tuple(4, 6)), negative = tupleBag(tuple(-0, -2), tuple(-10, -12)) ) val echoActor = system.actorOf(TestActors.echoActorProps) val selector = system.actorOf(Props(new ProjectionNode(echoActor ! _, selectionMask)), name = "testSelector") selector ! changes expectMsg(expectedChanges) selector ! changes expectMsg(expectedChanges) } val changeSet = ChangeSet( positive = tupleBag(tuple(0, "something")), negative = tupleBag(tuple(0, "something else")) ) "do projection with equal length" in { val echoActor = system.actorOf(TestActors.echoActorProps) val checker = system.actorOf(Props(new ProjectionNode(echoActor ! _, functionMask(1, 0)))) // swap attributes checker ! changeSet expectMsg(ChangeSet( positive = tupleBag(tuple("something", 0)), negative = tupleBag(tuple("something else", 0)) )) } "do projection with lesser length" in { val echoActor = system.actorOf(TestActors.echoActorProps) val checker = system.actorOf(Props(new ProjectionNode(echoActor ! _, functionMask(1)))) checker ! changeSet expectMsg(ChangeSet( positive = tupleBag(tuple("something")), negative = tupleBag(tuple("something else")) )) } } }
Example 142
Source File: UnwindNodeTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes.unary import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.datatypes.Tuple import ingraph.ire.messages.ChangeSet import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class UnwindNodeTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } import ingraph.ire.util.TestUtil._ private def indexer(index: Int) = { (t: Tuple) => t(index).asInstanceOf[Seq[Any]] } "Unwind" must { "do simple unwind 0" in { val changeSet = ChangeSet( positive = tupleBag( tuple("x", cypherList(1, 2, 3), "y"), tuple("w", cypherList(), "z") ), negative = tupleBag( tuple("a", cypherList(1, 2), "b"), tuple("c", cypherList(), "d") ) ) val echoActor = system.actorOf(TestActors.echoActorProps) val unwind = system.actorOf(Props(new UnwindNode(echoActor ! _, indexer(1)))) unwind ! changeSet expectMsg(ChangeSet( positive = tupleBag( tuple("x", cypherList(1, 2, 3), "y", 1), tuple("x", cypherList(1, 2, 3), "y", 2), tuple("x", cypherList(1, 2, 3), "y", 3) ), negative = tupleBag( tuple("a", cypherList(1, 2), "b", 1), tuple("a", cypherList(1, 2), "b", 2) ) )) } "do simple unwind 1" in { val changeSet = ChangeSet( positive = tupleBag( tuple("x", List(1, 2, 3), "y"), tuple("w", List(4, 5), "z") ) ) val echoActor = system.actorOf(TestActors.echoActorProps) val unwind = system.actorOf(Props(new UnwindNode(echoActor ! _, indexer(1)))) unwind ! changeSet expectMsg(ChangeSet( positive = tupleBag( tuple("x", cypherList(1, 2, 3), "y", 1), tuple("x", cypherList(1, 2, 3), "y", 2), tuple("x", cypherList(1, 2, 3), "y", 3), tuple("w", cypherList(4, 5), "z", 4), tuple("w", cypherList(4, 5), "z", 5) ) )) } } }
Example 143
Source File: ListSelectorNodeTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes.unary import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.messages.ChangeSet import ingraph.ire.util.TestUtil._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class ListSelectorNodeTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } "ListSelector" must { "do select items in lists 0" in { val changeSet = ChangeSet( positive = tupleBag(tuple(List("a","b","c"))) ) val function = (n: Any) => n match { case s: List[Any] => s(1) } val echoActor = system.actorOf(TestActors.echoActorProps) val listSelector = system.actorOf(Props(new MapperNode(echoActor ! _, function, 0))) listSelector ! changeSet expectMsg(ChangeSet(positive = tupleBag(tuple("b")))) } } }
Example 144
Source File: SelectionNodeTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes.unary import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.datatypes.Tuple import ingraph.ire.messages.ChangeSet import ingraph.ire.util.TestUtil._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class SelectionNodeTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } "Selection" must { "check the condition properly" in { val changeSet = ChangeSet( positive = tupleBag(tuple(0, "something"), tuple(0, "something else")) ) val echoActor = system.actorOf(TestActors.echoActorProps) val condition = (n: Tuple) => { n(1) == "something" } val checker = system.actorOf(Props(new SelectionNode(echoActor ! _, condition))) checker ! changeSet expectMsg(ChangeSet(positive = tupleBag(tuple(0, "something")))) } } }
Example 145
Source File: SortAndTopNodeTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes.unary import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.datatypes.Tuple import ingraph.ire.messages.ChangeSet import ingraph.ire.util.TestUtil._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class SortAndTopNodeTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } val selectionMask = Vector((v: Tuple) => v(0), (v: Tuple) => v(1)) "Sort" should { "count with complex keys" in { val echoActor = system.actorOf(TestActors.echoActorProps) val counter = system.actorOf(Props( new SortAndTopNode(echoActor ! _, tupleLength = 3, selectionMask = selectionMask, skip = Some(0), limit = Some(2), ascendingOrder = Vector(true, false)) )) counter ! ChangeSet(positive = tupleBag(tuple(2, 3, 4), tuple(0, 2, 3), tuple(0, 3, 3), tuple(5, 6, 7))) expectMsg(ChangeSet(positive = tupleBag(tuple(0, 3, 3), tuple(0, 2, 3)))) counter ! ChangeSet(negative = tupleBag(tuple(0, 2, 3))) expectMsg(ChangeSet( positive = tupleBag(tuple(0, 3, 3), tuple(2, 3, 4)), negative = tupleBag(tuple(0, 3, 3), tuple(0, 2, 3)))) } "have bag semantics" in { val echoActor = system.actorOf(TestActors.echoActorProps) val counter = system.actorOf(Props(new SortAndTopNode(echoActor ! _, tupleLength = 3, selectionMask = selectionMask, skip = Some(0), limit = Some(2), ascendingOrder = Vector(true, true)))) counter ! ChangeSet(positive = tupleBag(tuple(0, 1, 2), tuple(0, 1, 2), tuple(0, 1, 3))) expectMsg(ChangeSet(positive = tupleBag(tuple(0, 1, 2), tuple(0, 1, 2)))) counter ! ChangeSet(negative = tupleBag(tuple(0, 1, 2))) expectMsg(ChangeSet( positive = tupleBag(tuple(0, 1, 2), tuple(0, 1, 3)), negative = tupleBag(tuple(0, 1, 2), tuple(0, 1, 2)))) counter ! ChangeSet(negative = tupleBag(tuple(0, 1, 2))) expectMsg(ChangeSet( positive = tupleBag(tuple(0, 1, 3)), negative = tupleBag(tuple(0, 1, 2), tuple(0, 1, 3)))) } } }
Example 146
Source File: MapperTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes.unary import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.messages.ChangeSet import ingraph.ire.util.TestUtil._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class MapperTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } "MapperNode" must { "map values" in { val changeSet = ChangeSet( positive = tupleBag(tuple(0, "something")), negative = tupleBag(tuple(0, "something else")) ) val echoActor = system.actorOf(TestActors.echoActorProps) val function = (n: Any) => n match { case s: String => s.length } val checker = system.actorOf(Props(new MapperNode(echoActor ! _, function, 1))) checker ! changeSet expectMsg(ChangeSet( positive = tupleBag(tuple(0, "something".length)), negative = tupleBag(tuple(0, "something else".length)) )) } } }
Example 147
Source File: TerminatorTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.messages.{ChangeSet, Primary, Secondary} import ingraph.ire.nodes.binary.JoinNode import ingraph.ire.nodes.unary.{ProductionNode, SelectionNode} import ingraph.ire.util.TestUtil._ import ingraph.ire.util.Utils.conversions._ import ingraph.ire.messages.Terminator import ingraph.ire.nodes.unary.SelectionNode import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.Await import scala.concurrent.duration.{Duration, _} class TerminatorTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } "Unary nodes" must { "propagate terminator messages" in { val echoActor = system.actorOf(TestActors.echoActorProps) val production = system.actorOf(Props(new ProductionNode("alpha test", 2))) val intermediary = system.actorOf(Props(new SelectionNode(production ! _, c => true, expectedTerminatorCount = 2))) // TODO wtf // val intermediary = system.actorOf(Props(new SelectionNode(production ! _, c => true))) val input1 = system.actorOf(Props(new SelectionNode(production ! _, c => true))) input1 ! ChangeSet(positive = tupleBag(tuple(15))) input1 ! ChangeSet(positive = tupleBag(tuple(19))) val input2 = system.actorOf(Props(new SelectionNode(intermediary ! _, c => true))) input2 ! ChangeSet(positive = tupleBag(tuple(25))) input2 ! ChangeSet(positive = tupleBag(tuple(29))) val input3 = system.actorOf(Props(new SelectionNode(intermediary ! _, c => true))) val terminator = Terminator(List( input1 ! _, input2 ! _, input3 ! _ ), production) val future = terminator.send() input1 ! ChangeSet(positive = tupleBag(tuple(16))) input1 ! ChangeSet(positive = tupleBag(tuple(17))) input2 ! ChangeSet(positive = tupleBag(tuple(26))) input2 ! ChangeSet(positive = tupleBag(tuple(27))) val expected = Set(tuple(15), tuple(19), tuple(25), tuple(29)) assert(Await.result(future, Duration(1, HOURS)).toSet == expected) } } "Binary nodes" must { "propagate terminator messages" in { val echoActor = system.actorOf(TestActors.echoActorProps) val production = system.actorOf(Props(new ProductionNode("")), "Production") val checker = system.actorOf(Props(new SelectionNode(production ! _, c => true)), "checker") val intermediary = system.actorOf(Props(new JoinNode(checker ! _, 1, 1, mask(0), mask(0))), "intermediary") val input1 = system.actorOf(Props(new JoinNode(intermediary ! Primary(_), 1, 1, mask(0), mask(0))), "inputBeta") val msg15 = ChangeSet(positive = tupleBag(tuple(15))) input1 ! Primary(msg15) input1 ! Secondary(msg15) intermediary ! Secondary(msg15) val msg25 = ChangeSet(positive = tupleBag(tuple(25))) input1 ! Primary(msg25) input1 ! Secondary(msg25) intermediary ! Secondary(msg25) val terminator = Terminator(List(input1.primary, input1.secondary, intermediary.secondary), production) val future = terminator.send() input1 ! Primary(ChangeSet(positive = tupleBag(tuple(16)))) input1 ! Secondary(ChangeSet(positive = tupleBag(tuple(16)))) intermediary ! Secondary(ChangeSet(positive = tupleBag(tuple(16)))) assert(Await.result(future, Duration(1, HOURS)).toSet == Set(tuple(15), tuple(25))) assert(Await.result(terminator.send(), Duration(1, HOURS)).toSet == Set(tuple(15), tuple(25), tuple(16))) (1 to 500).foreach(i => { input1 ! Secondary(ChangeSet(negative = tupleBag(tuple(16)))) assert(Await.result(terminator.send(), Duration(1, HOURS)).toSet == Set(tuple(15), tuple(25))) input1 ! Secondary(ChangeSet(positive = tupleBag(tuple(16)))) intermediary ! Secondary(ChangeSet(negative = tupleBag(tuple(15)))) assert(Await.result(terminator.send(), Duration(1, HOURS)).toSet == Set(tuple(25), tuple(16))) intermediary ! Secondary(ChangeSet(positive = tupleBag(tuple(15)))) assert(Await.result(terminator.send(), Duration(1, HOURS)).toSet == Set(tuple(15), tuple(25), tuple(16))) }) } } "Node splitting" should { "work" in { } } }
Example 148
Source File: UnionNodeTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes.binary import akka.actor.{ActorSystem, Props, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.messages.{ChangeSet, Primary, Secondary} import ingraph.ire.util.TestUtil._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class UnionNodeTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } "Union" must { "do simple set unions 0" in { val prim = ChangeSet( positive = tupleBag(tuple(1, 2), tuple(1, 3)) ) val sec = ChangeSet( positive = tupleBag(tuple(1, 2), tuple(1, 4)) ) val echoActor = system.actorOf(TestActors.echoActorProps) val union = system.actorOf(Props(new UnionNode(echoActor ! _, all = false))) union ! Primary(prim) expectMsg(ChangeSet(positive = tupleBag(tuple(1, 2), tuple(1, 3)))) union ! Secondary(sec) expectMsg(ChangeSet(positive = tupleBag(tuple(1, 4)))) } "do simple bag unions 0" in { val prim = ChangeSet( positive = tupleBag(tuple(1, 2), tuple(1, 3)) ) val sec = ChangeSet( positive = tupleBag(tuple(1, 2), tuple(1, 4)) ) val echoActor = system.actorOf(TestActors.echoActorProps) val union = system.actorOf(Props(new UnionNode(echoActor ! _, all = true))) union ! Primary(prim) expectMsg(ChangeSet(positive = tupleBag(tuple(1, 2), tuple(1, 3)))) union ! Secondary(sec) expectMsg(ChangeSet(positive = tupleBag(tuple(1, 2), tuple(1, 4)))) } } }
Example 149
Source File: InputTransactionFactoryTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.nodes import akka.actor.{ActorSystem, actorRef2Scala} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.inputs.InputTransactionFactory import ingraph.ire.messages.ChangeSet import ingraph.ire.util.TestUtil._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class InputTransactionFactoryTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem()) override def afterAll { TestKit.shutdownActorSystem(system) } "InputTransactionFactory" must { "send incoming data after subscription" in { val input = new InputTransactionFactory val echoActor = system.actorOf(TestActors.echoActorProps) input.subscribe(Map("test" -> (echoActor ! _))) val inputTransaction = input.newInputTransaction inputTransaction.add("test", tuple(6, 1L)) inputTransaction.add("test", tuple(6, 2L)) inputTransaction.sendAll expectMsg(ChangeSet(positive = tupleBag(tuple(6, 2), tuple(6, 1)))) } "do no splitting in batch" in { val input = new InputTransactionFactory val echoActor = system.actorOf(TestActors.echoActorProps) input.subscribe(Map("test" -> (echoActor ! _))) val inputTransaction = input.newInputTransaction for (i <- 1 to 3) { inputTransaction.add("test", tuple(6, i)) } inputTransaction.sendAll expectMsg(ChangeSet(positive = tupleBag(tuple(6, 3), tuple(6, 2), tuple(6, 1)))) } } }
Example 150
Source File: DuplicateEliminationNodeTest.scala From ingraph with Eclipse Public License 1.0 | 5 votes |
package ingraph.ire.stateless.unary import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestActors, TestKit} import ingraph.ire.messages.ChangeSet import ingraph.ire.util.TestUtil.{tuple, tupleBag} import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class DuplicateEliminationNodeTest(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { def this() = this(ActorSystem("MySpec")) override def afterAll { TestKit.shutdownActorSystem(system) } "DuplicateElimination node" must { "do simple duplicate elimination 0" in { val echoActor = system.actorOf(TestActors.echoActorProps) val duplicateElimination = system.actorOf(Props(new DuplicateEliminationNode(echoActor ! _))) duplicateElimination ! ChangeSet( positive = tupleBag(tuple(1, 2)) ) expectMsg(ChangeSet( positive = tupleBag(tuple(1, 2)) )) duplicateElimination ! ChangeSet( positive = tupleBag(tuple(1, 2), tuple(3, 4)) ) expectMsg(ChangeSet( positive = tupleBag(tuple(1, 2), tuple(3, 4)) )) } "do simple duplicate elimination 1" in { val echoActor = system.actorOf(TestActors.echoActorProps) val duplicateElimination = system.actorOf(Props(new DuplicateEliminationNode(echoActor ! _))) duplicateElimination ! ChangeSet(positive = tupleBag(tuple(1))) expectMsg(ChangeSet(positive = tupleBag(tuple(1)))) duplicateElimination ! ChangeSet(positive = tupleBag(tuple(1), tuple(1))) expectMsg(ChangeSet(positive = tupleBag(tuple(1)))) } } }
Example 151
Source File: JournalServiceSpec.scala From NSDb with Apache License 2.0 | 5 votes |
package io.radicalbit.nsdb.actors import akka.actor.ActorSystem import akka.testkit.{ImplicitSender, TestKit} import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class JournalServiceSpec extends TestKit(ActorSystem("nsdb-test")) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll { "A partition" when { "inserted" should { "be saved correctly" in {} } } }
Example 152
Source File: MultiNodeBaseSpec.scala From NSDb with Apache License 2.0 | 5 votes |
package io.radicalbit.nsdb.split_brain import akka.actor.Address import akka.cluster.MemberStatus.{Down, Exiting, Removed, Up} import akka.remote.testconductor.RoleName import akka.remote.testkit.{MultiNodeConfig, MultiNodeSpec} import akka.remote.transport.ThrottlerTransportAdapter.Direction import akka.testkit.ImplicitSender import io.radicalbit.rtsae.STMultiNodeSpec import scala.concurrent.duration.Duration abstract class MultiNodeBaseSpec(config: MultiNodeConfig) extends MultiNodeSpec(config) with STMultiNodeSpec with ImplicitSender { def initialParticipants: Int = roles.size private val addresses: Map[RoleName, Address] = roles.map(r => r -> node(r).address).toMap protected def addressOf(roleName: RoleName): Address = addresses(roleName) protected def awaitClusterNodesForUp(roleNames: RoleName*): Unit = awaitCond { roleNames.forall( role => cluster.state.members.exists(m => m.address === addressOf(role) && m.status === Up) ) } protected def awaitClusterLeader(nodesInCluster: RoleName*): Unit = if (nodesInCluster.contains(myself)) { nodesInCluster.length should not be 0 awaitCond(nodesInCluster.map(addressOf).contains(cluster.state.getLeader)) } protected def awaitUnreachableNodes(unreachableNodes: RoleName*): Unit = awaitCond(cluster.state.unreachable.map(_.address) === unreachableNodes.map(addressOf).toSet) protected def switchOffConnection(from: RoleName, to: RoleName) = testConductor.blackhole(from, to, Direction.Both).await protected def awaitSurvivorsNodes(roleNames: RoleName*): Unit = awaitCond(roleNames.forall(role => cluster.state.members.exists(_.address === addressOf(role)))) protected def awaitAllLeavingNodes(roleNames: RoleName*): Unit = awaitCond(roleNames.forall { role => val members = cluster.state.members val unreachable = cluster.state.unreachable val address = addressOf(role) unreachable.isEmpty && (members.exists(m => m.address === address && (m.status === Down || m.status === Exiting)) || !members.exists(_.address === address)) }) protected def awaitSelfDowningNode(max: Duration = Duration.Undefined) = awaitCond( { val selfAddress = cluster.selfAddress cluster.state.members.exists(m => m.address === selfAddress && (m.status === Exiting || m.status === Down || m.status === Removed)) }, max ) protected def awaitExistingMembers(roleNames: RoleName*): Unit = awaitCond(cluster.state.members.map(_.address) === roleNames.map(addressOf).toSet) }
Example 153
Source File: WriteCoordinatorSpec.scala From NSDb with Apache License 2.0 | 5 votes |
package io.radicalbit.nsdb.cluster.coordinator import akka.actor.ActorSystem import akka.pattern.ask import akka.testkit.{ImplicitSender, TestKit} import akka.util.Timeout import com.typesafe.config.{ConfigFactory, ConfigValueFactory} import io.radicalbit.nsdb.protocol.MessageProtocol.Commands._ import org.scalatest._ import scala.concurrent.Await import scala.concurrent.duration._ class WriteCoordinatorSpec extends TestKit( ActorSystem( "WriteCoordinatorSpec", ConfigFactory .load() .withValue("nsdb.sharding.interval", ConfigValueFactory.fromAnyRef("5s")) )) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfter with BeforeAndAfterAll with WriteCoordinatorBehaviour { lazy val basePath = "target/test_index/WriteCoordinatorSpec" val db = "writeCoordinatorSpecDB" val namespace = "namespace" implicit val timeout = Timeout(10 seconds) override def beforeAll: Unit = { Await.result(writeCoordinatorActor ? SubscribeCommitLogCoordinator(commitLogCoordinator, "localhost"), 10 seconds) Await.result(writeCoordinatorActor ? SubscribeMetricsDataActor(metricsDataActor, "localhost"), 10 seconds) Await.result(writeCoordinatorActor ? SubscribePublisher(publisherActor, "localhost"), 10 seconds) Await.result(writeCoordinatorActor ? DeleteNamespace(db, namespace), 10 seconds) Await.result(schemaCoordinator ? UpdateSchemaFromRecord(db, namespace, "testMetric", record1), 10 seconds) } "WriteCoordinator" should behave.like(defaultBehaviour) }
Example 154
Source File: PortGetterSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.testkit 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._ import scala.language.postfixOps object PortGetterSpec { val dummyJarsDir = getClass.getClassLoader.getResource("").getPath val classPaths = Array( "PortGetterSpec" ) map (dummyJarsDir + "/" + _) def config(actorSystemName: String) = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = ${actorSystemName} | ${JMX.prefixConfig} = true |} | |default-listener.bind-port = 0 | |my-listener { | type = squbs.listener | bind-address = "0.0.0.0" | full-address = false | bind-port = 0 | secure = false | need-client-auth = false | ssl-context = default |} """.stripMargin ) def boot(actorSystemName: String) = UnicomplexBoot(config(actorSystemName)) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class PortGetterSpec extends TestKit(PortGetterSpec.boot("portGetterSpec").actorSystem) with ImplicitSender with FlatSpecLike with Matchers with BeforeAndAfterAll with PortGetter { override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "PortGetter" should "retrieve the port" in { port should be > 0 port shouldEqual port("default-listener") } } class PortGetterCustomListenerSpec extends TestKit(PortGetterSpec.boot("PortGetterCustomListenerSpec").actorSystem) with ImplicitSender with FlatSpecLike with Matchers with BeforeAndAfterAll with PortGetter { override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } override def listener = "my-listener" "PortGetter" should "retrieve the port" in { port should be > 0 } "PortGetter" should "return the specified listener's port" in { port should not equal port("default-listener") port shouldEqual port("my-listener") } }
Example 155
Source File: GracefulStopHelperSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.lifecycle import akka.testkit.{TestActorRef, ImplicitSender, TestKit} import akka.actor.{PoisonPill, ActorRef, Actor, ActorSystem} import org.scalatest.{BeforeAndAfterAll, Matchers, FlatSpecLike} import scala.concurrent.duration.FiniteDuration import scala.concurrent.Future class GracefulStopHelperSpec extends TestKit(ActorSystem("testSystem")) with FlatSpecLike with Matchers with ImplicitSender with BeforeAndAfterAll { import system.dispatcher "GracefulStopHelper" should "work when stop failed" in { val actorRef = TestActorRef(new Actor with GracefulStopHelper { def receive: Actor.Receive = { case "Stop" => defaultMidActorStop(Seq(self)) sender() ! "Done" } override def gracefulStop(target: ActorRef, timeout: FiniteDuration, stopMessage: Any = PoisonPill): Future[Boolean] = { Future { throw new RuntimeException("BadMan") } } }) actorRef ! "Stop" expectMsg("Done") } "GracefulStopHelper" should "work" in { val actorRef = TestActorRef(new Actor with GracefulStopHelper { def receive: Actor.Receive = { case "Stop" => defaultMidActorStop(Seq(self)) sender() ! "Done" } override def gracefulStop(target: ActorRef, timeout: FiniteDuration, stopMessage: Any = PoisonPill): Future[Boolean] = { Future { true } } }) actorRef ! "Stop" expectMsg("Done") } }
Example 156
Source File: RootCtxRouteSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.http.scaladsl.server.Route 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 org.squbs.unicomplex.Timeouts._ import scala.concurrent.Await object RootCtxRouteSpec{ val classPaths = Array(getClass.getClassLoader.getResource("classpaths/RootCtxRoute").getPath) val config = ConfigFactory.parseString( s""" |default-listener.bind-port = 0 |squbs { | actorsystem-name = RootCtxRouteSpec | ${JMX.prefixConfig} = true |} """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class RootCtxRouteSpec extends TestKit( RootCtxRouteSpec.boot.actorSystem) with FlatSpecLike with Matchers with ImplicitSender with BeforeAndAfterAll { 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 } "Route" should "handle request with empty web-context" in { Await.result(entityAsString(s"http://127.0.0.1:$port/ping"), awaitMax) should be("pong") } } class RootRoute extends RouteDefinition { override def route: Route = path("ping") { complete{"pong"} } }
Example 157
Source File: StopAndStartCubeSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import java.util.concurrent.TimeUnit import akka.actor.{ActorIdentity, ActorSystem, Identify} import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.squbs.lifecycle.GracefulStop import scala.util.Try object StopAndStartCubeSpec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPaths = Array( "DummyCube", "DummyCubeSvc", "DummySvc" ) map (dummyJarsDir + "/" + _) val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = StopAndStartCubeSpec | ${JMX.prefixConfig} = true |} |default-listener.bind-port = 0 """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class StopAndStartCubeSpec extends TestKit(StopAndStartCubeSpec.boot.actorSystem) with FlatSpecLike with Matchers with ImplicitSender with BeforeAndAfterAll { implicit val timeout: akka.util.Timeout = Try(System.getProperty("test.timeout").toLong) map { millis => akka.util.Timeout(millis, TimeUnit.MILLISECONDS) } getOrElse Timeouts.askTimeout import Timeouts.awaitMax override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "Unicomplex" should "be able to stop a cube" in { Unicomplex(system).uniActor ! StopCube("DummyCube") within(awaitMax) { expectMsg(Ack) } system.actorSelection("/user/DummyCube") ! Identify("hello") within(awaitMax) { val id = expectMsgType[ActorIdentity] id.ref should be(None) } } "Unicomplex" should "not be able to stop a stopped cube" in { Unicomplex(system).uniActor ! StopCube("DummyCube") expectNoMessage() } "Unicomplex" should "be able to start a cube" in { Unicomplex(system).uniActor ! StartCube("DummyCube") within(awaitMax) { expectMsg(Ack) } system.actorSelection("/user/DummyCube") ! Identify("hello") within(awaitMax) { val id = expectMsgType[ActorIdentity] id.ref should not be None } } "Unicomplex" should "not be able to start a running cube" in { Unicomplex(system).uniActor ! StartCube("DummyCube") expectNoMessage() } }
Example 158
Source File: CubeActorErrorStatesSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import javax.management.ObjectName import javax.management.openmbean.CompositeData import akka.actor.{Actor, ActorSystem} import akka.http.scaladsl.Http import akka.http.scaladsl.model.{HttpRequest, Uri} import akka.pattern._ import akka.stream.ActorMaterializer import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest.OptionValues._ import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.squbs.lifecycle.GracefulStop import org.squbs.unicomplex.Timeouts._ import scala.concurrent.Await object CubeActorErrorStatesSpec{ val classPaths = Array(getClass.getClassLoader.getResource("classpaths/CubeActorErrorStates").getPath) val config = ConfigFactory.parseString( s""" |default-listener.bind-port = 0 |squbs { | actorsystem-name = cubeActorErrorStatesSpec | ${JMX.prefixConfig} = true |} """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class CubeActorErrorStatesSpec extends TestKit(CubeActorErrorStatesSpec.boot.actorSystem) with FlatSpecLike with Matchers with ImplicitSender with BeforeAndAfterAll { val portBindings = Await.result((Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]], awaitMax) val port = portBindings("default-listener") implicit val am = ActorMaterializer() override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "Route" should "handle request with empty web-context" in { Http().singleRequest(HttpRequest(uri = Uri(s"http://127.0.0.1:$port/test2?msg=1"))) Thread.sleep(100) Http().singleRequest(HttpRequest(uri = Uri(s"http://127.0.0.1:$port/test1?msg=1"))) Thread.sleep(100) Http().singleRequest(HttpRequest(uri = Uri(s"http://127.0.0.1:$port/test1?msg=2"))) Thread.sleep(1000) // wait the agent get refreshed import org.squbs.unicomplex.JMX._ val errorStates = get(new ObjectName(prefix(system) + cubeStateName + "CubeActorErrorStates"), "ActorErrorStates") .asInstanceOf[Array[CompositeData]] errorStates should have length 2 val state1 = errorStates.find(_.get("actorPath") == "/user/CubeActorErrorStates/test1-CubeActorTest-handler").value state1.get("errorCount") shouldBe 2 state1.get("latestException").asInstanceOf[String] should include ("test1:2") val state2 = errorStates.find(_.get("actorPath") == "/user/CubeActorErrorStates/test2-CubeActorTest-handler").value state2.get("errorCount") shouldBe 1 state2.get("latestException").asInstanceOf[String] should include ("test2:1") } } class CubeActorTest extends Actor { override def receive: Receive = { case r: HttpRequest => val msg = r.uri.query().get("msg").getOrElse("") throw new RuntimeException(s"${r.uri.path}:$msg") } }
Example 159
Source File: BadPipelineNameSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex.pipeline 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 org.squbs.unicomplex._ import scala.concurrent.Await object BadPipelineNameSpec { val classPaths = Array(getClass.getClassLoader.getResource("classpaths/pipeline/BadPipelineNameSpec").getPath) val config = ConfigFactory.parseString( s""" |default-listener.bind-port = 0 |squbs { | actorsystem-name = BadPipelineNameSpec | ${JMX.prefixConfig} = true |} """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class BadPipelineNameSpec extends TestKit( BadPipelineNameSpec.boot.actorSystem) with FlatSpecLike with Matchers with ImplicitSender with BeforeAndAfterAll { implicit val am = ActorMaterializer() import 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 } "System state" should "be Failed" in { Unicomplex(system).uniActor ! ReportStatus val StatusReport(systemState, _, _) = expectMsgType[StatusReport] systemState should be(Failed) } }