org.scalatest.FlatSpecLike Scala Examples
The following examples show how to use org.scalatest.FlatSpecLike.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: IntegrationTest.scala From kmq with Apache License 2.0 | 6 votes |
package com.softwaremill.kmq.redelivery import java.time.Duration import java.util.Random import akka.actor.ActorSystem import akka.kafka.scaladsl.{Consumer, Producer} import akka.kafka.{ConsumerSettings, ProducerMessage, ProducerSettings, Subscriptions} import akka.stream.ActorMaterializer import akka.testkit.TestKit import com.softwaremill.kmq._ import com.softwaremill.kmq.redelivery.infrastructure.KafkaSpec import org.apache.kafka.clients.consumer.ConsumerConfig import org.apache.kafka.clients.producer.{ProducerConfig, ProducerRecord} import org.apache.kafka.common.serialization.StringDeserializer import org.scalatest.concurrent.Eventually import org.scalatest.time.{Seconds, Span} import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import scala.collection.mutable.ArrayBuffer class IntegrationTest extends TestKit(ActorSystem("test-system")) with FlatSpecLike with KafkaSpec with BeforeAndAfterAll with Eventually with Matchers { implicit val materializer = ActorMaterializer() import system.dispatcher "KMQ" should "resend message if not committed" in { val bootstrapServer = s"localhost:${testKafkaConfig.kafkaPort}" val kmqConfig = new KmqConfig("queue", "markers", "kmq_client", "kmq_redelivery", Duration.ofSeconds(1).toMillis, 1000) val consumerSettings = ConsumerSettings(system, new StringDeserializer, new StringDeserializer) .withBootstrapServers(bootstrapServer) .withGroupId(kmqConfig.getMsgConsumerGroupId) .withProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest") val markerProducerSettings = ProducerSettings(system, new MarkerKey.MarkerKeySerializer(), new MarkerValue.MarkerValueSerializer()) .withBootstrapServers(bootstrapServer) .withProperty(ProducerConfig.PARTITIONER_CLASS_CONFIG, classOf[ParititionFromMarkerKey].getName) val markerProducer = markerProducerSettings.createKafkaProducer() val random = new Random() lazy val processedMessages = ArrayBuffer[String]() lazy val receivedMessages = ArrayBuffer[String]() val control = Consumer.committableSource(consumerSettings, Subscriptions.topics(kmqConfig.getMsgTopic)) // 1. get messages from topic .map { msg => ProducerMessage.Message( new ProducerRecord[MarkerKey, MarkerValue](kmqConfig.getMarkerTopic, MarkerKey.fromRecord(msg.record), new StartMarker(kmqConfig.getMsgTimeoutMs)), msg) } .via(Producer.flow(markerProducerSettings, markerProducer)) // 2. write the "start" marker .map(_.message.passThrough) .mapAsync(1) { msg => msg.committableOffset.commitScaladsl().map(_ => msg.record) // this should be batched } .map { msg => receivedMessages += msg.value msg } .filter(_ => random.nextInt(5) != 0) .map { processedMessage => processedMessages += processedMessage.value new ProducerRecord[MarkerKey, MarkerValue](kmqConfig.getMarkerTopic, MarkerKey.fromRecord(processedMessage), EndMarker.INSTANCE) } .to(Producer.plainSink(markerProducerSettings, markerProducer)) // 5. write "end" markers .run() val redeliveryHook = RedeliveryTracker.start(new KafkaClients(bootstrapServer), kmqConfig) val messages = (0 to 20).map(_.toString) messages.foreach(msg => sendToKafka(kmqConfig.getMsgTopic,msg)) eventually { receivedMessages.size should be > processedMessages.size processedMessages.sortBy(_.toInt).distinct shouldBe messages }(PatienceConfig(timeout = Span(15, Seconds)), implicitly) redeliveryHook.close() control.shutdown() } override def afterAll(): Unit = { super.afterAll() TestKit.shutdownActorSystem(system) } }
Example 2
Source File: 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 3
Source File: AmqpSubscriberPerfSpec.scala From reliable-http-client with Apache License 2.0 | 5 votes |
package rhttpc.transport.amqp import akka.Done import akka.actor.{Actor, ActorSystem, Props} import akka.http.scaladsl.Http import akka.http.scaladsl.model.{HttpRequest, HttpResponse} import akka.pattern._ import akka.stream.ActorMaterializer import akka.testkit.{TestKit, TestProbe} import dispatch.url import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Ignore} import rhttpc.transport.{Deserializer, InboundQueueData, OutboundQueueData, Serializer} import scala.concurrent.duration._ import scala.concurrent.{Await, Future} import scala.util.{Random, Try} @Ignore class AmqpSubscriberPerfSpec extends TestKit(ActorSystem("AmqpSubscriberPerfSpec")) with FlatSpecLike with BeforeAndAfterAll { import system.dispatcher implicit val materializer = ActorMaterializer() implicit def serializer[Msg] = new Serializer[Msg] { override def serialize(obj: Msg): String = obj.toString } implicit def deserializer[Msg] = new Deserializer[Msg] { override def deserialize(value: String): Try[Msg] = Try(value.asInstanceOf[Msg]) } val queueName = "request" val outboundQueueData = OutboundQueueData(queueName, autoDelete = true, durability = false) val inboundQueueData = InboundQueueData(queueName, batchSize = 10, parallelConsumers = 10, autoDelete = true, durability = false) val count = 100 private val interface = "localhost" private val port = 8081 def handle(request: HttpRequest) = { val delay = 5 + Random.nextInt(10) after(delay.seconds, system.scheduler)(Future.successful(HttpResponse())) } it should "have a good throughput" in { val bound = Await.result( Http().bindAndHandleAsync( handle, interface, port ), 5.seconds ) val http = dispatch.Http() // .configure(_.setMaxConnections(count) // .setExecutorService(Executors.newFixedThreadPool(count))) val connection = Await.result(AmqpConnectionFactory.connect(system), 5 seconds) val transport = AmqpTransport( connection = connection ) val publisher = transport.publisher[String](outboundQueueData) val probe = TestProbe() val actor = system.actorOf(Props(new Actor { override def receive: Receive = { case str: String => http(url(s"http://$interface:$port") OK identity).map(_ => Done).pipeTo(self)(sender()) case Done => probe.ref ! Done sender() ! Done } })) val subscriber = transport.subscriber[String](inboundQueueData, actor) subscriber.start() try { measureMeanThroughput(count) { (1 to count).foreach { _ => publisher.publish("x") } probe.receiveWhile(10 minutes, messages = count) { case a => a } } } finally { Await.result(subscriber.stop(), 5.seconds) connection.close(5 * 1000) Await.result(bound.unbind(), 5.seconds) } } def measureMeanThroughput(count: Int)(consume: => Unit) = { val before = System.currentTimeMillis() consume val msgsPerSecond = count / ((System.currentTimeMillis() - before).toDouble / 1000) println(s"Throughput was: $msgsPerSecond msgs/sec") } override protected def afterAll(): Unit = { shutdown() } }
Example 4
Source File: Testbench.scala From spatial with MIT License | 5 votes |
package utils import org.scalatest.{FlatSpecLike, Matchers} trait Testbench extends FlatSpecLike with Matchers { type Result = utils.Result type CompileError = Result.CompileError type MakeError = Result.MakeError type RunError = Result.RunError type ModelError = Result.ModelError implicit def resultToBoolean(x: Boolean): Result = if (x) Pass else Fail lazy val Pass = Result.Pass lazy val Fail = Result.Fail lazy val Unknown = Result.Unknown lazy val CompileError = Result.CompileError lazy val MakeError = Result.MakeError lazy val RunError = Result.RunError lazy val ModelError = Result.ModelError }
Example 5
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 6
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 7
Source File: ReplicaRemoteWriterTest.scala From JustinDB with Apache License 2.0 | 5 votes |
package justin.db.replica.write import java.util.UUID import akka.actor.{Actor, ActorSystem} import akka.testkit.{TestActorRef, TestKit} import justin.db.Data import justin.db.actors.StorageNodeActorRef import justin.db.actors.protocol.{StorageNodeFailedWrite, StorageNodeSuccessfulWrite, StorageNodeWriteDataLocal} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.duration._ class ReplicaRemoteWriterTest extends TestKit(ActorSystem("test-system")) with FlatSpecLike with Matchers with ScalaFutures { behavior of "Replica Remote Writer" override implicit def patienceConfig: PatienceConfig = PatienceConfig(10.seconds, 50.millis) it should "get info back that one of the saving is successful and second one has failed" in { // given val service = new ReplicaRemoteWriter()(system.dispatcher) val data = Data(id = UUID.randomUUID(), value = "exemplary-value") val storageSuccessfulActorRef = testActorRef(msgBack = StorageNodeSuccessfulWrite(data.id)) val storageFailedActorRef = testActorRef(msgBack = StorageNodeFailedWrite(data.id)) val storageNodeRefs = List(storageSuccessfulActorRef, storageFailedActorRef).map(StorageNodeActorRef) // when val writingResult = service.apply(storageNodeRefs, data) // then whenReady(writingResult) { _ shouldBe List(StorageNodeSuccessfulWrite(data.id), StorageNodeFailedWrite(data.id)) } } it should "recover failed behavior of actor" in { // given val service = new ReplicaRemoteWriter()(system.dispatcher) val data = Data(id = UUID.randomUUID(), value = "exemplary-value") val storageActorRef = testActorRef(new Exception) val storageNodeRefs = List(StorageNodeActorRef(storageActorRef)) // when val writingResult = service.apply(storageNodeRefs, data) // then whenReady(writingResult) { _ shouldBe List(StorageNodeFailedWrite(data.id)) } } private def testActorRef(msgBack: => Any) = { TestActorRef(new Actor { override def receive: Receive = { case StorageNodeWriteDataLocal(id) => sender() ! msgBack } }) } }
Example 8
Source File: ReplicaRemoteReaderTest.scala From JustinDB with Apache License 2.0 | 5 votes |
package justin.db.replica.read import java.util.UUID import akka.actor.{Actor, ActorSystem} import akka.testkit.{TestActorRef, TestKit} import justin.db.Data import justin.db.actors.StorageNodeActorRef import justin.db.actors.protocol._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.duration._ class ReplicaRemoteReaderTest extends TestKit(ActorSystem("test-system")) with FlatSpecLike with Matchers with ScalaFutures { behavior of "Replica Remote Reader" override implicit def patienceConfig: PatienceConfig = PatienceConfig(10.seconds, 50.millis) it should "get info back that one of the value could be found and second one is obsolete" in { // given val service = new ReplicaRemoteReader()(system.dispatcher) val id = UUID.randomUUID() val foundData = Data(id, "value") val notFoundId = UUID.randomUUID() val storageNotFoundActorRef = testActorRef(msgBack = StorageNodeNotFoundRead(notFoundId)) val storageFoundActorRef = testActorRef(msgBack = StorageNodeFoundRead(foundData)) val storageNodeRefs = List(storageNotFoundActorRef, storageFoundActorRef).map(StorageNodeActorRef) // when val readingResult = service.apply(storageNodeRefs, id) // then whenReady(readingResult) { _ shouldBe List(StorageNodeNotFoundRead(notFoundId), StorageNodeFoundRead(foundData)) } } it should "recover failed behavior of actor" in { // given val service = new ReplicaRemoteReader()(system.dispatcher) val id = UUID.randomUUID() val storageActorRef = testActorRef(new Exception) val storageNodeRefs = List(StorageNodeActorRef(storageActorRef)) // when val readingResult = service.apply(storageNodeRefs, id) // then whenReady(readingResult) { _ shouldBe List(StorageNodeFailedRead(id)) } } private def testActorRef(msgBack: => Any) = { TestActorRef(new Actor { override def receive: Receive = { case StorageNodeLocalRead(id) => sender() ! msgBack } }) } }
Example 9
Source File: PlayJsonFormatSpec.scala From play-json-ops with MIT License | 5 votes |
package play.api.libs.json.scalatest import org.scalacheck.ops._ import org.scalacheck.{Arbitrary, Gen, Shrink} import org.scalatest.FlatSpecLike import play.api.libs.json.Format import play.api.libs.json.scalacheck.PlayJsonFormatTests import scala.reflect.ClassTag import scala.testing.scalatest.ScalaTestBridge class PlayJsonFormatSpec[T](examples: Seq[T])(implicit playFormat: Format[T], clsTag: ClassTag[T], shrink: Shrink[T]) extends PlayJsonFormatTests[T](examples, playFormat, clsTag, shrink) with FlatSpecLike with ScalaTestBridge { def this(gen: Gen[T], samples: Int)(implicit playFormat: Format[T], clsTag: ClassTag[T], shrink: Shrink[T]) = this(gen.toIterator.take(samples).toSeq) def this(gen: Gen[T])(implicit playFormat: Format[T], clsTag: ClassTag[T], shrink: Shrink[T]) = this(gen, 100) def this(samples: Int)(implicit playFormat: Format[T], clsTag: ClassTag[T], shrink: Shrink[T], arb: Arbitrary[T]) = this(arb.arbitrary, samples) def this()(implicit playFormat: Format[T], clsTag: ClassTag[T], shrink: Shrink[T], arb: Arbitrary[T]) = this(arb.arbitrary) }
Example 10
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 11
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 12
Source File: RoundRobinLoadBalancerSpec.scala From reactive-consul with MIT License | 5 votes |
package stormlantern.consul.client.loadbalancers import org.scalatest.{ Matchers, FlatSpecLike } class RoundRobinLoadBalancerSpec extends FlatSpecLike with Matchers { "The RoundRobinLoadBalancer" should "select a connection" in { val sut = new RoundRobinLoadBalancer sut.selectConnection shouldBe empty sut.connectionProviderAdded("one") sut.selectConnection should contain("one") sut.selectConnection should contain("one") sut.connectionProviderAdded("two") sut.connectionProviderAdded("three") sut.selectConnection should contain("one") sut.selectConnection should contain("two") sut.selectConnection should contain("three") sut.selectConnection should contain("one") sut.connectionProviderRemoved("two") sut.selectConnection should contain("one") sut.selectConnection should contain("three") } }
Example 13
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 14
Source File: LogDriverLogStoreTests.scala From openwhisk with Apache License 2.0 | 5 votes |
package org.apache.openwhisk.core.containerpool.logging import akka.actor.ActorSystem import akka.testkit.TestKit import org.junit.runner.RunWith import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.scalatest.junit.JUnitRunner import org.apache.openwhisk.core.containerpool.ContainerArgsConfig @RunWith(classOf[JUnitRunner]) class LogDriverLogStoreTests extends TestKit(ActorSystem("LogDriverLogStore")) with FlatSpecLike with Matchers with BeforeAndAfterAll { val testConfig = ContainerArgsConfig( network = "network", extraArgs = Map("log-driver" -> Set("fluentd"), "log-opt" -> Set("fluentd-address=localhost:24225", "tag=OW_CONTAINER"))) behavior of "LogDriver LogStore" override def afterAll(): Unit = { TestKit.shutdownActorSystem(system) super.afterAll() } it should "set the container parameters from the config" in { val logDriverLogStore = new LogDriverLogStore(system) logDriverLogStore.containerParameters shouldBe Map.empty } }
Example 15
Source File: CosmosDBTestSupport.scala From openwhisk with Apache License 2.0 | 5 votes |
package org.apache.openwhisk.core.database.cosmosdb import com.microsoft.azure.cosmosdb.{Database, SqlParameter, SqlParameterCollection, SqlQuerySpec} import org.scalatest.{BeforeAndAfterAll, FlatSpecLike} import pureconfig._ import pureconfig.generic.auto._ import org.apache.openwhisk.core.ConfigKeys import org.apache.openwhisk.core.database.test.behavior.ArtifactStoreTestUtil.storeAvailable import scala.collection.mutable.ListBuffer import scala.util.{Random, Try} trait CosmosDBTestSupport extends FlatSpecLike with BeforeAndAfterAll with RxObservableImplicits { private val dbsToDelete = ListBuffer[Database]() lazy val storeConfigTry = Try { loadConfigOrThrow[CosmosDBConfig](ConfigKeys.cosmosdb) } lazy val client = storeConfig.createClient() val useExistingDB = java.lang.Boolean.getBoolean("whisk.cosmosdb.useExistingDB") def storeConfig = storeConfigTry.get override protected def withFixture(test: NoArgTest) = { assume(storeAvailable(storeConfigTry), "CosmosDB not configured or available") super.withFixture(test) } protected def generateDBName() = { s"travis-${getClass.getSimpleName}-${Random.alphanumeric.take(5).mkString}" } protected def createTestDB() = { if (useExistingDB) { val db = getOrCreateDatabase() println(s"Using existing database ${db.getId}") db } else { val databaseDefinition = new Database databaseDefinition.setId(generateDBName()) val db = client.createDatabase(databaseDefinition, null).blockingResult() dbsToDelete += db println(s"Created database ${db.getId}") db } } private def getOrCreateDatabase(): Database = { client .queryDatabases(querySpec(storeConfig.db), null) .blockingOnlyResult() .getOrElse { client.createDatabase(newDatabase, null).blockingResult() } } protected def querySpec(id: String) = new SqlQuerySpec("SELECT * FROM root r WHERE r.id=@id", new SqlParameterCollection(new SqlParameter("@id", id))) private def newDatabase = { val databaseDefinition = new Database databaseDefinition.setId(storeConfig.db) databaseDefinition } override def afterAll(): Unit = { super.afterAll() if (!useExistingDB) { dbsToDelete.foreach(db => client.deleteDatabase(db.getSelfLink, null).blockingResult()) } client.close() } }
Example 16
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 17
Source File: SchemaManagerRouterTest.scala From schedoscope with Apache License 2.0 | 5 votes |
package org.schedoscope.scheduler.actors import akka.actor.{Actor, ActorRef, ActorSystem, Props} import akka.testkit.{TestActorRef, TestKit, TestProbe} import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.schedoscope.conf.SchedoscopeSettings import org.schedoscope.{Settings, TestUtils} import scala.concurrent.duration._ class SchemaManagerRouterTest extends TestKit(ActorSystem("schedoscope")) with FlatSpecLike with Matchers with BeforeAndAfterAll { override def afterAll() { TestKit.shutdownActorSystem(system) } // common vars val settings: SchedoscopeSettings = Settings() class ForwardChildActor(to: ActorRef) extends Actor { def receive = { case x => to.forward(x) } } trait SchemaManagerRouterTest { val partitionCreatorRouterActor = TestProbe() val metadataLoggerActorTest = TestProbe() def getSchemaManager(s: SchedoscopeSettings): ActorRef = { TestActorRef(new SchemaManagerRouter(s) { override def preStart { context.actorOf(Props(new ForwardChildActor(partitionCreatorRouterActor.ref)), "partition-creator") context.actorOf(Props(new ForwardChildActor(metadataLoggerActorTest.ref)), "metadata-logger") } }) } } it should "set an exponential backoff time for restarting drivers" in new SchemaManagerRouterTest { val newSettings = TestUtils.createSettings( "schedoscope.metastore.actor-backoff-slot-time=10", "schedoscope.metastore.actor-backoff-minimum-delay=0") var schemaManagerRouter: ActorRef = getSchemaManager(newSettings) partitionCreatorRouterActor.send(schemaManagerRouter, "tick") partitionCreatorRouterActor.expectMsg("tick") partitionCreatorRouterActor.send(schemaManagerRouter, "tick") partitionCreatorRouterActor.expectMsg("tick") metadataLoggerActorTest.send(schemaManagerRouter, "tick") metadataLoggerActorTest.expectMsg("tick") metadataLoggerActorTest.send(schemaManagerRouter, "tick") metadataLoggerActorTest.expectMsg("tick") } it should "set an exponential backoff time too big for the test to get it" in new SchemaManagerRouterTest { val newSettings = TestUtils.createSettings( "schedoscope.metastore.actor-backoff-slot-time=10000", "schedoscope.metastore.actor-backoff-minimum-delay=10000") var schemaManagerRouter: ActorRef = getSchemaManager(newSettings) partitionCreatorRouterActor.send(schemaManagerRouter, "tick") partitionCreatorRouterActor.expectMsg("tick") partitionCreatorRouterActor.send(schemaManagerRouter, "tick") partitionCreatorRouterActor.expectNoMsg(3 seconds) metadataLoggerActorTest.send(schemaManagerRouter, "tick") metadataLoggerActorTest.expectMsg("tick") metadataLoggerActorTest.send(schemaManagerRouter, "tick") metadataLoggerActorTest.expectNoMsg(3 seconds) } }
Example 18
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 19
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 20
Source File: BackOffSupervisionTest.scala From schedoscope with Apache License 2.0 | 5 votes |
package org.schedoscope.scheduler.utils import akka.actor.ActorSystem import akka.testkit.{TestKit, TestProbe} import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ class BackOffSupervisionTest extends TestKit(ActorSystem("schedoscope")) with FlatSpecLike with BeforeAndAfterAll with Matchers { override def afterAll(): Unit = { TestKit.shutdownActorSystem(system) } val managedActor = TestProbe() it should "send an immediate tick to a actor that booted for the first time" in { val bos = new BackOffSupervision("THE MANAGER", system) val backOffSlot = 100 millis val backOffMinDelay = 10 millis val tickTime = bos.manageActorLifecycle(managedActor.ref, backOffSlot, backOffMinDelay) system.scheduler.scheduleOnce(tickTime, managedActor.ref, "tick") managedActor.expectMsg(max = 1 seconds, "tick") } it should "schedule a tick for an actor that is rebooting" in { val bos = new BackOffSupervision("THE MANAGER", system) val backOffSlot = 100 millis val backOffMinDelay = 1 seconds val tickTime = bos.manageActorLifecycle(managedActor.ref, backOffSlot, backOffMinDelay) system.scheduler.scheduleOnce(tickTime, managedActor.ref, "tick") managedActor.expectMsg(max = 1 seconds, "tick") val tickTime2 = bos.manageActorLifecycle(managedActor.ref) system.scheduler.scheduleOnce(tickTime2, managedActor.ref, "tick") managedActor.expectMsg(max = 3 seconds, "tick") } it should "schedule a tick for an actor that is rebooting " + "(assure that tick is happening in the future only)" in { val bos = new BackOffSupervision("THE MANAGER", system) val backOffSlot = 100 millis val backOffMinDelay = 5 seconds val tickTime = bos.manageActorLifecycle(managedActor.ref, backOffSlot, backOffMinDelay) system.scheduler.scheduleOnce(tickTime, managedActor.ref, "tick") managedActor.expectMsg(max = 1 seconds, "tick") val tickTime2 = bos.manageActorLifecycle(managedActor.ref) system.scheduler.scheduleOnce(tickTime2, managedActor.ref, "tick") managedActor.expectNoMsg(max = 3 seconds) } }
Example 21
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 22
Source File: RawStageTest.scala From sparta with Apache License 2.0 | 5 votes |
package com.stratio.sparta.driver.test.stage import akka.actor.ActorSystem import akka.testkit.TestKit import com.stratio.sparta.driver.stage.{LogError, RawDataStage} import com.stratio.sparta.sdk.pipeline.autoCalculations.AutoCalculatedField import com.stratio.sparta.sdk.properties.JsoneyString import com.stratio.sparta.serving.core.models.policy.writer.{AutoCalculatedFieldModel, WriterModel} import com.stratio.sparta.serving.core.models.policy.{PolicyModel, RawDataModel} import org.junit.runner.RunWith import org.mockito.Mockito.when import org.scalatest.junit.JUnitRunner import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpecLike, ShouldMatchers} @RunWith(classOf[JUnitRunner]) class RawStageTest extends TestKit(ActorSystem("RawStageTest")) with FlatSpecLike with ShouldMatchers with MockitoSugar { case class TestRawData(policy: PolicyModel) extends RawDataStage with LogError def mockPolicy: PolicyModel = { val policy = mock[PolicyModel] when(policy.id).thenReturn(Some("id")) policy } "rawDataStage" should "Generate a raw data" in { val field = "field" val timeField = "time" val tableName = Some("table") val outputs = Seq("output") val partitionBy = Some("field") val autocalculateFields = Seq(AutoCalculatedFieldModel()) val configuration = Map.empty[String, JsoneyString] val policy = mockPolicy val rawData = mock[RawDataModel] val writerModel = mock[WriterModel] when(policy.rawData).thenReturn(Some(rawData)) when(rawData.dataField).thenReturn(field) when(rawData.timeField).thenReturn(timeField) when(rawData.writer).thenReturn(writerModel) when(writerModel.tableName).thenReturn(tableName) when(writerModel.outputs).thenReturn(outputs) when(writerModel.partitionBy).thenReturn(partitionBy) when(writerModel.autoCalculatedFields).thenReturn(autocalculateFields) when(rawData.configuration).thenReturn(configuration) val result = TestRawData(policy).rawDataStage() result.timeField should be(timeField) result.dataField should be(field) result.writerOptions.tableName should be(tableName) result.writerOptions.partitionBy should be(partitionBy) result.configuration should be(configuration) result.writerOptions.outputs should be(outputs) } "rawDataStage" should "Fail with bad table name" in { val field = "field" val timeField = "time" val tableName = None val outputs = Seq("output") val partitionBy = Some("field") val configuration = Map.empty[String, JsoneyString] val policy = mockPolicy val rawData = mock[RawDataModel] val writerModel = mock[WriterModel] when(policy.rawData).thenReturn(Some(rawData)) when(rawData.dataField).thenReturn(field) when(rawData.timeField).thenReturn(timeField) when(rawData.writer).thenReturn(writerModel) when(writerModel.tableName).thenReturn(tableName) when(writerModel.outputs).thenReturn(outputs) when(writerModel.partitionBy).thenReturn(partitionBy) when(rawData.configuration).thenReturn(configuration) the[IllegalArgumentException] thrownBy { TestRawData(policy).rawDataStage() } should have message "Something gone wrong saving the raw data. Please re-check the policy." } }
Example 23
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 24
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 25
Source File: SubscriptionManagementSpec.scala From chronicler with Apache License 2.0 | 5 votes |
package com.github.fsanaulla.chronicler.akka import _root_.akka.actor.ActorSystem import _root_.akka.testkit.TestKit import com.github.fsanaulla.chronicler.akka.management.{AkkaManagementClient, InfluxMng} import com.github.fsanaulla.chronicler.core.duration._ import com.github.fsanaulla.chronicler.core.enums.{Destination, Destinations} import com.github.fsanaulla.chronicler.core.model.Subscription import com.github.fsanaulla.chronicler.testing.it.{DockerizedInfluxDB, Futures} import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.ExecutionContext.Implicits.global class SubscriptionManagementSpec extends TestKit(ActorSystem()) with FlatSpecLike with Matchers with Futures with DockerizedInfluxDB { override def afterAll(): Unit = { influx.close() TestKit.shutdownActorSystem(system) super.afterAll() } val subName = "subs" val dbName = "async_subs_spec_db" val rpName = "subs_rp" val destType: Destination = Destinations.ANY val newDestType: Destination = Destinations.ALL val hosts = Array("udp://h1.example.com:9090", "udp://h2.example.com:9090") val subscription = Subscription(rpName, subName, destType, hosts) val newSubscription: Subscription = subscription.copy(destType = newDestType) val duration: String = 1.hours + 30.minutes lazy val influx: AkkaManagementClient = InfluxMng(host, port, Some(creds)) "Subscription API" should "create subscription" in { influx.createDatabase(dbName).futureValue.right.get shouldEqual 200 influx .createRetentionPolicy(rpName, dbName, duration, 1, Some(duration)) .futureValue .right .get shouldEqual 200 influx.showDatabases().futureValue.right.get.contains(dbName) shouldEqual true influx .createSubscription(subName, dbName, rpName, destType, hosts) .futureValue .right .get shouldEqual 200 val subscr = influx.showSubscriptionsInfo.futureValue.right.get.headOption .flatMap(_.subscriptions.headOption) .get subscr.subsName shouldEqual subscription.subsName subscr.addresses shouldEqual subscription.addresses subscr.destType shouldEqual subscription.destType subscr.addresses.toList shouldEqual subscription.addresses.toList } it should "drop subscription" in { influx.dropSubscription(subName, dbName, rpName).futureValue.right.get shouldEqual 200 influx.showSubscriptionsInfo.futureValue.right.get shouldEqual Nil influx.dropRetentionPolicy(rpName, dbName).futureValue.right.get shouldEqual 200 influx.dropDatabase(dbName).futureValue.right.get shouldEqual 200 influx.close() shouldEqual {} } }
Example 26
Source File: SystemManagementSpec.scala From chronicler with Apache License 2.0 | 5 votes |
package com.github.fsanaulla.chronicler.akka import _root_.akka.actor.ActorSystem import _root_.akka.testkit.TestKit import com.github.fsanaulla.chronicler.akka.management.{AkkaManagementClient, InfluxMng} import com.github.fsanaulla.chronicler.testing.it.{DockerizedInfluxDB, Futures} import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.ExecutionContext.Implicits.global class SystemManagementSpec extends TestKit(ActorSystem()) with FlatSpecLike with Matchers with Futures with DockerizedInfluxDB { override def afterAll(): Unit = { influx.close() TestKit.shutdownActorSystem(system) super.afterAll() } lazy val influx: AkkaManagementClient = InfluxMng(host, port, Some(creds)) it should "ping InfluxDB" in { val result = influx.ping.futureValue.right.get result.build shouldEqual "OSS" result.version shouldEqual version } }
Example 27
Source File: RetentionPolicyManagerSpec.scala From chronicler with Apache License 2.0 | 5 votes |
package com.github.fsanaulla.chronicler.akka import _root_.akka.actor.ActorSystem import _root_.akka.testkit.TestKit import com.github.fsanaulla.chronicler.akka.management.{AkkaManagementClient, InfluxMng} import com.github.fsanaulla.chronicler.core.duration._ import com.github.fsanaulla.chronicler.core.model.RetentionPolicyInfo import com.github.fsanaulla.chronicler.testing.it.{DockerizedInfluxDB, Futures} import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.ExecutionContext.Implicits.global import scala.language.postfixOps class RetentionPolicyManagerSpec extends TestKit(ActorSystem()) with FlatSpecLike with Matchers with Futures with DockerizedInfluxDB { override def afterAll(): Unit = { influx.close() TestKit.shutdownActorSystem(system) super.afterAll() } val rpDB = "db" lazy val influx: AkkaManagementClient = InfluxMng(host, port, Some(creds)) "Retention policy API" should "create retention policy" in { influx.createDatabase(rpDB).futureValue.right.get shouldEqual 200 influx.showDatabases().futureValue.right.get.contains(rpDB) shouldEqual true influx .createRetentionPolicy("test", rpDB, 2 hours, 2, Some(2 hours), default = true) .futureValue .right .get shouldEqual 200 influx .showRetentionPolicies(rpDB) .futureValue .right .get .contains(RetentionPolicyInfo("test", "2h0m0s", "2h0m0s", 2, default = true)) shouldEqual true } it should "drop retention policy" in { influx.dropRetentionPolicy("autogen", rpDB).futureValue.right.get shouldEqual 200 influx.showRetentionPolicies(rpDB).futureValue.right.get shouldEqual Seq( RetentionPolicyInfo("test", "2h0m0s", "2h0m0s", 2, default = true) ) } it should "update retention policy" in { influx.updateRetentionPolicy("test", rpDB, Some(3 hours)).futureValue.right.get shouldEqual 200 influx.showRetentionPolicies(rpDB).futureValue.right.get shouldEqual Seq( RetentionPolicyInfo("test", "3h0m0s", "2h0m0s", 2, default = true) ) } it should "clean up everything" in { influx.dropRetentionPolicy("test", rpDB).futureValue.right.get shouldEqual 200 influx.showRetentionPolicies(rpDB).futureValue.right.get.toList shouldEqual Nil influx.dropDatabase(rpDB).futureValue.right.get shouldEqual 200 influx.showDatabases().futureValue.right.get.contains(rpDB) shouldEqual false } it should "clear up after all" in { influx.close() shouldEqual {} } }
Example 28
Source File: AuthenticationSpec.scala From chronicler with Apache License 2.0 | 5 votes |
package com.github.fsanaulla.chronicler.akka import _root_.akka.actor.ActorSystem import _root_.akka.testkit.TestKit import com.github.fsanaulla.chronicler.akka.management.{AkkaManagementClient, InfluxMng} import com.github.fsanaulla.chronicler.core.enums.Privileges import com.github.fsanaulla.chronicler.core.model.{InfluxException, UserPrivilegesInfo} import com.github.fsanaulla.chronicler.testing.it.{DockerizedInfluxDB, Futures} import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.ExecutionContext.Implicits.global class AuthenticationSpec extends TestKit(ActorSystem()) with FlatSpecLike with Matchers with Futures with DockerizedInfluxDB { override def afterAll(): Unit = { influx.close() authInflux.close() TestKit.shutdownActorSystem(system) super.afterAll() } val userDB = "db" val userName = "some_user" val userPass = "some_user_pass" val userNPass = "some_new_user_pass" val admin = "admin" val adminPass = "admin" lazy val influx: AkkaManagementClient = InfluxMng(host, port) lazy val authInflux: AkkaManagementClient = InfluxMng(host = host, port = port, credentials = Some(creds)) "AuthenticationUserManagement" should "create admin user " in { influx.showUsers.futureValue.left.get shouldBe a[InfluxException] } it should "create database" in { authInflux.createDatabase(userDB).futureValue.right.get shouldEqual 200 } it should "create user" in { authInflux.createUser(userName, userPass).futureValue.right.get shouldEqual 200 authInflux.showUsers.futureValue.right.get.exists(_.username == userName) shouldEqual true } it should "set user password" in { authInflux.setUserPassword(userName, userNPass).futureValue.right.get shouldEqual 200 } it should "set user privileges" in { authInflux .setPrivileges(userName, userDB, Privileges.READ) .futureValue .right .get shouldEqual 200 } it should "get user privileges" in { val userPrivs = authInflux.showUserPrivileges(userName).futureValue.right.get userPrivs.length shouldEqual 1 userPrivs.exists { upi => upi.database == userDB && upi.privilege == Privileges.withName("READ") } shouldEqual true } it should "revoke user privileges" in { authInflux .revokePrivileges(userName, userDB, Privileges.READ) .futureValue .right .get shouldEqual 200 authInflux.showUserPrivileges(userName).futureValue.right.get shouldEqual Array( UserPrivilegesInfo(userDB, Privileges.NO_PRIVILEGES) ) } it should "drop user" in { authInflux.dropUser(userName).futureValue.right.get shouldEqual 200 authInflux.dropUser(admin).futureValue.right.get shouldEqual 200 authInflux.close() shouldEqual {} influx.close() shouldEqual {} } }
Example 29
Source File: UserManagementSpec.scala From chronicler with Apache License 2.0 | 5 votes |
package com.github.fsanaulla.chronicler.akka import _root_.akka.actor.ActorSystem import _root_.akka.testkit.TestKit import com.github.fsanaulla.chronicler.akka.management.{AkkaManagementClient, InfluxMng} import com.github.fsanaulla.chronicler.core.enums.Privileges import com.github.fsanaulla.chronicler.core.model.{UserInfo, UserPrivilegesInfo} import com.github.fsanaulla.chronicler.testing.it.{DockerizedInfluxDB, Futures} import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.ExecutionContext.Implicits.global class UserManagementSpec extends TestKit(ActorSystem()) with FlatSpecLike with Matchers with Futures with DockerizedInfluxDB { override def afterAll(): Unit = { influx.close() TestKit.shutdownActorSystem(system) super.afterAll() } val userDB = "db" val userName = "Martin" val userPass = "pass" val userNPass = "new_pass" val admin = "Admin" val adminPass = "admin_pass" lazy val influx: AkkaManagementClient = InfluxMng(host, port, Some(creds)) "User Management API" should "create user" in { influx.createDatabase(userDB).futureValue.right.get shouldEqual 200 influx.createUser(userName, userPass).futureValue.right.get shouldEqual 200 influx.showUsers.futureValue.right.get .contains(UserInfo(userName, isAdmin = false)) shouldEqual true } it should "create admin" in { influx.createAdmin(admin, adminPass).futureValue.right.get shouldEqual 200 influx.showUsers.futureValue.right.get .contains(UserInfo(admin, isAdmin = true)) shouldEqual true } it should "show user privileges" in { influx.showUserPrivileges(admin).futureValue.right.get shouldEqual Nil } it should "set user password" in { influx.setUserPassword(userName, userNPass).futureValue.right.get shouldEqual 200 } it should "set privileges" in { influx.setPrivileges(userName, userDB, Privileges.READ).futureValue.right.get shouldEqual 200 influx .setPrivileges("unknown", userDB, Privileges.READ) .futureValue .left .get .getMessage shouldEqual "user not found" influx.showUserPrivileges(userName).futureValue.right.get shouldEqual Array( UserPrivilegesInfo(userDB, Privileges.READ) ) } it should "revoke privileges" in { influx.revokePrivileges(userName, userDB, Privileges.READ).futureValue.right.get shouldEqual 200 influx.showUserPrivileges(userName).futureValue.right.get shouldEqual Array( UserPrivilegesInfo(userDB, Privileges.NO_PRIVILEGES) ) } it should "disable admin" in { influx.disableAdmin(admin).futureValue.right.get shouldEqual 200 influx.showUsers.futureValue.right.get .contains(UserInfo(admin, isAdmin = false)) shouldEqual true } it should "make admin" in { influx.makeAdmin(admin).futureValue.right.get shouldEqual 200 influx.showUsers.futureValue.right.get .contains(UserInfo(admin, isAdmin = true)) shouldEqual true } it should "drop users" in { influx.dropUser(userName).futureValue.right.get shouldEqual 200 influx.dropUser(admin).futureValue.right.get shouldEqual 200 influx.close() shouldEqual {} } }
Example 30
Source File: SystemManagementSpec.scala From chronicler with Apache License 2.0 | 5 votes |
package com.github.fsanaulla.chronicler.akka import _root_.akka.actor.ActorSystem import _root_.akka.testkit.TestKit import com.github.fsanaulla.chronicler.akka.io.{AkkaIOClient, InfluxIO} import com.github.fsanaulla.chronicler.testing.it.{DockerizedInfluxDB, Futures} import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.ExecutionContext.Implicits.global class SystemManagementSpec extends TestKit(ActorSystem()) with FlatSpecLike with Matchers with Futures with DockerizedInfluxDB { override def afterAll(): Unit = { io.close() TestKit.shutdownActorSystem(system) super.afterAll() } lazy val io: AkkaIOClient = InfluxIO(host, port, Some(creds)) it should "ping InfluxDB" in { val result = io.ping.futureValue.right.get result.build shouldEqual "OSS" result.version shouldEqual version } }
Example 31
Source File: MeasurementApiSpec.scala From chronicler with Apache License 2.0 | 5 votes |
package com.github.fsanaulla.chronicler.akka import _root_.akka.actor.ActorSystem import _root_.akka.testkit.TestKit import com.github.fsanaulla.chronicler.akka.SampleEntitys._ import com.github.fsanaulla.chronicler.akka.io.{AkkaIOClient, InfluxIO} import com.github.fsanaulla.chronicler.akka.management.{AkkaManagementClient, InfluxMng} import com.github.fsanaulla.chronicler.akka.shared.InfluxConfig import com.github.fsanaulla.chronicler.testing.it.{DockerizedInfluxDB, FakeEntity, Futures} import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.ExecutionContext.Implicits.global class MeasurementApiSpec extends TestKit(ActorSystem()) with FlatSpecLike with Matchers with Futures with DockerizedInfluxDB { override def afterAll(): Unit = { mng.close() io.close() TestKit.shutdownActorSystem(system) super.afterAll() } val db = "db" val measName = "meas" lazy val influxConf = InfluxConfig(host, port, credentials = Some(creds), compress = false, None) lazy val mng: AkkaManagementClient = InfluxMng(host, port, credentials = Some(creds)) lazy val io: AkkaIOClient = InfluxIO(influxConf) lazy val meas: io.Measurement[FakeEntity] = io.measurement[FakeEntity](db, measName) it should "write single point" in { mng.createDatabase(db).futureValue.right.get shouldEqual 200 meas.write(singleEntity).futureValue.right.get shouldEqual 204 meas.read(s"SELECT * FROM $measName").futureValue.right.get shouldEqual Seq(singleEntity) } it should "bulk write" in { meas.bulkWrite(multiEntitys).futureValue.right.get shouldEqual 204 meas.read(s"SELECT * FROM $measName").futureValue.right.get.length shouldEqual 3 mng.close() shouldEqual {} io.close() shouldEqual {} } }
Example 32
Source File: CompressionSpec.scala From chronicler with Apache License 2.0 | 5 votes |
package com.github.fsanaulla.chronicler.akka import java.nio.file.Paths import akka.actor.ActorSystem import akka.testkit.TestKit import com.github.fsanaulla.chronicler.akka.io.{AkkaDatabaseApi, InfluxIO} import com.github.fsanaulla.chronicler.akka.management.InfluxMng import com.github.fsanaulla.chronicler.akka.shared.InfluxConfig import com.github.fsanaulla.chronicler.testing.it.DockerizedInfluxDB import org.scalatest.concurrent.{IntegrationPatience, ScalaFutures} import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.ExecutionContextExecutor class CompressionSpec extends TestKit(ActorSystem()) with FlatSpecLike with Matchers with DockerizedInfluxDB with ScalaFutures with IntegrationPatience { override def afterAll(): Unit = { mng.close() io.close() TestKit.shutdownActorSystem(system) super.afterAll() } implicit val ec: ExecutionContextExecutor = system.dispatcher val testDB = "db" lazy val influxConf = InfluxConfig(host, port, credentials = Some(creds), compress = true) lazy val mng = InfluxMng(host, port, credentials = Some(creds)) lazy val io = InfluxIO(influxConf) lazy val db: AkkaDatabaseApi = io.database(testDB) it should "write data from file" in { mng.createDatabase(testDB).futureValue.right.get shouldEqual 200 db.writeFromFile(Paths.get(getClass.getResource("/large_batch.txt").getPath)) .futureValue .right .get shouldEqual 204 db.readJson("SELECT * FROM test1").futureValue.right.get.length shouldEqual 10000 } }
Example 33
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 34
Source File: PingActorSpec.scala From akka-typed-persistence with Apache License 2.0 | 5 votes |
package com.example import scala.concurrent.duration._ import org.scalatest.{ FlatSpecLike, Matchers } import org.scalatest.concurrent.ScalaFutures import akka.actor.ActorSystem import akka.actor.Scheduler import akka.testkit.TestKit import akka.typed.ActorRef import akka.typed.scaladsl.AskPattern._ import akka.typed.scaladsl.adapter.actorRefAdapter import akka.util.Timeout class PingActorSpec extends TestKit(ActorSystem("pingSystem")) with FlatSpecLike with Matchers with ScalaFutures { import PingActor.MyMsg implicit val timeout: Timeout = Timeout(1.second) implicit val scheduler: Scheduler = this.system.scheduler implicit override def patienceConfig: PatienceConfig = PatienceConfig(timeout = super.patienceConfig.timeout * 5) val dummyRef: ActorRef[Any] = actorRefAdapter(this.testActor) "PingActor" should "reply with the number of pings it received so far" in { val ref: ActorRef[MyMsg] = PingActor.myBehavior.deployInto(this.system, "pingActor") ref.?[String](MyMsg("ping", _)).futureValue should be ("1 pings so far") ref ! MyMsg("foo", dummyRef) this.expectNoMsg() ref ! MyMsg("bar", dummyRef) this.expectNoMsg() ref.?[String](MyMsg("ping", _)).futureValue should be ("2 pings so far") ref.?[String](MyMsg("stop", _)).futureValue should be ("OK") val ref2: ActorRef[MyMsg] = PingActor.myBehavior.deployInto(this.system, "pingActor") ref2.?[String](MyMsg("ping", _)).futureValue should be ("3 pings so far") } }
Example 35
Source File: TestExample.scala From akka-typed-persistence with Apache License 2.0 | 5 votes |
package com.nokia.ntp.ct package persistence package testkit import scala.util.Try import org.scalatest.FlatSpecLike import akka.testkit.TestKit import akka.typed._ import cats.implicits._ class TestExample extends TestKit(akka.actor.ActorSystem()) with FlatSpecLike { spec => sealed trait MyMsg case class Add(n: Int, replyTo: ActorRef[Long]) extends MyMsg case object Snap extends MyMsg case object Stop extends MyMsg case class ReadSeqNr(replyTo: ActorRef[Long]) extends MyMsg sealed trait MyEv case class Incr(amount: Int) extends MyEv sealed case class MyState(ctr: Long) { def update(ev: MyEv): MyState = ev match { case Incr(n) => this.copy(ctr = ctr + n) } } object MyState { implicit val mngd: Update[MyState, MyEv] = Update.instance(_ update _) } val name = "TestExample" val b = PersistentActor.immutable[MyMsg, MyEv, MyState]( MyState(ctr = 0), _ => name ) { state => p => { case Add(n, r) => for { st <- p.apply(Incr(n)) } yield { r ! st.ctr st } case Snap => p.snapshot case Stop => p.stop case ReadSeqNr(r) => for { seqNr <- p.lastSequenceNr _ = r ! seqNr } yield state } } val ti = new TestInterpreter(name, b, ActorSystem.wrap(this.system)) { override def assert(b: Boolean, msg: String = ""): Try[Unit] = Try(spec.assert(b, msg)) override def fail(msg: String): Nothing = spec.fail(msg) } "It" should "work" in { ti.check(for { _ <- ti.expect[Long](ReadSeqNr, 0L) _ <- ti.expect[Long](Add(3, _), 3L) _ <- ti.expect[Long](ReadSeqNr, 1L) _ <- ti.expect[Long](Add(2, _), 5L) _ <- ti.expect[Long](ReadSeqNr, 2L) _ <- ti.expectSt(_.ctr, 5L) _ <- ti.message(Stop) _ <- ti.expectStop } yield ()) } }
Example 36
Source File: MavenAddManagedDependenciesRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven import java.io.File import org.apache.commons.io.FileUtils import com.ebay.rtran.maven.util.MavenModelUtil import com.ebay.rtran.maven.util.MavenModelUtil.SimpleDependency import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} class MavenAddManagedDependenciesRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("mvnproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "MavenAddManagedDependenciesRule" should "be able to add dependencies to dependency management" in { val ruleConfig = MavenAddManagedDependenciesRuleConfig( Set( SimpleDependency("org.slf4j", "slf4j-api", Some("1.7.12")), SimpleDependency("com.typesafe.akka", "akka-actor_2.11", Some("2.3.9")) ) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenAddManagedDependenciesRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx val parent = transformed.parents.head val dm1 = parent.managedDependencies.values.find(_.getArtifactId == "slf4j-api") dm1 should not be None dm1.get.getVersion should be ("1.7.12") val dm2 = parent.managedDependencies.values.find(_.getArtifactId == "akka-actor_2.11") dm2 should not be None dm2.get.getVersion should be ("2.4.17") } }
Example 37
Source File: MultiModuleMavenModelProviderTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven import java.io.{File, FileReader} import org.apache.commons.io.FileUtils import org.apache.maven.model.io.xpp3.MavenXpp3Reader import org.codehaus.plexus.util.xml.Xpp3Dom import org.scalatest.{FlatSpecLike, Matchers} import collection.JavaConversions._ class MultiModuleMavenModelProviderTest extends FlatSpecLike with Matchers { val projectRoot = new File(getClass.getClassLoader.getResource("mvnproject").getFile) "MavenModelProvider" should "resolve all the pom files in the project" in { val projectCtx = new MavenProjectCtx(projectRoot) val provider = new MultiModuleMavenModelProvider val model = provider.create(projectCtx) model.modules foreach { m => m.resolvedDependencies foreach {dep => Option(dep.getVersion) should not be None } } } "MavenModelProvider" should "resolve all the pom files recursively in the project" in { val dir = new File(getClass.getClassLoader.getResource("recursive").getFile) val projectCtx = new MavenProjectCtx(dir) val provider = new MultiModuleMavenModelProvider val model = provider.create(projectCtx) model.modules.size should be (5) } "MavenModelProvider" should "not remove empty property nodes" in { val dir = new File(projectRoot.getParent, projectRoot.getName + "-bak") FileUtils.deleteQuietly(dir) FileUtils.copyDirectory(projectRoot, dir) val projectCtx = new MavenProjectCtx(dir) val provider = new MultiModuleMavenModelProvider val model = provider.create(projectCtx) provider save model val pom = new MavenXpp3Reader().read(new FileReader(new File(dir, "pom.xml"))) pom.getProperties.getProperty("empty.property1") should be ("") pom.getProperties.getProperty("empty.property2") should be ("") pom.getProperties.getProperty("empty.property3") should be ("") } "MavenModelProvider" should "not break on xlint element" in { val dir = new File(projectRoot.getParent, projectRoot.getName + "-bak") FileUtils.deleteQuietly(dir) FileUtils.copyDirectory(projectRoot, dir) val projectCtx = new MavenProjectCtx(dir) val provider = new MultiModuleMavenModelProvider val model = provider.create(projectCtx) for { root <- model.parents.headOption build <- Option(root.pomModel.getBuild) sourcePlugin <- build.getPlugins.find(_.getArtifactId == "some-maven-plugin") } { build.removePlugin(sourcePlugin) } provider save model val pom = new MavenXpp3Reader().read(new FileReader(new File(dir, "pom.xml"))) pom.getBuild.getPlugins.size() should be(1) val plugin = pom.getBuild.getPlugins.find(_.getArtifactId == "maven-source-plugin") plugin shouldNot be(None) plugin.map(_.getConfiguration.asInstanceOf[Xpp3Dom].getChild("compilerArguments").getChildCount) should be(Some(3)) } }
Example 38
Source File: MavenDependenciesMappingRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven import java.io.File import org.apache.commons.io.FileUtils import com.ebay.rtran.maven.util.MavenModelUtil import com.ebay.rtran.maven.util.MavenModelUtil.SimpleDependency import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} import scala.collection.JavaConversions._ class MavenDependenciesMappingRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("mvnproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "MavenDependenciesMappingRule" should "be able to alter dependencies according to mapping" in { val ruleConfig = MavenDependenciesMappingRuleConfig( Set(SimpleDependency("junit", "junit")), Set(SimpleDependency("org.slf4j", "slf4j-api"), SimpleDependency("org.slf4j", "slf4j-log4j12")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenDependenciesMappingRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules foreach { module => module.pomModel.getDependencies.exists(_.getArtifactId == "junit") should be (false) module.pomModel.getDependencies.exists(_.getArtifactId == "slf4j-api") should be (true) module.pomModel.getDependencies.exists(_.getArtifactId == "slf4j-log4j12") should be (true) } } "MavenDependenciesMappingRule" should "not alter dependencies that don't exist" in { val ruleConfig = MavenDependenciesMappingRuleConfig( Set(SimpleDependency("org.slf4j", "slf4j-api")), Set(SimpleDependency("org.slf4j", "slf4j-log4j12")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenDependenciesMappingRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules foreach { module => module.pomModel.getDependencies.exists(_.getArtifactId == "slf4j-api") should be (false) module.pomModel.getDependencies.exists(_.getArtifactId == "slf4j-log4j12") should be (false) } } "MavenDependenciesMappingRule" should "alter dependencies matches that match other condition" in { val ruleConfig = MavenDependenciesMappingRuleConfig( Set(SimpleDependency("junit", "junit", Some("4.9"))), Set(SimpleDependency("org.slf4j", "slf4j-api"), SimpleDependency("org.slf4j", "slf4j-log4j12")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenDependenciesMappingRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules foreach { module => if (module.pomModel.getPackaging == "pom") { module.pomModel.getDependencies.exists(_.getArtifactId == "junit") should be (true) } else { module.pomModel.getDependencies.exists(_.getArtifactId == "junit") should be (false) module.pomModel.getDependencies.exists(_.getArtifactId == "slf4j-api") should be (true) module.pomModel.getDependencies.exists(_.getArtifactId == "slf4j-log4j12") should be (true) } } } "MavenDependenciesMappingRule" should "not alter dependencies if other condition doesn't match" in { val ruleConfig = MavenDependenciesMappingRuleConfig( Set(SimpleDependency("junit", "junit", scope = Some("compile"))), Set(SimpleDependency("org.slf4j", "slf4j-api"), SimpleDependency("org.slf4j", "slf4j-log4j12")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenDependenciesMappingRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules foreach { module => module.pomModel.getDependencies.exists(_.getArtifactId == "junit") should be (true) module.pomModel.getDependencies.exists(_.getArtifactId == "slf4j-api") should be (false) module.pomModel.getDependencies.exists(_.getArtifactId == "slf4j-log4j12") should be (false) } } }
Example 39
Source File: MavenRemoveDependenciesRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven import java.io.File import org.apache.commons.io.FileUtils import com.ebay.rtran.maven.util.MavenModelUtil import com.ebay.rtran.maven.util.MavenModelUtil.SimpleDependency import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} import scala.collection.JavaConversions._ class MavenRemoveDependenciesRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("mvnproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "MavenRemoveDependencies" should "be able to remove dependencies" in { val ruleConfig = MavenRemoveDependenciesRuleConfig( Set(SimpleDependency("junit", "junit")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemoveDependenciesRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules foreach { module => module.pomModel.getDependencies.exists(_.getArtifactId == "junit") should be (false) } } "MavenAddDependenciesRule" should "not remove dependencies that don't exist" in { val ruleConfig = MavenRemoveDependenciesRuleConfig( Set(SimpleDependency("org.slf4j", "slf4j-api")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemoveDependenciesRule(ruleConfig) val originalSizes = model.modules map (_.pomModel.getDependencies.size) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules map (_.pomModel.getDependencies.size) should be (originalSizes) } "MavenRemoveDependencies" should "remove dependencies matches that match other condition" in { val ruleConfig = MavenRemoveDependenciesRuleConfig( Set(SimpleDependency("junit", "junit", version = Some("4.9"))) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemoveDependenciesRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules foreach { module => if (module.pomModel.getPackaging == "pom") { module.pomModel.getDependencies.exists(_.getArtifactId == "junit") should be (true) } else { module.pomModel.getDependencies.exists(_.getArtifactId == "junit") should be (false) } } } "MavenRemoveDependencies" should "not remove dependencies if other condition doesn't match" in { val ruleConfig = MavenRemoveDependenciesRuleConfig( Set(SimpleDependency("junit", "junit", scope = Some("compile"))) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemoveDependenciesRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules foreach { module => module.pomModel.getDependencies.exists(_.getArtifactId == "junit") should be (true) } } }
Example 40
Source File: MavenPluginsMappingRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven import java.io.File import org.apache.commons.io.FileUtils import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} import scala.collection.JavaConversions._ class MavenPluginsMappingRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("mvnproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "MavenPluginsMappingRule" should "be able to alter both plugins and managed plugins" in { val ruleConfig = MavenPluginsMappingRuleConfig( List( PluginMapping( SimplePlugin(Some("com.ebay.rtran.old"), "some-maven-plugin"), SimplePlugin(Some("com.ebay.rtran.new"), "some-maven-plugin") ) ) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenPluginsMappingRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.parents.head .pomModel.getBuild.getPluginManagement.getPlugins .exists(_.getGroupId == "com.ebay.rtran.old") should be (false) transformed.parents.head .pomModel.getBuild.getPluginManagement.getPlugins .exists(_.getGroupId == "com.ebay.rtran.new") should be (true) transformed.parents.head .pomModel.getBuild.getPlugins .exists(_.getGroupId == "com.ebay.rtran.old") should be (false) transformed.parents.head .pomModel.getBuild.getPlugins .exists(_.getGroupId == "com.ebay.rtran.new") should be (true) } "MavenPluginsMappingRule" should "not alter plugins or managed plugins that don't exist" in { val ruleConfig = MavenPluginsMappingRuleConfig( List( PluginMapping( SimplePlugin(Some("com.ebay.rtran.old"), "non-exist"), SimplePlugin(Some("com.ebay.rtran.new"), "non-exist") ) ) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenPluginsMappingRule(ruleConfig) val mpSize = model.parents.head .pomModel.getBuild.getPluginManagement.getPlugins.size val pluginSize = model.parents.head .pomModel.getBuild.getPlugins.size provider save rule.transform(model) val transformed = provider create projectCtx transformed.parents.head .pomModel.getBuild.getPluginManagement.getPlugins.size should be (mpSize) transformed.parents.head .pomModel.getBuild.getPluginManagement.getPlugins .exists(_.getGroupId == "com.ebay.rtran.old") should be (true) transformed.parents.head .pomModel.getBuild.getPlugins.size should be (pluginSize) transformed.parents.head .pomModel.getBuild.getPlugins .exists(_.getGroupId == "com.ebay.rtran.old") should be (true) } }
Example 41
Source File: MavenRemoveManagedDependenciesRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven import java.io.File import com.ebay.rtran.maven.util.MavenModelUtil import MavenModelUtil.SimpleDependency import org.apache.commons.io.FileUtils import org.scalatest.{BeforeAndAfterEach, Matchers, FlatSpecLike} import scala.collection.JavaConversions._ class MavenRemoveManagedDependenciesRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("mvnproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "MavenRemoveManagedDependenciesRule" should "be able to remove managed dependencies" in { val ruleConfig = MavenRemoveManagedDependenciesRuleConfig( Set(SimpleDependency("org.eclipse.aether", "aether-spi")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemoveManagedDependenciesRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.parents.head .pomModel.getDependencyManagement.getDependencies.exists(_.getArtifactId == "aether-spi") should be (false) } "MavenRemoveManagedDependenciesRule" should "not remove managed dependencies that don't exist" in { val ruleConfig = MavenRemoveManagedDependenciesRuleConfig( Set(SimpleDependency("org.slf4j", "slf4j-api")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemoveManagedDependenciesRule(ruleConfig) val originalSize = model.parents.head .pomModel.getDependencyManagement.getDependencies.size provider save rule.transform(model) val transformed = provider create projectCtx transformed.parents.head .pomModel.getDependencyManagement.getDependencies.size should be (originalSize) } "MavenRemoveManagedDependenciesRule" should "remove managed dependencies matches that match other condition" in { val ruleConfig = MavenRemoveManagedDependenciesRuleConfig( Set(SimpleDependency("org.eclipse.aether", "aether-spi", version = Some("1.0.2.v20150114"))) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemoveManagedDependenciesRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.parents.head .pomModel.getDependencyManagement.getDependencies.exists(_.getArtifactId == "aether-spi") should be (false) } "MavenRemoveManagedDependenciesRule" should "not remove managed dependencies if other condition doesn't match" in { val ruleConfig = MavenRemoveManagedDependenciesRuleConfig( Set(SimpleDependency("org.eclipse.aether", "aether-spi", version = Some("1.0.3.v20150114"))) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemoveManagedDependenciesRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.parents.head .pomModel.getDependencyManagement.getDependencies.exists(_.getArtifactId == "aether-spi") should be (true) } }
Example 42
Source File: MavenRemoveRepositoriesRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven import java.io.File import org.apache.commons.io.FileUtils import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} class MavenRemoveRepositoriesRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("mvnproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "MavenRemoveRepositoriesRule" should "remove repository that matches given patterns" in { val ruleConfig = MavenRemoveRepositoriesRuleConfig( Set( ".*/content/repositories/releases[/]?", ".*/content/repositories/snapshots[/]?" ) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val rule = new MavenRemoveRepositoriesRule(ruleConfig) val model = provider create projectCtx provider save (rule transform model) val transformed = provider create projectCtx transformed.modules foreach { module => module.pomModel.getRepositories.size should be (0) } } }
Example 43
Source File: MavenAddDependenciesRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven import java.io.File import org.apache.commons.io.FileUtils import com.ebay.rtran.maven.util.MavenModelUtil import com.ebay.rtran.maven.util.MavenModelUtil.SimpleDependency import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} import scala.collection.JavaConversions._ class MavenAddDependenciesRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("mvnproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "MavenAddDependenciesRule" should "be able to add dependencies" in { val ruleConfig = MavenAddDependenciesRuleConfig( Set( SimpleDependency("org.slf4j", "slf4j-api"), SimpleDependency("org.slf4j", "slf4j-log4j12") ) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenAddDependenciesRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules foreach { module => module.pomModel.getDependencies.exists(_.getArtifactId == "slf4j-api") should be (true) module.pomModel.getDependencies.exists(_.getArtifactId == "slf4j-log4j12") should be (true) } } "MavenAddDependenciesRule" should "not add dependencies that already exist" in { val ruleConfig = MavenAddDependenciesRuleConfig( Set( SimpleDependency("junit", "junit") ) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenAddDependenciesRule(ruleConfig) val originalSize = model.modules .find(_.pomModel.getPackaging == "pom") .map(_.pomModel.getDependencies.size) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules .find(_.pomModel.getPackaging == "pom") .map(_.pomModel.getDependencies.size) should be (originalSize) transformed.modules foreach { module => module.pomModel.getDependencies.exists(_.getArtifactId == "junit") should be (true) } } }
Example 44
Source File: MavenRemovePluginsRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven import java.io.File import org.apache.commons.io.FileUtils import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} import scala.collection.JavaConversions._ class MavenRemovePluginsRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("mvnproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "MavenRemovePluginsRule" should "be able to remove both plugins and managed plugins" in { val ruleConfig = MavenRemoveManagedPluginsRuleConfig( Set(SimplePlugin(artifactId = "maven-source-plugin")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemovePluginsRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.parents.head .pomModel.getBuild.getPluginManagement.getPlugins .exists(_.getArtifactId == "maven-source-plugin") should be (false) transformed.parents.head .pomModel.getBuild.getPlugins .exists(_.getArtifactId == "maven-source-plugin") should be (false) } "MavenRemovePluginsRule" should "not remove plugins or managed plugins that don't exist" in { val ruleConfig = MavenRemoveManagedPluginsRuleConfig( Set(SimplePlugin(artifactId = "maven-surefire-plugin")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemovePluginsRule(ruleConfig) val mpSize = model.parents.head.pomModel.getBuild.getPluginManagement.getPlugins.size val pluginSize = model.parents.head.pomModel.getBuild.getPlugins.size provider save rule.transform(model) val transformed = provider create projectCtx transformed.parents.head .pomModel.getBuild.getPluginManagement.getPlugins.size should be (mpSize) transformed.parents.head .pomModel.getBuild.getPlugins.size should be (pluginSize) } "MavenRemovePluginsRule" should "remove both plugins and managed plugins matches that match other condition" in { val ruleConfig = MavenRemoveManagedPluginsRuleConfig( Set(SimplePlugin(artifactId = "maven-source-plugin", version = Some("2.2.1"))) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemovePluginsRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.parents.head .pomModel.getBuild.getPluginManagement.getPlugins .exists(_.getArtifactId == "maven-source-plugin") should be (false) transformed.parents.head .pomModel.getBuild.getPlugins .exists(_.getArtifactId == "maven-source-plugin") should be (false) } "MavenRemoveManagedPluginsRule" should "not remove plugins or managed plugins if other condition doesn't match" in { val ruleConfig = MavenRemoveManagedPluginsRuleConfig( Set(SimplePlugin(artifactId = "maven-source-plugin", version = Some("2.2.0"))) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenRemovePluginsRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.parents.head .pomModel.getBuild.getPluginManagement.getPlugins .exists(_.getArtifactId == "maven-source-plugin") should be (true) transformed.parents.head .pomModel.getBuild.getPlugins .exists(_.getArtifactId == "maven-source-plugin") should be (true) } }
Example 45
Source File: MavenAddManagedDependenciesSubscriberTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven.report import java.io.{ByteArrayOutputStream, File} import ch.qos.logback.classic.spi.LoggingEvent import org.scalatest.{FlatSpecLike, Matchers} class MavenAddManagedDependenciesSubscriberTest extends FlatSpecLike with Matchers { val projectRoot = new File(getClass.getClassLoader.getResource(".").getFile) "MavenAddManagedDependenciesSubscriber" should "not accept unexpected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new MavenAddDependenciesSubscriber(projectRoot) subscriber.accept("hahah") subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("fake") loggingEvent.setMessage("Some random message") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent2 = new LoggingEvent loggingEvent2.setLoggerName("MavenAddManagedDependenciesRule") loggingEvent2.setMessage("Some random message") subscriber.accept(loggingEvent2) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) } "MavenAddManagedDependenciesSubscriber" should "accept expected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new MavenAddManagedDependenciesSubscriber(projectRoot) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("MavenAddManagedDependenciesRule") loggingEvent.setMessage("{} added managed dependency {} to {}") loggingEvent.setArgumentArray(Array("MavenAddManagedDependenciesSubscriber", "xxxx:yyyy:zzzz", new File(projectRoot, "pom.xml"))) subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) val result = new String(outputStream.toByteArray) result should include ("#### File [pom.xml](pom.xml)") result should include ("xxxx:yyyy:zzzz") } }
Example 46
Source File: MavenExcludeDependenciesSubscriberTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven.report import java.io.{ByteArrayOutputStream, File} import ch.qos.logback.classic.spi.LoggingEvent import org.scalatest.{FlatSpecLike, Matchers} class MavenExcludeDependenciesSubscriberTest extends FlatSpecLike with Matchers { val projectRoot = new File(getClass.getClassLoader.getResource(".").getFile) "MavenExcludeDependenciesSubscriber" should "not accept unexpected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new MavenExcludeDependenciesSubscriber(projectRoot) subscriber.accept("hahah") subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("fake") loggingEvent.setMessage("Some random message") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent2 = new LoggingEvent loggingEvent2.setLoggerName("MavenExcludeDependenciesRule") loggingEvent2.setMessage("Some random message") subscriber.accept(loggingEvent2) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) } "MavenExcludeDependenciesSubscriber" should "accept expected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new MavenExcludeDependenciesSubscriber(projectRoot) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("MavenExcludeDependenciesRule") loggingEvent.setMessage("{} excluded {} from {} in {}") loggingEvent.setArgumentArray(Array( "MavenExcludeDependenciesRule", Set("zzzz:yyyy:xxxx"), "xxxx:yyyy:zzzz", new File(projectRoot, "pom.xml") )) subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) val result = new String(outputStream.toByteArray) result should include ("#### File [pom.xml](pom.xml)") result should include ("xxxx:yyyy:zzzz") result should include ("zzzz:yyyy:xxxx") } }
Example 47
Source File: MavenRemoveDependenciesSubscriberTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven.report import java.io.{ByteArrayOutputStream, File} import ch.qos.logback.classic.spi.LoggingEvent import org.scalatest.{FlatSpecLike, Matchers} class MavenRemoveDependenciesSubscriberTest extends FlatSpecLike with Matchers { val projectRoot = new File(getClass.getClassLoader.getResource(".").getFile) "MavenRemoveDependenciesSubscriber" should "not accept unexpected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new MavenRemoveDependenciesSubscriber(projectRoot) subscriber.accept("hahah") subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("fake") loggingEvent.setMessage("Some random message") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent2 = new LoggingEvent loggingEvent2.setLoggerName("MavenRemoveDependenciesRule") loggingEvent2.setMessage("Some random message") subscriber.accept(loggingEvent2) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) } "MavenRemoveDependenciesSubscriber" should "accept expected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new MavenRemoveDependenciesSubscriber(projectRoot) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("MavenRemoveDependenciesRule") loggingEvent.setMessage("{} removed dependency {} from {}") loggingEvent.setArgumentArray(Array("MavenRemoveDependenciesRule", "xxxx:yyyy:zzzz", new File(projectRoot, "pom.xml"))) subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) val result = new String(outputStream.toByteArray) result should include ("#### File [pom.xml](pom.xml)") result should include ("xxxx:yyyy:zzzz") } }
Example 48
Source File: MavenAddDependenciesSubscriberTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven.report import java.io.{ByteArrayOutputStream, File} import ch.qos.logback.classic.spi.LoggingEvent import org.scalatest.{FlatSpecLike, Matchers} class MavenAddDependenciesSubscriberTest extends FlatSpecLike with Matchers { val projectRoot = new File(getClass.getClassLoader.getResource(".").getFile) "MavenAddDependenciesSubscriber" should "not accept unexpected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new MavenAddDependenciesSubscriber(projectRoot) subscriber.accept("hahah") subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("fake") loggingEvent.setMessage("Some random message") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent2 = new LoggingEvent loggingEvent2.setLoggerName("MavenAddDependenciesRule") loggingEvent2.setMessage("Some random message") subscriber.accept(loggingEvent2) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) } "MavenAddDependenciesSubscriber" should "accept expected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new MavenAddDependenciesSubscriber(projectRoot) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("MavenAddDependenciesRule") loggingEvent.setMessage("{} added dependency {} to {}") loggingEvent.setArgumentArray(Array("MavenAddDependenciesRule", "xxxx:yyyy:zzzz", new File(projectRoot, "pom.xml"))) subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) val result = new String(outputStream.toByteArray) result should include ("#### File [pom.xml](pom.xml)") result should include ("xxxx:yyyy:zzzz") } }
Example 49
Source File: MavenDependenciesMappingSubscriberTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven.report import java.io.{ByteArrayOutputStream, File} import ch.qos.logback.classic.spi.LoggingEvent import org.scalatest.{FlatSpecLike, Matchers} class MavenDependenciesMappingSubscriberTest extends FlatSpecLike with Matchers { val projectRoot = new File(getClass.getClassLoader.getResource(".").getFile) "MavenDependenciesMappingSubscriber" should "not accept unexpected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new MavenDependenciesMappingSubscriber(projectRoot) subscriber.accept("hahah") subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("fake") loggingEvent.setMessage("Some random message") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent2 = new LoggingEvent loggingEvent2.setLoggerName("MavenDependenciesMappingRule") loggingEvent2.setMessage("Some random message") subscriber.accept(loggingEvent2) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) } "MavenDependenciesMappingSubscriber" should "accept expected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new MavenDependenciesMappingSubscriber(projectRoot) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("MavenDependenciesMappingRule") loggingEvent.setMessage("{} mapped {} to {} in {}") loggingEvent.setArgumentArray(Array( "MavenDependenciesMappingRule", Set("zzzz:yyyy:xxxx"), Set("xxxx:yyyy:zzzz"), new File(projectRoot, "pom.xml") )) subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) val result = new String(outputStream.toByteArray) result should include ("#### File [pom.xml](pom.xml)") result should include ("xxxx:yyyy:zzzz") result should include ("zzzz:yyyy:xxxx") } }
Example 50
Source File: ArtifactsSummarySubscriberTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven.report import java.io.{ByteArrayOutputStream, File} import ch.qos.logback.classic.spi.LoggingEvent import org.scalatest.{FlatSpecLike, Matchers} class ArtifactsSummarySubscriberTest extends FlatSpecLike with Matchers { val projectRoot = new File(getClass.getClassLoader.getResource(".").getFile) "ArtifactsSummarySubscriber" should "not accept unexpected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new ArtifactsSummarySubscriber(projectRoot) subscriber.accept("hahah") subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent = new LoggingEvent loggingEvent.setMessage("Some random message") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) } "ArtifactsSummarySubscriber" should "accept expected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new ArtifactsSummarySubscriber(projectRoot) val loggingEvent = new LoggingEvent loggingEvent.setMessage("Found maven pom {} for artifact {}") loggingEvent.setArgumentArray(Array(new File(projectRoot, "abc/pom.xml"), "abc")) subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) val result = new String(outputStream.toByteArray) result should include ("abc/pom.xml") result should include ("abc") } }
Example 51
Source File: MavenExcludeDependenciesRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven import java.io.File import org.apache.commons.io.FileUtils import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} import scala.collection.JavaConversions._ class MavenExcludeDependenciesRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("mvnproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "MavenExcludeDependenciesRule" should "exclude the dependencies if they are used transitively" in { val ruleConfig = MavenExcludeDependenciesRuleConfig( Set(SimpleExclusion("org.springframework", "spring-aop")) ) val projectCtx = new MavenProjectCtx(destProjectRoot) val provider = new MultiModuleMavenModelProvider val model = provider create projectCtx val rule = new MavenExcludeDependenciesRule(ruleConfig) provider save rule.transform(model) val transformed = provider create projectCtx transformed.modules foreach { module => if (module.pomModel.getPackaging != "war") { module.pomModel.getDependencies.forall(_.getExclusions.size == 0) should be (true) }else { module.pomModel.getDependencies.exists(_.getExclusions.size > 0) should be (true) } } } }
Example 52
Source File: MavenUtilTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.maven.util import java.io.FileReader import org.apache.maven.model.io.xpp3.MavenXpp3Reader import org.apache.maven.{model => maven} import org.eclipse.aether.artifact.DefaultArtifact import org.eclipse.aether.graph.Dependency import org.scalatest.{FlatSpecLike, Matchers} import scala.collection.JavaConversions._ class MavenUtilTest extends FlatSpecLike with Matchers { import MavenUtil._ "MavenUtil" should "be able resolve an artifact" in { val artifact = MavenUtil.resolveArtifact(new DefaultArtifact("org.springframework:spring-parent:pom:3.1.4.RELEASE")) val model = new MavenXpp3Reader().read(new FileReader(artifact.getFile)) model.getDependencyManagement.getDependencies.size should not be 0 } "MavenUtil" should "be able to get all dependencies for an artifact" in { val dependencies = MavenUtil.allDependencies(new DefaultArtifact("com.typesafe.akka:akka-remote_2.11:jar:2.3.12")) dependencies.size should not be 0 // com.typesafe:config:jar:1.2.1 is transitive dependency for com.typesafe.akka:akka-actor_2.11:jar:2.3.12 dependencies exists (_.getArtifactId == "config") should be (true) } "MavenUtil" should "be able to get all dependencies for an maven dependency w/o cache" in { val dependency = new maven.Dependency() dependency.setGroupId("com.typesafe.akka") dependency.setArtifactId("akka-remote_2.11") dependency.setType("jar") dependency.setVersion("2.3.12") val dependencies = MavenUtil.getTransitiveDependencies(dependency, enableCache = true) dependencies.size should not be 0 // com.typesafe:config:jar:1.2.1 is transitive dependency for com.typesafe.akka:akka-actor_2.11:jar:2.3.12 dependencies exists (_.getArtifactId == "config") should be (true) val cachedDependencies = MavenUtil.getTransitiveDependencies(dependency, enableCache = true) cachedDependencies.toString should be (dependencies.toString) } "MavenUtil" should "be able to get all release versions" in { val versions = MavenUtil.findAvailableVersions("org.springframework", "spring-parent") versions.size should not be 0 versions forall {version => !version.contains("SNAPSHOT")} should be (true) } "MavenUtil" should "be able to get all snapshot versions" in { val versions = MavenUtil.findAvailableVersions("org.springframework", "spring-parent", snapshot = true) versions.size should be (0) } "MavenUtil" should "be able to get all micro release versions" in { val versions = MavenUtil.findAvailableVersions("org.springframework", "spring-parent", "3.1") versions.size should not be 0 versions foreach (_.startsWith("3.1") should be (true)) versions forall {version => !version.contains("SNAPSHOT")} should be (true) } "MavenUtil" should "be able to get all micro snapshot versions" in { val versions = MavenUtil.findAvailableVersions("org.springframework", "spring-parent", "3.1", snapshot = true) versions.size should be (0) } "MavenUtil" should "be able to convert maven.model.Dependency to aether.graph.dependency" in { val mavenDependency = new maven.Dependency mavenDependency.setArtifactId("spring-parent") mavenDependency.setGroupId("org.springframework") mavenDependency.setVersion("3.1.4.RELEASE") val aetherDependency: Dependency = mavenDependency aetherDependency.getArtifact.getArtifactId should be (mavenDependency.getArtifactId) aetherDependency.getArtifact.getGroupId should be (mavenDependency.getGroupId) aetherDependency.getArtifact.getVersion should be (mavenDependency.getVersion) } }
Example 53
Source File: XMLFilesModelProviderTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.generic import java.io.File import org.apache.commons.io.FileUtils import com.ebay.rtran.xml.XMLFilesModelProvider import org.scalatest.{FlatSpecLike, Matchers} import scala.io.Source class XMLFilesModelProviderTest extends FlatSpecLike with Matchers { val projectRoot = new File(getClass.getClassLoader.getResource("someproject").getFile) "XMLFilesModeProvider" should "get all xml files in the project" in { val provider = new XMLFilesModelProvider val model = provider.create(new GenericProjectCtx(projectRoot)) model.xmlRoots.size should be (1) } "XMLFilesModeProvider" should "be able to save the files that are marked modified" in { val provider = new XMLFilesModelProvider val model = provider.create(new GenericProjectCtx(projectRoot)) val (file, root) = model.xmlRoots.head val newFile = new File(file.getParentFile, file.getName + ".new") provider.save(model.copy(modified = Map(newFile -> Some(root)))) val content = Source.fromFile(newFile).getLines.filterNot(_.matches("\\s+")).map(_.trim).mkString content should not be "" FileUtils.deleteQuietly(newFile) } }
Example 54
Source File: ModifyFilesRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.generic import java.io.File import org.apache.commons.io.FileUtils import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} import scala.io.Source class ModifyFilesRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("someproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "ModifyFilesRule" should "modify the file correctly" in { val ruleConfig = ModifyFilesRuleConfig( "**/fileA.txt", None, List( ContentMapping("hello\\s(.+)\\n", "hallo $1\n"), ContentMapping("(.+)\\sBob", "$1 Alice") ) ) val projectCtx = new GenericProjectCtx(destProjectRoot) val provider = new AllFilesModelProvider val model = provider create projectCtx val rule = new ModifyFilesRule(ruleConfig) val result = rule transform model val file = result.files.find(_.getName == "fileA.txt") file.nonEmpty should be (true) Source.fromFile(file.get).getLines.toList should be (List("hallo world", "hi Alice")) } }
Example 55
Source File: MoveFilesRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.generic import java.io.File import org.apache.commons.io.FileUtils import org.json4s.jackson.JsonMethods._ import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} class MoveFilesRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("someproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "MoveFilesRule" should "move file to the dest directory" in { val ruleConfigJson = asJsonNode(parse( """ |{ | "moves":[ | { | "pathPattern":"**.txt", "otherdirectory/dest"), Move("*.txt", "otherdirectory") ) ) val projectCtx = new GenericProjectCtx(destProjectRoot) val provider = new AllFilesModelProvider val model = provider create projectCtx val rule = new MoveFilesRule(ruleConfig) val result = rule transform model result.files forall (_.exists) should be (true) } }
Example 56
Source File: ModifyXMLFilesRuleTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.generic import java.io.File import org.apache.commons.io.FileUtils import com.ebay.rtran.xml._ import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} import scala.io.Source import scala.language.postfixOps class ModifyXMLFilesRuleTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectRoot = new File(getClass.getClassLoader.getResource("someproject").getFile) val destProjectRoot = new File(projectRoot.getParentFile, projectRoot.getName + "-bak") override def beforeEach = { FileUtils.deleteQuietly(destProjectRoot) FileUtils.copyDirectory(projectRoot, destProjectRoot) } "ModifyXMLFilesRuleTest" should "able to delete nodes" in { val provider = new XMLFilesModelProvider val ruleConfig = ModifyXMLFilesRuleConfig( Some("***.xml"), List( ModifyXMLOperation( "//person[@name=\'Bob\']/job", OperationType.Replace, Some("<job>Software Engineer</job>") ) ) ) val provider = new XMLFilesModelProvider val rule = new ModifyXMLFilesRule(ruleConfig) val transformedModel = rule.transform(provider.create(new GenericProjectCtx(destProjectRoot))) provider save transformedModel val transformedContent = Source.fromFile(new File(destProjectRoot, "somedirectory/someXML.xml")).getLines.mkString("\n") transformedContent should include ("Bob") transformedContent should include ("Software Engineer") transformedContent should not include "Salesman" } }
Example 57
Source File: DefaultJsonRuleConfigFactoryTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.core import org.json4s.jackson.JsonMethods._ import com.ebay.rtran.api.IRuleConfig import org.scalatest.{FlatSpecLike, Matchers} class DefaultJsonRuleConfigFactoryTest extends FlatSpecLike with Matchers { case class Person(name: String, age: Int) extends IRuleConfig "DefaultJsonRuleConfigFactory" should "create config object from JSON" in { val json = asJsonNode(parse( """ |{ | "name":"abc", | "age":30 |} """.stripMargin )) val p = DefaultJsonRuleConfigFactory.createRuleConfig(classOf[Person], json) p.name should be ("abc") p.age should be (30) } }
Example 58
Source File: ModelProviderRegistryTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.core import com.ebay.rtran.api.{IModel, IModelProvider, IProjectCtx} import com.ebay.rtran.core.mock._ import org.scalatest.{FlatSpecLike, Matchers} class ModelProviderRegistryTest extends FlatSpecLike with Matchers { "ModelProviderRegistry" should "merge all implementations from metadata" in { ModelProviderRegistry.providers.size should not be 0 } "ModelProviderRegistry" should "be able to register new provider at runtime" in { val size = ModelProviderRegistry.providers.size ModelProviderRegistry.registerProvider(new MyDummyModelProvider().asInstanceOf[IModelProvider[IModel, IProjectCtx]]) ModelProviderRegistry.providers.size should be (size + 1) } "ModelProviderRegistry" should "find the correct provider according to model class and project class" in { ModelProviderRegistry.findProvider(classOf[MyFileModel], classOf[MyProject]).nonEmpty should be (true) ModelProviderRegistry.findProvider(classOf[MyDummyModel], classOf[MyProject]).nonEmpty should be (true) ModelProviderRegistry.findProvider(classOf[MyDummyModel2], classOf[MyProject]).nonEmpty should be (false) } }
Example 59
Source File: RuleRegistryTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.core import org.scalatest.{FlatSpecLike, Matchers} class RuleRegistryTest extends FlatSpecLike with Matchers { "RuleRegistry" should "register rule definitions" in { RuleRegistry.rules.size should not be 0 } "RuleRegistry" should "get rule class according to the id" in { RuleRegistry.findRuleDefinition("ModifyFileRule").nonEmpty should be (true) RuleRegistry.findRuleDefinition("RenameFileRule").nonEmpty should be (true) RuleRegistry.findRuleDefinition("non-exist").nonEmpty should be (false) } "RuleRegistry" should "check rule class existence according to the id" in { RuleRegistry.hasRule("ModifyFileRule") should be (true) RuleRegistry.hasRule("RenameFileRule") should be (true) RuleRegistry.hasRule("non-exist") should be (false) } }
Example 60
Source File: RuleEngineTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.core import java.io.File import org.apache.commons.io.FileUtils import org.json4s.jackson.JsonMethods._ import com.ebay.rtran.core.mock.{MyModifyFileRule, MyProject, MyRenameFileRule, MyRenameFileRuleConfig} import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} import scala.io.Source import scala.collection.JavaConversions._ class RuleEngineTest extends FlatSpecLike with Matchers with BeforeAndAfterEach { val projectDir = new File(getClass.getClassLoader.getResource("myproject").getFile) val backupDir = new File(projectDir.getParentFile, projectDir.getName + "-bak") override def beforeEach = { FileUtils.copyDirectory(projectDir, backupDir) } override def afterEach = { FileUtils.deleteQuietly(backupDir) } "RuleEngine" should "execute rules from UpgradeConfiguration" in { val engine = new RuleEngine val projectRoot = backupDir val configuration = JsonUpgradeConfiguration( List( JsonRuleConfiguration("ModifyFileRule", None), JsonRuleConfiguration("RenameFileRule", Some(parse("""{"newName":"anotherfile"}"""))) )) engine.execute(new MyProject(projectRoot), configuration) new File(projectRoot, "somefile").exists should be (false) new File(projectRoot, "anotherfile").exists should be (true) Source.fromFile(new File(projectRoot, "anotherfile")).getLines.toList should be (List("hi world", "hi Bob")) } "RuleEngine" should "execute rules from code" in { val engine = new RuleEngine val projectRoot = backupDir engine.execute( new MyProject(projectRoot), List( new MyModifyFileRule(), new MyRenameFileRule(MyRenameFileRuleConfig("anotherfile")) ) ) new File(projectRoot, "somefile").exists should be (false) new File(projectRoot, "anotherfile").exists should be (true) Source.fromFile(new File(projectRoot, "anotherfile")).getLines.toList should be (List("hi world", "hi Bob")) } }
Example 61
Source File: JsonUpgradeConfigurationTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.core import org.json4s.DefaultFormats import org.json4s.jackson.JsonMethods._ import org.scalatest.{FlatSpecLike, Matchers} class JsonUpgradeConfigurationTest extends FlatSpecLike with Matchers { implicit val formats = DefaultFormats "UpgradeConfiguration" should "be constructed from JSON string with projectType and rules defined" in { val jsonString = """ |{ | "ruleConfigs":[ | {"name":"MyModifyFileRule"}, | {"name":"MyRenameFileRule"} | ] |} """.stripMargin val configuration = parse(jsonString).extract[JsonUpgradeConfiguration] configuration.ruleConfigs should be (List( JsonRuleConfiguration("MyModifyFileRule", None), JsonRuleConfiguration("MyRenameFileRule", None) )) } "UpgradeConfiguration" should "be constructed from JSON string with all fields defined" in { val jsonString = """ |{ | "ruleConfigs":[ | { | "name":"MyModifyFileRule", | "config":{ | "key1":"value1" | } | }, | { | "name":"MyRenameFileRule", | "config":[ | "value1", | "value2" | ] | }, | { | "name":"MyRenameFileRule", | "config":{ | "key3":{ | "key1":"value1" | }, | "key4":"value4" | } | } | ] |} """.stripMargin val configuration = parse(jsonString).extract[JsonUpgradeConfiguration] configuration.ruleConfigs.size should be (3) configuration.ruleConfigs foreach (_.config should not be None) } }
Example 62
Source File: ReportTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.report import java.io.{File, FileOutputStream, OutputStream} import java.util.Optional import com.typesafe.scalalogging.LazyLogging import com.ebay.rtran.report.api.IReportEventSubscriber import org.scalatest.{FlatSpecLike, Matchers} class ReportTest extends FlatSpecLike with Matchers with LazyLogging { "Report" should "accept log event correctly" in { val subscriber = new TestSubscriber val outputStream = new FileOutputStream("test") Report.createReport(outputStream, subscribers = List(subscriber))(testFunc()) subscriber.getCount should be (3) new File("test").delete } "Report" should "work in concurrent mode" in { val subscribers = (1 to 10) map (_ => new TestSubscriber) subscribers foreach {sub => new Thread(new TestThread(sub)).start() } val waitPeriod = 1000 Thread.sleep(waitPeriod) subscribers foreach (_.getCount should be (3)) } class TestThread(subscriber: IReportEventSubscriber[_]) extends Runnable { override def run(): Unit = { val file = new File(s"test-${System.nanoTime}") val outputStream = new FileOutputStream(file) Report.createReport(outputStream, subscribers = List(subscriber))(testFunc()) file.delete } } def testFunc(): Unit = { val str = "hello" val number = 2000 logger.info("String {}", str) logger.info(s"number ${number + 2}") logger.info("String {} number {}", str, number.toString) } class TestSubscriber extends IReportEventSubscriber[Int] { import scala.compat.java8.OptionConverters._ private var count = 0 def getCount = count override def filter(event: scala.Any): Optional[Int] = Some(1).asJava override def dumpTo(outputStream: OutputStream): Unit = {} override def doAccept(event: Int): Unit = count += event } }
Example 63
Source File: ReportAndLogSupportTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.report import java.io.File import com.typesafe.scalalogging.LazyLogging import org.scalatest.{BeforeAndAfterEach, FlatSpecLike, Matchers} import scala.io.Source class ReportAndLogSupportTest extends FlatSpecLike with Matchers with BeforeAndAfterEach with LazyLogging { val projectRoot = new File(getClass.getClassLoader.getResource(".").getFile, "testdir") projectRoot.mkdirs val report = new ReportAndLogSupport { override val warnLogPrefix: String = "test-warn-log" override val debugLogPrefix: String = "test-debug-log" override val reportFilePrefix: String = "test-report" } "report" should "get all subscribers that implement IReportEventSubscriber" in { report.allSubscribers(projectRoot, "com.ebay.rtran.report").size should not be 0 } "report" should "create the logs and report" in { report.createReportAndLogs(projectRoot, None) { logger.info("This is an info") logger.warn("This is a warning") logger.debug("Debug this") } val reportFile = new File(projectRoot, report.reportFilePrefix + ".md") reportFile.exists should be (true) val warnLog = new File(projectRoot, report.warnLogPrefix + ".log") warnLog.exists should be (true) Source.fromFile(warnLog).getLines.mkString should include ("This is a warning") val debugLog = new File(projectRoot, report.debugLogPrefix + ".log") debugLog.exists should be (true) val content = Source.fromFile(debugLog).getLines.mkString content should include ("This is an info") content should include ("This is a warning") content should include ("Debug this") reportFile.delete warnLog.delete debugLog.delete } }
Example 64
Source File: UpgradeSummarySubscriberTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.report.impl import java.io.ByteArrayOutputStream import ch.qos.logback.classic.spi.LoggingEvent import org.scalatest.{FlatSpecLike, Matchers} class UpgradeSummarySubscriberTest extends FlatSpecLike with Matchers { "UpgradeSummarySubscriber" should "not accept unexpected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new UpgradeSummarySubscriber subscriber.accept("hahah") subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent = new LoggingEvent loggingEvent.setLoggerName("fake") loggingEvent.setMessage("Some random message") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) } "UpgradeSummarySubscriber" should "accept expected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new UpgradeSummarySubscriber val loggingEvent = new LoggingEvent loggingEvent.setMessage("Rule some_rule was applied to 3 files") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) val result = new String(outputStream.toByteArray) result should include ("|[some_rule](#some_rule) | impacted 3 file(s) |") } }
Example 65
Source File: ProjectDetailsSubscriberTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.report.impl import java.io.ByteArrayOutputStream import ch.qos.logback.classic.spi.LoggingEvent import org.scalatest.{FlatSpecLike, Matchers} class ProjectDetailsSubscriberTest extends FlatSpecLike with Matchers { "ProjectDetailsSubscriber" should "not accept unexpected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new ProjectDetailsSubscriber subscriber.accept("hahah") subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent = new LoggingEvent loggingEvent.setMessage("Some random message") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) } "ProjectDetailsSubscriber" should "accept expected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new ProjectDetailsSubscriber val loggingEvent = new LoggingEvent loggingEvent.setMessage("Starting upgrade Scala project to 2.5.4-RELEASE, pom pom.xml with taskId None") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) val result = new String(outputStream.toByteArray) result should include ("pom.xml") result should include ("2.5.4-RELEASE") result should include ("Scala project upgrade report") result should include ("Upgrade job ID | None") result should include ("Full upgrade log | [link](raptor-upgrade-debug.log)") result should include ("Upgrade warnings only log | [link](raptor-upgrade-warn.log)") outputStream.reset() val loggingEvent2 = new LoggingEvent loggingEvent2.setMessage("Starting upgrade Scala project to 2.5.4-RELEASE, pom pom.xml with taskId Some(1234)") subscriber.accept(loggingEvent2) subscriber.dumpTo(outputStream) val result2 = new String(outputStream.toByteArray) result2 should include ("pom.xml") result2 should include ("2.5.4-RELEASE") result2 should include ("Scala project upgrade report") result2 should include ("Upgrade job ID | Some(1234)") result2 should include ("Full upgrade log | [link](raptor-upgrade-debug-1234.log)") result2 should include ("Upgrade warnings only log | [link](raptor-upgrade-warn-1234.log)") } }
Example 66
Source File: ManualChangesSummarySubscriberTest.scala From RTran with Apache License 2.0 | 5 votes |
package com.ebay.rtran.report.impl import java.io.ByteArrayOutputStream import ch.qos.logback.classic.spi.LoggingEvent import org.scalatest.{FlatSpecLike, Matchers} class ManualChangesSummarySubscriberTest extends FlatSpecLike with Matchers { "ManualChangesSummarySubscriber" should "not accept unexpected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new ManualChangesSummarySubscriber subscriber.accept("hahaha") subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) val loggingEvent = new LoggingEvent loggingEvent.setMessage("Some random message") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) outputStream.toByteArray should be (Array.empty[Byte]) } "ManualChangesSummarySubscriber" should "accept expected events" in { val outputStream = new ByteArrayOutputStream val subscriber = new ManualChangesSummarySubscriber val loggingEvent = new LoggingEvent loggingEvent.setMessage("Rule blahblah requires 1000 manual changes") subscriber.accept(loggingEvent) subscriber.dumpTo(outputStream) val result = new String(outputStream.toByteArray) result should include ("|[blahblah](#blahblah) | 1000 manual changes required |") } }
Example 67
Source File: SimulateDistributionSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.pattern.timeoutpolicy import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.duration._ import scala.concurrent.{Await, Future} import scala.util.{Random, Try} class SimulateDistributionSpec extends FlatSpecLike with Matchers{ "Random.nextGaussian" should "work as expected" in { import scala.concurrent.ExecutionContext.Implicits.global val timeoutPolicy = TimeoutPolicy(Some("test"), initial = 1.seconds, rule = 3.sigma, minSamples = 100, startOverCount = 500) val sigma = 30 val mean = 50 for (i <- 0 until 1000) { val tx = timeoutPolicy.transaction Try{ Await.ready(Future{ val s = (Random.nextGaussian() * sigma + mean).round Thread.sleep(s) }, tx.waitTime) } tx.end() // val metrics = timeoutPolicy.metrics // println(s"average=${metrics.averageTime}, standardDeviation=${metrics.standardDeviation}") } Thread.sleep(5000) val metrics = timeoutPolicy.metrics println(s"average=${metrics.averageTime.toLong}, standardDeviation=${metrics.standardDeviation.toLong}") val succeedPercent = (metrics.totalCount - metrics.timeoutCount) / metrics.totalCount.toDouble println(succeedPercent) println(metrics) } "NegativeExponentialTruncated" should "works fine with TimeoutPolicy " in { negativeExponential(truncate = true) } "NegativeExponentialNotTruncated" should "works fine with TimeoutPolicy " in { negativeExponential(truncate = false) } def negativeExponential(truncate: Boolean): Unit = { val delay = getDelay(truncate = truncate, cycleMin = 20.millis, cycleMean = 30.millis, cycleMax = 50.milliseconds) import scala.concurrent.ExecutionContext.Implicits.global val timeoutPolicy = TimeoutPolicy(Some("test"), initial = 1.seconds, rule = 3.sigma) for (i <- 0 until 1000) { val tx = timeoutPolicy.transaction Try{ Await.ready(Future{ val s = delay().toMillis Thread.sleep(s) }, tx.waitTime) } tx.end() // val metrics = timeoutPolicy.metrics } Thread.sleep(5000) val metrics = timeoutPolicy.metrics println(s"average=${metrics.averageTime.toLong}, standardDeviation=${metrics.standardDeviation.toLong}") val succeedPercent = (metrics.totalCount - metrics.timeoutCount) / metrics.totalCount.toDouble println(succeedPercent) println(metrics) } def getDelay(truncate: Boolean = true, cycleMin: FiniteDuration = 0.seconds, cycleMean: FiniteDuration = 1.seconds, cycleMax: FiniteDuration = 5.seconds): () => FiniteDuration = { val (shift, mean) = if (!truncate) { val shift1 = cycleMin.toNanos val mean1 = cycleMean.toNanos - shift1 (shift1, mean1) } else (0L, cycleMean.toNanos) () => { val delay = if (cycleMean.toNanos > 0) { val x = { val ix = Random.nextDouble() if (ix == 0d) Double.MinPositiveValue else ix } val iDelay = shift + (mean * -Math.log(x)).toLong if (iDelay < cycleMin.toNanos) cycleMin.toNanos else if (iDelay > cycleMax.toNanos) cycleMax.toNanos else iDelay } else 0L delay.nanoseconds } } }
Example 68
Source File: TimeoutPolicySpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.pattern.timeoutpolicy import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ import scala.concurrent.{Await, Future} import scala.util.Try class TimeoutPolicySpec extends FlatSpecLike with Matchers{ "TimeoutPolicy Object" should "works fine" in { an [IllegalArgumentException] should be thrownBy TimeoutPolicy(Some(""), null, null) an [IllegalArgumentException] should be thrownBy TimeoutPolicy(Some(""), 1.second, fixedRule, debug = null) val preLength = TimeoutPolicy.policyMetrics.size val policy = TimeoutPolicy(None, 1.second, fixedRule) TimeoutPolicy.policyMetrics.size should be(preLength) policy shouldBe a [FixedTimeoutPolicy] val sigmaPolicy = TimeoutPolicy(Some("test"), 1.seconds, 2.sigma, minSamples = 1) TimeoutPolicy.policyMetrics.get("test") should not be None } "Run FixedTimeoutPolicy in function" should "work" in { val policy = TimeoutPolicy(name = Some("test"), initial = 1.second, fixedRule, minSamples = 1) for(_ <- 0 until 10) { policy.execute((timeout: FiniteDuration) => { timeout should be(1.second) Thread.sleep(10) }) } Thread.sleep(3000) val metrics = policy.metrics metrics.name should contain ("test") metrics.initial should be (1.second) metrics.totalCount should be (10) TimeoutPolicy.resetPolicy("test") Thread.sleep(500) policy.metrics.totalCount should be(0) } "Run SigmaTimeoutPolicy in explicit transaction" should "work" in { val policy = TimeoutPolicy(name = Some("test"), initial = 1.second, 3.sigma, minSamples = 1) for(i <- 0 until 10) { val tx = policy.transaction Try { Await.ready(Future{ Thread.sleep(100) if (i > 2) { tx.waitTime.toMillis should be < 1000l } }, tx.waitTime) } tx.end() } Thread.sleep(3000) val metrics = policy.metrics metrics.name should contain ("test") metrics.initial should be (1.second) metrics.totalCount should be (10) } }
Example 69
Source File: MathUtilSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.pattern.timeoutpolicy import org.scalactic.TolerantNumerics import org.scalatest.{Matchers, FlatSpecLike} import org.apache.commons.math3.special.Erf class MathUtilSpec extends FlatSpecLike with Matchers{ it should "pass NaN cases" in { java.lang.Double.isNaN(MathUtil.erfInv(-1.001)) should be(true) java.lang.Double.isNaN(MathUtil.erfInv(1.001)) should be(true) } it should "pass Infinite case" in { MathUtil.erfInv(1) should be(Double.PositiveInfinity) MathUtil.erfInv(-1) should be(Double.NegativeInfinity) } it should "pass regular case" in { for (x <- (-5.9).until(5.9, 0.01)) { val y = Erf.erf(x) val dydx = 2 * math.exp(-x * x) / math.sqrt(Math.PI) implicit val equality = TolerantNumerics.tolerantDoubleEquality(1.0e-15 / dydx) x shouldEqual(MathUtil.erfInv(y)) } } }
Example 70
Source File: MetricsSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.pattern.timeoutpolicy import org.scalatest.{Matchers, FlatSpecLike} import concurrent.duration._ class MetricsSpec extends FlatSpecLike with Matchers{ "Metrics" should "start over on totalCount exceed startOverCount" in { val metrics = Metrics(None, 2.seconds, 3) val metrics2 = metrics.update(3.millis.toNanos, isTimeout = false) val metrics3 = metrics2.update(4.millis.toNanos, isTimeout = true) val metrics4 = metrics3.update(4.millis.toNanos, isTimeout = true) metrics4.totalCount shouldBe 3 // exceed start over Count val metrics5 = metrics4.update (3.millis.toNanos, isTimeout = false) metrics5.totalCount should be (1) metrics5.totalTime should be (3.millis.toNanos) metrics5.timeoutCount should be (0) metrics5.sumSquares should be (0.0) } "Metrics" should "be reset correctly" in { val metrics = Metrics(None, 2.seconds, 3) val metrics2 = metrics.update(3.millis.toNanos, isTimeout = false) val metrics3 = metrics2.update(4.millis.toNanos, isTimeout = true) val metrics4 = metrics3.update(4.millis.toNanos, isTimeout = true) metrics4.totalCount shouldBe 3 // reset val metrics5 = metrics4.reset() metrics5.totalCount should be (0) metrics5.initial should be (2.seconds) metrics5.startOverCount should be (3) metrics5.sumSquares should be (0.0) metrics5.timeoutCount should be (0) metrics5.totalTime should be (0) val metrics6 = metrics5.reset(Some(3.seconds), 4) metrics6.totalCount should be (0) metrics6.initial should be (3.seconds) metrics6.startOverCount should be (4) metrics6.sumSquares should be (0.0) metrics6.timeoutCount should be (0) metrics6.totalTime should be (0) } }
Example 71
Source File: DefaultHttpEndpointResolverSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.httpclient import akka.http.scaladsl.model.Uri import org.scalatest.OptionValues._ import org.scalatest.{FlatSpecLike, Matchers} import org.squbs.resolver.ResolverRegistry import org.squbs.testkit.CustomTestKit class DefaultHttpEndpointResolverSpec extends CustomTestKit with FlatSpecLike with Matchers { ResolverRegistry(system).register(new DefaultHttpEndpointResolver) private def resolve(uri: String) = ResolverRegistry(system).resolve[HttpEndpoint](uri).value it should "resolve valid http uri string to an HttpEndpoint" in { resolve("http://akka.io:80") shouldBe HttpEndpoint(Uri("http://akka.io:80")) resolve("http://akka.io") shouldBe HttpEndpoint(Uri("http://akka.io")) } it should "resolve valid https uri string to an HttpEndpoint" in { resolve("https://akka.io:443") shouldBe HttpEndpoint(Uri("https://akka.io:443")) resolve("https://akka.io") shouldBe HttpEndpoint(Uri("https://akka.io")) } it should "not resolve invalid http uri string to an HttpEndpoint" in { ResolverRegistry(system).resolve[HttpEndpoint]("invalidUri:") shouldBe empty ResolverRegistry(system).resolve[HttpEndpoint]("ftp://akka.io") shouldBe empty } it should "set the resolver name to the class name" in { (new DefaultHttpEndpointResolver).name shouldEqual "org.squbs.httpclient.DefaultHttpEndpointResolver" } }
Example 72
Source File: RequestContextSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.pipeline import akka.actor.ActorSystem import akka.http.scaladsl.model.headers.RawHeader import akka.http.scaladsl.model.{HttpRequest, HttpResponse} import akka.testkit.TestKit import org.scalatest.OptionValues._ import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import scala.util.Try class RequestContextSpec extends TestKit(ActorSystem("RequestContextSpecSys")) with FlatSpecLike with Matchers with BeforeAndAfterAll { override def afterAll(): Unit = { system.terminate() } it should "handle attributes correctly (withAttributes/removeAttributes/expanded variable args)" in { val attributeAdditions = List( "key1" -> "val1", "key2" -> 1, "key3" -> new Exception("Bad Val") ) val rc1 = RequestContext(HttpRequest(), 0) val rc2 = rc1.withAttributes(attributeAdditions:_*) rc1.attributes should have size 0 rc2.attributes should equal(attributeAdditions.toMap) val addedKeys = attributeAdditions.map(_._1).toSet val removeKeys = Set(addedKeys.head, addedKeys.last) val rc3 = rc2.removeAttributes("ibetternotexist" +: removeKeys.toList:_*) rc3.attributes.keys.toSet should equal(addedKeys -- removeKeys) } it should "handle attributes correctly (withAttributes/variable args)" in { val rc = RequestContext(HttpRequest(), 0) rc.withAttributes( "key1" -> "val1", "key2" -> 1 ).attributes should equal(Map("key1" -> "val1", "key2" -> 1)) rc.attributes should have size 0 } it should "handle attributes correctly (withAttribute/removeAttribute)" in { val rc1 = RequestContext(HttpRequest(), 0) rc1.attributes should have size 0 val rc2 = rc1.withAttribute("key1", "val1") rc1.attributes should have size 0 // Immutability rc2.attribute("key1") should be(Some("val1")) val rc3 = rc2.withAttribute("key2", 1).withAttribute("key3", new Exception("Bad Val")) rc3.attribute("key2") should be(Some(1)) rc3.attribute[Exception]("key3").value.getMessage should be("Bad Val") rc3.attribute("key1") should be(Some("val1")) rc3.attributes should have size 3 val rc4 = rc3.removeAttribute("key1") rc3.attributes should have size 3 // Immutability rc4.attributes should have size 2 val rc5 = rc4.removeAttribute("notexists") rc5.attributes should have size 2 rc5.attribute("key2") should be(Some(1)) rc5.attribute[Exception]("key3").value.getMessage should be("Bad Val") } it should "handle headers correctly" in { val rc1 = RequestContext(HttpRequest(), 0) val rc2 = rc1.withRequestHeader(RawHeader("key1", "val1")) val rc3 = rc2.withRequestHeaders(RawHeader("key2", "val2"), RawHeader("key3", "val3")) rc3.request.headers should have size 3 rc3.response should be(None) rc3.request.headers should contain(RawHeader("key1", "val1")) val rc4 = rc3.withResponse(Try(HttpResponse())) rc4.response.value.get.headers should have size 0 val rc5 = rc4.withResponseHeader(RawHeader("key4", "val4")) val rc6 = rc5.withResponseHeaders(RawHeader("key5", "val5"), RawHeader("key6", "val6")) val rc7 = rc6.withResponseHeader(RawHeader("key7", "val7")) rc7.request.headers should have size 3 rc7.response.value.get.headers should have size 4 rc7.response.value.get.headers should contain(RawHeader("key4", "val4")) } }
Example 73
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 74
Source File: PerpetualStreamMergeHubJSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.stream import akka.actor.{ActorRef, ActorSystem} import akka.http.scaladsl.Http import akka.http.scaladsl.model.{HttpRequest, Uri} import akka.pattern.ask import akka.stream.ActorMaterializer import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalatest.{FlatSpecLike, Matchers} import org.squbs.unicomplex.Timeouts.{awaitMax, _} import org.squbs.unicomplex._ import scala.collection.mutable import scala.concurrent.Await object PerpetualStreamMergeHubJSpec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPaths = Array("JavaPerpetualStreamMergeHubSpec") map (dummyJarsDir + "/" + _) val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = JavaPerpetualStreamMergeHubSpec | ${JMX.prefixConfig} = true |} |default-listener.bind-port = 0 """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing { (name, config) => ActorSystem(name, config) } .scanComponents(classPaths) .start() } class PerpetualStreamMergeHubJSpec extends TestKit(PerpetualStreamMergeHubJSpec.boot.actorSystem) with FlatSpecLike with Matchers { val portBindings = Await.result((Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]], awaitMax) val psActorName = "/user/JavaPerpetualStreamMergeHubSpec/perpetualStreamWithMergeHub" val actorRef = Await.result((system.actorSelection(psActorName) ? RetrieveMyMessageStorageActorRef).mapTo[ActorRef], awaitMax) val port = portBindings("default-listener") it should "connect streams with mergehub" in { implicit val ac = ActorMaterializer() Http().singleRequest(HttpRequest(uri = Uri(s"http://127.0.0.1:$port/mergehub"), entity = "10")) Http().singleRequest(HttpRequest(uri = Uri(s"http://127.0.0.1:$port/mergehub"), entity = "11")) awaitAssert { val messages = Await.result((actorRef ? RetrieveMyMessages).mapTo[mutable.Set[MyMessage]], awaitMax) messages should have size 2 messages should contain(MyMessage(10)) messages should contain(MyMessage(11)) } } }
Example 75
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 76
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 77
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 78
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) } }
Example 79
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 80
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 81
Source File: RegisterContextSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.http.scaladsl.model.Uri import akka.http.scaladsl.model.Uri.Path import akka.http.scaladsl.model.Uri.Path.{Empty, Segment, Slash} import org.scalatest.{FlatSpecLike, Matchers} class RegisterContextSpec extends FlatSpecLike with Matchers { "Path matching" should "work" in { val emptyPath = Path("") emptyPath shouldBe empty emptyPath should have length 0 emptyPath.charCount should be (0) println(emptyPath.getClass.getName) emptyPath should be (Empty) emptyPath should not be 'startsWithSegment emptyPath should not be 'startsWithSlash emptyPath.startsWith(Empty) should be (true) val root = Path("/") root should not be empty root should have length 1 root.charCount should be (1) println(root.getClass.getName) root shouldBe a [Slash] root should not be 'startsWithSegment root shouldBe 'startsWithSlash root.startsWith(Empty) should be (true) root.head should be ('/') root.tail should be (Empty) val single = Path("/abc") single should not be empty single should have length 2 single.charCount should be (4) println(single.getClass.getName) single shouldBe a[Slash] single should not be 'startsWithSegment single shouldBe 'startsWithSlash single.startsWith(Path("/")) should be (true) single.startsWith(Path("")) should be (true) single.startsWith(Path("abc")) should be (false) single.head should be ('/') single.tail should be (Path("abc")) val simple = Path("abc") simple should not be empty simple should have length 1 simple.charCount should be (3) println(simple.getClass.getName) simple shouldBe a[Segment] simple shouldBe 'startsWithSegment simple should not be 'startsWithSlash simple.startsWith(Path("/")) should be (false) simple.startsWith(Path("")) should be (true) simple.startsWith(Path("abc")) should be (true) simple.head should be ("abc") simple.tail should be (Empty) val multi = Path("abc/def") multi should not be empty multi should have length 3 multi.charCount should be (7) println(multi.getClass.getName) multi shouldBe a[Segment] multi shouldBe 'startsWithSegment multi should not be 'startsWithSlash multi.startsWith(Path("/")) should be (false) multi.startsWith(Path("")) should be (true) multi.startsWith(Path("abc")) should be (true) multi.head should be ("abc") multi.tail shouldBe a [Slash] multi.startsWith(Path("abc/de")) should be (true) } "request path matching" should "work" in { Uri("http://www.ebay.com").path should not be 'startsWithSlash Uri("http://www.ebay.com").path should not be 'startsWithSegment Uri("http://www.ebay.com").path.startsWith(Empty) should be (true) Uri("http://www.ebay.com/").path shouldBe 'startsWithSlash Uri("http://www.ebay.com/").path should not be 'startsWithSegment Uri("http://www.ebay.com/").path.startsWith(Empty) should be (true) Uri("http://www.ebay.com").path should be (Path("")) Uri("http://www.ebay.com/").path should be (Path("/")) Uri("http://127.0.0.1:8080/abc").path shouldBe 'startsWithSlash Uri("http://www.ebay.com/").path.startsWith(Path("")) should be (true) Uri("http://www.ebay.com").path.startsWith(Path("")) should be (true) Uri("http://www.ebay.com/abc").path.startsWith(Path("")) should be (true) Uri("http://www.ebay.com/abc").path.tail.startsWith(Path("")) should be (true) Uri("http://www.ebay.com/abc").path.tail.startsWith(Path("abc")) should be (true) Uri("http://www.ebay.com/abc/def").path.tail.startsWith(Path("abc")) should be (true) Uri("http://www.ebay.com/abc/def").path.tail.startsWith(Path("abc/def")) should be (true) } }
Example 82
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 83
Source File: ServiceRegistrySpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.http.scaladsl.model.Uri.Path import akka.testkit.TestKit import org.scalatest.{FlatSpecLike, Matchers} import org.squbs.unicomplex.FlowHandler._ class ServiceRegistrySpec extends TestKit(ActorSystem("ServiceRegistrySpec")) with FlatSpecLike with Matchers { "merge" should "work" in { val serviceRegistry = new ServiceRegistry(system.log) import serviceRegistry.merge val pipelineSetting = (None, None, None) val result = merge(Seq(), "abc", "old", pipelineSetting) result should have size 1 result(0)._2 should be ("old") val result1 = merge(result, "", "empty", pipelineSetting) result1 should have size 2 result1(0)._2 should be ("old") result1(1)._2 should be ("empty") val result2 = merge(result1, "abc/def", "abc/def", pipelineSetting) result2 should have size 3 result2(0)._2 should be ("abc/def") result2(1)._2 should be ("old") result2(2)._2 should be ("empty") val result3 = merge(result2, "abc", "new", pipelineSetting) result3 should have size 3 result3(0)._2 should be ("abc/def") result3(1)._2 should be ("new") result3(2)._2 should be ("empty") val finding = result3 find { entry => pathMatch(Path("abc"), entry._1) } finding should not be None finding.get._2 should be ("new") val finding2 = result3 find { entry => pathMatch(Path("abc/def"), entry._1) } finding2 should not be None finding2.get._2 should be ("abc/def") val finding3 = result3 find { entry => pathMatch(Path("aabc/def"), entry._1) } finding3 should not be None finding3.get._2 should be ("empty") val finding4 = result3 find { entry => pathMatch(Path("abc/defg"), entry._1) } finding4 should not be None finding4.get._2 should be ("new") val finding5 = result3 find { entry => pathMatch(Path("abcd/a"), entry._1) // abcd should not match either abc/def nor abc } finding5.get._2 should be ("empty") } }
Example 84
Source File: RouteActorHandlerSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.http.scaladsl.server._ import akka.pattern._ import akka.stream.ActorMaterializer import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.squbs.lifecycle.GracefulStop import org.squbs.unicomplex.Timeouts._ import scala.concurrent.Await object RouteActorHandlerSpec { val classPaths = Array(getClass.getClassLoader.getResource("classpaths/RouteActorHandler").getPath) val config = ConfigFactory.parseString( s""" |default-listener.bind-port = 0 |squbs { | actorsystem-name = RouteActorHandlerSpec | ${JMX.prefixConfig} = true |} """.stripMargin ) val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanComponents(classPaths) .initExtensions.start() } class RouteActorHandlerSpec extends TestKit( RouteActorHandlerSpec.boot.actorSystem) with FlatSpecLike with BeforeAndAfterAll with Matchers { implicit val am = ActorMaterializer() val portBindings = Await.result((Unicomplex(system).uniActor ? PortBindings).mapTo[Map[String, Int]], awaitMax) val port = portBindings("default-listener") override def afterAll(): Unit = { Unicomplex(system).uniActor ! GracefulStop } "Rejection handler" should "be applied to the route actor" in { Await.result(entityAsString(s"http://127.0.0.1:$port/ctx/reject"), awaitMax) should be("rejected") } "Exception handler" should "be applied to the route actor" in { Await.result(entityAsString(s"http://127.0.0.1:$port/ctx/exception"), awaitMax) should be("exception") } } class Service extends RouteDefinition { override def rejectionHandler: Option[RejectionHandler] = Some(RejectionHandler.newBuilder().handle { case ServiceRejection => complete("rejected") }.result()) override def exceptionHandler: Option[ExceptionHandler] = Some(ExceptionHandler { case _: ServiceException => complete("exception") }) override def route: Route = path("reject") { reject(ServiceRejection) } ~ path("exception") { ctx => throw new ServiceException } object ServiceRejection extends Rejection class ServiceException extends Exception }
Example 85
Source File: InvalidPipelineFlowSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import akka.actor.ActorSystem import akka.pattern._ import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalatest.OptionValues._ import org.scalatest.{FlatSpecLike, Matchers} import scala.concurrent.Await import scala.util.Failure object InvalidPipelineFlowSpec { val dummyJarsDir = getClass.getClassLoader.getResource("classpaths").getPath val classPath = dummyJarsDir + "/InvalidPipelineFlowSvc/META-INF/squbs-meta.conf" val config = ConfigFactory.parseString( s""" |squbs { | actorsystem-name = InvalidPipelineFlowSpec | ${JMX.prefixConfig} = true |} |default-listener.bind-port = 0 |akka.http.server.remote-address-header = on """.stripMargin ) import Timeouts._ val boot = UnicomplexBoot(config) .createUsing {(name, config) => ActorSystem(name, config)} .scanResources(withClassPath = false, classPath) .start(startupTimeout) } class InvalidPipelineFlowSpec extends TestKit(InvalidPipelineFlowSpec.boot.actorSystem) with FlatSpecLike with Matchers { "The InvalidPipelineFlowSvc" should "fail" in { import Timeouts._ Await.result(Unicomplex(system).uniActor ? SystemState, awaitMax) shouldBe Failed } "The InvalidPipelineFlowSvc" should "expose errors" in { import Timeouts._ val report = Await.result((Unicomplex(system).uniActor ? ReportStatus).mapTo[StatusReport], awaitMax) report.state shouldBe Failed val initTry = report.cubes.values.head._2.value.reports.values.head.value initTry should matchPattern { case Failure(e: IllegalArgumentException) => } } }
Example 86
Source File: SystemSettingBeanSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.unicomplex import com.typesafe.config.{ConfigFactory} import org.scalatest.{Matchers, FlatSpecLike} import collection.JavaConverters._ class SystemSettingBeanSpec extends FlatSpecLike with Matchers{ "SystemSettingBean" should "read config correctly" in { val config = ConfigFactory.parseString( """ |root { | str: "1" | number: 2 | bool: true | nil: null | map: { | k1: "v1" | k2: { | k21: "v21" | k22: [ | "v220" | ] | } | } | oneLevelList: ["v0", "v1", "v2"] | listList: [ | ["v00", "v01", "v02"], | ["v10", "v11"], | ["v20", "v21"] | ] | listObject: [ | { | k1: "v1" | }, | { | k2: "v2" | } | ] |} """.stripMargin) val bean = new SystemSettingBean(config) val settings = bean.getSystemSetting.asScala settings.length should be(19) settings.find(_.key.equals("root.str")).get.value should be("1") settings.find(_.key.equals("root.number")).get.value should be("2") settings.find(_.key.equals("root.nil")).get.value should be("null") settings.find(_.key.equals("root.bool")).get.value should be("true") settings.find(_.key.equals("root.map.k1")).get.value should be("v1") settings.find(_.key.equals("root.map.k2.k21")).get.value should be("v21") settings.find(_.key.equals("root.map.k2.k22[0]")).get.value should be("v220") settings.find(_.key.equals("root.oneLevelList[0]")).get.value should be("v0") settings.find(_.key.equals("root.oneLevelList[1]")).get.value should be("v1") settings.find(_.key.equals("root.oneLevelList[2]")).get.value should be("v2") settings.find(_.key.equals("root.listList[0][0]")).get.value should be("v00") settings.find(_.key.equals("root.listList[0][1]")).get.value should be("v01") settings.find(_.key.equals("root.listList[0][2]")).get.value should be("v02") settings.find(_.key.equals("root.listList[1][0]")).get.value should be("v10") settings.find(_.key.equals("root.listList[1][1]")).get.value should be("v11") settings.find(_.key.equals("root.listList[2][0]")).get.value should be("v20") settings.find(_.key.equals("root.listList[2][1]")).get.value should be("v21") settings.find(_.key.equals("root.listObject[0].k1")).get.value should be("v1") settings.find(_.key.equals("root.listObject[1].k2")).get.value should be("v2") } }
Example 87
Source File: EnvironmentResolverRegistryJMXSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.env import java.lang.management.ManagementFactory import javax.management.{InstanceNotFoundException, ObjectName} import javax.management.openmbean.CompositeData import akka.actor.ActorSystem import akka.testkit.TestKit import org.scalatest.{FlatSpecLike, Matchers} import scala.language.postfixOps class EnvironmentResolverRegistryJMXSpec extends TestKit(ActorSystem("EnvironmentResolverRegistryJMXSpec")) with FlatSpecLike with Matchers { val oName = ObjectName.getInstance(s"org.squbs.configuration.${system.name}:type=EnvironmentResolverRegistry") it should "not be registered if not accessed at all" in { an [InstanceNotFoundException] should be thrownBy { ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "EnvironmentResolverInfo"). asInstanceOf[Array[CompositeData]] } } it should "not list any environment resolvers when not registered but accessed" in { EnvironmentResolverRegistry(system).resolve val resolvers = ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "EnvironmentResolverInfo"). asInstanceOf[Array[CompositeData]] resolvers should have length 0 } it should "list all environment resolvers with position" in { EnvironmentResolverRegistry(system).register(DummyProdEnvironmentResolver) EnvironmentResolverRegistry(system).register(DummyQAEnvironmentResolver) val resolvers = ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "EnvironmentResolverInfo"). asInstanceOf[Array[CompositeData]] resolvers should have length 2 resolvers(0).get("position") shouldBe 0 resolvers(0).get("name") shouldEqual DummyQAEnvironmentResolver.name resolvers(0).get("className") shouldEqual DummyQAEnvironmentResolver.getClass.getName resolvers(1).get("position") shouldBe 1 resolvers(1).get("name") shouldEqual DummyProdEnvironmentResolver.name resolvers(1).get("className") shouldEqual DummyProdEnvironmentResolver.getClass.getName } }
Example 88
Source File: CircuitBreakerStateSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.streams.circuitbreaker import java.lang.management.ManagementFactory import javax.management.ObjectName import akka.actor.ActorSystem import akka.testkit.TestKit import com.typesafe.config.ConfigFactory import org.scalatest.{FlatSpecLike, Matchers} import org.squbs.streams.circuitbreaker.impl.AtomicCircuitBreakerState import scala.language.postfixOps class CircuitBreakerStateSpec extends TestKit(ActorSystem("CircuitBreakerStateSpec")) with FlatSpecLike with Matchers { implicit val scheduler = system.scheduler import system.dispatcher import scala.concurrent.duration._ it should "use default exponential backoff settings" in { AtomicCircuitBreakerState( "params-with-default-exponential-backoff", 1, 50.milliseconds, 20.milliseconds) assertJmxValue("params-with-default-exponential-backoff", "MaxFailures", 1) assertJmxValue("params-with-default-exponential-backoff", "CallTimeout", "50 milliseconds") assertJmxValue("params-with-default-exponential-backoff", "ResetTimeout", "20 milliseconds") assertJmxValue("params-with-default-exponential-backoff", "MaxResetTimeout", "36500 days") assertJmxValue("params-with-default-exponential-backoff", "ExponentialBackoffFactor", 1.0) } it should "create circuit breaker state with provided exponential backoff settings" in { AtomicCircuitBreakerState( "params-with-custom-exponential-backoff", 1, 50.milliseconds, 20.milliseconds, 2.minutes, 16.0) assertJmxValue("params-with-custom-exponential-backoff", "MaxFailures", 1) assertJmxValue("params-with-custom-exponential-backoff", "CallTimeout", "50 milliseconds") assertJmxValue("params-with-custom-exponential-backoff", "ResetTimeout", "20 milliseconds") assertJmxValue("params-with-custom-exponential-backoff", "MaxResetTimeout", "2 minutes") assertJmxValue("params-with-custom-exponential-backoff", "ExponentialBackoffFactor", 16.0) } it should "create circuit breaker state from configuration" in { val config = ConfigFactory.parseString( """ |max-failures = 1 |call-timeout = 50 ms |reset-timeout = 20 ms |max-reset-timeout = 1 minute |exponential-backoff-factor = 16.0 """.stripMargin) AtomicCircuitBreakerState("from-config", config) assertJmxValue("from-config", "MaxFailures", 1) assertJmxValue("from-config", "CallTimeout", "50 milliseconds") assertJmxValue("from-config", "ResetTimeout", "20 milliseconds") assertJmxValue("from-config", "MaxResetTimeout", "1 minute") assertJmxValue("from-config", "ExponentialBackoffFactor", 16.0) } it should "fallback to default values when configuration is empty" in { AtomicCircuitBreakerState("empty-config", ConfigFactory.empty()) assertJmxValue("empty-config", "MaxFailures", 5) assertJmxValue("empty-config", "CallTimeout", "1 second") assertJmxValue("empty-config", "ResetTimeout", "5 seconds") assertJmxValue("empty-config", "MaxResetTimeout", "36500 days") assertJmxValue("empty-config", "ExponentialBackoffFactor", 1.0) } def assertJmxValue(name: String, key: String, expectedValue: Any) = { val oName = ObjectName.getInstance( s"org.squbs.configuration:type=squbs.circuitbreaker,name=${ObjectName.quote(name)}") val actualValue = ManagementFactory.getPlatformMBeanServer.getAttribute(oName, key) actualValue shouldEqual expectedValue } }
Example 89
Source File: ResolverRegistryJMXSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.resolver import java.lang.management.ManagementFactory import javax.management.{InstanceNotFoundException, ObjectName} import javax.management.openmbean.CompositeData import akka.actor.ActorSystem import akka.testkit.TestKit import org.scalatest.{FlatSpecLike, Matchers} import scala.language.postfixOps class ResolverRegistryJMXSpec extends TestKit(ActorSystem("ResolverRegistryJMXSpec")) with FlatSpecLike with Matchers { private val oName = ObjectName.getInstance(s"org.squbs.configuration.${system.name}:type=ResolverRegistry") it should "not be registered at all when not accessed" in { an [InstanceNotFoundException] should be thrownBy { ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "ResolverInfo"). asInstanceOf[Array[CompositeData]] } } it should "not list any endpoint resolvers when not registered" in { ResolverRegistry(system) val resolvers = ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "ResolverInfo"). asInstanceOf[Array[CompositeData]] resolvers should have length 0 } it should "list all resolvers with position" in { val dummyLocalhostResolver = new DummyLocalhostResolver val dummyServiceEndpointResolver = new DummyServiceResolver ResolverRegistry(system).register(dummyLocalhostResolver) ResolverRegistry(system).register(dummyServiceEndpointResolver) val resolvers = ManagementFactory.getPlatformMBeanServer.getAttribute(oName, "ResolverInfo"). asInstanceOf[Array[CompositeData]] resolvers should have length 2 resolvers(0).get("position") shouldBe 0 resolvers(0).get("name") shouldEqual dummyServiceEndpointResolver.name resolvers(0).get("className") shouldEqual dummyServiceEndpointResolver.getClass.getName resolvers(1).get("position") shouldBe 1 resolvers(1).get("name") shouldEqual dummyLocalhostResolver.name resolvers(1).get("className") shouldEqual dummyLocalhostResolver.getClass.getName } }
Example 90
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 91
Source File: AirlinesFileParserSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.airlines.parser import cats.effect.IO import com.smartbackpackerapp.common.StreamAssertion import org.scalatest.{FlatSpecLike, Matchers} class AirlinesFileParserSpec extends FlatSpecLike with Matchers { private val parser = AirlinesFileParser[IO]( new AirlineFile(getClass.getResource("/airlines-file-sample").getPath), new AllowanceFile(getClass.getResource("/allowance-file-sample").getPath) ) it should "parse the airlines and allowance files" in StreamAssertion { for { a <- parser.airlines } yield { a.name.value should not be empty a.baggagePolicy.allowance should not be empty } } }
Example 92
Source File: DestinationInfoHttpEndpointSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.http import cats.Parallel import cats.syntax.option._ import com.smartbackpackerapp.common.TaskAssertion import com.smartbackpackerapp.config.SBConfiguration import com.smartbackpackerapp.http.Http4sUtils._ import com.smartbackpackerapp.model.{Country, CountryCode, CountryName, Currency, VisaNotRequired, VisaRequirementsData} import com.smartbackpackerapp.repository.algebra.VisaRequirementsRepository import com.smartbackpackerapp.service.{AbstractExchangeRateService, CurrencyExchangeDTO, DestinationInfoService} import monix.eval.Task import org.http4s.{HttpService, Query, Request, Status, Uri} import org.scalatest.prop.PropertyChecks import org.scalatest.{FlatSpecLike, Matchers} class DestinationInfoHttpEndpointSpec extends FlatSpecLike with Matchers with DestinationInfoHttpEndpointFixture { forAll(examples) { (from, to, expectedStatus, expectedCountry, expectedVisa) => it should s"retrieve visa requirements from $from to $to" in TaskAssertion { val request = Request[Task](uri = Uri(path = s"/$ApiVersion/traveling/$from/to/$to", query = Query(("baseCurrency", Some("EUR"))))) httpService(request).value.map { task => task.fold(fail("Empty response")){ response => response.status should be (expectedStatus) val body = response.body.asString assert(body.contains(expectedCountry)) assert(body.contains(expectedVisa)) } } } } } trait DestinationInfoHttpEndpointFixture extends PropertyChecks { val examples = Table( ("from", "code", "expectedStatus","expectedCountry", "expectedVisa"), ("AR", "GB", Status.Ok, "United Kingdom", "VisaNotRequired"), ("AR", "KO", Status.NotFound, "Country not found", """{"code":"100","error":"Country not found KO"}"""), ("AR", "AR", Status.BadRequest, "Countries must be different", """{"code":"101","error":"Countries must be different!"}""") ) private val repo = new VisaRequirementsRepository[Task] { override def findVisaRequirements(from: CountryCode, to: CountryCode): Task[Option[VisaRequirementsData]] = Task { if (to.value == "KO") none[VisaRequirementsData] else VisaRequirementsData( from = Country(CountryCode("AR"), CountryName("Argentina"), Currency("ARS")), to = Country(CountryCode("GB"), CountryName("United Kingdom"), Currency("GBP")), visaCategory = VisaNotRequired, description = "90 days within any 180 day period" ).some } } private lazy val sbConfig = new SBConfiguration[Task] private val rateService = new AbstractExchangeRateService[Task](sbConfig) { override protected def retrieveExchangeRate(uri: String): Task[CurrencyExchangeDTO] = Task { CurrencyExchangeDTO("EUR", "", Map("RON" -> 4.59)) } } private implicit val errorHandler = new HttpErrorHandler[Task] private implicit val parallel: Parallel[Task, Task] = Parallel[Task, Task.Par].asInstanceOf[Parallel[Task, Task]] val httpService: HttpService[Task] = taskMiddleware( new DestinationInfoHttpEndpoint( new DestinationInfoService[Task](sbConfig, repo, rateService) ).service ) }
Example 93
Source File: VisaRestrictionIndexHttpEndpointSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.http import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.model.{Count, CountryCode, Ranking, Sharing, VisaRestrictionsIndex} import com.smartbackpackerapp.repository.algebra.VisaRestrictionsIndexRepository import com.smartbackpackerapp.service.VisaRestrictionIndexService import org.http4s.{HttpService, Request, Status, Uri} import org.scalatest.prop.PropertyChecks import org.scalatest.{FlatSpecLike, Matchers} class VisaRestrictionIndexHttpEndpointSpec extends FlatSpecLike with Matchers with VisaRestrictionIndexFixture { forAll(examples) { (countryCode, expectedStatus) => it should s"try to retrieve visa restriction index for $countryCode" in IOAssertion { val request = Request[IO](uri = Uri(path = s"/$ApiVersion/ranking/$countryCode")) httpService(request).value.map { task => task.fold(fail("Empty response")){ response => response.status should be (expectedStatus) } } } } } trait VisaRestrictionIndexFixture extends PropertyChecks { import Http4sUtils._ private val repo = new VisaRestrictionsIndexRepository[IO] { override def findRestrictionsIndex(countryCode: CountryCode): IO[Option[VisaRestrictionsIndex]] = IO { if (countryCode.value == "AR") Some(VisaRestrictionsIndex(Ranking(0), Count(0), Sharing(0))) else None } } private implicit val errorHandler = new HttpErrorHandler[IO] val httpService: HttpService[IO] = ioMiddleware( new VisaRestrictionIndexHttpEndpoint( new VisaRestrictionIndexService[IO](repo) ).service ) val examples = Table( ("countryCode", "expectedStatus"), ("AR", Status.Ok), ("XX", Status.NotFound) ) }
Example 94
Source File: HealthInfoHttpEndpointSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.http import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.model.{CountryCode, Health, HealthAlert, HealthNotices, LevelOne, Vaccinations, Vaccine} import com.smartbackpackerapp.repository.algebra.HealthRepository import com.smartbackpackerapp.service.HealthService import org.http4s.{HttpService, Request, Status, Uri} import org.scalatest.prop.PropertyChecks import org.scalatest.{FlatSpecLike, Matchers} class HealthInfoHttpEndpointSpec extends FlatSpecLike with Matchers with HealthInfoFixture { forAll(examples) { (countryCode, expectedStatus) => it should s"try to retrieve health information for $countryCode" in IOAssertion { val request = Request[IO](uri = Uri(path = s"/$ApiVersion/health/$countryCode")) httpService(request).value.map { task => task.fold(fail("Empty response")){ response => response.status should be (expectedStatus) } } } } } trait HealthInfoFixture extends PropertyChecks { import Http4sUtils._ private val testHealth = Health( vaccinations = Vaccinations(List.empty[Vaccine], List.empty[Vaccine], List.empty[Vaccine]), notices = HealthNotices( alertLevel = LevelOne, alerts = List.empty[HealthAlert] ) ) private val repo = new HealthRepository[IO] { override def findHealthInfo(countryCode: CountryCode): IO[Option[Health]] = IO { if (countryCode.value == "AR") Some(testHealth) else None } } private implicit val errorHandler = new HttpErrorHandler[IO] val httpService: HttpService[IO] = ioMiddleware( new HealthInfoHttpEndpoint( new HealthService[IO](repo) ).service ) val examples = Table( ("countryCode", "expectedStatus"), ("AR", Status.Ok), ("XX", Status.NotFound) ) }
Example 95
Source File: AirlinesHttpEndpointSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.http import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.http.Http4sUtils._ import com.smartbackpackerapp.model._ import com.smartbackpackerapp.repository.algebra.AirlineRepository import com.smartbackpackerapp.service.AirlineService import org.http4s.{HttpService, Query, Request, Status, Uri} import org.scalatest.prop.PropertyChecks import org.scalatest.{FlatSpecLike, Matchers} class AirlinesHttpEndpointSpec extends FlatSpecLike with Matchers with AirlinesHttpEndpointFixture { forAll(examples) { (airline, expectedStatus, expectedBody) => it should s"find the airline $airline" in IOAssertion { val request = Request[IO](uri = Uri(path = s"/$ApiVersion/airlines", query = Query(("name", Some(airline))))) httpService(request).value.map { task => task.fold(fail("Empty response")){ response => response.status should be (expectedStatus) assert(response.body.asString.contains(expectedBody)) } } } } } trait AirlinesHttpEndpointFixture extends PropertyChecks { private val airlines: List[Airline] = List( Airline(AirlineName("Aer Lingus"), BaggagePolicy( allowance = List( BaggageAllowance(CabinBag, Some(10), BaggageSize(55, 40, 24)), BaggageAllowance(SmallBag, None, BaggageSize(25, 33, 20)) ), extra = None, website = Some("https://www.aerlingus.com/travel-information/baggage-information/cabin-baggage/")) ), Airline(AirlineName("Transavia"), BaggagePolicy( allowance = List( BaggageAllowance(CabinBag, None, BaggageSize(55, 40, 25)) ), extra = None, website = Some("https://www.transavia.com/en-EU/service/hand-luggage/")) ) ) private val testAirlineRepo = new AirlineRepository[IO] { override def findAirline(airlineName: AirlineName): IO[Option[Airline]] = IO { airlines.find(_.name.value == airlineName.value) } } private implicit val errorHandler = new HttpErrorHandler[IO] val httpService: HttpService[IO] = ioMiddleware( new AirlinesHttpEndpoint( new AirlineService[IO](testAirlineRepo) ).service ) val examples = Table( ("airline", "expectedStatus", "expectedBody"), ("Aer Lingus", Status.Ok, "baggagePolicy"), ("Transavia", Status.Ok, "baggagePolicy"), ("Ryan Air", Status.NotFound, """{"code":"100","error":"Airline not found Ryan Air"}""") ) }
Example 96
Source File: CountriesHttpEndpointSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.http import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.http.Http4sUtils._ import com.smartbackpackerapp.model.{Country, CountryCode, CountryName, Currency} import com.smartbackpackerapp.repository.algebra.CountryRepository import com.smartbackpackerapp.service.CountryService import org.http4s.{HttpService, Query, Request, Status, Uri} import org.scalatest.{FlatSpecLike, Matchers} class CountriesHttpEndpointSpec extends FlatSpecLike with Matchers with CountriesHttpEndpointFixture { it should s"find all the countries" in IOAssertion { val request = Request[IO](uri = Uri(path = s"/$ApiVersion/countries")) httpService(request).value.map { task => task.fold(fail("Empty response")){ response => response.status should be (Status.Ok) assert(response.body.asString.contains("Argentina")) } } } it should s"find all the schengen countries" in IOAssertion { val request = Request[IO](uri = Uri(path = s"/$ApiVersion/countries", query = Query(("query", Some("schengen"))))) httpService(request).value.map { task => task.fold(fail("Empty response")){ response => response.status should be (Status.Ok) assert(response.body.asString.contains("Poland")) } } } } trait CountriesHttpEndpointFixture { private val testCountries = List( Country(CountryCode("AR"), CountryName("Argentina"), Currency("ARS")) ) private val testSchengenCountries = List( Country(CountryCode("PL"), CountryName("Poland"), Currency("PLN")) ) private val repo = new CountryRepository[IO] { override def findAll: IO[List[Country]] = IO(testCountries) override def findSchengen: IO[List[Country]] = IO(testSchengenCountries) } private implicit val errorHandler = new HttpErrorHandler[IO] val httpService: HttpService[IO] = ioMiddleware( new CountriesHttpEndpoint[IO]( new CountryService[IO](repo) ).service ) }
Example 97
Source File: ExchangeServiceSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.service import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.config.SBConfiguration import com.smartbackpackerapp.model.Currency import org.scalatest.{FlatSpecLike, Matchers} class ExchangeServiceSpec extends FlatSpecLike with Matchers { private lazy val sbConfig = new SBConfiguration[IO] private val service = new AbstractExchangeRateService[IO](sbConfig) { override protected def retrieveExchangeRate(uri: String): IO[CurrencyExchangeDTO] = IO { CurrencyExchangeDTO("EUR", "", Map("RON" -> 4.59)) } } it should "retrieve a fake exchange rate" in IOAssertion { service.exchangeRateFor(Currency("EUR"), Currency("RON")).map { exchangeRate => exchangeRate should be(CurrencyExchangeDTO("EUR", "", Map("RON" -> 4.59))) } } it should "return an empty exchange rate" in IOAssertion { service.exchangeRateFor(Currency(""), Currency("")).map { exchangeRate => exchangeRate should be(CurrencyExchangeDTO("", "", Map("" -> 0.0))) } } }
Example 98
Source File: CountryServiceSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.service import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.model.{Country, CountryCode, CountryName, Currency} import com.smartbackpackerapp.repository.algebra.CountryRepository import org.scalatest.{FlatSpecLike, Matchers} class CountryServiceSpec extends FlatSpecLike with Matchers { private val testCountries = List( Country(CountryCode("AR"), CountryName("Argentina"), Currency("ARS")) ) private val testSchengenCountries = List( Country(CountryCode("PL"), CountryName("Poland"), Currency("PLN")) ) private val repo = new CountryRepository[IO] { override def findAll: IO[List[Country]] = IO(testCountries) override def findSchengen: IO[List[Country]] = IO(testSchengenCountries) } private val service = new CountryService[IO](repo) it should "find all the countries" in IOAssertion { service.findAll(false).map { countries => countries should be (testCountries) } } it should "find all schengen the countries" in IOAssertion { service.findAll(true).map { countries => countries should be (testSchengenCountries) } } }
Example 99
Source File: HealthServiceSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.service import cats.data.EitherT import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.model._ import com.smartbackpackerapp.repository.algebra.HealthRepository import org.scalatest.{FlatSpecLike, Matchers} class HealthServiceSpec extends FlatSpecLike with Matchers { private val testHealth = Health( vaccinations = Vaccinations(List.empty[Vaccine], List.empty[Vaccine], List.empty[Vaccine]), notices = HealthNotices( alertLevel = LevelOne, alerts = List.empty[HealthAlert] ) ) private val repo = new HealthRepository[IO] { override def findHealthInfo(countryCode: CountryCode): IO[Option[Health]] = IO { if (countryCode.value == "AR") Some(testHealth) else None } } private val service = new HealthService[IO](repo) it should "find the health information" in IOAssertion { EitherT(service.findHealthInfo(CountryCode("AR"))).map { index => index should be (testHealth) }.value } it should "NOT find the health information" in IOAssertion { EitherT(service.findHealthInfo(CountryCode("XX"))).leftMap { error => error shouldBe a [HealthInfoNotFound] }.value } }
Example 100
Source File: VisaRestrictionsIndexServiceSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.service import cats.data.EitherT import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.model.{Count, CountryCode, Ranking, Sharing, VisaRestrictionsIndex} import com.smartbackpackerapp.repository.algebra.VisaRestrictionsIndexRepository import org.scalatest.{FlatSpecLike, Matchers} class VisaRestrictionsIndexServiceSpec extends FlatSpecLike with Matchers { private val testIndex = VisaRestrictionsIndex(Ranking(3), Count(2), Sharing(1)) private val repo = new VisaRestrictionsIndexRepository[IO] { override def findRestrictionsIndex(countryCode: CountryCode): IO[Option[VisaRestrictionsIndex]] = IO { if (countryCode.value == "AR") Some(testIndex) else None } } private val service = new VisaRestrictionIndexService[IO](repo) it should "find the visa restrictions index" in IOAssertion { EitherT(service.findIndex(CountryCode("AR"))).map { index => index should be (testIndex) }.value } it should "NOT find the visa restrictions index" in IOAssertion { EitherT(service.findIndex(CountryCode("XX"))).leftMap { error => error shouldBe a [VisaRestrictionsIndexNotFound] }.value } }
Example 101
Source File: DestinationInfoServiceSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.service import cats.Parallel import cats.data.EitherT import cats.syntax.option._ import com.smartbackpackerapp.common.TaskAssertion import com.smartbackpackerapp.config.SBConfiguration import com.smartbackpackerapp.model._ import com.smartbackpackerapp.repository.algebra.VisaRequirementsRepository import monix.eval.Task import org.scalatest.{FlatSpecLike, Matchers} class DestinationInfoServiceSpec extends FlatSpecLike with Matchers { private lazy val sbConfig = new SBConfiguration[Task] private val repo = new VisaRequirementsRepository[Task] { override def findVisaRequirements(from: CountryCode, to: CountryCode): Task[Option[VisaRequirementsData]] = Task { VisaRequirementsData( from = Country(CountryCode("AR"), CountryName("Argentina"), Currency("ARS")), to = Country(CountryCode("RO"), CountryName("Romania"), Currency("RON")), visaCategory = VisaNotRequired, description = "90 days within any 180 day period" ).some } } private val rateService = new AbstractExchangeRateService[Task](sbConfig) { override protected def retrieveExchangeRate(uri: String): Task[CurrencyExchangeDTO] = Task { CurrencyExchangeDTO("EUR", "", Map("RON" -> 4.59)) } } private implicit val parallel: Parallel[Task, Task] = Parallel[Task, Task.Par].asInstanceOf[Parallel[Task, Task]] private val service = new DestinationInfoService[Task](sbConfig, repo, rateService) it should "retrieve destination information" in TaskAssertion { EitherT(service.find(CountryCode("AR"), CountryCode("RO"), Currency("EUR"))).map { info => info.countryCode.value should be ("RO") info.countryName.value should be ("Romania") info.exchangeRate should be (ExchangeRate(Currency("EUR"), Currency("RON"), 4.59)) info.visaRequirements should be (VisaRequirements(VisaNotRequired, "90 days within any 180 day period")) }.value } it should "validate countries" in TaskAssertion { EitherT(service.find(CountryCode("AR"), CountryCode("AR"), Currency("EUR"))).leftMap { error => error should be (CountriesMustBeDifferent) }.value } }
Example 102
Source File: AirlineServiceSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.service import cats.data.EitherT import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.model.{Airline, AirlineName, BaggageAllowance, BaggagePolicy} import com.smartbackpackerapp.repository.algebra.AirlineRepository import org.scalatest.{FlatSpecLike, Matchers} class AirlineServiceSpec extends FlatSpecLike with Matchers { private val testAirline = Airline( name = AirlineName("Ryan Air"), baggagePolicy = BaggagePolicy( allowance = List.empty[BaggageAllowance], extra = None, website = None ) ) private val repo = new AirlineRepository[IO] { override def findAirline(airlineName: AirlineName): IO[Option[Airline]] = IO { if (airlineName.value == "Ryan Air") Some(testAirline) else None } } private val service = new AirlineService[IO](repo) it should "find the airline" in IOAssertion { EitherT(service.baggagePolicy(AirlineName("Ryan Air"))).map { airline => airline should be (testAirline) }.value } it should "NOT find the airline" in IOAssertion { EitherT(service.baggagePolicy(AirlineName("Futur Airways"))).leftMap { error => error shouldBe a [AirlineNotFound] }.value } }
Example 103
Source File: VisaRestrictionsIndexParserSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.scraper.parser import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.scraper.config.ScraperConfiguration import net.ruippeixotog.scalascraper.browser.JsoupBrowser import net.ruippeixotog.scalascraper.model.Document import org.scalatest.{FlatSpecLike, Matchers} import scala.io.Source class VisaRestrictionsIndexParserSpec extends FlatSpecLike with Matchers { private val scraperConfig = new ScraperConfiguration[IO] private val parser = new AbstractVisaRestrictionsIndexParser[IO](scraperConfig) { override val htmlDocument: IO[Document] = IO { val browser = JsoupBrowser() val fileContent = Source.fromResource("passportRanking2018.html").mkString browser.parseString(fileContent).asInstanceOf[Document] } } it should "parse visa restrictions index 2018 wiki page" in IOAssertion { parser.parse.map { result => result should not be empty // Not all the countries are part of the ranking result should have size 194 // SBConfiguration.countriesCode().size == 199 result.foreach(println) } } }
Example 104
Source File: HealthInfoParserSpec.scala From core with Apache License 2.0 | 5 votes |
package com.smartbackpackerapp.scraper.parser import cats.effect.IO import com.smartbackpackerapp.common.IOAssertion import com.smartbackpackerapp.model.{CountryCode, LevelOne, LevelTwo} import net.ruippeixotog.scalascraper.browser.JsoupBrowser import net.ruippeixotog.scalascraper.model.Document import org.scalatest.{FlatSpecLike, Matchers} import scala.io.Source class HealthInfoParserSpec extends FlatSpecLike with Matchers { private val parser = new AbstractHealthInfoParser[IO] { override def htmlDocument(from: CountryCode): IO[Document] = IO { val browser = JsoupBrowser() val fileContent = Source.fromResource(s"healthInfo-${from.value}.html").mkString browser.parseString(fileContent).asInstanceOf[Document] } } it should "parse health information page for AR (Argentina)" in IOAssertion { parser.parse(CountryCode("AR")).map { health => health.vaccinations.mandatory should be (empty) health.vaccinations.recommendations should have size 2 health.vaccinations.optional should have size 3 health.notices.alertLevel should be (LevelTwo) health.notices.alerts should have size 1 health.notices.alerts.foreach(_.link.value should not be empty) } } it should "parse health information page for BI (Burundi)" in IOAssertion { parser.parse(CountryCode("BI")).map { health => health.vaccinations.mandatory should have size 1 health.vaccinations.recommendations should have size 3 health.vaccinations.optional should have size 3 health.notices.alertLevel should be (LevelOne) health.notices.alerts should have size 1 health.notices.alerts.foreach(_.link.value should not be empty) } } it should "parse health information page for AG (Antigua and Barbuda)" in IOAssertion { parser.parse(CountryCode("AG")).map { health => health.vaccinations.mandatory should be (empty) health.vaccinations.recommendations should have size 2 health.vaccinations.optional should have size 3 health.notices.alertLevel should be (LevelTwo) health.notices.alerts should have size 2 health.notices.alerts.foreach(_.link.value should not be empty) } } }
Example 105
Source File: KafkaConsumerPerfSpec.scala From scala-kafka-client with MIT License | 5 votes |
package cakesolutions.kafka import cakesolutions.kafka.KafkaConsumer.Conf import com.typesafe.config.ConfigFactory import org.apache.kafka.common.serialization.{StringDeserializer, StringSerializer} import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} import org.slf4j.LoggerFactory import scala.collection.JavaConverters._ import scala.util.Random class KafkaConsumerPerfSpec extends FlatSpecLike with Matchers with BeforeAndAfterAll { val log = LoggerFactory.getLogger(getClass) val config = ConfigFactory.load() val msg1k = scala.io.Source.fromInputStream(getClass.getResourceAsStream("/1k.txt")).mkString val consumer = KafkaConsumer( Conf(config.getConfig("consumer"), new StringDeserializer, new StringDeserializer) ) private def randomString: String = Random.alphanumeric.take(5).mkString("") "Kafka Consumer with single partition topic" should "perform" in { val topic = randomString val producerConf = KafkaProducer.Conf(config.getConfig("producer"), new StringSerializer, new StringSerializer) val producer = KafkaProducer[String, String](producerConf) 1 to 100000 foreach { n => producer.send(KafkaProducerRecord(topic, None, msg1k)) } producer.flush() log.info("Delivered 100000 msg to topic {}", topic) consumer.subscribe(List(topic).asJava) var start = 0l var total = 0 while (total < 100000) { if(total == 0) start = System.currentTimeMillis() val count = consumer.poll(1000).count() total += count } val totalTime = System.currentTimeMillis() - start val messagesPerSec = 100000 / totalTime * 1000 log.info("Total Time millis : {}", totalTime) log.info("Messages per sec : {}", messagesPerSec) totalTime should be < 4000L consumer.close() producer.close() } }
Example 106
Source File: KafkaIntSpec.scala From scala-kafka-client with MIT License | 5 votes |
package cakesolutions.kafka import cakesolutions.kafka.testkit.KafkaServer import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} class KafkaIntSpec extends FlatSpecLike with Matchers with BeforeAndAfterAll { val kafkaServer = new KafkaServer() val kafkaPort = kafkaServer.kafkaPort override def beforeAll() = { kafkaServer.startup() } override def afterAll() = { kafkaServer.close() } }
Example 107
Source File: ConsumerRecordsSpec.scala From scala-kafka-client with MIT License | 5 votes |
package cakesolutions.kafka.akka import cakesolutions.kafka.KafkaTopicPartition import org.scalatest.{FlatSpecLike, Inside, Matchers} class ConsumerRecordsSpec extends FlatSpecLike with Matchers with Inside { val partition = KafkaTopicPartition("sometopic", 0) val knownInput: ConsumerRecords[String, Int] = ConsumerRecords.fromPairs(partition, Seq(Some("foo") -> 1)) val partiallyKnownInput: ConsumerRecords[_, _] = knownInput val anyInput: Any = knownInput "ConsumerRecords" should "match types correctly" in { partiallyKnownInput.hasType[ConsumerRecords[String, Int]] shouldEqual true partiallyKnownInput.hasType[ConsumerRecords[Int, String]] shouldEqual false } it should "cast to only correct types" in { val success = partiallyKnownInput.cast[ConsumerRecords[String, Int]] val failure = partiallyKnownInput.cast[ConsumerRecords[Int, String]] success shouldEqual Some(knownInput) failure shouldEqual None } it should "extract values correctly" in { val correctExt = ConsumerRecords.extractor[String, Int] val incorrectExt = ConsumerRecords.extractor[Int, String] anyInput should not matchPattern { case incorrectExt(_) => } inside(anyInput) { case correctExt(kvs) => kvs shouldEqual knownInput } } }
Example 108
Source File: KafkaIntSpec.scala From scala-kafka-client with MIT License | 5 votes |
package cakesolutions.kafka.akka import akka.actor.ActorSystem import akka.testkit.TestKit import cakesolutions.kafka.testkit.KafkaServer import org.scalatest.concurrent.Waiters import org.scalatest.{BeforeAndAfterAll, FlatSpecLike, Matchers} class KafkaIntSpec(_system: ActorSystem) extends TestKit(_system) with Waiters with FlatSpecLike with Matchers with BeforeAndAfterAll { val kafkaServer = new KafkaServer() val kafkaPort = kafkaServer.kafkaPort override def beforeAll() = { kafkaServer.startup() } override def afterAll() = { kafkaServer.close() TestKit.shutdownActorSystem(system) } }