org.scalatest.concurrent.ScalaFutures Scala Examples
The following examples show how to use org.scalatest.concurrent.ScalaFutures.
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: StorageCacheSpec.scala From nexus-kg with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.kg.cache import java.nio.file.Paths import java.time.Clock import akka.testkit._ import ch.epfl.bluebrain.nexus.commons.test.ActorSystemFixture import ch.epfl.bluebrain.nexus.kg.TestHelper import ch.epfl.bluebrain.nexus.kg.config.AppConfig._ import ch.epfl.bluebrain.nexus.kg.config.{AppConfig, Settings} import ch.epfl.bluebrain.nexus.kg.resources.ProjectIdentifier.{ProjectRef} import ch.epfl.bluebrain.nexus.kg.storage.Storage.DiskStorage import ch.epfl.bluebrain.nexus.rdf.implicits._ import monix.eval.Task import monix.execution.Scheduler.Implicits.global import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.{Inspectors, TryValues} import scala.concurrent.duration._ //noinspection NameBooleanParameters class StorageCacheSpec extends ActorSystemFixture("StorageCacheSpec", true) with Matchers with Inspectors with ScalaFutures with TryValues with TestHelper { override implicit def patienceConfig: PatienceConfig = PatienceConfig(3.seconds.dilated, 5.milliseconds) private implicit val clock: Clock = Clock.systemUTC private implicit val appConfig: AppConfig = Settings(system).appConfig val ref1 = ProjectRef(genUUID) val ref2 = ProjectRef(genUUID) val time = clock.instant() val lastId = url"http://example.com/lastA" // initialInstant.minusSeconds(1L + genInt().toLong) val tempStorage = DiskStorage(ref1, genIri, 1L, false, true, "alg", Paths.get("/tmp"), read, write, 1024L) val lastStorageProj1 = tempStorage.copy(id = lastId) val lastStorageProj2 = tempStorage.copy(ref = ref2, id = lastId) val storagesProj1: List[DiskStorage] = List.fill(5)(tempStorage.copy(id = genIri)) :+ lastStorageProj1 val storagesProj2: List[DiskStorage] = List.fill(5)(tempStorage.copy(ref = ref2, id = genIri)) :+ lastStorageProj2 private val cache = StorageCache[Task] "StorageCache" should { "index storages" in { forAll((storagesProj1 ++ storagesProj2).zipWithIndex) { case (storage, index) => implicit val instant = time.plusSeconds(index.toLong) cache.put(storage).runToFuture.futureValue cache.get(storage.ref, storage.id).runToFuture.futureValue shouldEqual Some(storage) } } "get latest default storage" in { cache.getDefault(ref1).runToFuture.futureValue shouldEqual Some(lastStorageProj1) cache.getDefault(ref2).runToFuture.futureValue shouldEqual Some(lastStorageProj2) cache.getDefault(ProjectRef(genUUID)).runToFuture.futureValue shouldEqual None } "list storages" in { cache.get(ref1).runToFuture.futureValue should contain theSameElementsAs storagesProj1 cache.get(ref2).runToFuture.futureValue should contain theSameElementsAs storagesProj2 } "deprecate storage" in { val storage = storagesProj1.head implicit val instant = time.plusSeconds(30L) cache.put(storage.copy(deprecated = true, rev = 2L)).runToFuture.futureValue cache.get(storage.ref, storage.id).runToFuture.futureValue shouldEqual None cache.get(ref1).runToFuture.futureValue should contain theSameElementsAs storagesProj1.filterNot(_ == storage) } } }
Example 2
Source File: SQLQuerySpec.scala From scruid with Apache License 2.0 | 5 votes |
package ing.wbaa.druid import java.time.{ LocalDateTime, ZonedDateTime } import akka.stream.scaladsl.Sink import ing.wbaa.druid.SQL._ import ing.wbaa.druid.client.CirceDecoders import io.circe.generic.auto._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.time.{ Millis, Seconds, Span } import org.scalatest.wordspec.AnyWordSpec class SQLQuerySpec extends AnyWordSpec with Matchers with ScalaFutures with CirceDecoders { implicit override val patienceConfig = PatienceConfig(timeout = Span(20, Seconds), interval = Span(5, Millis)) private val totalNumberOfEntries = 39244 private val usOnlyNumberOfEntries = 528 implicit val config = DruidConfig() implicit val mat = config.client.actorMaterializer case class Result(hourTime: ZonedDateTime, count: Int) "SQL query" should { val sqlQuery: SQLQuery = dsql""" |SELECT FLOOR(__time to HOUR) AS hourTime, count(*) AS "count" |FROM wikipedia |WHERE "__time" BETWEEN TIMESTAMP '2015-09-12 00:00:00' AND TIMESTAMP '2015-09-13 00:00:00' |GROUP BY 1 |""".stripMargin "successfully be interpreted by Druid" in { val resultsF = sqlQuery.execute() whenReady(resultsF) { response => response.list[Result].map(_.count).sum shouldBe totalNumberOfEntries } } "support streaming" in { val resultsF = sqlQuery.streamAs[Result]().runWith(Sink.seq) whenReady(resultsF) { results => results.map(_.count).sum shouldBe totalNumberOfEntries } } } "SQL parameterized query" should { val fromDateTime = LocalDateTime.of(2015, 9, 12, 0, 0, 0, 0) val untilDateTime = fromDateTime.plusDays(1) val countryIsoCode = "US" val sqlQuery: SQLQuery = dsql""" |SELECT FLOOR(__time to HOUR) AS hourTime, count(*) AS "count" |FROM wikipedia |WHERE "__time" BETWEEN ${fromDateTime} AND ${untilDateTime} AND countryIsoCode = ${countryIsoCode} |GROUP BY 1 |""".stripMargin "be expressed as a parameterized query with three parameters" in { sqlQuery.query.count(_ == '?') shouldBe 3 sqlQuery.parameters.size shouldBe 3 sqlQuery.parameters(0) shouldBe SQLQueryParameter(SQLQueryParameterType.Timestamp, "2015-09-12 00:00:00") sqlQuery.parameters(1) shouldBe SQLQueryParameter(SQLQueryParameterType.Timestamp, "2015-09-13 00:00:00") sqlQuery.parameters(2) shouldBe SQLQueryParameter(SQLQueryParameterType.Varchar, "US") } "successfully be interpreted by Druid" in { val resultsF = sqlQuery.execute() whenReady(resultsF) { response => response.list[Result].map(_.count).sum shouldBe usOnlyNumberOfEntries } } "support streaming" in { val resultsF = sqlQuery.streamAs[Result]().runWith(Sink.seq) whenReady(resultsF) { results => results.map(_.count).sum shouldBe usOnlyNumberOfEntries } } } }
Example 3
Source File: ExperimentVariantEventTest.scala From izanami with Apache License 2.0 | 5 votes |
package domains.abtesting import java.time.LocalDateTime import java.time.temporal.ChronoUnit import akka.NotUsed import akka.actor.ActorSystem import akka.stream.scaladsl.{Flow, Sink, Source} import domains.Key import domains.abtesting.events._ import org.scalatest.concurrent.{IntegrationPatience, ScalaFutures} import test.IzanamiSpec class ExperimentVariantEventTest extends IzanamiSpec with ScalaFutures with IntegrationPatience { "ExperimentVariantEvent" must { "aggregate event" in { implicit val system: ActorSystem = ActorSystem() val variantId = "vId" val variant = Variant(variantId, "None", None, Traffic(0), None) val flow: Flow[ExperimentVariantEvent, VariantResult, NotUsed] = ExperimentVariantEvent.eventAggregation("experiment.id", 1, ChronoUnit.HOURS) val firstDate = LocalDateTime.now().minus(5, ChronoUnit.HOURS) val experimentKey = Key(s"experiment:id") def experimentVariantEventKey(counter: Int): ExperimentVariantEventKey = ExperimentVariantEventKey(experimentKey, variantId, s"client:id:$counter", "namespace", s"$counter") def clientId(i: Int): String = s"client:id:$i" def date(i: Int): LocalDateTime = firstDate.plus(15 * i, ChronoUnit.MINUTES) val source = (1 to 20) .flatMap { counter => val d = date(counter) val key = experimentVariantEventKey(counter) counter match { case i if i % 2 > 0 => List(ExperimentVariantDisplayed(key, experimentKey, clientId(i), variant, d, 0, variantId)) case i => List( ExperimentVariantDisplayed(key, experimentKey, clientId(i), variant, d, 0, variantId), ExperimentVariantWon(key, experimentKey, clientId(i), variant, d, 0, variantId) ) } } val expectedEvents = Seq( ExperimentResultEvent(experimentKey, variant, date(1), 0.0, "vId"), ExperimentResultEvent(experimentKey, variant, date(5), 40.0, "vId"), ExperimentResultEvent(experimentKey, variant, date(9), 44.44444444444444, "vId"), ExperimentResultEvent(experimentKey, variant, date(13), 46.15384615384615, "vId"), ExperimentResultEvent(experimentKey, variant, date(17), 47.05882352941177, "vId") ) val evts = Source(source).via(flow).runWith(Sink.seq).futureValue val allEvents = evts.flatMap(_.events) allEvents must be(expectedEvents) } } }
Example 4
Source File: FutureTrySpec.scala From scala-common with Apache License 2.0 | 5 votes |
import com.softwaremill.futuretry._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.prop.TableDrivenPropertyChecks import org.scalatest.matchers.must.Matchers import scala.concurrent.duration.Duration import scala.concurrent.{Future, Await, Promise} import scala.util.{Failure, Success, Try} class FutureTrySpec extends AnyFlatSpec with Matchers with TableDrivenPropertyChecks with ScalaFutures { import scala.concurrent.ExecutionContext.Implicits.global "tried" must "convert a successful result into a Success" in { val p = Promise[String] p.complete(Try("a")) val transformedFuture = p.future.tried transformedFuture.futureValue must be(Success("a")) } it must "convert an exceptional result into a Failure" in { val p = Promise[String] val exception = new RuntimeException("blah") p.complete(Try(throw exception)) val transformedFuture = p.future.tried transformedFuture.futureValue must be(Failure(exception)) } "transform" must "correctly transform between all Try variants in" in { val exception = new RuntimeException("bloh") val scenarios = Table[Try[String], Try[String] => Try[String], Try[String]] ( ("original value", "transform", "expected output"), (Success("a"), identity[Try[String]], Success("a")), (Failure(exception), (x: Try[String]) => x match { case Failure(e) => Success(e.toString); case _ => ??? }, Success(exception.toString)), (Success("a"), (x: Try[String]) => x match { case Success(_) => Failure(exception); case _ => ??? }, Failure(exception)), (Failure(exception), identity[Try[String]], Failure(exception)) ) forAll(scenarios) { (orgValue, f, output) => { val p = Promise[String] p.complete(orgValue) val transformedFuture = p.future.transformTry(f) transformedFuture.tried.futureValue must be(output) } } } }
Example 5
Source File: RichToFutureFunctionTest.scala From tapir with Apache License 2.0 | 5 votes |
package sttp.tapir.server.akkahttp import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FunSuite, Matchers} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future class RichToFutureFunctionTest extends FunSuite with Matchers with ScalaFutures { case class User(u: String) case class Result(r: String) test("should compose functions when both succeed") { // given def f1(p: String): Future[User] = Future { User(p) } def f2(u: User, i: Int, s: String): Future[Result] = Future { Result(List(u.toString, i.toString, s).mkString(",")) } // when val result = (f1 _).andThenFirst((f2 _).tupled).apply(("john", 10, "x")).futureValue // then result shouldBe Result("User(john),10,x") } }
Example 6
Source File: FutureAndPromiseTest.scala From scala-tutorials with MIT License | 5 votes |
package com.baeldung.scala.currency import com.baeldung.scala.concurrency.ScalaAndPromise import org.scalatest.concurrent.ScalaFutures import org.scalatest.{AsyncFreeSpecLike, Matchers} class FutureAndPromiseTest extends AsyncFreeSpecLike with Matchers with ScalaFutures { import ScalaAndPromise._ "sampleFuture() should return 5" in { sampleFuture().map(_ shouldBe 5) } "createUser() should return a Future containing the new User" in { createUser("John", "[email protected]", "iLoveScala").map { user => user.name shouldBe "John" user.email shouldBe "[email protected]" user.password shouldBe "685db2b1e0e627942eca56bdf16909d7" user.avatar shouldBe new Avatar("http://avatar.example.com/user/23k520f23f4.png") } } "runByPromise() should return a Future containing the result of computation" in { runByPromise(5).map(_ shouldBe 5) } }
Example 7
Source File: FuturesTest.scala From courscala with Apache License 2.0 | 5 votes |
package org.coursera.common.concurrent import org.junit.Test import org.scalatest.concurrent.ScalaFutures import org.scalatest.junit.AssertionsForJUnit import org.scalatest.time.Millis import org.scalatest.time.Seconds import org.scalatest.time.Span import scala.concurrent.Future class FuturesTest extends AssertionsForJUnit with ScalaFutures { implicit override val patienceConfig = PatienceConfig(timeout = scaled(Span(1, Seconds)), interval = scaled(Span(20, Millis))) import scala.concurrent.ExecutionContext.Implicits.global @Test def map(): Unit = { val raw = Map("a" -> Future.successful(1), "b" -> Future.successful(2)) val expected = Map("a" -> 1, "b" -> 2) assertResult(expected)(Futures.map(raw).futureValue) } @Test def extract(): Unit = { val Futures.Extract(future1, future2) = Futures.immediate((1, 2)) assertResult(1)(future1.futureValue) assertResult(2)(future2.futureValue) } }
Example 8
Source File: AdvicesRepositoryTest.scala From scala-clippy with Apache License 2.0 | 5 votes |
package dal import com.softwaremill.clippy._ import com.softwaremill.id.DefaultIdGenerator import util.BaseSqlSpec import org.scalatest.concurrent.ScalaFutures import org.scalatest.concurrent.IntegrationPatience class AdvicesRepositoryTest extends BaseSqlSpec with ScalaFutures with IntegrationPatience { it should "store & read an advice" in { // given val ar = new AdvicesRepository(database, new DefaultIdGenerator()) // when val stored = ar .store( "zzz", "yyy", TypeMismatchError[RegexT](RegexT("x"), None, RegexT("y"), None, None), "z", AdviceState.Pending, Library("g", "a", "1"), Contributor(None, None, Some("t")), Some("c") ) .futureValue // then val r = ar.findAll().futureValue r should have size (1) val found = r.head stored should be(found) found.errorTextRaw should be("zzz") found.patternRaw should be("yyy") found.compilationError should be(TypeMismatchError(RegexT("x"), None, RegexT("y"), None, None)) found.advice should be("z") found.state should be(AdviceState.Pending) found.library should be(Library("g", "a", "1")) found.contributor should be(Contributor(None, None, Some("t"))) found.comment should be(Some("c")) } }
Example 9
Source File: BaseSqlSpec.scala From scala-clippy with Apache License 2.0 | 5 votes |
package util import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, BeforeAndAfterEach, FlatSpec, Matchers} import scala.concurrent.ExecutionContext trait BaseSqlSpec extends FlatSpec with Matchers with BeforeAndAfterAll with BeforeAndAfterEach with ScalaFutures { private val connectionString = "jdbc:h2:mem:clippy_test" + this.getClass.getSimpleName + ";DB_CLOSE_DELAY=-1" lazy val database = SqlDatabase.createEmbedded(connectionString) override protected def beforeAll() { super.beforeAll() createAll() } override protected def afterAll() { super.afterAll() dropAll() database.close() } private def dropAll() { import database.driver.api._ database.db.run(sqlu"DROP ALL OBJECTS").futureValue } private def createAll() { database.updateSchema() } override protected def afterEach() { try { dropAll() createAll() } catch { case e: Exception => e.printStackTrace() } super.afterEach() } implicit val ec: ExecutionContext = scala.concurrent.ExecutionContext.Implicits.global }
Example 10
Source File: GroupByActorSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.actors.transform import java.util.UUID import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestActorRef, TestKit} import akka.util.Timeout import io.coral.actors.RuntimeActor import io.coral.api.DefaultModule import org.json4s.JsonDSL._ import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.duration._ import scala.languageFeature.postfixOps class GroupByActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with ScalaFutures { def this() = this(ActorSystem("GroupByActorSpec")) implicit val ec = scala.concurrent.ExecutionContext.Implicits.global implicit val injector = new DefaultModule(system.settings.config) val name = "runtime1" val userUUID1 = UUID.randomUUID() implicit val runtime = system.actorOf(Props(new RuntimeActor(name, userUUID1)), "coral") implicit val timeout = Timeout(100.millis) implicit val formats = org.json4s.DefaultFormats override def afterAll() { TestKit.shutdownActorSystem(system) } // here is a dependency on the stats actor // in the current situation (the CoralActorFactory) it seems unavoidable // to depend in some tests on an existing actor instead of injecting a test actor def statsGroupBy: GroupByActor = { val createJson = parse( """{ "type": "stats", | "params": { "field": "amount" }, | "group": { "by": "tag" } | }""".stripMargin ).asInstanceOf[JObject] TestActorRef[GroupByActor](GroupByActor(createJson).get).underlyingActor } "A GroupByActor" should { } }
Example 11
Source File: SampleActorSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.actors.transform import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestActorRef, TestKit, TestProbe} import akka.util.Timeout import io.coral.lib.{NotSoRandom, Random} import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} import scala.concurrent.duration._ import scala.language.postfixOps class SampleActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with ScalaFutures { def this() = this(ActorSystem("SampleActorSpec")) override def afterAll() { TestKit.shutdownActorSystem(system) } def arbitrarySampleActor(): SampleActor = { val json = parse( """{ "type": "sample", | "params": { "fraction": 0.707 } } """.stripMargin) val props = SampleActor(json).get TestActorRef[SampleActor](props).underlyingActor } def notSoRandomSampleActor(fraction: Double, randoms: Double*): SampleActor = { val json = parse( s"""{ "type": "sample", "params": { "fraction": ${fraction} } } """.stripMargin) val source = NotSoRandom(randoms: _*) val props = Props(classOf[SampleActor], json, Random(source)) TestActorRef[SampleActor](props).underlyingActor } implicit val timeout = Timeout(100 millis) "A SampleActor" should { "Be instantiated with sample fraction" in { val json = parse("""{ "type": "sample", "params": { "fraction": 0.5 }}""".stripMargin) val props = SampleActor(json).get props.actorClass() should be(classOf[SampleActor]) val actor = TestActorRef[SampleActor](props).underlyingActor actor.fraction should be(0.5) } "Not be instantiated without fraction or percentage" in { val json = parse("""{ "type": "sample", "params": { "bla": "blabla" }}""".stripMargin) SampleActor(json) should be(None) } "Be constructible with a io.coral.lib.Random for random boolean stream" in { val actor = notSoRandomSampleActor(fraction = 0.5, randoms = 0.1, 0.49, 0.50, 0.51, 0.8, 0.4) actor.next() should be(true) actor.next() should be(true) actor.next() should be(false) actor.next() should be(false) actor.next() should be(false) actor.next() should be(true) } "Should trigger true or false according to random binomial sequence" in { val actor = notSoRandomSampleActor(fraction = 0.7, randoms = 0.8, 0.6) val json = parse( """{ "something": "whatever" }""").asInstanceOf[JObject] val result1 = actor.simpleEmitTrigger(json) result1 should be(Some(JNothing)) val result2 = actor.simpleEmitTrigger(json) result2 should be(Some(json)) } "Should have trigger and emit cooperate" in { val actor = notSoRandomSampleActor(fraction = 0.7, randoms = 0.6, 0.8) val ref = actor.self val json = parse( """{ "something": "whatever" }""").asInstanceOf[JObject] val probe = TestProbe() actor.emitTargets += probe.ref ref ! json probe.expectMsg(json) ref ! json probe.expectNoMsg(100 millis) } } }
Example 12
Source File: HttpBroadcastActorSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.actors.transform import akka.actor.ActorSystem import akka.testkit._ import org.json4s._ import org.json4s.jackson.JsonMethods._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class HttpBroadcastActorSpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfterAll with ScalaFutures { def this() = this(ActorSystem("HttpBroadcastActorSpec")) override def afterAll() { TestKit.shutdownActorSystem(system) } "A HttpBroadcastActor" should { "Instantiate with any json" in { val createJson = parse( """{ "type": "httpbroadcast" }""") val props = HttpBroadcastActor(createJson) assert(props.isDefined) } "Emit the trigger contents" in { val props = HttpBroadcastActor(parse( """{ "type": "httpbroadcast" }""")) val actor = TestActorRef[HttpBroadcastActor](props.get).underlyingActor val json = parse( """{"emit":"whatever"}""") val result = actor.simpleEmitTrigger(json.asInstanceOf[JObject]) result should be(Some(json)) } } }
Example 13
Source File: TestSpec.scala From reactive-programming with Apache License 2.0 | 5 votes |
package com.test import java.io.IOException import java.util.UUID import akka.actor.{ ActorRef, ActorSystem, PoisonPill } import akka.event.{ Logging, LoggingAdapter } import akka.testkit.TestProbe import akka.util.Timeout import org.scalatest.concurrent.{ Eventually, ScalaFutures } import org.scalatest.exceptions.TestFailedException import org.scalatest._ import rx.lang.scala._ import scala.concurrent.duration._ import scala.concurrent.{ ExecutionContextExecutor, Future } import scala.util.{ Random ⇒ Rnd, Try } object Random { def apply(): Rnd = new Rnd() } trait TestSpec extends FlatSpec with Matchers with ScalaFutures with TryValues with OptionValues with Eventually with BeforeAndAfterAll { implicit val system: ActorSystem = ActorSystem("test") implicit val ec: ExecutionContextExecutor = system.dispatcher val log: LoggingAdapter = Logging(system, this.getClass) implicit val pc: PatienceConfig = PatienceConfig(timeout = 50.seconds) implicit val timeout = Timeout(50.seconds) override protected def afterAll(): Unit = { system.terminate() } def cleanup(actors: ActorRef*): Unit = { actors.foreach { (actor: ActorRef) ⇒ actor ! PoisonPill probe watch actor } } implicit class PimpedByteArray(self: Array[Byte]) { def getString: String = new String(self) } implicit class PimpedFuture[T](self: Future[T]) { def toTry: Try[T] = Try(self.futureValue) } implicit class PimpedObservable[T](self: Observable[T]) { def waitFor: Unit = { self.toBlocking.toIterable.last } } implicit class MustBeWord[T](self: T) { def mustBe(pf: PartialFunction[T, Unit]): Unit = if (!pf.isDefinedAt(self)) throw new TestFailedException("Unexpected: " + self, 0) } object Socket { def apply() = new Socket } class Socket { def readFromMemory: Future[Array[Byte]] = Future { Thread.sleep(100) // sleep 100 millis "fromMemory".getBytes } def send(payload: Array[Byte], from: String, failed: Boolean): Future[Array[Byte]] = if (failed) Future.failed(new IOException(s"Network error: $from")) else { Future { Thread.sleep(250) // sleep 250 millis, not real life time, but hey s"${payload.getString}->$from".getBytes } } def sendToEurope(payload: Array[Byte], failed: Boolean = false): Future[Array[Byte]] = send(payload, "fromEurope", failed) def sendToUsa(payload: Array[Byte], failed: Boolean = false): Future[Array[Byte]] = send(payload, "fromUsa", failed) } }
Example 14
Source File: FlatSpecWithSql.scala From akka-http-rest-api with MIT License | 5 votes |
package utils import org.flywaydb.core.Flyway import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, BeforeAndAfterEach, FlatSpec} import slick.driver.H2Driver.api._ trait FlatSpecWithSql extends FlatSpec with BeforeAndAfterAll with BeforeAndAfterEach with ScalaFutures { private val connectionString = "jdbc:h2:mem:rest_api_test" + this.getClass.getSimpleName + ";DB_CLOSE_DELAY=-1" implicit val db = Database.forURL(connectionString) override protected def beforeAll() { super.beforeAll() createAll() } private def createAll() { val flyway = new Flyway() flyway.setDataSource(connectionString, "", "") flyway.migrate() } override protected def afterAll() { super.afterAll() dropAll() db.close() } private def dropAll() { db.run(sqlu"DROP ALL OBJECTS").futureValue } override protected def afterEach() { try { clearData() } catch { case e: Exception => e.printStackTrace() } super.afterEach() } private def clearData() { dropAll() createAll() } }
Example 15
Source File: GrpcIntegrationSuiteWithThreeAddress.scala From Waves with MIT License | 5 votes |
package com.wavesplatform.it import com.google.protobuf.ByteString import com.wavesplatform.account.{Address, KeyPair} import com.wavesplatform.common.utils.EitherExt2 import com.wavesplatform.it.api.SyncGrpcApi._ import com.wavesplatform.it.util._ import com.wavesplatform.protobuf.transaction.{PBRecipients, PBTransactions, Recipient} import com.wavesplatform.transaction.transfer.TransferTransaction import com.wavesplatform.utils.ScorexLogging import org.scalatest.concurrent.{IntegrationPatience, ScalaFutures} import org.scalatest.{BeforeAndAfterAll, Matchers, RecoverMethods, Suite} trait GrpcIntegrationSuiteWithThreeAddress extends BeforeAndAfterAll with Matchers with ScalaFutures with IntegrationPatience with RecoverMethods with IntegrationTestsScheme with Nodes with ScorexLogging { this: Suite => def miner: Node = nodes.head def notMiner: Node = nodes.last protected def sender: Node = miner protected lazy val firstAcc: KeyPair = KeyPair("first_acc".getBytes("UTF-8")) protected lazy val secondAcc: KeyPair = KeyPair("second_acc".getBytes("UTF-8")) protected lazy val thirdAcc: KeyPair = KeyPair("third_acc".getBytes("UTF-8")) protected lazy val firstAddress: ByteString = PBRecipients.create(Address.fromPublicKey(firstAcc.publicKey)).getPublicKeyHash protected lazy val secondAddress: ByteString = PBRecipients.create(Address.fromPublicKey(secondAcc.publicKey)).getPublicKeyHash protected lazy val thirdAddress: ByteString = PBRecipients.create(Address.fromPublicKey(thirdAcc.publicKey)).getPublicKeyHash abstract protected override def beforeAll(): Unit = { super.beforeAll() val defaultBalance: Long = 100.waves def dumpBalances(node: Node, accounts: Seq[ByteString], label: String): Unit = { accounts.foreach(acc => { val balance = miner.wavesBalance(acc).available val eff = miner.wavesBalance(acc).effective val formatted = s"$acc: balance = $balance, effective = $eff" log.debug(s"$label account balance:\n$formatted") }) } def waitForTxsToReachAllNodes(txIds: Seq[String]): Unit = { val txNodePairs = for { txId <- txIds node <- nodes } yield (node, txId) txNodePairs.foreach({ case (node, tx) => node.waitForTransaction(tx) }) } def makeTransfers(accounts: Seq[ByteString]): Seq[String] = accounts.map { acc => PBTransactions .vanilla( sender.broadcastTransfer(sender.keyPair, Recipient().withPublicKeyHash(acc), defaultBalance, sender.fee(TransferTransaction.typeId)) ) .explicitGet() .id() .toString } def correctStartBalancesFuture(): Unit = { nodes.foreach(n => n.waitForHeight(2)) val accounts = Seq(firstAddress, secondAddress, thirdAddress) dumpBalances(sender, accounts, "initial") val txs = makeTransfers(accounts) val height = nodes.map(_.height).max withClue(s"waitForHeight(${height + 2})") { nodes.foreach(n => n.waitForHeight(height + 1)) nodes.foreach(n => n.waitForHeight(height + 2)) } withClue("waitForTxsToReachAllNodes") { waitForTxsToReachAllNodes(txs) } dumpBalances(sender, accounts, "after transfer") accounts.foreach(acc => miner.wavesBalance(acc).available shouldBe defaultBalance) accounts.foreach(acc => miner.wavesBalance(acc).effective shouldBe defaultBalance) } withClue("beforeAll") { correctStartBalancesFuture() } } }
Example 16
Source File: PackageObjectSpec.scala From nexus-kg with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.kg.storage import java.nio.file.Paths import java.util.UUID import akka.actor.ActorSystem import akka.http.scaladsl.model.Uri import akka.stream.scaladsl.FileIO import ch.epfl.bluebrain.nexus.kg.resources.ProjectIdentifier.ProjectRef import ch.epfl.bluebrain.nexus.kg.resources.file.File.Digest import org.scalatest.concurrent.ScalaFutures import org.scalatest.flatspec.AnyFlatSpecLike import org.scalatest.matchers.should.Matchers class PackageObjectSpec extends AnyFlatSpecLike with Matchers with ScalaFutures { "uriToPath" should "convert an Akka Uri that represents a valid file path to a Java Path" in { uriToPath("file:///some/path/my%20file.txt") shouldEqual Some(Paths.get("/some/path/my file.txt")) uriToPath("s3://some/path") shouldEqual None uriToPath("foo") shouldEqual None } "pathToUri" should "convert a Java Path to an Akka Uri" in { pathToUri(Paths.get("/some/path/my file.txt")) shouldEqual Uri("file:///some/path/my%20file.txt") } "mangle" should "generate a properly mangled path given a file project and UUID" in { val projUuid = UUID.fromString("4947db1e-33d8-462b-9754-3e8ae74fcd4e") val fileUuid = UUID.fromString("b1d7cda2-1ec0-40d2-b12e-3baf4895f7d7") mangle(ProjectRef(projUuid), fileUuid, "my file.jpg") shouldEqual "4947db1e-33d8-462b-9754-3e8ae74fcd4e/b/1/d/7/c/d/a/2/my file.jpg" } "digest" should "properly compute the hash of a given input" in { implicit val as: ActorSystem = ActorSystem() val filePath = "/storage/s3.json" val path = Paths.get(getClass.getResource(filePath).toURI) val input = FileIO.fromPath(path) val algo = "SHA-256" input.runWith(digestSink(algo)(as.dispatcher)).futureValue shouldEqual Digest( algo, "5602c497e51680bef1f3120b1d6f65d480555002a3290029f8178932e8f4801a" ) } }
Example 17
Source File: ActorSourceSpec.scala From akka-ddd-cqrs-es-example with MIT License | 5 votes |
package com.github.j5ik2o.bank.infrastrucuture.akka import akka.actor.{ ActorSystem, Props } import akka.stream.ActorMaterializer import akka.stream.scaladsl.Keep import akka.stream.testkit.scaladsl.TestSink import akka.testkit.TestKit import com.github.j5ik2o.bank.infrastrucuture.akka.dsl.ActorSource import org.scalatest.FreeSpecLike import org.scalatest.concurrent.ScalaFutures class ActorSourceSpec extends TestKit(ActorSystem("ActorSourceSpec")) with FreeSpecLike with ScalaFutures { implicit val mat = ActorMaterializer() "ActorSource" - { "should be able to send message via stream" in { val props = Props(SourceActor[String]({ case (subscriber, msg) => subscriber ! msg })) val (sourceRefFuture, sinkProbe) = ActorSource[String](props).toMat(TestSink.probe)(Keep.both).run() sourceRefFuture.futureValue ! "TEST" sinkProbe.request(1).expectNext("TEST") } "should be able to error handling" in { val props = Props(SourceActor[String]({ case (_, x) => throw new Exception(s"message = $x") })) val (sourceRefFuture, sinkProbe) = ActorSource[String](props).toMat(TestSink.probe)(Keep.both).run() sourceRefFuture.futureValue ! "TEST" sinkProbe.request(1).expectError() } } }
Example 18
Source File: ResolverCacheSpec.scala From nexus-kg with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.kg.cache import akka.actor.ExtendedActorSystem import akka.serialization.Serialization import akka.testkit._ import ch.epfl.bluebrain.nexus.commons.test.ActorSystemFixture import ch.epfl.bluebrain.nexus.iam.client.types.Identity.Anonymous import ch.epfl.bluebrain.nexus.kg.TestHelper import ch.epfl.bluebrain.nexus.kg.config.AppConfig._ import ch.epfl.bluebrain.nexus.kg.config.{AppConfig, Settings} import ch.epfl.bluebrain.nexus.kg.resolve.Resolver._ import ch.epfl.bluebrain.nexus.kg.resources.ProjectIdentifier.{ProjectLabel, ProjectRef} import monix.eval.Task import monix.execution.Scheduler.Implicits.global import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.{Inspectors, TryValues} import scala.concurrent.duration._ //noinspection NameBooleanParameters class ResolverCacheSpec extends ActorSystemFixture("ResolverCacheSpec", true) with Matchers with Inspectors with ScalaFutures with TryValues with TestHelper { override implicit def patienceConfig: PatienceConfig = PatienceConfig(3.seconds.dilated, 5.milliseconds) private implicit val appConfig: AppConfig = Settings(system).appConfig val ref1 = ProjectRef(genUUID) val ref2 = ProjectRef(genUUID) val label1 = ProjectLabel(genString(), genString()) val label2 = ProjectLabel(genString(), genString()) val resolver: InProjectResolver = InProjectResolver(ref1, genIri, 1L, false, 10) val crossRefs: CrossProjectResolver = CrossProjectResolver(Set(genIri), List(ref1, ref2), Set(Anonymous), ref1, genIri, 0L, false, 1) val crossLabels: CrossProjectResolver = CrossProjectResolver(Set(genIri), List(label1, label2), Set(Anonymous), ref1, genIri, 0L, false, 1) val resolverProj1: Set[InProjectResolver] = List.fill(5)(resolver.copy(id = genIri)).toSet val resolverProj2: Set[InProjectResolver] = List.fill(5)(resolver.copy(id = genIri, ref = ref2)).toSet private val cache = ResolverCache[Task] "ResolverCache" should { "index resolvers" in { val list = (resolverProj1 ++ resolverProj2).toList forAll(list) { resolver => cache.put(resolver).runToFuture.futureValue cache.get(resolver.ref, resolver.id).runToFuture.futureValue shouldEqual Some(resolver) } } "list resolvers" in { cache.get(ref1).runToFuture.futureValue should contain theSameElementsAs resolverProj1 cache.get(ref2).runToFuture.futureValue should contain theSameElementsAs resolverProj2 } "deprecate resolver" in { val resolver = resolverProj1.head cache.put(resolver.copy(deprecated = true, rev = 2L)).runToFuture.futureValue cache.get(resolver.ref, resolver.id).runToFuture.futureValue shouldEqual None cache.get(ref1).runToFuture.futureValue should contain theSameElementsAs resolverProj1.filterNot(_ == resolver) } "serialize cross project resolver" when { val serialization = new Serialization(system.asInstanceOf[ExtendedActorSystem]) "parameterized with ProjectRef" in { val bytes = serialization.serialize(crossRefs).success.value val out = serialization.deserialize(bytes, classOf[CrossProjectResolver]).success.value out shouldEqual crossRefs } "parameterized with ProjectLabel" in { val bytes = serialization.serialize(crossLabels).success.value val out = serialization.deserialize(bytes, classOf[CrossProjectResolver]).success.value out shouldEqual crossLabels } } } }
Example 19
Source File: TarFlowSpec.scala From nexus-kg with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.kg.archives import java.nio.file.Files import java.time.{Clock, Instant, ZoneId} import akka.actor.ActorSystem import akka.stream.scaladsl.FileIO import akka.testkit.TestKit import ch.epfl.bluebrain.nexus.kg.TestHelper import ch.epfl.bluebrain.nexus.kg.storage.digestSink import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike import scala.concurrent.duration._ class TarFlowSpec extends TestKit(ActorSystem("TarFlowSpec")) with AnyWordSpecLike with Matchers with TestHelper with ScalaFutures { private implicit val ec = system.dispatcher private implicit val clock = Clock.fixed(Instant.EPOCH, ZoneId.systemDefault()) override implicit def patienceConfig: PatienceConfig = PatienceConfig(55.second, 150.milliseconds) "A TarFlow" should { "tar a bunch of sources" in { val digest = "3fef41c5afe7a7ee11ee9d556a564fb57784cc5247b24c6ca70783f396fa158a1c7952504d3e1aa441de20cf065d740eec454c6ffb7fbc4b6351b950ee51c886" val elems = 500 val contents = List.tabulate(2) { i => val content = (i until (i + elems)).toList.mkString(",") + "\n" ArchiveSource(content.length.toLong, s"some/path$i/$i.txt", produce(content)) } val path = Files.createTempFile("test", ".tar") TarFlow.write(contents).runWith(FileIO.toPath(path)).futureValue FileIO.fromPath(path).runWith(digestSink("SHA-512")).futureValue.value shouldEqual digest Files.delete(path) } } }
Example 20
Source File: PaginationSupportSpec.scala From vamp with Apache License 2.0 | 5 votes |
package io.vamp.persistence import io.vamp.common.akka.ExecutionContextProvider import io.vamp.common.http.OffsetResponseEnvelope import org.junit.runner.RunWith import org.scalatest.concurrent.ScalaFutures import org.scalatest.junit.JUnitRunner import org.scalatest.time.{ Millis, Seconds, Span } import org.scalatest.{ FlatSpec, Matchers } import scala.concurrent.{ ExecutionContext, Future } @RunWith(classOf[JUnitRunner]) class PaginationSupportSpec extends FlatSpec with Matchers with PaginationSupport with ScalaFutures with ExecutionContextProvider { case class ResponseEnvelope(response: List[Int], total: Long, page: Int, perPage: Int) extends OffsetResponseEnvelope[Int] implicit def executionContext = ExecutionContext.global implicit val defaultPatience = PatienceConfig(timeout = Span(3, Seconds), interval = Span(100, Millis)) "PaginationSupport" should "collect all from single page" in { val list = (1 to 5).toList val source = (page: Int, perPage: Int) ⇒ Future { ResponseEnvelope(list.take(perPage), list.size, page, perPage) } whenReady(consume(allPages(source, 5)))(_ shouldBe list) } it should "collect all from multiple pages" in { val list = (1 to 15).toList val source = (page: Int, perPage: Int) ⇒ Future { ResponseEnvelope(list.slice((page - 1) * perPage, page * perPage), list.size, page, perPage) } whenReady(consume(allPages(source, 5)))(_ shouldBe list) } it should "collect all from multiple pages without round total / per page" in { val list = (1 to 17).toList val source = (page: Int, perPage: Int) ⇒ Future { ResponseEnvelope(list.slice((page - 1) * perPage, page * perPage), list.size, page, perPage) } whenReady(consume(allPages(source, 5)))(_ shouldBe list) } }
Example 21
Source File: ItSpec.scala From elastic-indexer4s with MIT License | 5 votes |
package com.yannick_cw.elastic_indexer4s.specs import com.sksamuel.elastic4s.http.Response import com.sksamuel.elastic4s.testkit.{ElasticMatchers, ElasticSugar} import com.whisk.docker.impl.spotify.DockerKitSpotify import com.whisk.docker.scalatest.DockerTestKit import org.scalatest.{AsyncTestSuite, _} import org.scalatest.concurrent.ScalaFutures import scala.concurrent.Future trait ItSpec extends Matchers with ScalaFutures with Inspectors with EitherValues with ElasticSugar with ElasticMatchers with IndexerElasticSearchService with DockerTestKit with DockerKitSpotify with CompleteLastly with RecoverMethods with BeforeAndAfterAll { this: Suite => implicit class TestExtractor[A](f: Future[Response[A]]) { def toResult: Future[A] = f.map(res => res.fold(throw new Exception("Failed with: " + res.error.rootCause.mkString("\n")))(identity)) } }
Example 22
Source File: CassandraSpec.scala From troy with Apache License 2.0 | 5 votes |
package troy package macros import java.util import com.datastax.driver.core.{ Session, Cluster } import org.cassandraunit.CQLDataLoader import org.cassandraunit.dataset.CQLDataSet import org.cassandraunit.dataset.cql.ClassPathCQLDataSet import org.cassandraunit.utils.EmbeddedCassandraServerHelper import org.scalatest.concurrent.ScalaFutures import org.scalatest._ import org.scalatest.time.{ Minute, Seconds, Span } import scala.concurrent.duration._ trait CassandraSpec extends FlatSpec with BeforeAndAfterAll with BeforeAndAfterEach with ScalaFutures with Matchers { def port: Int = 9142 def host: String = "127.0.0.1" private lazy val cluster = new Cluster.Builder().addContactPoints(host).withPort(port).build() implicit lazy val session: Session = cluster.connect() implicit override val patienceConfig = PatienceConfig(timeout = Span(1, Minute), interval = Span(5, Seconds)) def testDataFixtures: String = "" private lazy val fixtures = StringCQLDataSet(testDataFixtures, false, false, "test") private lazy val schema = Seq(new ClassPathCQLDataSet("schema/01.cql"), new ClassPathCQLDataSet("schema/02.cql")) override protected def beforeAll(): Unit = { EmbeddedCassandraServerHelper.startEmbeddedCassandra(1.minute.toMillis) loadClean() super.beforeEach() } override protected def afterAll(): Unit = { session.close() cluster.close() super.afterAll() } def loadClean() = { EmbeddedCassandraServerHelper.cleanEmbeddedCassandra() loadData((schema :+ fixtures): _*) } def loadData(datasets: CQLDataSet*) = { val loader = new CQLDataLoader(session) datasets.foreach(loader.load) } } object Helpers { def splitStatements(statements: String) = statements.split(";").map(_.trim).filter(!_.isEmpty) } case class StringCQLDataSet( cqlStatements: String, isKeyspaceCreation: Boolean, isKeyspaceDeletion: Boolean, getKeyspaceName: String ) extends CQLDataSet { lazy val getCQLStatements = util.Arrays.asList(Helpers.splitStatements(cqlStatements): _*) }
Example 23
Source File: BaseSpec.scala From troy with Apache License 2.0 | 5 votes |
package troy package meta import java.util import com.datastax.driver.core.{ Session, Cluster } import org.cassandraunit.CQLDataLoader import org.cassandraunit.dataset.CQLDataSet import org.cassandraunit.dataset.cql.ClassPathCQLDataSet import org.cassandraunit.utils.EmbeddedCassandraServerHelper import org.scalatest.concurrent.ScalaFutures import org.scalatest._ import scala.concurrent.duration._ trait BaseSpec extends FlatSpec with BeforeAndAfterAll with BeforeAndAfterEach with ScalaFutures with Matchers { def port: Int = 9142 def host: String = "127.0.0.1" private lazy val cluster = new Cluster.Builder().addContactPoints(host).withPort(port).build() implicit lazy val session: Session = cluster.connect() implicit val patienceTimeout = org.scalatest.concurrent.PatienceConfiguration.Timeout(10.seconds) def testDataFixtures: String = "" private lazy val fixtures = StringCQLDataSet(testDataFixtures, false, false, "test") private lazy val schema = new ClassPathCQLDataSet("schema.cql") override protected def beforeAll(): Unit = { EmbeddedCassandraServerHelper.startEmbeddedCassandra(1.minute.toMillis) loadClean() super.beforeEach() } override protected def afterAll(): Unit = { session.close() cluster.close() super.afterAll() } def loadClean() = { EmbeddedCassandraServerHelper.cleanEmbeddedCassandra() loadData(schema, fixtures) } def loadData(datasets: CQLDataSet*) = { val loader = new CQLDataLoader(session) datasets.foreach(loader.load) } } object Helpers { def splitStatements(statements: String) = statements.split(";").map(_.trim).filter(!_.isEmpty) } case class StringCQLDataSet( cqlStatements: String, isKeyspaceCreation: Boolean, isKeyspaceDeletion: Boolean, getKeyspaceName: String ) extends CQLDataSet { lazy val getCQLStatements = util.Arrays.asList(Helpers.splitStatements(cqlStatements): _*) }
Example 24
Source File: XMLParsingStopSpec.scala From akka-xml-parser with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.akka.xml import akka.stream.scaladsl.{Keep, Source} import org.scalatest.{FlatSpec, Matchers} import org.scalatest.concurrent.{Eventually, ScalaFutures} import org.scalatest.mock.MockitoSugar import org.scalatest.time.{Millis, Seconds, Span} class XMLParsingStopSpec extends FlatSpec with Matchers with ScalaFutures with MockitoSugar with Eventually with XMLParserFixtures { val f = fixtures implicit override val patienceConfig = PatienceConfig(timeout = Span(5, Seconds), interval = Span(5, Millis)) import f._ it should "Stop parsing when the passed in xPath is encountered" in { val source = Source(ParserTestHelpers.getBrokenMessage(ParserTestHelpers.sa100.toString, 100)) val paths = Seq[XMLInstruction]( XMLExtract(Seq("GovTalkMessage", "Header", "MessageDetails", "Class")), XMLExtract(Seq("GovTalkMessage", "Header", "MessageDetails", "Qualifier")), XMLExtract(Seq("GovTalkMessage", "Header", "MessageDetails", "Function")), XMLExtract(Seq("GovTalkMessage", "Body", "IRenvelope", "MTR", "SA100", "YourPersonalDetails", "NationalInsuranceNumber")), //This is in the body, will not be parsed XMLStopParsing(Seq("GovTalkMessage", "Body")) ) val expected = Set( XMLElement(List("GovTalkMessage", "Header", "MessageDetails", "Class"), Map(), Some("HMRC-SA-SA100")), XMLElement(List("GovTalkMessage", "Header", "MessageDetails", "Function"), Map(), Some("submit")), XMLElement(List("GovTalkMessage", "Header", "MessageDetails", "Qualifier"), Map(), Some("request")) ) whenReady(source.runWith(parseToXMLElements(paths))) { r => r.filterNot(a => a.value == Some(FastParsingStage.STREAM_SIZE)) shouldBe expected } whenReady(source.runWith(parseToByteString(paths))) { r => whenReady(source.toMat(collectByteString)(Keep.right).run()) { t => r shouldBe t } } } it should "Notify if the payload exceeded the maximum allowed size" in { val source = Source(ParserTestHelpers.getBrokenMessage(ParserTestHelpers.sa100.toString, 100)) val paths = Seq[XMLInstruction](XMLExtract(Seq("GovTalkMessage", "Header", "MessageDetails", "Class"))) val expected = Set( XMLElement(List("GovTalkMessage", "Header", "MessageDetails", "Class"), Map(), Some("HMRC-SA-SA100")), XMLElement(List(), Map(), Some("Stream max size")) ) whenReady(source.runWith(parseToXMLElements(paths, Some(200)))) { r => r.filterNot(a => a.value == Some(FastParsingStage.STREAM_SIZE)) shouldBe expected } whenReady(source.runWith(parseToByteString(paths))) { r => whenReady(source.toMat(collectByteString)(Keep.right).run()) { t => r shouldBe t } } } }
Example 25
Source File: XMLParserXMLExtractNamespaceSpec.scala From akka-xml-parser with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.akka.xml import akka.stream.scaladsl.{Keep, Source} import akka.util.ByteString import org.scalatest.{FlatSpec, Matchers} import org.scalatest.concurrent.{Eventually, ScalaFutures} import org.scalatest.mock.MockitoSugar import org.scalatest.time.{Millis, Seconds, Span} class XMLParserXMLExtractNamespaceSpec extends FlatSpec with Matchers with ScalaFutures with MockitoSugar with Eventually with XMLParserFixtures { val f = fixtures implicit override val patienceConfig = PatienceConfig(timeout = Span(5, Seconds), interval = Span(5, Millis)) import f._ behavior of "CompleteChunkStage#parser" it should "Parse and extract several non-default namespaces" in { val testXMLX = <ns5:GovTalkMessage xmlns:ns0="http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/13-14/2" xmlns:ns2="http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/15-16/1" xmlns:ns5="http://www.govtalk.gov.uk/CM/envelope" xmlns:ns1="http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/14-15/1" xmlns:ns3="http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/16-17/1" xmlns:ns4="http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/17-18/1" xmlns=""> <ns5:EnvelopeVersion>2.0</ns5:EnvelopeVersion> <ns5:Header></ns5:Header> <ns5:GovTalkDetails></ns5:GovTalkDetails> </ns5:GovTalkMessage> val source = Source(List(ByteString(testXMLX.toString()))) val paths = Seq[XMLInstruction]( XMLExtract(Seq("GovTalkMessage"), Map("xmlns:ns2" -> "http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/15-16/1")), XMLExtract(Seq("GovTalkMessage"), Map("xmlns:BLABLA" -> "http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/13-14/2")), XMLExtract(Seq("GovTalkMessage"), Map("xmlns" -> "http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/17-18/1")), XMLExtract(Seq("GovTalkMessage"), Map("xmlns" -> "http://www.govtalk.gov.uk/CM/envelope")) ) val expected = Set( XMLElement(List("GovTalkMessage"), Map("xmlns:ns2" -> "http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/15-16/1"), Some("")), XMLElement(List("GovTalkMessage"), Map("xmlns:ns0" -> "http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/13-14/2"), Some("")), XMLElement(List("GovTalkMessage"), Map("xmlns:ns4" -> "http://www.govtalk.gov.uk/taxation/PAYE/RTI/EmployerPaymentSummary/17-18/1"), Some("")), XMLElement(List("GovTalkMessage"), Map("xmlns:ns5" -> "http://www.govtalk.gov.uk/CM/envelope"), Some("")), XMLElement(List(), Map(CompleteChunkStage.STREAM_SIZE -> "681"), Some(CompleteChunkStage.STREAM_SIZE)) ) whenReady(source.runWith(parseToXMLElements(paths))) { r => r shouldBe expected } whenReady(source.runWith(parseToByteString(paths))) { r => whenReady(source.toMat(collectByteString)(Keep.right).run()) { t => r shouldBe t } } } }
Example 26
Source File: OutputXMLMatchesInputXMLSpec.scala From akka-xml-parser with Apache License 2.0 | 5 votes |
import akka.stream.scaladsl.{Keep, Source} import akka.util.ByteString import org.scalatest import org.scalatest.concurrent.{Eventually, ScalaFutures} import org.scalatest.mockito.MockitoSugar import org.scalatest.{BeforeAndAfterEach, Matchers} import uk.gov.hmrc.akka.xml._ import uk.gov.hmrc.play.test.UnitSpec import scala.concurrent.ExecutionContext.Implicits.global class OutputXMLMatchesInputXMLSpec extends UnitSpec with BeforeAndAfterEach with Matchers with ScalaFutures with MockitoSugar with Eventually with XMLParserFixtures { val inputXml = "<Address xmlns=\"http://www.govtalk.gov.uk/CM/address\"><Line>Line 1</Line><Line>Line 2</Line><PostCode>Tf3 4NT</PostCode></Address>" val inputXmlWithSelfClosingElement = "<Address xmlns=\"http://www.govtalk.gov.uk/CM/address\"><Line>Line 1</Line><Line>Line 2</Line><Line/><PostCode>Tf3 4NT</PostCode></Address>" val inputXmlWithBlankElement = "<Address xmlns=\"http://www.govtalk.gov.uk/CM/address\"><Line>Line 1</Line><Line>Line 2</Line><Line></Line><PostCode>Tf3 4NT</PostCode></Address>" val f = fixtures def xpathValue(xmlElements: Set[XMLElement], xPath: Seq[String]): Option[String] = xmlElements.collectFirst { case XMLElement(`xPath`, _, Some(xpathValue)) => xpathValue } def parseAndCompare(inputXml: String): scalatest.Assertion = { val inputXmlSource: Source[ByteString, _] = Source.single(ByteString(inputXml)) await( for { parsedXmlElements <- inputXmlSource .via(CompleteChunkStage.parser()) .via(ParsingStage.parser(Seq(XMLExtract(Seq("Address"), Map.empty, true)))) .via(f.flowXMLElements) .toMat(f.collectXMLElements)(Keep.right) .run()(f.mat) parsedXml = xpathValue(parsedXmlElements, Seq("Address")) } yield { val outputXml = parsedXml.get println(s"INPUT XML = $inputXml") println(s"OUTPUT XML = $outputXml") println() outputXml shouldBe inputXml } ) } "The output XML" should { "match the input XML" when { "blank elements *** ARE *** present" in parseAndCompare(inputXmlWithBlankElement) "self closing elements are *** NOT *** present" in parseAndCompare(inputXml) "self closing elements *** ARE *** present" in parseAndCompare(inputXmlWithSelfClosingElement) } } }
Example 27
Source File: HelloSpec.scala From sbt-guardrail with MIT License | 5 votes |
package helloworld import org.scalatest._ import cats.implicits._ import com.example.clients.petstore.user.GetUserByNameResponse import org.scalatest.concurrent.ScalaFutures import scala.concurrent.ExecutionContext.Implicits.global class HelloSpec extends FlatSpec with Matchers with ScalaFutures { private val username = "billg" "UserClient" should "pass sanity check" in { val userClient = Hello.buildUserClient val result = userClient.getUserByName(username) result.exists(isExpectedResponse(_)).futureValue shouldBe true } private def isExpectedResponse(response: GetUserByNameResponse): Boolean = { response.fold( user => user.username == Some(username) && user.email == Some(username + "@example.com"), false, false ) } }
Example 28
Source File: HelloSpec.scala From sbt-guardrail with MIT License | 5 votes |
package helloworld import java.util.concurrent.TimeUnit import com.example.clients.petstore.user.LogoutUserResponse import org.scalatest._ import org.scalatest.concurrent.ScalaFutures class HelloSpec extends FlatSpec with Matchers with ScalaFutures { "UserClient" should "pass sanity check" in { val userClient = Hello.buildUserClient val future = userClient.logoutUser().call().toCompletableFuture val logoutResponse = future.get(10, TimeUnit.SECONDS) future.isDone shouldBe true future.isCompletedExceptionally shouldBe false logoutResponse.getClass shouldBe classOf[LogoutUserResponse.Ok] } }
Example 29
Source File: DeploymentSpec.scala From skuber with Apache License 2.0 | 5 votes |
package skuber import org.scalatest.Matchers import org.scalatest.concurrent.{Eventually, ScalaFutures} import skuber.LabelSelector.IsEqualRequirement import skuber.apps.v1.Deployment import scala.concurrent.duration._ import scala.concurrent.{Await, Future} import scala.util.{Failure, Success} class DeploymentSpec extends K8SFixture with Eventually with Matchers { val nginxDeploymentName: String = java.util.UUID.randomUUID().toString behavior of "Deployment" it should "create a deployment" in { k8s => k8s.create(getNginxDeployment(nginxDeploymentName, "1.7.9")) map { d => assert(d.name == nginxDeploymentName) } } it should "get the newly created deployment" in { k8s => k8s.get[Deployment](nginxDeploymentName) map { d => assert(d.name == nginxDeploymentName) } } it should "upgrade the newly created deployment" in { k8s => k8s.get[Deployment](nginxDeploymentName).flatMap { d => println(s"DEPLOYMENT TO UPDATE ==> $d") val updatedDeployment = d.updateContainer(getNginxContainer("1.9.1")) k8s.update(updatedDeployment).flatMap { _ => eventually(timeout(200.seconds), interval(5.seconds)) { val retrieveDeployment=k8s.get[Deployment](nginxDeploymentName) ScalaFutures.whenReady(retrieveDeployment, timeout(2.seconds), interval(1.second)) { deployment => deployment.status.get.updatedReplicas shouldBe 1 } } } } } it should "delete a deployment" in { k8s => k8s.deleteWithOptions[Deployment](nginxDeploymentName, DeleteOptions(propagationPolicy = Some(DeletePropagation.Foreground))).map { _ => eventually(timeout(200.seconds), interval(3.seconds)) { val retrieveDeployment = k8s.get[Deployment](nginxDeploymentName) val deploymentRetrieved=Await.ready(retrieveDeployment, 2.seconds).value.get deploymentRetrieved match { case s: Success[_] => assert(false) case Failure(ex) => ex match { case ex: K8SException if ex.status.code.contains(404) => assert(true) case _ => assert(false) } } } } } def getNginxContainer(version: String): Container = Container(name = "nginx", image = "nginx:" + version).exposePort(80) def getNginxDeployment(name: String, version: String): Deployment = { import LabelSelector.dsl._ val nginxContainer = getNginxContainer(version) val nginxTemplate = Pod.Template.Spec.named("nginx").addContainer(nginxContainer).addLabel("app" -> "nginx") Deployment(name).withTemplate(nginxTemplate).withLabelSelector("app" is "nginx") } }
Example 30
Source File: ActorSpec.scala From akka-ddd-cqrs-es-example with MIT License | 5 votes |
package com.github.j5ik2o.bank.adaptor.util import akka.actor.ActorSystem import akka.testkit.{ ImplicitSender, TestKit } import org.scalatest.concurrent.ScalaFutures import org.scalatest.prop.PropertyChecks import org.scalatest.{ BeforeAndAfterAll, FreeSpecLike, Matchers } abstract class ActorSpec(system: ActorSystem) extends TestKit(system) with FreeSpecLike with PropertyChecks with ImplicitSender with Matchers with BeforeAndAfterAll with ScalaFutures { override def afterAll: Unit = TestKit.shutdownActorSystem(system) }
Example 31
Source File: ControllerSpec.scala From akka-ddd-cqrs-es-example with MIT License | 5 votes |
package com.github.j5ik2o.bank.adaptor.util import akka.http.scaladsl.model.{ HttpEntity, MediaTypes } import akka.http.scaladsl.testkit.ScalatestRouteTest import akka.testkit.TestKitBase import akka.util.ByteString import com.github.j5ik2o.scalatestplus.db.{ MySQLdConfig, UserWithPassword } import com.wix.mysql.distribution.Version.v5_6_21 import io.circe.Encoder import io.circe.syntax._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.prop.PropertyChecks import org.scalatest.time.{ Millis, Seconds, Span } import org.scalatest.{ BeforeAndAfterAll, FreeSpecLike, Matchers } import scala.concurrent.duration._ object ControllerSpec { implicit class JsonOps[A](val self: A) extends AnyVal { def toEntity(implicit enc: Encoder[A]): HttpEntity.Strict = HttpEntity(MediaTypes.`application/json`, ByteString(self.asJson.noSpaces)) } } abstract class ControllerSpec extends FreeSpecLike with PropertyChecks with Matchers with BeforeAndAfterAll with ScalaFutures with FlywayWithMySQLSpecSupport with ScalatestRouteTest with TestKitBase { override implicit val patienceConfig: PatienceConfig = PatienceConfig(timeout = Span(10, Seconds), interval = Span(200, Millis)) override def afterAll: Unit = cleanUp() override protected lazy val mySQLdConfig: MySQLdConfig = MySQLdConfig( version = v5_6_21, port = Some(12345), userWithPassword = Some(UserWithPassword("bank", "passwd")), timeout = Some((30 seconds) * sys.env.getOrElse("SBT_TEST_TIME_FACTOR", "1").toDouble) ) }
Example 32
Source File: AkkaPersistenceEventLogSpec.scala From akka-stream-eventsourcing with Apache License 2.0 | 5 votes |
package com.github.krasserm.ases.log import akka.actor.ActorSystem import akka.stream.scaladsl.{Sink, Source} import akka.testkit.TestKit import com.github.krasserm.ases._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpecLike} import scala.collection.immutable.Seq class AkkaPersistenceEventLogSpec extends TestKit(ActorSystem("test")) with WordSpecLike with Matchers with ScalaFutures with StreamSpec { val akkaPersistenceEventLog: AkkaPersistenceEventLog = new AkkaPersistenceEventLog(journalId = "akka.persistence.journal.inmem") "An Akka Persistence event log" must { "provide a sink for writing events and a source for delivering replayed events" in { val persistenceId = "1" val events = Seq("a", "b", "c").map(Emitted(_, emitterId)) val expected = durables(events, offset = 1).map(Delivered(_)) :+ Recovered Source(events).runWith(akkaPersistenceEventLog.sink(persistenceId)).futureValue akkaPersistenceEventLog.source[String](persistenceId).runWith(Sink.seq).futureValue should be(expected) } "provide a flow with an input port for writing events and and output port for delivering replayed and live events" in { val persistenceId = "2" val events1 = Seq("a", "b", "c").map(Emitted(_, emitterId)) val events2 = Seq("d", "e", "f").map(Emitted(_, emitterId)) val expected = (durables(events1, offset = 1).map(Delivered(_)) :+ Recovered) ++ durables(events2, offset = 4).map(Delivered(_)) Source(events1).runWith(akkaPersistenceEventLog.sink(persistenceId)).futureValue Source(events2).via(akkaPersistenceEventLog.flow(persistenceId)).runWith(Sink.seq).futureValue should be(expected) } "provide a source that only delivers events of compatible types" in { val persistenceId = "3" val events = Seq("a", "b", 1, 2).map(Emitted(_, emitterId)) val expected = durables(events, offset = 1).drop(2).map(Delivered(_)) :+ Recovered Source(events).runWith(akkaPersistenceEventLog.sink(persistenceId)).futureValue akkaPersistenceEventLog.source[Int](persistenceId).runWith(Sink.seq).futureValue should be(expected) } } }
Example 33
Source File: KafkaEventLogSpec.scala From akka-stream-eventsourcing with Apache License 2.0 | 5 votes |
package com.github.krasserm.ases.log import akka.actor.ActorSystem import akka.stream.scaladsl.{Sink, Source} import akka.testkit.TestKit import com.github.krasserm.ases._ import org.apache.kafka.common.TopicPartition import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Seconds, Span} import org.scalatest.{Matchers, WordSpecLike} import scala.collection.immutable.Seq class KafkaEventLogSpec extends TestKit(ActorSystem("test")) with WordSpecLike with Matchers with ScalaFutures with StreamSpec with KafkaSpec { implicit val pc = PatienceConfig(timeout = Span(5, Seconds), interval = Span(10, Millis)) val kafkaEventLog: KafkaEventLog = new KafkaEventLog(host, port) "A Kafka event log" must { "provide a sink for writing events and a source for delivering replayed events" in { val topicPartition = new TopicPartition("p-1", 0) val events = Seq("a", "b", "c").map(Emitted(_, emitterId)) val expected = durables(events).map(Delivered(_)) :+ Recovered Source(events).runWith(kafkaEventLog.sink(topicPartition)).futureValue kafkaEventLog.source[String](topicPartition).take(4).runWith(Sink.seq).futureValue should be(expected) } "provide a flow with an input port for writing events and and output port for delivering replayed and live events" in { val topicPartition = new TopicPartition("p-2", 0) val events1 = Seq("a", "b", "c").map(Emitted(_, emitterId)) val events2 = Seq("d", "e", "f").map(Emitted(_, emitterId)) val expected = (durables(events1).map(Delivered(_)) :+ Recovered) ++ durables(events2, offset = 3).map(Delivered(_)) Source(events1).runWith(kafkaEventLog.sink(topicPartition)).futureValue Source(events2).via(kafkaEventLog.flow(topicPartition)).take(7).runWith(Sink.seq).futureValue should be(expected) } "provide a source that only delivers events of compatible types" in { val topicPartition = new TopicPartition("p-3", 0) val events = Seq("a", "b", 1, 2).map(Emitted(_, emitterId)) val expected = durables(events).drop(2).map(Delivered(_)) :+ Recovered Source(events).runWith(kafkaEventLog.sink(topicPartition)).futureValue kafkaEventLog.source[Int](topicPartition).take(3).runWith(Sink.seq).futureValue should be(expected) } } }
Example 34
Source File: RequestRoutingSpec.scala From akka-stream-eventsourcing with Apache License 2.0 | 5 votes |
package com.github.krasserm.ases import akka.NotUsed import akka.actor.ActorSystem import akka.stream.scaladsl.{Flow, Sink, Source} import akka.testkit.TestKit import com.github.krasserm.ases.log.AkkaPersistenceEventLog import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpecLike} import scala.collection.immutable.Seq object RequestRoutingSpec { import EventSourcing._ sealed trait Request { def aggregateId: String } case class GetState(aggregateId: String) extends Request // Query case class Increment(aggregateId: String, delta: Int) extends Request // Command case class Incremented(aggregateId: String, delta: Int) // Event case class Response(aggregateId: String, state: Int) val requestHandler: RequestHandler[Int, Incremented, Request, Response] = { case (s, GetState(aggregateId)) => respond(Response(aggregateId, s)) case (_, Increment(aggregateId, d)) => emit(Seq(Incremented(aggregateId, d)), Response(aggregateId, _)) } val eventHandler: EventHandler[Int, Incremented] = (s, e) => s + e.delta } class RequestRoutingSpec extends TestKit(ActorSystem("test")) with WordSpecLike with Matchers with ScalaFutures with StreamSpec { import RequestRoutingSpec._ val akkaPersistenceEventLog: AkkaPersistenceEventLog = new log.AkkaPersistenceEventLog(journalId = "akka.persistence.journal.inmem") def processor(aggregateId: String): Flow[Request, Response, NotUsed] = EventSourcing(aggregateId, 0, requestHandler, eventHandler).join(akkaPersistenceEventLog.flow(aggregateId)) def router: Flow[Request, Response, NotUsed] = Router(_.aggregateId, processor) "A request router" when { "configured to route based on aggregate id" must { "dynamically create a request processor for each aggregate id" in { val aggregateId1 = "a1" val aggregateId2 = "a2" val (pub, sub) = probes(router) pub.sendNext(Increment(aggregateId1, 3)) sub.requestNext(Response(aggregateId1, 3)) pub.sendNext(Increment(aggregateId2, 1)) sub.requestNext(Response(aggregateId2, 1)) pub.sendNext(Increment(aggregateId1, 2)) sub.requestNext(Response(aggregateId1, 5)) pub.sendNext(Increment(aggregateId2, -4)) sub.requestNext(Response(aggregateId2, -3)) } "handle single command using Source.single" in { val request = Increment("a3", 3) val expected = Response("a3", 3) Source.single(request) .via(router) .runWith(Sink.head) .futureValue should be(expected) } "handle single command using Source.apply(Seq)" in { val request = Increment("a4", 3) val expected = Response("a4", 3) Source(Seq(request)) .via(router) .runWith(Sink.head) .futureValue should be(expected) } "handle multiple commands" in { Source(Seq(Increment("a5", 1), Increment("a5", 2), Increment("a5", 3))) .via(router) .runWith(Sink.seq) .futureValue should be(Seq(Response("a5", 1), Response("a5", 3), Response("a5", 6))) } } } }
Example 35
Source File: EventCollaborationSpec.scala From akka-stream-eventsourcing with Apache License 2.0 | 5 votes |
package com.github.krasserm.ases import akka.NotUsed import akka.actor.ActorSystem import akka.stream.scaladsl.{Flow, Sink} import akka.testkit.TestKit import com.github.krasserm.ases.log.{KafkaEventLog, KafkaSpec} import org.apache.kafka.common.TopicPartition import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Seconds, Span} import org.scalatest.{Matchers, WordSpecLike} import scala.collection.immutable.Seq class EventCollaborationSpec extends TestKit(ActorSystem("test")) with WordSpecLike with Matchers with ScalaFutures with StreamSpec with KafkaSpec { import EventSourcingSpec._ implicit val pc = PatienceConfig(timeout = Span(5, Seconds), interval = Span(10, Millis)) val emitterId1 = "processor1" val emitterId2 = "processor2" val kafkaEventLog: KafkaEventLog = new log.KafkaEventLog(host, port) def processor(emitterId: String, topicPartition: TopicPartition): Flow[Request, Response, NotUsed] = EventSourcing(emitterId, 0, requestHandler, eventHandler).join(kafkaEventLog.flow(topicPartition)) "A group of EventSourcing stages" when { "joined with a shared event log" can { "collaborate via publish-subscribe" in { val topicPartition = new TopicPartition("p-1", 0) // shared topic partition val (pub1, sub1) = probes(processor(emitterId1, topicPartition)) // processor 1 val (pub2, sub2) = probes(processor(emitterId2, topicPartition)) // processor 2 pub1.sendNext(Increment(3)) // Both processors receive event but // only processor 1 creates response sub1.requestNext(Response(3)) pub2.sendNext(Increment(-4)) // Both processors receive event but // only processor 2 creates response sub2.requestNext(Response(-1)) // consume and verify events emitted by both processors kafkaEventLog.source[Incremented](topicPartition).via(log.replayed).map { case Durable(event, eid, _, sequenceNr) => (event, eid, sequenceNr) }.runWith(Sink.seq).futureValue should be(Seq( (Incremented(3), emitterId1, 0L), (Incremented(-4), emitterId2, 1L) )) } } } }
Example 36
Source File: ViewTestSupport.scala From ddd-leaven-akka-v2 with MIT License | 5 votes |
package ecommerce.sales.view import com.typesafe.config.Config import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Seconds, Span} import org.scalatest.{BeforeAndAfterAll, Suite} import org.slf4j.Logger import org.slf4j.LoggerFactory.getLogger import pl.newicom.dddd.view.sql.SqlViewStore import slick.dbio._ import scala.concurrent.ExecutionContext import slick.jdbc.H2Profile trait ViewTestSupport extends BeforeAndAfterAll with ScalaFutures { this: Suite => def config: Config lazy val viewStore = new SqlViewStore(config) val log: Logger = getLogger(getClass) implicit val profile = H2Profile implicit class ViewStoreAction[A](a: DBIO[A])(implicit ex: ExecutionContext) { private val future = viewStore.run(a) def run(): Unit = future.map(_ => ()).futureValue def result: A = future.futureValue } def ensureSchemaDropped: DBIO[Unit] def ensureSchemaCreated: DBIO[Unit] implicit override val patienceConfig = PatienceConfig( timeout = scaled(Span(10, Seconds)), interval = scaled(Span(200, Millis)) ) override def beforeAll() { viewStore.run { ensureSchemaDropped >> ensureSchemaCreated }.futureValue } }
Example 37
Source File: ViewTestSupport.scala From ddd-leaven-akka-v2 with MIT License | 5 votes |
package ecommerce.sales.view import com.typesafe.config.Config import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Seconds, Span} import org.scalatest.{BeforeAndAfterAll, Suite} import org.slf4j.Logger import org.slf4j.LoggerFactory.getLogger import pl.newicom.dddd.view.sql.SqlViewStore import slick.dbio._ import slick.jdbc.H2Profile import scala.concurrent.ExecutionContext trait ViewTestSupport extends BeforeAndAfterAll with ScalaFutures { this: Suite => def config: Config lazy val viewStore = new SqlViewStore(config) val log: Logger = getLogger(getClass) implicit val profile = H2Profile implicit override val patienceConfig = PatienceConfig( timeout = scaled(Span(5, Seconds)), interval = scaled(Span(200, Millis)) ) implicit class ViewStoreAction[A](a: DBIO[A])(implicit ex: ExecutionContext) { private val future = viewStore.run(a) def run(): Unit = future.map(_ => ()).futureValue def result: A = future.futureValue } def ensureSchemaDropped: DBIO[Unit] def ensureSchemaCreated: DBIO[Unit] override def beforeAll() { val setup = viewStore.run { ensureSchemaDropped >> ensureSchemaCreated } assert(setup.isReadyWithin(Span(5, Seconds))) } }
Example 38
Source File: RedisClusterSpec.scala From scredis with Apache License 2.0 | 5 votes |
package scredis import org.scalatest.concurrent.ScalaFutures import org.scalatestplus.scalacheck.ScalaCheckDrivenPropertyChecks import scala.concurrent.ExecutionContext.Implicits.global import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec class RedisClusterSpec extends AnyWordSpec with Matchers with ScalaFutures with ScalaCheckDrivenPropertyChecks { val keys = org.scalacheck.Arbitrary.arbString.arbitrary // we assume there is a local cluster started on ports 7000 - 7005 // see testing.md lazy val cluster = RedisCluster(Server("localhost",7000)) val badSeed1 = Server("localhost",7777) val badSeed2 = Server("localhost",2302) val badSeeds = List(badSeed1, badSeed2, Server("localhost",7003)) "connection to cluster" should { "work for a single valid seed node" in { val info = cluster.clusterInfo().futureValue info("cluster_state") should be ("ok") info("cluster_known_nodes").toInt should be (6) // 6 total nodes info("cluster_size").toInt should be (3) // 3 master nodes } "work when some of the seed nodes are offline" in { val badServers = RedisCluster(badSeeds) val info = badServers.clusterInfo().futureValue info("cluster_state") should be ("ok") info("cluster_known_nodes").toInt should be (6) // 6 total nodes info("cluster_size").toInt should be (3) // 3 master nodes } } "writes to cluster" should { "be readable" in { forAll { (key:String, value: String) => whenever (value.nonEmpty) { val res = for { _ <- cluster.set(key, value) g <- cluster.get(key) } yield g.get res.futureValue should be(value) } } } "be idempotent" in { forAll { (key:String, value: String) => whenever (value.nonEmpty) { val res = for { _ <- cluster.set(key, value) g1 <- cluster.get(key) _ <- cluster.set(key, value) g2 <- cluster.get(key) } yield (g1.get,g2.get) res.futureValue should be(value,value) } } } } // TODO basic test for each supported / unsupported command }
Example 39
Source File: MongoDatabaseSpec.scala From tepkin with Apache License 2.0 | 5 votes |
package net.fehmicansaglam.tepkin import akka.stream.ActorMaterializer import akka.util.Timeout import net.fehmicansaglam.bson.BsonDocument import org.scalatest._ import org.scalatest.concurrent.ScalaFutures import scala.concurrent.duration._ class MongoDatabaseSpec extends FlatSpec with Matchers with ScalaFutures with OptionValues with BeforeAndAfter with BeforeAndAfterAll { override implicit val patienceConfig = PatienceConfig(timeout = 30.seconds, interval = 1.seconds) val client = MongoClient("mongodb://localhost") val db = client("tepkin") import client.{context, ec} implicit val timeout: Timeout = 30.seconds override protected def afterAll() = client.shutdown() "A MongoDatabase" should "list collections" in { implicit val mat = ActorMaterializer() val result = for { source <- db.listCollections() collections <- source.runFold(List.empty[BsonDocument])(_ ++ _) } yield collections whenReady(result) { collections => Logger.debug(s"$collections") } } }
Example 40
Source File: ServiceSteps.scala From sbt-docker-compose with BSD 3-Clause "New" or "Revised" License | 5 votes |
package example import cucumber.api.scala.{EN, ScalaDsl} import org.scalatest.Matchers import org.scalatest.concurrent.{Eventually, ScalaFutures} object ServiceSteps { lazy val defaultStartedService = { CalculatorServer.start(8080) } } class ServiceSteps extends ScalaDsl with EN with Matchers with ScalaFutures with Eventually { var lastResult = Int.MinValue var client: CalculatorClient = null Given("""^a calculator client against (.+)$""") { hostPort: String => client = CalculatorClient(hostPort) // prove connectivity eagerly within this step client.add(0, 0) shouldBe 0 } Given("""^a remote request to add (.+) and (.+)$""") { (lhs: Int, rhs: Int) => lastResult = client.add(lhs, rhs) } Given("""^a remote request to subtract (.+) from (.+)$""") { (rhs: Int, lhs: Int) => lastResult = client.subtract(lhs, rhs) } Then("""^The response should be ([-0-9]+)$""") { (expected: Int) => lastResult shouldBe expected } }
Example 41
Source File: DebounceSpec.scala From akka-stream-extensions with Apache License 2.0 | 5 votes |
package com.mfglabs.stream import akka.stream.scaladsl._ import akka.testkit._ import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpec} import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.SpanSugar._ class DebounceSpec extends WordSpec with Matchers with ScalaFutures with BeforeAndAfterAll{ import Debounced._ implicit val system = akka.actor.ActorSystem() implicit val materializer = akka.stream.ActorMaterializer() def fd(span: org.scalatest.time.Span): scala.concurrent.duration.FiniteDuration = { new scala.concurrent.duration.FiniteDuration(span.length, span.unit) } "DebounceStage" should { "debounce" in { val probe = TestProbe() val ref = Source .actorRef[Int](Int.MaxValue, akka.stream.OverflowStrategy.fail) .via(Debounce(1.second, _.toString)) .to(Sink.actorRef(probe.ref, "completed")) .run ref ! 5 probe.expectMsg(100.millis, Ok(5)) ref ! 5 probe.expectMsg(100.millis, Ko(5)) ref ! 6 probe.expectMsg(100.millis, Ok(6)) ref ! 5 probe.expectMsg(100.millis, Ko(5)) Thread.sleep(1100) ref ! 5 probe.expectMsg(100.millis, Ok(5)) } } override def afterAll = { materializer.shutdown system.terminate().futureValue () } }
Example 42
Source File: elasticsearchExtensionsSpec.scala From akka-stream-extensions with Apache License 2.0 | 5 votes |
package com.mfglabs.stream package extensions.elasticsearch import akka.actor.ActorSystem import akka.stream._ import akka.stream.scaladsl.Sink import org.elasticsearch.index.query.QueryBuilders import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Minutes, Span} import org.scalatest.{BeforeAndAfterAll, Matchers, FlatSpec} import scala.concurrent.duration._ import scala.util.Try import org.elasticsearch.common.settings.Settings import org.elasticsearch.node.Node class ElasticExtensionsSpec extends FlatSpec with Matchers with ScalaFutures with BeforeAndAfterAll { implicit override val patienceConfig = PatienceConfig(timeout = Span(1, Minutes), interval = Span(100, Millis)) implicit val as = ActorSystem() implicit val fm = ActorMaterializer() implicit val blockingEc = ExecutionContextForBlockingOps(scala.concurrent.ExecutionContext.Implicits.global) val settings = Settings.builder() .put("path.data", "target/elasticsearch-data") .put("path.home", "/") .put("transport.type", "local") .put("http.enabled", false) .build(); lazy val node = new Node(settings).start(); implicit lazy val client = node.client() val index = "test" val `type` = "type" "EsStream" should "execute a query a get the result as a stream" in { Try(client.admin.indices().prepareDelete(index).get()) val toIndex = for (i <- 1 to 5002) yield (i, s"""{i: $i}""") toIndex.foreach { case (i, json) => client.prepareIndex(index, `type`).setSource(json).setId(i.toString).get() } client.admin.indices.prepareRefresh(index).get() // to be sure that the data is indexed val res = EsStream.queryAsStream(QueryBuilders.matchAllQuery(), index, `type`, 1 minutes, 50) .runWith(Sink.seq) .futureValue res.sorted shouldEqual toIndex.map(_._2).sorted } override def afterAll(): Unit = { client.close() node.close() } }
Example 43
Source File: CommonHttpBehaviour.scala From http-verbs with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.http import java.net.ConnectException import java.util.concurrent.TimeoutException import org.scalatest.concurrent.ScalaFutures import org.scalatest.wordspec.AnyWordSpecLike import org.scalatest.matchers.should.Matchers import play.api.libs.json.Json import uk.gov.hmrc.http.logging.{ConnectionTracing, LoggingDetails} import scala.collection.mutable import scala.concurrent.{ExecutionContext, Future} trait CommonHttpBehaviour extends ScalaFutures with Matchers with AnyWordSpecLike { case class TestClass(foo: String, bar: Int) implicit val tcreads = Json.format[TestClass] case class TestRequestClass(baz: String, bar: Int) implicit val trcreads = Json.format[TestRequestClass] implicit val hc = HeaderCarrier() val testBody = "testBody" val testRequestBody = "testRequestBody" val url = "http://some.url" def response(returnValue: Option[String] = None, statusCode: Int = 200) = Future.successful(HttpResponse( status = statusCode, body = returnValue.getOrElse("") )) val defaultHttpResponse = response() def anErrorMappingHttpCall(verb: String, httpCall: (String, Future[HttpResponse]) => Future[_]) = { s"throw a GatewayTimeout exception when the HTTP $verb throws a TimeoutException" in { implicit val hc = HeaderCarrier() val url: String = "http://some.nonexistent.url" val e = httpCall(url, Future.failed(new TimeoutException("timeout"))).failed.futureValue e should be(a[GatewayTimeoutException]) e.getMessage should startWith(verb) e.getMessage should include(url) } s"throw a BadGateway exception when the HTTP $verb throws a ConnectException" in { implicit val hc = HeaderCarrier() val url: String = "http://some.nonexistent.url" val e = httpCall(url, Future.failed(new ConnectException("timeout"))).failed.futureValue e should be(a[BadGatewayException]) e.getMessage should startWith(verb) e.getMessage should include(url) } } def aTracingHttpCall[T <: ConnectionTracingCapturing](verb: String, method: String, httpBuilder: => T)( httpAction: (T => Future[_]))(implicit mf: Manifest[T]) = s"trace exactly once when the HTTP $verb calls $method" in { val http = httpBuilder httpAction(http).futureValue http.traceCalls should have size 1 http.traceCalls.head._1 shouldBe verb } } trait ConnectionTracingCapturing extends ConnectionTracing { val traceCalls = mutable.Buffer[(String, String)]() override def withTracing[T](method: String, uri: String)( body: => Future[T])(implicit ld: LoggingDetails, ec: ExecutionContext) = { traceCalls += ((method, uri)) body } }
Example 44
Source File: HttpTimeoutSpec.scala From http-verbs with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.play.http import java.net.{ServerSocket, URI} import java.util.concurrent.TimeoutException import org.scalatest.concurrent.ScalaFutures import org.scalatest.BeforeAndAfterAll import org.scalatest.wordspec.AnyWordSpecLike import org.scalatest.matchers.should.Matchers import org.webbitserver.handler.{DelayedHttpHandler, StringHttpHandler} import org.webbitserver.netty.NettyWebServer import play.api.Play import play.api.test.FakeApplication import uk.gov.hmrc.http.HeaderCarrier import uk.gov.hmrc.play.http.ws.WSHttp import uk.gov.hmrc.play.test.TestHttpCore import scala.concurrent.Await import scala.concurrent.duration.DurationInt import scala.concurrent.ExecutionContext.Implicits.global class HttpTimeoutSpec extends AnyWordSpecLike with Matchers with ScalaFutures with BeforeAndAfterAll { lazy val fakeApplication = FakeApplication(additionalConfiguration = Map("ws.timeout.request" -> "1000")) override def beforeAll() { super.beforeAll() Play.start(fakeApplication) } override def afterAll() { super.afterAll() Play.stop(fakeApplication) } "HttpCalls" should { "be gracefully timeout when no response is received within the 'timeout' frame" in { val http = new WSHttp with TestHttpCore // get an unused port val ss = new ServerSocket(0) ss.close() val publicUri = URI.create(s"http://localhost:${ss.getLocalPort}") val ws = new NettyWebServer(global, ss.getLocalSocketAddress, publicUri) try { //starts web server ws.add( "/test", new DelayedHttpHandler(global, 2000, new StringHttpHandler("application/json", "{name:'pong'}"))) ws.start().get() implicit val hc = HeaderCarrier() val start = System.currentTimeMillis() intercept[TimeoutException] { //make request to web server Await.result(http.doPost(s"$publicUri/test", "{name:'ping'}", Seq()), 5.seconds) } val diff = (System.currentTimeMillis() - start).toInt // there is test execution delay around 700ms diff should be >= 1000 diff should be < 2500 } finally { ws.stop() } } } }
Example 45
Source File: ResponseMatchers.scala From http-verbs with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.play.http.test import org.scalatest.concurrent.{IntegrationPatience, ScalaFutures} import org.scalatest.matchers.{HavePropertyMatchResult, HavePropertyMatcher} import play.api.libs.json._ import play.api.libs.ws.WSResponse import scala.concurrent.Future trait ResponseMatchers extends ScalaFutures with IntegrationPatience { def jsonProperty(path: JsPath) = new HavePropertyMatcher[Future[WSResponse], JsValue] { def apply(response: Future[WSResponse]) = HavePropertyMatchResult( matches = response.futureValue.json.validate(path.readNullable[JsValue]).get.isDefined, propertyName = "Response JSON at path " + path, expectedValue = JsString("defined"), actualValue = response.futureValue.json.validate(path.readNullable[JsValue]).get.getOrElse(JsNull) ) } } object ResponseMatchers extends ResponseMatchers
Example 46
Source File: HttpTimeoutSpec.scala From http-verbs with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.play.http import java.net.{ServerSocket, URI} import java.util.concurrent.TimeoutException import org.scalatest.concurrent.ScalaFutures import org.scalatest.BeforeAndAfterAll import org.scalatest.wordspec.AnyWordSpecLike import org.scalatest.matchers.should.Matchers import org.webbitserver.handler.{DelayedHttpHandler, StringHttpHandler} import org.webbitserver.netty.NettyWebServer import play.api.inject.guice.GuiceApplicationBuilder import play.api.libs.ws.WSClient import play.api.test.WsTestClient import play.api.{Configuration, Play} import uk.gov.hmrc.http.HeaderCarrier import uk.gov.hmrc.play.http.ws.WSHttp import uk.gov.hmrc.play.test.TestHttpCore import scala.concurrent.{Await, ExecutionContext} import scala.concurrent.duration.DurationInt class HttpTimeoutSpec extends AnyWordSpecLike with Matchers with ScalaFutures with BeforeAndAfterAll { import ExecutionContext.Implicits.global lazy val fakeApplication = GuiceApplicationBuilder(configuration = Configuration("play.ws.timeout.request" -> "1000ms")).build() override def beforeAll() { super.beforeAll() Play.start(fakeApplication) } override def afterAll() { super.afterAll() Play.stop(fakeApplication) } WsTestClient.withClient{ client => "HttpCalls" should { "be gracefully timeout when no response is received within the 'timeout' frame" in { val http = new WSHttp with TestHttpCore { override val wsClient = fakeApplication.injector.instanceOf[WSClient] } // get an unused port val ss = new ServerSocket(0) ss.close() val executor = ExecutionContext.global // fromExecutorService(ExecutionContext.global) val publicUri = URI.create(s"http://localhost:${ss.getLocalPort}") val ws = new NettyWebServer(executor, ss.getLocalSocketAddress, publicUri) try { //starts web server ws.add( "/test", new DelayedHttpHandler(executor, 2000, new StringHttpHandler("application/json", "{name:'pong'}"))) ws.start().get() implicit val hc = HeaderCarrier() val start = System.currentTimeMillis() intercept[TimeoutException] { //make request to web server Await.result(http.doPost(s"$publicUri/test", "{name:'ping'}", Seq()), 5.seconds) } val diff = (System.currentTimeMillis() - start).toInt // there is test execution delay around 700ms diff should be >= 1000 diff should be < 2500 } finally { ws.stop() } } } } }
Example 47
Source File: RedisMasterSlaveClientTest.scala From scala-commons with MIT License | 5 votes |
package com.avsystem.commons package redis import com.avsystem.commons.redis.exception.MasterSlaveInitializationException import org.scalatest.concurrent.ScalaFutures import org.scalatest.funsuite.AnyFunSuite import org.scalatest.matchers.should.Matchers class RedisMasterSlaveClientInitTest extends AnyFunSuite with Matchers with ScalaFutures with UsesActorSystem with UsesPreconfiguredMasterSlave { import RedisApi.Batches.StringTyped._ def createClient(sentinelPorts: Int*): RedisMasterSlaveClient = new RedisMasterSlaveClient(masterName, sentinelPorts.map(p => NodeAddress(port = p))) test("client init test") { val client = createClient(sentinelPorts.head) client.initialized.futureValue shouldBe client client.executeBatch(get("key")).futureValue shouldBe Opt.Empty } test("not a sentinel") { val client = createClient(ports.head) client.initialized.failed.futureValue shouldBe a[MasterSlaveInitializationException] client.executeBatch(get("lol")).failed.futureValue shouldBe a[MasterSlaveInitializationException] } test("wrong master name") { val client = new RedisMasterSlaveClient("wrongmaster", sentinelPorts.map(p => NodeAddress(port = p))) client.initialized.failed.futureValue shouldBe a[MasterSlaveInitializationException] client.executeBatch(get("lol")).failed.futureValue shouldBe a[MasterSlaveInitializationException] } } class RedisMasterSlaveFailoverTest extends RedisMasterSlaveCommandsSuite { import RedisApi.Batches.StringTyped._ test("failover test") { val failoverPromise = Promise[Unit] redisClient.setMasterListener { client => if (client.address.port != ports.head) { failoverPromise.success(()) } } val getset = set("key", "walue") *> get("key") getset.assertEquals(Opt("walue")) val smFut = switchMaster() getset.assertEquals(Opt("walue")) smFut.futureValue getset.assertEquals(Opt("walue")) failoverPromise.future.futureValue // wait on new master getset.assertEquals(Opt("walue")) } }
Example 48
Source File: RedisConnectionClientTest.scala From scala-commons with MIT License | 5 votes |
package com.avsystem.commons package redis import akka.util.ByteString import com.avsystem.commons.redis.config.ConnectionConfig import com.avsystem.commons.redis.exception.{ConnectionFailedException, ConnectionInitializationFailure} import org.scalatest.concurrent.ScalaFutures import org.scalatest.funsuite.AnyFunSuite import org.scalatest.matchers.should.Matchers class RedisConnectionClientTest extends AnyFunSuite with Matchers with ScalaFutures with UsesActorSystem with UsesRedisServer with ByteStringInterpolation { def createClient(initCommands: RedisBatch[Any]): RedisConnectionClient = new RedisConnectionClient(address, config = ConnectionConfig(initCommands)) test("client initialization test") { import RedisApi.Batches.StringTyped._ val client = createClient(select(0) *> clientSetname("name") *> ping) val f1 = client.executeBatch(echo(ByteString("LOL1"))) val f2 = client.executeBatch(echo(ByteString("LOL2"))) val f3 = client.executeBatch(clientGetname) client.initialized.futureValue shouldBe client f1.futureValue shouldBe ByteString("LOL1") f2.futureValue shouldBe ByteString("LOL2") f3.futureValue shouldBe "name".opt } test("client connection failure test") { import RedisApi.Batches.StringTyped._ val client = new RedisConnectionClient(NodeAddress(port = 63498)) val f1 = client.executeBatch(echo(ByteString("LOL1"))) val f2 = client.executeBatch(echo(ByteString("LOL2"))) client.initialized.failed.futureValue shouldBe a[ConnectionFailedException] f1.failed.futureValue shouldBe a[ConnectionFailedException] f2.failed.futureValue shouldBe a[ConnectionFailedException] } test("client initialization failure test") { import RedisApi.Batches.StringTyped._ val client = createClient(clusterInfo) val f1 = client.executeBatch(echo(ByteString("LOL1"))) val f2 = client.executeBatch(echo(ByteString("LOL2"))) client.initialized.failed.futureValue shouldBe a[ConnectionInitializationFailure] f1.failed.futureValue shouldBe a[ConnectionInitializationFailure] f2.failed.futureValue shouldBe a[ConnectionInitializationFailure] } test("api traits usage test") { val api = RedisApi.Connection.Async.StringTyped(createClient(RedisBatch.unit)) val bvApi: api.WithValue[ByteString] = api.valueType[ByteString] api.set("key", "value").futureValue shouldEqual true bvApi.set("key", ByteString.empty).futureValue shouldEqual true api.keyType[ByteString].set(ByteString("key"), "value").futureValue shouldEqual true bvApi.keyType[ByteString].set(ByteString("key"), ByteString.empty).futureValue shouldEqual true } } class RedisTlsConnectionClientTest extends RedisConnectionClientTest with UsesSslContext { override def createClient(initCommands: RedisBatch[Any]): RedisConnectionClient = new RedisConnectionClient(tlsAddress, config = ConnectionConfig(initCommands, () => sslContext.createSSLEngine)) }
Example 49
Source File: IOValues.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.sourcing.projections import cats.effect.IO import org.scalactic.source import org.scalatest.matchers.should.Matchers._ import org.scalatest.concurrent.ScalaFutures import scala.reflect.ClassTag trait IOValues extends ScalaFutures { implicit final def ioValues[A](io: IO[A]): IOValuesSyntax[A] = new IOValuesSyntax(io) protected class IOValuesSyntax[A](io: IO[A]) { def failed[Ex <: Throwable: ClassTag](implicit config: PatienceConfig, pos: source.Position): Ex = { val Ex = implicitly[ClassTag[Ex]] io.redeemWith( { case Ex(ex) => IO.pure(ex) case other => IO( fail( s"Wrong throwable type caught, expected: '${Ex.runtimeClass.getName}', actual: '${other.getClass.getName}'" ) ) }, a => IO(fail(s"The IO did not fail as expected, but computed the value '$a'")) ) .ioValue(config, pos) } def ioValue(implicit config: PatienceConfig, pos: source.Position): A = io.unsafeToFuture().futureValue(config, pos) } } object IOValues extends IOValues
Example 50
Source File: EvaluationSyntaxSpec.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.sourcing import cats.effect.IO import org.scalatest.concurrent.ScalaFutures import ch.epfl.bluebrain.nexus.sourcing.syntax._ import org.scalatest.EitherValues class EvaluationSyntaxSpec extends SourcingSpec with ScalaFutures with EitherValues { type State = (Int) type Command = Int "An evaluation syntax" should { "transform a '(state, command) => state' evaluation into a '(state, command) => F(Right(state))'" in { val eval: (State, Command) => State = { case (st, cmd) => (st + cmd) } val evalEitherF = eval.toEitherF[IO] evalEitherF(2, 3).unsafeRunSync().rightValue shouldEqual 5 } "transform a '(state, command) => F(state)' evaluation into a '(state, command) => F(Right(state))'" in { val err = new RuntimeException("error") val eval: (State, Command) => IO[State] = { case (st, cmd) if st < 0 || cmd < 0 => IO.raiseError(err) case (st, cmd) => IO.pure(st + cmd) } val evalEitherF = eval.toEither evalEitherF(1, 2).unsafeRunSync().rightValue shouldEqual 3 evalEitherF(-1, 3).unsafeToFuture().failed.futureValue shouldEqual err evalEitherF(1, -3).unsafeToFuture().failed.futureValue shouldEqual err } } }
Example 51
Source File: QueryDirectivesSpec.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.admin.directives import java.net.URLEncoder import java.util.UUID import akka.http.scaladsl.model.StatusCodes import akka.http.scaladsl.server.Directives.{complete, get} import akka.http.scaladsl.server.Route import akka.http.scaladsl.testkit.ScalatestRouteTest import ch.epfl.bluebrain.nexus.admin.routes.SearchParams import ch.epfl.bluebrain.nexus.admin.routes.SearchParams.Field import ch.epfl.bluebrain.nexus.commons.http.JsonLdCirceSupport._ import ch.epfl.bluebrain.nexus.rdf.Iri.AbsoluteIri import ch.epfl.bluebrain.nexus.rdf.implicits._ import ch.epfl.bluebrain.nexus.service.config.ServiceConfig.HttpConfig import ch.epfl.bluebrain.nexus.service.config.Settings import ch.epfl.bluebrain.nexus.service.routes.Routes import ch.epfl.bluebrain.nexus.util.EitherValues import io.circe.generic.auto._ import org.mockito.IdiomaticMockito import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike class QueryDirectivesSpec extends AnyWordSpecLike with ScalatestRouteTest with Matchers with ScalaFutures with EitherValues with IdiomaticMockito { private def genIri: AbsoluteIri = url"http://nexus.example.com/${UUID.randomUUID()}" private def encode(url: AbsoluteIri): String = URLEncoder.encode(url.asString, "UTF-8") private val config = Settings(system).serviceConfig implicit private val http: HttpConfig = config.http private def routes(inner: Route): Route = Routes.wrap(inner) "Query directives" should { "handle query params" in { val createdBy = genIri val updatedBy = genIri val type1 = genIri val type2 = genIri def projectParams = Routes.wrap( (get & QueryDirectives.searchParamsProjects) { params => complete(StatusCodes.OK -> params) } ) Get("/") ~> routes(projectParams) ~> check { responseAs[SearchParams] shouldEqual SearchParams.empty } Get( s"/?rev=1&deprecated=true&label=myLabel&type=${encode(type1)}&type=${encode(type2)}&createdBy=${encode(createdBy)}&updatedBy=${encode(updatedBy)}" ) ~> routes(projectParams) ~> check { responseAs[SearchParams] shouldEqual SearchParams( rev = Some(1L), deprecated = Some(true), projectLabel = Some(Field("myLabel", exactMatch = false)), types = Set(type1, type2), createdBy = Some(createdBy), updatedBy = Some(updatedBy) ) } } } }
Example 52
Source File: ErrorDirectivesSpec.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.commons.http.directives import akka.http.scaladsl.marshalling.Marshal import akka.http.scaladsl.model.{HttpEntity, HttpResponse, StatusCodes} import akka.util.ByteString import ch.epfl.bluebrain.nexus.commons.circe.ContextUri import ch.epfl.bluebrain.nexus.commons.http.RdfMediaTypes import ch.epfl.bluebrain.nexus.commons.http.directives.ErrorDirectives._ import ch.epfl.bluebrain.nexus.commons.http.directives.ErrorDirectivesSpec.CustomError import ch.epfl.bluebrain.nexus.rdf.syntax.iri._ import ch.epfl.bluebrain.nexus.util.ActorSystemFixture import io.circe.generic.auto._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike import scala.concurrent.duration._ class ErrorDirectivesSpec extends ActorSystemFixture("ErrorDirectivesSpec") with AnyWordSpecLike with Matchers with ScalaFutures { implicit override val patienceConfig = PatienceConfig(3.seconds, 100.millis) "A ErrorDirectives" should { import system.dispatcher implicit val statusFromJson: StatusFrom[CustomError] = StatusFrom((_: CustomError) => StatusCodes.NotFound) implicit val contextUri: ContextUri = ContextUri(url"http://localhost.com/error/") "marshall error JSON-LD" in { val error = CustomError("some error") val jsonString = s"""{"@context":"${contextUri.value}","message":"${error.message}"}""" Marshal(error).to[HttpResponse].futureValue shouldEqual HttpResponse( status = StatusCodes.NotFound, entity = HttpEntity.Strict(RdfMediaTypes.`application/ld+json`, ByteString(jsonString, "UTF-8")) ) } } } object ErrorDirectivesSpec { final case class CustomError(message: String) }
Example 53
Source File: TarFlowSpec.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.kg.archives import java.nio.file.Files import java.time.{Clock, Instant, ZoneId} import akka.actor.ActorSystem import akka.stream.scaladsl.FileIO import akka.testkit.TestKit import ch.epfl.bluebrain.nexus.kg.TestHelper import ch.epfl.bluebrain.nexus.kg.storage.digestSink import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike import scala.concurrent.duration._ class TarFlowSpec extends TestKit(ActorSystem("TarFlowSpec")) with AnyWordSpecLike with Matchers with TestHelper with ScalaFutures { implicit private val ec = system.dispatcher implicit private val clock = Clock.fixed(Instant.EPOCH, ZoneId.systemDefault()) implicit override def patienceConfig: PatienceConfig = PatienceConfig(55.second, 150.milliseconds) "A TarFlow" should { "tar a bunch of sources" in { val digest = "3fef41c5afe7a7ee11ee9d556a564fb57784cc5247b24c6ca70783f396fa158a1c7952504d3e1aa441de20cf065d740eec454c6ffb7fbc4b6351b950ee51c886" val elems = 500 val contents = List.tabulate(2) { i => val content = (i until (i + elems)).toList.mkString(",") + "\n" ArchiveSource(content.length.toLong, s"some/path$i/$i.txt", produce(content)) } val path = Files.createTempFile("test", ".tar") TarFlow.write(contents).runWith(FileIO.toPath(path)).futureValue FileIO.fromPath(path).runWith(digestSink("SHA-512")).futureValue.value shouldEqual digest Files.delete(path) } } }
Example 54
Source File: ResolverCacheSpec.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.kg.cache import akka.actor.ExtendedActorSystem import akka.serialization.Serialization import akka.testkit._ import ch.epfl.bluebrain.nexus.commons.test.ActorSystemFixture import ch.epfl.bluebrain.nexus.iam.types.Identity.Anonymous import ch.epfl.bluebrain.nexus.kg.TestHelper import ch.epfl.bluebrain.nexus.kg.config.KgConfig._ import ch.epfl.bluebrain.nexus.kg.resolve.Resolver._ import ch.epfl.bluebrain.nexus.kg.resources.ProjectIdentifier.{ProjectLabel, ProjectRef} import ch.epfl.bluebrain.nexus.service.config.{ServiceConfig, Settings} import monix.eval.Task import monix.execution.Scheduler.Implicits.global import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.{Inspectors, TryValues} import scala.concurrent.duration._ //noinspection NameBooleanParameters class ResolverCacheSpec extends ActorSystemFixture("ResolverCacheSpec", true) with Matchers with Inspectors with ScalaFutures with TryValues with TestHelper { implicit override def patienceConfig: PatienceConfig = PatienceConfig(3.seconds.dilated, 5.milliseconds) implicit private val appConfig: ServiceConfig = Settings(system).serviceConfig implicit private val keyValueStoreCfg = appConfig.kg.keyValueStore.keyValueStoreConfig val ref1 = ProjectRef(genUUID) val ref2 = ProjectRef(genUUID) val label1 = ProjectLabel(genString(), genString()) val label2 = ProjectLabel(genString(), genString()) val resolver: InProjectResolver = InProjectResolver(ref1, genIri, 1L, false, 10) val crossRefs: CrossProjectResolver = CrossProjectResolver(Set(genIri), List(ref1, ref2), Set(Anonymous), ref1, genIri, 0L, false, 1) val crossLabels: CrossProjectResolver = CrossProjectResolver(Set(genIri), List(label1, label2), Set(Anonymous), ref1, genIri, 0L, false, 1) val resolverProj1: Set[InProjectResolver] = List.fill(5)(resolver.copy(id = genIri)).toSet val resolverProj2: Set[InProjectResolver] = List.fill(5)(resolver.copy(id = genIri, ref = ref2)).toSet private val cache = ResolverCache[Task] "ResolverCache" should { "index resolvers" in { val list = (resolverProj1 ++ resolverProj2).toList forAll(list) { resolver => cache.put(resolver).runToFuture.futureValue cache.get(resolver.ref, resolver.id).runToFuture.futureValue shouldEqual Some(resolver) } } "list resolvers" in { cache.get(ref1).runToFuture.futureValue should contain theSameElementsAs resolverProj1 cache.get(ref2).runToFuture.futureValue should contain theSameElementsAs resolverProj2 } "deprecate resolver" in { val resolver = resolverProj1.head cache.put(resolver.copy(deprecated = true, rev = 2L)).runToFuture.futureValue cache.get(resolver.ref, resolver.id).runToFuture.futureValue shouldEqual None cache.get(ref1).runToFuture.futureValue should contain theSameElementsAs resolverProj1.filterNot(_ == resolver) } "serialize cross project resolver" when { val serialization = new Serialization(system.asInstanceOf[ExtendedActorSystem]) "parameterized with ProjectRef" in { val bytes = serialization.serialize(crossRefs).success.value val out = serialization.deserialize(bytes, classOf[CrossProjectResolver]).success.value out shouldEqual crossRefs } "parameterized with ProjectLabel" in { val bytes = serialization.serialize(crossLabels).success.value val out = serialization.deserialize(bytes, classOf[CrossProjectResolver]).success.value out shouldEqual crossLabels } } } }
Example 55
Source File: StorageCacheSpec.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.kg.cache import java.nio.file.Paths import java.time.Clock import akka.testkit._ import ch.epfl.bluebrain.nexus.commons.test.ActorSystemFixture import ch.epfl.bluebrain.nexus.kg.TestHelper import ch.epfl.bluebrain.nexus.kg.resources.ProjectIdentifier.ProjectRef import ch.epfl.bluebrain.nexus.kg.storage.Storage.DiskStorage import ch.epfl.bluebrain.nexus.rdf.implicits._ import ch.epfl.bluebrain.nexus.service.config.{ServiceConfig, Settings} import monix.eval.Task import monix.execution.Scheduler.Implicits.global import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.{Inspectors, TryValues} import scala.concurrent.duration._ //noinspection NameBooleanParameters class StorageCacheSpec extends ActorSystemFixture("StorageCacheSpec", true) with Matchers with Inspectors with ScalaFutures with TryValues with TestHelper { implicit override def patienceConfig: PatienceConfig = PatienceConfig(3.seconds.dilated, 5.milliseconds) implicit private val clock: Clock = Clock.systemUTC implicit private val appConfig: ServiceConfig = Settings(system).serviceConfig implicit private val keyValueStoreCfg = appConfig.kg.keyValueStore.keyValueStoreConfig val ref1 = ProjectRef(genUUID) val ref2 = ProjectRef(genUUID) val time = clock.instant() val lastId = url"http://example.com/lastA" // initialInstant.minusSeconds(1L + genInt().toLong) val tempStorage = DiskStorage(ref1, genIri, 1L, false, true, "alg", Paths.get("/tmp"), read, write, 1024L) val lastStorageProj1 = tempStorage.copy(id = lastId) val lastStorageProj2 = tempStorage.copy(ref = ref2, id = lastId) val storagesProj1: List[DiskStorage] = List.fill(5)(tempStorage.copy(id = genIri)) :+ lastStorageProj1 val storagesProj2: List[DiskStorage] = List.fill(5)(tempStorage.copy(ref = ref2, id = genIri)) :+ lastStorageProj2 private val cache = StorageCache[Task] "StorageCache" should { "index storages" in { forAll((storagesProj1 ++ storagesProj2).zipWithIndex) { case (storage, index) => implicit val instant = time.plusSeconds(index.toLong) cache.put(storage).runToFuture.futureValue cache.get(storage.ref, storage.id).runToFuture.futureValue shouldEqual Some(storage) } } "get latest default storage" in { cache.getDefault(ref1).runToFuture.futureValue shouldEqual Some(lastStorageProj1) cache.getDefault(ref2).runToFuture.futureValue shouldEqual Some(lastStorageProj2) cache.getDefault(ProjectRef(genUUID)).runToFuture.futureValue shouldEqual None } "list storages" in { cache.get(ref1).runToFuture.futureValue should contain theSameElementsAs storagesProj1 cache.get(ref2).runToFuture.futureValue should contain theSameElementsAs storagesProj2 } "deprecate storage" in { val storage = storagesProj1.head implicit val instant = time.plusSeconds(30L) cache.put(storage.copy(deprecated = true, rev = 2L)).runToFuture.futureValue cache.get(storage.ref, storage.id).runToFuture.futureValue shouldEqual None cache.get(ref1).runToFuture.futureValue should contain theSameElementsAs storagesProj1.filterNot(_ == storage) } } }
Example 56
Source File: PackageObjectSpec.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.kg.storage import java.nio.file.Paths import java.util.UUID import akka.actor.ActorSystem import akka.http.scaladsl.model.Uri import akka.stream.scaladsl.FileIO import ch.epfl.bluebrain.nexus.kg.resources.ProjectIdentifier.ProjectRef import ch.epfl.bluebrain.nexus.kg.resources.file.File.Digest import org.scalatest.concurrent.ScalaFutures import org.scalatest.flatspec.AnyFlatSpecLike import org.scalatest.matchers.should.Matchers class PackageObjectSpec extends AnyFlatSpecLike with Matchers with ScalaFutures { "uriToPath" should "convert an Akka Uri that represents a valid file path to a Java Path" in { uriToPath("file:///some/path/my%20file.txt") shouldEqual Some(Paths.get("/some/path/my file.txt")) uriToPath("s3://some/path") shouldEqual None uriToPath("foo") shouldEqual None } "pathToUri" should "convert a Java Path to an Akka Uri" in { pathToUri(Paths.get("/some/path/my file.txt")) shouldEqual Uri("file:///some/path/my%20file.txt") } "mangle" should "generate a properly mangled path given a file project and UUID" in { val projUuid = UUID.fromString("4947db1e-33d8-462b-9754-3e8ae74fcd4e") val fileUuid = UUID.fromString("b1d7cda2-1ec0-40d2-b12e-3baf4895f7d7") mangle(ProjectRef(projUuid), fileUuid, "my file.jpg") shouldEqual "4947db1e-33d8-462b-9754-3e8ae74fcd4e/b/1/d/7/c/d/a/2/my file.jpg" } "digest" should "properly compute the hash of a given input" in { implicit val as: ActorSystem = ActorSystem() val filePath = "/storage/s3.json" val path = Paths.get(getClass.getResource(filePath).toURI) val input = FileIO.fromPath(path) val algo = "SHA-256" input.runWith(digestSink(algo)(as.dispatcher)).futureValue shouldEqual Digest( algo, "5602c497e51680bef1f3120b1d6f65d480555002a3290029f8178932e8f4801a" ) } }
Example 57
Source File: IdentitiesRoutesSpec.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.iam.routes import akka.http.scaladsl.model.StatusCodes import akka.http.scaladsl.model.headers.OAuth2BearerToken import akka.http.scaladsl.testkit.ScalatestRouteTest import ch.epfl.bluebrain.nexus.iam.acls.Acls import ch.epfl.bluebrain.nexus.iam.auth.{AccessToken, TokenRejection} import ch.epfl.bluebrain.nexus.iam.realms._ import ch.epfl.bluebrain.nexus.iam.testsyntax._ import ch.epfl.bluebrain.nexus.iam.types.Caller import ch.epfl.bluebrain.nexus.iam.types.IamError.InvalidAccessToken import ch.epfl.bluebrain.nexus.iam.types.Identity.{Anonymous, Authenticated, User} import ch.epfl.bluebrain.nexus.service.config.Settings import ch.epfl.bluebrain.nexus.service.marshallers.instances._ import ch.epfl.bluebrain.nexus.service.routes.Routes import ch.epfl.bluebrain.nexus.util.Resources import com.typesafe.config.{Config, ConfigFactory} import io.circe.Json import monix.eval.Task import org.mockito.matchers.MacroBasedMatchers import org.mockito.{IdiomaticMockito, Mockito} import org.scalatest.BeforeAndAfter import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike import scala.concurrent.duration._ //noinspection TypeAnnotation class IdentitiesRoutesSpec extends AnyWordSpecLike with Matchers with ScalatestRouteTest with BeforeAndAfter with MacroBasedMatchers with Resources with ScalaFutures with IdiomaticMockito { implicit override def patienceConfig: PatienceConfig = PatienceConfig(3.seconds, 100.milliseconds) override def testConfig: Config = ConfigFactory.load("test.conf") private val config = Settings(system).serviceConfig implicit private val http = config.http private val realms: Realms[Task] = mock[Realms[Task]] private val acls: Acls[Task] = mock[Acls[Task]] before { Mockito.reset(realms, acls) } "The IdentitiesRoutes" should { val routes = Routes.wrap(new IdentitiesRoutes(acls, realms).routes) "return forbidden" in { val err = InvalidAccessToken(TokenRejection.InvalidAccessToken) realms.caller(any[AccessToken]) shouldReturn Task.raiseError(err) Get("/identities").addCredentials(OAuth2BearerToken("token")) ~> routes ~> check { status shouldEqual StatusCodes.Unauthorized } } "return anonymous" in { realms.caller(any[AccessToken]) shouldReturn Task.pure(Caller.anonymous) Get("/identities") ~> routes ~> check { status shouldEqual StatusCodes.OK responseAs[Json].sort shouldEqual jsonContentOf("/identities/anonymous.json") } } "return all identities" in { val user = User("theuser", "therealm") val auth = Authenticated("therealm") val caller = Caller(user, Set(user, Anonymous, auth)) realms.caller(any[AccessToken]) shouldReturn Task.pure(caller) Get("/identities").addCredentials(OAuth2BearerToken("token")) ~> routes ~> check { status shouldEqual StatusCodes.OK responseAs[Json].sort shouldEqual jsonContentOf("/identities/identities.json") } } } }
Example 58
Source File: RealmDirectivesSpec.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.iam.directives import java.net.URLEncoder import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.Route import akka.http.scaladsl.testkit.ScalatestRouteTest import ch.epfl.bluebrain.nexus.commons.http.JsonLdCirceSupport._ import ch.epfl.bluebrain.nexus.iam.directives.RealmDirectives._ import ch.epfl.bluebrain.nexus.iam.routes.SearchParams import ch.epfl.bluebrain.nexus.rdf.Iri.AbsoluteIri import ch.epfl.bluebrain.nexus.rdf.implicits._ import ch.epfl.bluebrain.nexus.util.EitherValues import io.circe.generic.auto._ import org.mockito.IdiomaticMockito import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike class RealmDirectivesSpec extends AnyWordSpecLike with ScalatestRouteTest with Matchers with ScalaFutures with EitherValues with IdiomaticMockito { private def route: Route = { (get & searchParams) { params => complete(params) } } private def encode(s: AbsoluteIri) = URLEncoder.encode(s.asString, "UTF-8") "Realm directives" should { "return query params" in { val createdBy: AbsoluteIri = url"http://example.com/created" val updatedBy: AbsoluteIri = url"http://example.com/updated" val tpe: AbsoluteIri = url"http://example.com/tpe" val tpe2: AbsoluteIri = url"http://example.com/tpe2" Get( s"/?rev=2&deprecated=true&type=${encode(tpe)}&type=${encode(tpe2)}&createdBy=${encode(createdBy)}&updatedBy=${encode(updatedBy)}" ) ~> route ~> check { responseAs[SearchParams] shouldEqual SearchParams( Some(true), Some(2L), Some(createdBy), Some(updatedBy), Set(tpe, tpe2) ) } } } }
Example 59
Source File: IOValues.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.util import cats.effect.IO import org.scalactic.source import org.scalatest.matchers.should.Matchers._ import org.scalatest.concurrent.ScalaFutures import scala.reflect.ClassTag trait IOValues extends ScalaFutures { implicit final def ioValues[A](io: IO[A]): IOValuesSyntax[A] = new IOValuesSyntax(io) protected class IOValuesSyntax[A](io: IO[A]) { def failed[Ex <: Throwable: ClassTag](implicit config: PatienceConfig, pos: source.Position): Ex = { val Ex = implicitly[ClassTag[Ex]] io.redeemWith( { case Ex(ex) => IO.pure(ex) case other => IO( fail( s"Wrong throwable type caught, expected: '${Ex.runtimeClass.getName}', actual: '${other.getClass.getName}'" ) ) }, a => IO(fail(s"The IO did not fail as expected, but computed the value '$a'")) ) .ioValue(config, pos) } def ioValue(implicit config: PatienceConfig, pos: source.Position): A = io.unsafeToFuture().futureValue(config, pos) } } object IOValues extends IOValues
Example 60
Source File: IOValues.scala From nexus with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.storage.utils import cats.effect.IO import org.scalactic.source import org.scalatest.matchers.should.Matchers._ import org.scalatest.concurrent.ScalaFutures import scala.reflect.ClassTag trait IOValues extends ScalaFutures { implicit final def ioValues[A](io: IO[A]): IOValuesSyntax[A] = new IOValuesSyntax(io) protected class IOValuesSyntax[A](io: IO[A]) { def failed[Ex <: Throwable: ClassTag](implicit config: PatienceConfig, pos: source.Position): Ex = { val Ex = implicitly[ClassTag[Ex]] io.redeemWith( { case Ex(ex) => IO.pure(ex) case other => IO( fail( s"Wrong throwable type caught, expected: '${Ex.runtimeClass.getName}', actual: '${other.getClass.getName}'" ) ) }, a => IO(fail(s"The IO did not fail as expected, but computed the value '$a'")) ) .ioValue(config, pos) } def ioValue(implicit config: PatienceConfig, pos: source.Position): A = io.unsafeToFuture().futureValue(config, pos) } } object IOValues extends IOValues
Example 61
Source File: SecurityTest.scala From Conseil with Apache License 2.0 | 5 votes |
package tech.cryptonomic.conseil.api.security import akka.http.scaladsl.testkit.ScalatestRouteTest import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Seconds, Span} import org.scalatest.{Matchers, WordSpec} import tech.cryptonomic.conseil.api.security.Security.SecurityApi class SecurityTest extends WordSpec with Matchers with ScalatestRouteTest with ScalaFutures { implicit override val patienceConfig = PatienceConfig(timeout = Span(2, Seconds), interval = Span(20, Millis)) "The SecurityApi" should { "valid itself" in { SecurityApi(Set.empty, None).isValid shouldBe false SecurityApi(Set.empty, Some(false)).isValid shouldBe false SecurityApi(Set("some-key"), Some(false)).isValid shouldBe true SecurityApi(Set("some-key"), None).isValid shouldBe true SecurityApi(Set.empty, Some(true)).isValid shouldBe true SecurityApi(Set("some-key"), Some(true)).isValid shouldBe true } "validate a given key" in { SecurityApi(Set("some-key"), None).validateApiKey(Some("some-key")).futureValue shouldBe true SecurityApi(Set("some-key"), Some(true)).validateApiKey(Some("some-key")).futureValue shouldBe true SecurityApi(Set.empty, None).validateApiKey(Some("some-key")).futureValue shouldBe false SecurityApi(Set.empty, Some(true)).validateApiKey(Some("some-key")).futureValue shouldBe false SecurityApi(Set.empty, None).validateApiKey(None).futureValue shouldBe false SecurityApi(Set.empty, Some(true)).validateApiKey(None).futureValue shouldBe true } } }
Example 62
Source File: DefaultDatabaseOperationsTest.scala From Conseil with Apache License 2.0 | 5 votes |
package tech.cryptonomic.conseil.api.sql import java.sql.Timestamp import java.time.LocalDateTime import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpec} import slick.jdbc.PostgresProfile.api._ import tech.cryptonomic.conseil.api.TezosInMemoryDatabaseSetup import tech.cryptonomic.conseil.api.sql.DefaultDatabaseOperations._ import tech.cryptonomic.conseil.common.testkit.InMemoryDatabase import tech.cryptonomic.conseil.common.tezos.Tables import tech.cryptonomic.conseil.common.tezos.Tables.FeesRow import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ import scala.language.postfixOps class DefaultDatabaseOperationsTest extends WordSpec with Matchers with InMemoryDatabase with TezosInMemoryDatabaseSetup with ScalaFutures { "The default database operations" should { val fees: List[FeesRow] = List.tabulate(5) { i => FeesRow( 1 + i, 3 + i, 5 + i, Timestamp.valueOf(LocalDateTime.of(2018, 11, 22, 12, 30)), s"$i-example", None, None ) } "count distinct elements in column properly" in { dbHandler.run(Tables.Fees ++= fees).isReadyWithin(5 seconds) shouldBe true dbHandler.run(countDistinct("tezos", "fees", "timestamp")).futureValue shouldBe 1 dbHandler.run(countDistinct("tezos", "fees", "low")).futureValue shouldBe 5 } "select distinct elements from column properly" in { dbHandler.run(Tables.Fees ++= fees).isReadyWithin(5 seconds) shouldBe true dbHandler.run(selectDistinct("tezos", "fees", "timestamp")).futureValue shouldBe List( "2018-11-22 12:30:00" ) dbHandler.run(selectDistinct("tezos", "fees", "low")).futureValue should contain theSameElementsAs List( "1", "2", "3", "4", "5" ) } "select distinct elements from column with 'like' properly" in { dbHandler.run(Tables.Fees ++= fees).isReadyWithin(5 seconds) shouldBe true dbHandler.run(selectDistinctLike("tezos", "fees", "kind", "1-")).futureValue shouldBe List( "1-example" ) } } }
Example 63
Source File: DefaultDatabaseOperationsTest.scala From Conseil with Apache License 2.0 | 5 votes |
package tech.cryptonomic.conseil.indexer.sql import java.sql.Timestamp import java.time.LocalDateTime import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpec} import slick.jdbc.PostgresProfile.api._ import tech.cryptonomic.conseil.common.testkit.InMemoryDatabase import tech.cryptonomic.conseil.common.tezos.Tables import tech.cryptonomic.conseil.common.tezos.Tables.{Fees, FeesRow} import tech.cryptonomic.conseil.indexer.sql.DefaultDatabaseOperations._ import tech.cryptonomic.conseil.indexer.tezos.TezosInMemoryDatabaseSetup import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ import scala.language.postfixOps class DefaultDatabaseOperationsTest extends WordSpec with Matchers with InMemoryDatabase with TezosInMemoryDatabaseSetup with ScalaFutures { "The default database operations" should { val fees: List[FeesRow] = List.tabulate(5) { i => FeesRow( 1 + i, 3 + i, 5 + i, Timestamp.valueOf(LocalDateTime.of(2018, 11, 22, 12, 30)), s"$i-example", None, None ) } "insert data when table is empty" in { dbHandler.run(insertWhenEmpty[Fees](Tables.Fees, fees)).futureValue shouldBe Some(5) } "do not insert data when table is not empty" in { dbHandler.run(Tables.Fees ++= fees).isReadyWithin(5 seconds) shouldBe true dbHandler.run(insertWhenEmpty[Fees](Tables.Fees, fees)).futureValue.value shouldBe Some(0) } } }
Example 64
Source File: AbstractCompositionTest.scala From study-category-theory with Apache License 2.0 | 5 votes |
package com.github.dnvriend.scalaz import org.scalatest.concurrent.ScalaFutures import org.scalatest.{ FlatSpec, Matchers } import scala.concurrent.Future import scala.concurrent.duration._ import scala.concurrent.ExecutionContext.Implicits.global import scala.language.higherKinds import scalaz._ import Scalaz._ case class StringStats(length: Int, palindrome: Boolean) class AbstractCompositionTest extends FlatSpec with Matchers with ScalaFutures { implicit val pc: PatienceConfig = PatienceConfig(timeout = 30.seconds, interval = 300.millis) def compose[F[_]: Monad, A: Numeric](effectOne: => F[A], effectTwo: => F[A]): F[A] = for { x <- effectOne y <- effectTwo } yield implicitly[Numeric[A]].plus(x, y) it should "compose" in { compose[Option, Long](Option(1), Option(2)) shouldBe Option(3) compose[Future, Long](Future(3), Future(4)).futureValue shouldBe 7 } def stringStats(calcLength: String => Int, isPalindrome: String => Boolean): String => StringStats = for { length <- calcLength palindrome <- isPalindrome } yield StringStats(length, palindrome) }
Example 65
Source File: TestSpec.scala From study-category-theory with Apache License 2.0 | 5 votes |
package com.github.dnvriend import akka.actor.ActorSystem import akka.stream.Materializer import akka.util.Timeout import org.scalatest._ import org.scalatest.concurrent.{ Eventually, ScalaFutures } import org.scalatestplus.play.guice.GuiceOneServerPerSuite import play.api.inject.BindingKey import play.api.libs.json.{ JsValue, Json, Writes } import play.api.test.WsTestClient import scala.concurrent.duration._ import scala.concurrent.{ ExecutionContext, Future } import scala.reflect.ClassTag import scala.util.Try object Person { implicit val format = Json.format[Person] implicit class ValueObjectOps(val self: Person) { def toJson: JsValue = Json.toJson(self) } implicit class IterableOps(val self: Iterable[Person]) { def toJson: JsValue = Json.toJson(self) } } final case class Person(firstName: String, age: Int) class TestSpec extends FlatSpec with Matchers with GivenWhenThen with OptionValues with TryValues with ScalaFutures with WsTestClient with BeforeAndAfterAll with BeforeAndAfterEach with Eventually with GuiceOneServerPerSuite { def getComponent[A: ClassTag] = app.injector.instanceOf[A] def getNamedComponent[A](name: String)(implicit ct: ClassTag[A]): A = app.injector.instanceOf[A](BindingKey(ct.runtimeClass.asInstanceOf[Class[A]]).qualifiedWith(name)) // set the port number of the HTTP server override lazy val port: Int = getNamedComponent[Int]("test.port") implicit val timeout: Timeout = getComponent[Timeout] implicit val pc: PatienceConfig = PatienceConfig(timeout = 30.seconds, interval = 300.millis) implicit val system: ActorSystem = getComponent[ActorSystem] implicit val ec: ExecutionContext = getComponent[ExecutionContext] implicit val mat: Materializer = getComponent[Materializer] // ================================== Supporting Operations ==================================== def id: String = java.util.UUID.randomUUID().toString implicit class PimpedFuture[T](self: Future[T]) { def toTry: Try[T] = Try(self.futureValue) } final val FirstName: String = "John" final val LastName: String = "Doe" override protected def beforeEach(): Unit = { } }
Example 66
Source File: TestSpec.scala From study-category-theory with Apache License 2.0 | 5 votes |
package com.github.dnvriend import org.scalatest.concurrent.ScalaFutures import org.scalatest.{ FlatSpec, Matchers } import scala.concurrent.{ ExecutionContext, Future } import scala.concurrent.duration._ import scala.util.Try import scalaz.{ NonEmptyList, _ } abstract class TestSpec extends FlatSpec with Matchers with ScalaFutures { implicit def SymbolToString(sym: Symbol): String = sym.toString() implicit val ec: ExecutionContext = scala.concurrent.ExecutionContext.Implicits.global implicit val pc: PatienceConfig = PatienceConfig(timeout = 5.minutes) implicit class PimpedFuture[T](self: Future[T]) { def toTry: Try[T] = Try(self.futureValue) } type DisjunctionNel[A, +B] = Disjunction[NonEmptyList[A], B] implicit class StringOps(val str: String) { def toNel: NonEmptyList[String] = NonEmptyList(str) def leftNel[A]: DisjunctionNel[String, A] = Disjunction.left[NonEmptyList[String], A](str.toNel) } implicit class EitherOps[A](val self: A) { def rightNel: DisjunctionNel[String, A] = Disjunction.right[NonEmptyList[String], A](self) } }
Example 67
Source File: InMemoryAkkaQueueSpec.scala From graphcool-framework with Apache License 2.0 | 5 votes |
package cool.graph.messagebus.queue.inmemory import akka.actor.ActorSystem import akka.stream.ActorMaterializer import akka.testkit.{TestKit, TestProbe} import cool.graph.messagebus.QueuePublisher import cool.graph.messagebus.queue.{BackoffStrategy, ConstantBackoff} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, BeforeAndAfterEach, Matchers, WordSpecLike} import scala.concurrent.Future import scala.concurrent.duration._ class InMemoryAkkaQueueSpec extends TestKit(ActorSystem("queueing-spec")) with WordSpecLike with Matchers with BeforeAndAfterAll with BeforeAndAfterEach with ScalaFutures { implicit val materializer = ActorMaterializer() def withInMemoryQueue[T](backoff: BackoffStrategy = ConstantBackoff(100.millis))(testFn: (InMemoryAkkaQueue[T], TestProbe) => Unit) = { val inMemoryQueue = InMemoryAkkaQueue[T](backoff) val testProbe = TestProbe() try { testFn(inMemoryQueue, testProbe) } finally { inMemoryQueue.shutdown } } override def afterAll = shutdown(verifySystemShutdown = true) "Queue" should { "call the onMsg function if a valid message arrives" in { withInMemoryQueue[String]() { (queue, probe) => queue.withConsumer((str: String) => { probe.ref ! str; Future.successful(()) }) queue.publish("test") probe.expectMsg("test") } } "increment the message tries correctly on failure" in { withInMemoryQueue[String]() { (queue, probe) => queue.withConsumer((str: String) => { probe.ref ! str; Future.failed(new Exception("Kabooom")) }) queue.publish("test") // 5 tries, 5 times the same message (can't check for the tries explicitly here) probe.expectMsgAllOf(2.seconds, Vector.fill(5) { "test" }: _*) probe.expectNoMsg(1.second) } } "map a type correctly with a MappingQueueConsumer" in { withInMemoryQueue[String]() { (queue, probe) => val mapped = queue.map[Int]((str: String) => str.toInt) mapped.withConsumer((int: Int) => { probe.ref ! int; Future.successful(()) }) queue.publish("123") probe.expectMsg(123) } } "map a type correctly with a MappingQueuePublisher" in { withInMemoryQueue[String]() { (queue: InMemoryAkkaQueue[String], probe) => val mapped: QueuePublisher[Int] = queue.map[Int]((int: Int) => int.toString) queue.withConsumer((str: String) => { probe.ref ! str; Future.successful(()) }) mapped.publish(123) probe.expectMsg("123") } } } }
Example 68
Source File: RabbitAkkaPubSubTestKitSpec.scala From graphcool-framework with Apache License 2.0 | 5 votes |
package cool.graph.messagebus.testkits import cool.graph.bugsnag.BugSnagger import cool.graph.messagebus.Conversions import cool.graph.messagebus.pubsub.{Message, Only} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, BeforeAndAfterEach, Matchers, WordSpecLike} import play.api.libs.json.Json class RabbitAkkaPubSubTestKitSpec extends WordSpecLike with Matchers with BeforeAndAfterAll with BeforeAndAfterEach with ScalaFutures { case class TestMessage(id: String, testOpt: Option[Int], testSeq: Seq[String]) implicit val bugSnagger: BugSnagger = null implicit val testMessageFormat = Json.format[TestMessage] implicit val testMarshaller = Conversions.Marshallers.FromJsonBackedType[TestMessage]() implicit val testUnmarshaller = Conversions.Unmarshallers.ToJsonBackedType[TestMessage]() val amqpUri = sys.env.getOrElse("RABBITMQ_URI", sys.error("RABBITMQ_URI required for testing")) val testRK = Only("SomeRoutingKey") var testKit: RabbitAkkaPubSubTestKit[TestMessage] = _ override def beforeEach = { testKit = RabbitAkkaPubSubTestKit[TestMessage](amqpUri, "test") testKit.start.futureValue } override def afterEach(): Unit = testKit.stop.futureValue "The rabbit pubsub testing kit" should { "should expect a message correctly" in { val testMsg = TestMessage("someId1", None, Seq("1", "2")) testKit.publish(testRK, testMsg) testKit.expectMsg(Message[TestMessage](testRK.topic, testMsg)) } "should blow up it expects a message and none arrives" in { val testMsg = TestMessage("someId2", None, Seq("1", "2")) an[AssertionError] should be thrownBy { testKit.expectMsg(Message[TestMessage](testRK.topic, testMsg)) } } "should expect no message correctly" in { testKit.expectNoMsg() } "should blow up if no message was expected but one arrives" in { val testMsg = TestMessage("someId3", None, Seq("1", "2")) testKit.publish(testRK, testMsg) an[AssertionError] should be thrownBy { testKit.expectNoMsg() } } "should expect a message count correctly" in { val testMsg = TestMessage("someId4", None, Seq("1", "2")) val testMsg2 = TestMessage("someId5", Some(123), Seq("2", "1")) testKit.publish(testRK, testMsg) testKit.publish(testRK, testMsg2) testKit.expectMsgCount(2) } "should blow up if it expects a message count and less arrive" in { val testMsg = TestMessage("someId6", None, Seq("1", "2")) testKit.publish(testRK, testMsg) an[AssertionError] should be thrownBy { testKit.expectMsgCount(2) } } "should blow up if it expects a message count and more arrive" in { val testMsg = TestMessage("someId7", None, Seq("1", "2")) val testMsg2 = TestMessage("someId8", Some(123), Seq("2", "1")) testKit.publish(testRK, testMsg) testKit.publish(testRK, testMsg2) an[AssertionError] should be thrownBy { testKit.expectMsgCount(1) } } } }
Example 69
Source File: WebsocketSessionSpec.scala From graphcool-framework with Apache License 2.0 | 5 votes |
package cool.graph.subscriptions.websockets import akka.actor.{ActorSystem, Props} import akka.testkit.TestProbe import cool.graph.messagebus.testkits.spechelpers.InMemoryMessageBusTestKits import cool.graph.websockets.WebsocketSession import cool.graph.websockets.protocol.Request import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpecLike} class WebsocketSessionSpec extends InMemoryMessageBusTestKits(ActorSystem("websocket-session-spec")) with WordSpecLike with Matchers with BeforeAndAfterAll with ScalaFutures { override def afterAll = shutdown() "The WebsocketSession" should { "send a message with the body STOP to the requests queue AND a Poison Pill to the outActor when it is stopped" in { withQueueTestKit[Request] { testKit => val projectId = "projectId" val sessionId = "sessionId" val outgoing = TestProbe().ref val probe = TestProbe() probe.watch(outgoing) val session = system.actorOf(Props(WebsocketSession(projectId, sessionId, outgoing, testKit, bugsnag = null))) system.stop(session) probe.expectTerminated(outgoing) testKit.expectPublishedMsg(Request(sessionId, projectId, "STOP")) } } } }
Example 70
Source File: UserAccountRepositoryOnMemorySpec.scala From scala-ddd-base with MIT License | 5 votes |
package com.github.j5ik2o.dddbase.example.repository.memory import java.time.ZonedDateTime import com.github.j5ik2o.dddbase.AggregateNotFoundException import com.github.j5ik2o.dddbase.example.model._ import com.github.j5ik2o.dddbase.example.repository.{ IdGenerator, SpecSupport, UserAccountRepository } import com.github.j5ik2o.dddbase.example.repository.util.ScalaFuturesSupportSpec import monix.eval.Task import monix.execution.Scheduler.Implicits.global import org.scalatest.concurrent.ScalaFutures import org.scalatest.{ FreeSpec, Matchers } import scala.concurrent.duration._ import scala.concurrent.{ Await, Future } class UserAccountRepositoryOnMemorySpec extends FreeSpec with ScalaFutures with ScalaFuturesSupportSpec with Matchers with SpecSupport { val userAccount = UserAccount( id = UserAccountId(IdGenerator.generateIdValue), status = Status.Active, emailAddress = EmailAddress("[email protected]"), password = HashedPassword("aaa"), firstName = "Junichi", lastName = "Kato", createdAt = ZonedDateTime.now, updatedAt = None ) val userAccounts = for (idx <- 1L to 10L) yield UserAccount( id = UserAccountId(IdGenerator.generateIdValue), status = Status.Active, emailAddress = EmailAddress(s"user${idx}@gmail.com"), password = HashedPassword("aaa"), firstName = "Junichi", lastName = "Kato", createdAt = ZonedDateTime.now, updatedAt = None ) "UserAccountRepositoryOnMemory" - { "store" in { val repository = UserAccountRepository.onMemory() val result: UserAccount = (for { _ <- repository.store(userAccount) r <- repository.resolveById(userAccount.id) } yield r).runToFuture.futureValue result shouldBe userAccount } "storeMulti" in { val repository = UserAccountRepository.onMemory() val result: Seq[UserAccount] = (for { _ <- repository.storeMulti(userAccounts) r <- repository.resolveMulti(userAccounts.map(_.id)) } yield r).runToFuture.futureValue sameAs(result, userAccounts) shouldBe true } "store then expired" in { val repository = UserAccountRepository.onMemory(expireAfterWrite = Some(1 seconds)) val resultFuture: Future[UserAccount] = (for { _ <- repository.store(userAccount) _ <- Task.pure(Thread.sleep(1000)) r <- repository.resolveById(userAccount.id) } yield r).runToFuture an[AggregateNotFoundException] should be thrownBy { Await.result(resultFuture, Duration.Inf) } } } }
Example 71
Source File: Slick3SpecSupport.scala From scala-ddd-base with MIT License | 5 votes |
package com.github.j5ik2o.dddbase.example.repository.util import com.typesafe.config.ConfigFactory import org.scalatest.concurrent.ScalaFutures import org.scalatest.{ BeforeAndAfter, BeforeAndAfterAll, Suite } import slick.basic.DatabaseConfig import slick.jdbc.SetParameter.SetUnit import slick.jdbc.{ JdbcProfile, SQLActionBuilder } import scala.concurrent.Future trait Slick3SpecSupport extends BeforeAndAfter with BeforeAndAfterAll with ScalaFutures with JdbcSpecSupport { self: Suite with FlywayWithMySQLSpecSupport => private var _dbConfig: DatabaseConfig[JdbcProfile] = _ private var _profile: JdbcProfile = _ protected def dbConfig = _dbConfig protected def profile = _profile after { implicit val ec = dbConfig.db.executor.executionContext val futures = tables.map { table => val q = SQLActionBuilder(List(s"TRUNCATE TABLE $table"), SetUnit).asUpdate dbConfig.db.run(q) } Future.sequence(futures).futureValue } override protected def beforeAll(): Unit = { super.beforeAll() val config = ConfigFactory.parseString(s""" |dddbase { | profile = "slick.jdbc.MySQLProfile$$" | db { | connectionPool = disabled | driver = "com.mysql.jdbc.Driver" | url = "jdbc:mysql://localhost:$jdbcPort/dddbase?useSSL=false" | user = "dddbase" | password = "dddbase" | } |} """.stripMargin) _dbConfig = DatabaseConfig.forConfig[JdbcProfile]("dddbase", config) _profile = dbConfig.profile } override protected def afterAll(): Unit = { dbConfig.db.shutdown super.afterAll() } }
Example 72
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 73
Source File: BucketNestedAggregationResponseTest.scala From elasticsearch-client with Apache License 2.0 | 5 votes |
package com.sumologic.elasticsearch.restlastic import com.sumologic.elasticsearch.restlastic.RestlasticSearchClient.ReturnTypes.{BucketNestedAggregationResponse, RawJsonResponse} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpec} import org.scalatestplus.junit.JUnitRunner import org.junit.runner.RunWith @RunWith(classOf[JUnitRunner]) class BucketNestedAggregationResponseTest extends WordSpec with Matchers with ScalaFutures { "BucketAggregationResponse" should { "parse buckets inside buckets" in { val expected = Map( "doc_count_error_upper_bound" -> 0, "sum_other_doc_count" -> 0, "buckets" -> List(Map( "key" -> "honda", "doc_count" -> 3, "color" -> Map( "doc_count_error_upper_bound" -> 0, "sum_other_doc_count" -> 0, "buckets" -> List(Map( "key" -> "black", "doc_count" -> 2), Map( "key" -> "red", "doc_count" -> 1))))) ) RawJsonResponse(aggregationsBucketsInsideBuckets).mappedTo[BucketNestedAggregationResponse].aggregations._2 should be(expected) } } val aggregationsBucketsInsideBuckets = """{ "took": 3, "timed_out": false, "_shards": { "total": 12, "successful": 12, "failed": 0 }, "hits": { "total": 45, "max_score": 0.0, "hits": [] }, "aggregations": { "make": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [{ "key": "honda", "doc_count": 3, "color": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [{ "key": "black", "doc_count": 2 }, { "key": "red", "doc_count": 1 }] } }] } } }""" }
Example 74
Source File: ElasticsearchIntegrationTest.scala From elasticsearch-client with Apache License 2.0 | 5 votes |
package com.sumologic.elasticsearch.restlastic import com.sumologic.elasticsearch.restlastic.RestlasticSearchClient.ReturnTypes import com.sumologic.elasticsearch.restlastic.dsl.Dsl._ import org.junit.runner.RunWith import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Span} import org.scalatest.{BeforeAndAfterAll, Suite} import org.scalatestplus.junit.JUnitRunner import scala.util.{Random, Try} @RunWith(classOf[JUnitRunner]) trait ElasticsearchIntegrationTest extends BeforeAndAfterAll with ScalaFutures { this: Suite => private val indexPrefix = "test-index" def restClient: RestlasticSearchClient val IndexName = s"$indexPrefix-${math.abs(Random.nextLong())}" protected def createIndices(cnt: Int = 1): IndexedSeq[Index] = { (1 to cnt).map(idx => { val index = dsl.Dsl.Index(s"${IndexName}-${idx}") val analyzerName = Name("keyword_lowercase") val lowercaseAnalyzer = Analyzer(analyzerName, Keyword, Lowercase) val notAnalyzed = Analyzer(Name("not_analyzed"), Keyword) val analyzers = Analyzers( AnalyzerArray(lowercaseAnalyzer, notAnalyzed), FilterArray(), NormalizerArray(Normalizer(Name("lowercase"), Lowercase))) val indexSetting = IndexSetting(12, 1, analyzers, 30) val indexFut = restClient.createIndex(index, Some(indexSetting)) indexFut.futureValue index }) } override def beforeAll(): Unit = { super.beforeAll() Try(delete(Index(s"$indexPrefix*"))) } override def afterAll(): Unit = { Try(delete(Index(s"$indexPrefix*"))) super.afterAll() } private def delete(index: Index): ReturnTypes.RawJsonResponse = { implicit val patienceConfig = PatienceConfig(scaled(Span(1500, Millis)), scaled(Span(15, Millis))) restClient.deleteIndex(index).futureValue } }
Example 75
Source File: ScanAndScrollSourceTest.scala From elasticsearch-client with Apache License 2.0 | 5 votes |
package com.sumologic.elasticsearch.akkahelpers import akka.actor.ActorSystem import akka.stream.ActorMaterializer import akka.stream.scaladsl.{Sink, Source} import com.sumologic.elasticsearch.restlastic.RestlasticSearchClient.ReturnTypes._ import com.sumologic.elasticsearch.restlastic.ScrollClient import com.sumologic.elasticsearch.restlastic.dsl.Dsl import com.sumologic.elasticsearch.restlastic.dsl.Dsl._ import org.json4s.Extraction._ import org.json4s._ import org.junit.runner.RunWith import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpec} import org.scalatestplus.junit.JUnitRunner import scala.concurrent.{ExecutionContext, Future} @RunWith(classOf[JUnitRunner]) class ScanAndScrollSourceTest extends WordSpec with Matchers with ScalaFutures { val resultMaps: List[Map[String, AnyRef]] = List(Map("a" -> "1"), Map("a" -> "2"), Map("a" -> "3")) implicit val formats = org.json4s.DefaultFormats implicit val system = ActorSystem("test") implicit val materializer = ActorMaterializer() def searchResponseFromMap(map: Map[String, AnyRef]) = { val raw = RawSearchResponse(Hits(List(ElasticJsonDocument("index", "type", "id", Some(0.1f), decompose(map).asInstanceOf[JObject], highlight = None, inner_hits = None)), 1)) SearchResponse(raw, "{}") } "ScanAndScrollSource" should { val index = Index("index") val tpe = Type("tpe") val queryRoot = new QueryRoot(MatchAll) "Read to the end of a source" in { val searchResponses = resultMaps.map(searchResponseFromMap) val client = new MockScrollClient(searchResponses) val source = Source.actorPublisher[SearchResponse](ScanAndScrollSource.props(index, tpe, queryRoot, client, sizeOpt = Some(5))) val fut = source .map(_.sourceAsMap) .grouped(10) .runWith(Sink.head) whenReady(fut) { resp => resp.flatten should be(resultMaps) } } } } class MockScrollClient(results: List[SearchResponse]) extends ScrollClient { var id = 1 var started = false var resultsQueue = results override val indexExecutionCtx: ExecutionContext = ExecutionContext.Implicits.global override def startScrollRequestIndices(indices: Seq[Dsl.Index], tpe: Dsl.Type, query: Dsl.QueryRoot, resultWindowOpt: Option[String] = None, fromOpt: Option[Int] = None, sizeOpt: Option[Int] = None, preference: Option[String] = None): Future[(ScrollId, SearchResponse)] = { if (!started) { started = true processRequest() } else { Future.failed(new RuntimeException("Scroll already started")) } } override def scroll(scrollId: ScrollId, resultWindowOpt: Option[String] = None): Future[(ScrollId, SearchResponse)] = { if (scrollId.id.toInt == id) { processRequest() } else { Future.failed(new RuntimeException("Invalid id")) } } private def processRequest(): Future[(ScrollId, SearchResponse)] = { id += 1 resultsQueue match { case head :: rest => resultsQueue = rest Future.successful((ScrollId(id.toString), head)) case Nil => Future.successful((ScrollId(id.toString), SearchResponse.empty)) } } }
Example 76
Source File: DelayedFutureTest.scala From ncdbg with BSD 3-Clause "New" or "Revised" License | 5 votes |
package com.programmaticallyspeaking.ncd.infra import com.programmaticallyspeaking.ncd.nashorn.FairAmountOfPatience import com.programmaticallyspeaking.ncd.testing.UnitTest import org.scalatest.concurrent.ScalaFutures import scala.concurrent.ExecutionContext import scala.concurrent.duration._ import scala.language.postfixOps class DelayedFutureTest extends UnitTest with ScalaFutures with FairAmountOfPatience { implicit val ec = ExecutionContext.global "DelayedFuture" - { "delays a task" in { val f = DelayedFuture(150 millis)(42) whenReady(f) { result => result should be (42) } } "handles exception" in { val f = DelayedFuture(150 millis)(throw new RuntimeException("oops")) whenReady(f.failed) { ex => ex.getMessage should be ("oops") } } "can be cancelled" in { var mut = "" val f = DelayedFuture(400 millis) { mut = "it failed" } f.cancel() Thread.sleep(500) mut should be ("") } } }
Example 77
Source File: EvaluateTestFixture.scala From ncdbg with BSD 3-Clause "New" or "Revised" License | 5 votes |
package com.programmaticallyspeaking.ncd.nashorn import com.programmaticallyspeaking.ncd.host._ import com.programmaticallyspeaking.ncd.messaging.Observer import com.programmaticallyspeaking.ncd.testing.UnitTest import org.scalatest.concurrent.{IntegrationPatience, ScalaFutures} import scala.collection.mutable import scala.concurrent.{ExecutionContext, Promise} import scala.util.{Failure, Success, Try} class EvaluateTestFixture extends UnitTest with NashornScriptHostTestFixture with ScalaFutures with IntegrationPatience { override implicit val executionContext: ExecutionContext = ExecutionContext.global type Tester = (ScriptHost, Seq[StackFrame]) => Unit protected def evaluateInScript(script: String, unknownEventHandler: (ScriptEvent) => Unit = _ => {})(testers: Tester*): Unit = { assert(script.contains("debugger;"), "Script must contain a 'debugger' statement") assert(testers.nonEmpty, "Must have at least one tester") val testerQueue = mutable.Queue[Tester](testers: _*) val donePromise = Promise[Unit]() val observer = Observer.from[ScriptEvent] { case bp: HitBreakpoint => val host = getHost val next = testerQueue.dequeue() Try(next(host, bp.stackFrames)) match { case Success(_) => host.resume() if (testerQueue.isEmpty) donePromise.success(()) case Failure(t) => donePromise.failure(t) } case x => unknownEventHandler(x) } observeAndRunScriptAsync(script, observer)(_ => donePromise.future) } }
Example 78
Source File: MultiThreadingTest.scala From ncdbg with BSD 3-Clause "New" or "Revised" License | 5 votes |
package com.programmaticallyspeaking.ncd.nashorn import java.io.{BufferedReader, InputStreamReader} import java.util.concurrent.TimeoutException import java.util.concurrent.atomic.AtomicInteger import com.programmaticallyspeaking.ncd.host._ import com.programmaticallyspeaking.ncd.messaging.Observer import com.programmaticallyspeaking.ncd.testing.{SharedInstanceActorTesting, UnitTest} import jdk.nashorn.api.scripting.NashornScriptEngineFactory import org.scalatest.concurrent.{Eventually, ScalaFutures} import org.scalatest.exceptions.TestFailedException import org.slf4s.Logging import scala.concurrent.duration._ import scala.concurrent.{Await, ExecutionContext, Future, Promise} trait MultiThreadingTestFixture extends UnitTest with Logging with SharedInstanceActorTesting with VirtualMachineLauncher with ScalaFutures with FairAmountOfPatience with Eventually { override val scriptExecutor: ScriptExecutorBase = MultiThreadedScriptExecutor override implicit val executionContext: ExecutionContext = ExecutionContext.global } class MultiThreadingTest extends MultiThreadingTestFixture { def location(ln: Int) = ScriptLocation(ln, None) "Breakpoint requests from other threads should be ignore in a paused state" in { val scriptAddedPromise = Promise[Script]() val hitBreakpointPromise = Promise[String]() val breakpointCounter = new AtomicInteger() val host = getHost observeScriptEvents(new Observer[ScriptEvent] { override def onNext(item: ScriptEvent): Unit = item match { case ScriptAdded(script) => scriptAddedPromise.success(script) case hb: HitBreakpoint => breakpointCounter.incrementAndGet() hitBreakpointPromise.trySuccess("") case _ => } override def onError(error: Throwable): Unit = {} override def onComplete(): Unit = {} }) whenReady(scriptAddedPromise.future) { script => val scriptLocation = eventually { host.getBreakpointLocations(ScriptIdentity.fromId(script.id), location(1), None).headOption.getOrElse(fail(s"No line numbers for script ${script.id}")) } host.setBreakpoint(ScriptIdentity.fromURL(script.url), scriptLocation, BreakpointOptions.empty) try { whenReady(hitBreakpointPromise.future) { _ => // Ugly, but wait for a while to see if the counter increases over 1 (which it shouldn't). Thread.sleep(200) breakpointCounter.get() should be(1) } } catch { case t: TestFailedException if t.getMessage().contains("timeout") => val progress = summarizeProgress() throw new TimeoutException("Timed out: " + progress) } } } } object MultiThreadedScriptExecutor extends App with ScriptExecutorBase { println("MultiThreadedScriptExecutor starting. Java version: " + System.getProperty("java.version")) val scriptEngine = new NashornScriptEngineFactory().getScriptEngine("--no-syntax-extensions") val reader = new BufferedReader(new InputStreamReader(System.in)) println(Signals.ready) waitForSignal(Signals.go) // Used a compiled script here before, stopped working with JDK 10 var src = """(function () { | return Math.floor(5.5); |})(); """.stripMargin implicit val ec = ExecutionContext.global val futures = (1 to 5).map { _ => Future { while (true) { scriptEngine.eval(src) } } } Await.result(Future.sequence(futures), 30.seconds) }
Example 79
Source File: EventEmitHookTest.scala From ncdbg with BSD 3-Clause "New" or "Revised" License | 5 votes |
package com.programmaticallyspeaking.ncd.chrome.domains import akka.actor.ActorSystem import akka.testkit.TestKit import com.programmaticallyspeaking.ncd.testing.UnitTest import org.scalatest.concurrent.ScalaFutures case class EETestParams(value: Int) class EventEmitHookTest extends TestKit(ActorSystem("eeht")) with UnitTest with ScalaFutures { def sut() = new EventEmitHook() def createEvent(params: AnyRef, method: String = "foobar") = Messages.Event(method, params) def emitEvent(e: Messages.Event, ee: EventEmitHook) = ee.emitEvent(e, testActor) "EventEmitHook" - { lazy val matchExisting = { val ee = sut() emitEvent(createEvent(EETestParams(1)), ee) emitEvent(createEvent(EETestParams(2)), ee) ee.awaitEvent({ case Messages.Event(_, x: EETestParams) => x.value == 1 }) } lazy val matchLater = { val ee = sut() val f = ee.awaitEvent({ case Messages.Event(_, x: EETestParams) => x.value == 1 }) emitEvent(createEvent(EETestParams(2)), ee) emitEvent(createEvent(EETestParams(1)), ee) f } "matches an existing event right away" in { matchExisting.isCompleted should be (true) } "returns existing matching event(s) in a Future" in { whenReady(matchExisting) { events => events should be (List(createEvent(EETestParams(1)))) } } "returns a matched event later" in { whenReady(matchLater) { events => events should be (List(createEvent(EETestParams(1)))) } } "has limited recollection of emitted events (for matching existing)" in { val ee = new EventEmitHook(2) emitEvent(createEvent(EETestParams(1)), ee) emitEvent(createEvent(EETestParams(2)), ee) emitEvent(createEvent(EETestParams(3)), ee) val f = ee.awaitEvent({ case Messages.Event(_, _: EETestParams) => true }) whenReady(f) { events => events.map(_.params) should be (Seq(EETestParams(2), EETestParams(3))) } } } }
Example 80
Source File: ReconnectSpec.scala From akka-persistence-cassandra with Apache License 2.0 | 5 votes |
package akka.persistence.cassandra import java.io.File import akka.actor.{ ActorSystem, Props } import akka.persistence.cassandra.CassandraLifecycle.AwaitPersistenceInit import akka.persistence.cassandra.testkit.CassandraLauncher import akka.testkit.{ ImplicitSender, SocketUtil, TestKit } import com.typesafe.config.ConfigFactory import org.scalatest.Suite import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike object ReconnectSpec { val freePort = SocketUtil.temporaryLocalPort() val config = ConfigFactory.parseString(s""" datastax-java-driver { basic.load-balancing-policy.local-datacenter = "datacenter1" // Will fail without this setting advanced.reconnect-on-init = true basic.contact-points = ["127.0.0.1:$freePort"] } """).withFallback(CassandraLifecycle.config) } // not using Cassandra Spec class ReconnectSpec extends TestKit(ActorSystem("ReconnectSpec", ReconnectSpec.config)) with Suite with ImplicitSender with AnyWordSpecLike with Matchers with ScalaFutures { "Reconnecting" must { "start with system off" in { val pa = system.actorOf(Props(new AwaitPersistenceInit("pid", "", ""))) pa ! "hello" expectNoMessage() CassandraLauncher.start( new File("target/ReconnectSpec"), configResource = CassandraLauncher.DefaultTestConfigResource, clean = true, port = ReconnectSpec.freePort, CassandraLauncher.classpathForResources("logback-test.xml")) try { CassandraLifecycle.awaitPersistenceInit(system) } finally { CassandraLauncher.stop() } } } }
Example 81
Source File: StockReaderSpec.scala From CSYE7200_Old with MIT License | 5 votes |
package edu.neu.coe.csye7200.cache import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.util.{Failure, Success} class StockReaderSpec extends FlatSpec with Matchers with Futures with ScalaFutures { implicit val resource: String = "stocks.txt" behavior of "getPrice" it should "work" in { val xf = StockReader.getPrice("AAPL") whenReady(xf) { x => x should matchPattern { case 207.48 => } } } import scala.concurrent.ExecutionContext.Implicits.global it should "fail with badStocks1" in { StockReader.getPrice("AAPL")("badStocks1.txt") onComplete { case Success(_) => fail("this should fail") case Failure(x) => x.getLocalizedMessage should matchPattern { case "no entry matching AAPL" => } } } it should "fail with badStocks2" in { StockReader.getPrice("AAPL")("badStocks2.txt") onComplete { case Success(_) => fail("this should fail") case Failure(x) => x.getLocalizedMessage should matchPattern { case "no entry matching AAPL" => } } } it should "fail with badStocks3" in { StockReader.getPrice("AAPL")("badStocks3.txt") onComplete { case Success(_) => fail("this should fail") case Failure(x) => x should matchPattern { case _: NumberFormatException => } } } }
Example 82
Source File: PortfolioSpec.scala From CSYE7200_Old with MIT License | 5 votes |
package edu.neu.coe.csye7200.cache import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.concurrent.Future import scala.util._ class PortfolioSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "Position" it should "parse MSFT 55.67" in { Position.parse("MSFT 55.67") should matchPattern { case Success(Position("MSFT",55.67)) => } } it should "get value" in { val xf = Position.value(cache)("MSFT 100.0") whenReady(xf) { u => u should matchPattern { case _: Double => } } xf.value.get.get shouldBe 10616.0 } behavior of "Portfolio" it should "parse MSFT 55.67" in { Position.parse("MSFT 55.67") should matchPattern { case Success(Position("MSFT",55.67)) => } } it should "parse a portfolio (0)" in { val positions = Seq() val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case _: Double => } } xf.value.get.get shouldBe 0.0 } it should "parse a portfolio (1)" in { val positions = Seq("MSFT 100.0") val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case _: Double => } } xf.value.get.get shouldBe 10616.0 } it should "parse a portfolio (2)" in { val positions = Seq("MSFT 55.67", "GOOG 43.20") val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case _: Double => } } xf.value.get.get shouldBe 51606.4552 } implicit val resource: String = "stocks.txt" private val cache = MyCache[String, Double](StockReader.getPrice) }
Example 83
Source File: CacheSpec.scala From CSYE7200_Old with MIT License | 5 votes |
package edu.neu.coe.csye7200.cache import java.net.URL import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import scala.util.{Random, Try} class CacheSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "apply" val random = Random def lookupStock(k: String): Future[Double] = Future { random.setSeed(k.hashCode) random.nextInt(1000) / 100.0 } it should "work" in { val cache = MyCache[String,Double](lookupStock) val xf: Future[Double] = cache("MSFT") whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 3.64 } }
Example 84
Source File: HedgeFundSpec.scala From CSYE7200_Old with MIT License | 5 votes |
package edu.neu.coe.csye7200 import akka.actor.ActorSystem import akka.pattern.ask import akka.util.Timeout import com.typesafe.config.ConfigFactory import edu.neu.coe.csye7200.actors.SymbolQuery import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.time.{Seconds, Span} import org.scalatest.{FlatSpec, Matchers, _} import scala.concurrent.Future import scala.util.{Failure, Success} class HedgeFundSpec extends FlatSpec with Matchers with Futures with ScalaFutures with TryValues with Inside { behavior of "SymbolQuery" it should "work" in { import scala.concurrent.duration._ implicit val system: ActorSystem = ActorSystem("HedgeFund") implicit val timeout: Timeout = Timeout(30.seconds) val ay = HedgeFund.startup(ConfigFactory.load()) ay should matchPattern { case Success(_) => } val qf = ay match { case Success(q) => q ? SymbolQuery("MSFT", List("name", "symbol", "price", "GF", "t", "l")) case Failure(x) => Future.failed(x) } whenReady(qf, org.scalatest.concurrent.PatienceConfiguration.Timeout(Span(10, Seconds))) { q => println(q) } } }
Example 85
Source File: SortingSpec.scala From CSYE7200_Old with MIT License | 5 votes |
package edu.neu.coe.csye7200.lbsort import edu.neu.coe.csye7200.util.RandomState import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.util.Random class SortingSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "Insertion Sort" it should "sort List[Int]" in { val list = Array(3, 1, 2) Sorting.insertionSort(list) list shouldBe Array(1, 2, 3) } it should "sort List[String]" in { val list = Array("b", "c", "a") Sorting.insertionSort(list) list shouldBe Array("a", "b", "c") } it should "sort List[Double] using create" in { val list = Array(3.0, 1.5, 2.4) Sorting.insertionSort(list) list shouldBe Array(1.5, 2.4, 3.0) } behavior of "Quick Sort" it should "sort List[Long]" in { val list = RandomState(0L).stream.take(100).toArray Sorting.quickSort(list) list.reverse.take(5) shouldBe Array(9054633673849498218L, 8937230293740383692L, 8613213585075034408L, 8543763135442756639L, 8358116205139703580L) } }
Example 86
Source File: PortfolioSpec.scala From CSYE7200_Old with MIT License | 5 votes |
package edu.neu.coe.csye7200.cache import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import scala.util._ class PortfolioSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "Position" it should "parse MSFT 55.67" in { Position.parse("MSFT 55.67") should matchPattern { case Success(Position("MSFT",55.67)) => } } it should "get value" in { val xf = Position.value(cache)("MSFT 100.0") whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 364 } behavior of "Portfolio" it should "parse MSFT 55.67" in { Position.parse("MSFT 55.67") should matchPattern { case Success(Position("MSFT",55.67)) => } } it should "parse a portfolio (0)" in { val positions = Seq() val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 0.0 } it should "parse a portfolio (1)" in { val positions = Seq("MSFT 100.0") val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 364 } it should "parse a portfolio (2)" in { val positions = Seq("MSFT 55.67", "GOOG 43.20") val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 345.6308 } val random = Random def lookupStock(k: String): Future[Double] = Future { random.setSeed(k.hashCode) random.nextInt(1000) / 100.0 } val cache = MyCache[String,Double](lookupStock) }
Example 87
Source File: CacheSpec.scala From CSYE7200_Old with MIT License | 5 votes |
package edu.neu.coe.csye7200.cache import java.net.URL import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import scala.util.{Random, Try} class CacheSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "apply" val random = Random def lookupStock(k: String): Future[Double] = Future { random.setSeed(k.hashCode) random.nextInt(1000) / 100.0 } it should "work" in { val cache = MyCache[String,Double](lookupStock) val xf: Future[Double] = cache("MSFT") whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 3.64 } }
Example 88
Source File: TheFlashTweetsConsumerSpec.scala From KafkaPlayground with GNU General Public License v3.0 | 5 votes |
package com.github.pedrovgs.kafkaplayground.flash import com.github.pedrovgs.kafkaplayground.flash.elasticsearch.ElasticClient import com.github.pedrovgs.kafkaplayground.utils.EmbeddedKafkaServer import org.mockito.Mockito.verify import org.scalatest.concurrent.ScalaFutures import org.scalatest.mockito.MockitoSugar import org.scalatest.{BeforeAndAfterEach, FlatSpec, Matchers} object TheFlashTweetsConsumerSpec { private val anyTopic = "topic" private val anyContent = "content" private val anyOtherContent = "anyOtherContent" } class TheFlashTweetsConsumerSpec extends FlatSpec with Matchers with EmbeddedKafkaServer with ScalaFutures with MockitoSugar with BeforeAndAfterEach { import TheFlashTweetsConsumerSpec._ private var elasticClient: ElasticClient = _ override protected def beforeEach(): Unit = { super.beforeEach() elasticClient = mock[ElasticClient] } "TheFlashTweetsConsumer" should "create a new document for the configured index using the messages polled from the kafka cluster" in { produceMessage(anyTopic, anyContent) givenAElasticConsumer().poll() val expectedId = s"topic_0_0" verify(elasticClient).insertOrUpdate(expectedId, anyContent) } it should "send more than a message to elasticsearch" in { produceMessage(anyTopic, anyContent) produceMessage(anyTopic, anyOtherContent) givenAElasticConsumer().poll() verify(elasticClient).insertOrUpdate("topic_0_0", anyContent) verify(elasticClient).insertOrUpdate("topic_0_1", anyOtherContent) } private def givenAElasticConsumer() = new TheFlashTweetsConsumer(kafkaServerAddress(), anyTopic, elasticClient) }
Example 89
Source File: TheFlashTweetsProducerSpec.scala From KafkaPlayground with GNU General Public License v3.0 | 5 votes |
package com.github.pedrovgs.kafkaplayground.flash import java.util.Date import com.danielasfregola.twitter4s.entities.{Geo, Tweet} import com.github.pedrovgs.kafkaplayground.utils.EmbeddedKafkaServer import org.scalatest.concurrent.{PatienceConfiguration, ScalaFutures} import org.scalatest.{BeforeAndAfter, FlatSpec, Matchers} import scala.concurrent.duration._ object TheFlashTweetsProducerSpec { private val unknownLocationFlashTopic = "the-flash-tweets" private val locatedFlashTopic = "the-flash-tweets-with-location" private val anyNotGeoLocatedTweet = Tweet( created_at = new Date(), id = 1L, id_str = "1", source = "source", text = "I've seen the fastest man alive!" ) private val anyGeoLocatedTweet = anyNotGeoLocatedTweet.copy( geo = Some(Geo(Seq(12.0, 11.0), "lat-long")) ) } class TheFlashTweetsProducerSpec extends FlatSpec with Matchers with EmbeddedKafkaServer with ScalaFutures with BeforeAndAfter { import TheFlashTweetsProducerSpec._ "TheFlashTweetsProducer" should "return the tweet passed as param if the tweet has no geo location info" in { val result = produceTweet(anyNotGeoLocatedTweet) result shouldBe anyNotGeoLocatedTweet } it should "send a record with just the text of the tweet to the the-flash-tweets topic if the tweet has no geo location info" in { produceTweet(anyNotGeoLocatedTweet) val records = recordsForTopic(unknownLocationFlashTopic) val expectedMessage = s""" |{ | "message": "I've seen the fastest man alive!" |} """.stripMargin records.size shouldBe 1 records.head shouldBe expectedMessage } it should "return the tweet passed as param if the tweet has geo location info" in { val result = produceTweet(anyGeoLocatedTweet) result shouldBe anyGeoLocatedTweet } it should "send a record with just the text of the tweet to the the-flash-tweets-with-location topic if the tweet has geo location info" in { produceTweet(anyGeoLocatedTweet) val records = recordsForTopic(locatedFlashTopic) val expectedMessage = s""" |{ | "latitude": 12.0, | "longitude": 11.0, | "id": "1", | "message": "I've seen the fastest man alive!" |} """.stripMargin records.size shouldBe 1 records.head shouldBe expectedMessage } it should "send a not geo-located tweet to a topic and another geo-located to the other topic configured" in { produceTweet(anyNotGeoLocatedTweet) produceTweet(anyGeoLocatedTweet) val locatedTopicRecords = recordsForTopic(locatedFlashTopic) val unknownLocationTopicRecords = recordsForTopic(unknownLocationFlashTopic) locatedTopicRecords.size shouldBe 1 unknownLocationTopicRecords.size shouldBe 1 } private def produceTweet(tweet: Tweet) = new TheFlashTweetsProducer(kafkaServerAddress())(tweet) .futureValue(timeout = PatienceConfiguration.Timeout(1.seconds)) }
Example 90
Source File: DatastreamHandlerUnitSpec.scala From play-auditing with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.audit.handler import akka.actor.ActorSystem import akka.stream.ActorMaterializer import org.scalatest.Inspectors import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike import play.api.inject.DefaultApplicationLifecycle import play.api.libs.json.{JsString, JsValue} import uk.gov.hmrc.audit.HandlerResult import scala.concurrent.duration.DurationInt import scala.concurrent.{ExecutionContext, Future} import ExecutionContext.Implicits.global class DatastreamHandlerUnitSpec extends AnyWordSpecLike with Inspectors with Matchers with ScalaFutures { val datastreamHandler = new DatastreamHandler( scheme = "http", host = "localhost", port = 1234, path = "/some/path", connectTimeout = 2000.millis, requestTimeout = 2000.millis, userAgent = "the-micro-service-name", materializer = ActorMaterializer()(ActorSystem()), lifecycle = new DefaultApplicationLifecycle() ) { override def sendHttpRequest(event: JsValue)(implicit ec: ExecutionContext): Future[HttpResult] = Future.successful(HttpResult.Response(event.as[String].toInt)) } "Any Datastream response" should { "Return Success for any response code of 204" in { val result = datastreamHandler.sendEvent(JsString("204")).futureValue result shouldBe HandlerResult.Success } "Return Failure for any response code of 3XX or 401-412 or 414-499 or 5XX" in { forAll((300 to 399) ++ (401 to 412) ++ (414 to 499) ++ (500 to 599)) { code => val result = datastreamHandler.sendEvent(JsString(code.toString)).futureValue result shouldBe HandlerResult.Failure } } "Return Rejected for any response code of 400 or 413" in { forAll(Seq(400, 413)) { code => val result = datastreamHandler.sendEvent(JsString(code.toString)).futureValue result shouldBe HandlerResult.Rejected } } } }
Example 91
Source File: AsyncLoadingCacheExample.scala From scaffeine with Apache License 2.0 | 5 votes |
package com.github.blemale.scaffeine.example import org.scalatest.concurrent.ScalaFutures import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers import scala.concurrent.Future class AsyncLoadingCacheExample extends AnyFlatSpec with Matchers with ScalaFutures { "AsyncLoadingCache" should "be created from Scaffeine builder with synchronous loader" in { import com.github.blemale.scaffeine.{AsyncLoadingCache, Scaffeine} import scala.concurrent.duration._ val cache: AsyncLoadingCache[Int, String] = Scaffeine() .recordStats() .expireAfterWrite(1.hour) .maximumSize(500) .buildAsync((i: Int) => s"foo$i") whenReady(cache.get(1))(value => value should be("foo1")) } "AsyncLoadingCache" should "be created from Scaffeine builder with asynchronous loader" in { import com.github.blemale.scaffeine.{AsyncLoadingCache, Scaffeine} import scala.concurrent.duration._ val cache: AsyncLoadingCache[Int, String] = Scaffeine() .recordStats() .expireAfterWrite(1.hour) .maximumSize(500) .buildAsyncFuture((i: Int) => Future.successful(s"foo$i")) whenReady(cache.get(1))(value => value should be("foo1")) } }
Example 92
Source File: AsyncCacheSpec.scala From scaffeine with Apache License 2.0 | 5 votes |
package com.github.blemale.scaffeine import org.scalatest.OptionValues import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec import scala.concurrent.Future class AsyncCacheSpec extends AnyWordSpec with Matchers with ScalaFutures with OptionValues { "AsyncCache" should { "get value if present" in { val cache = Scaffeine().buildAsync[String, String]() cache.put("foo", Future.successful("present")) val fooValue = cache.getIfPresent("foo") val barValue = cache.getIfPresent("bar") fooValue.value.futureValue should be("present") barValue should be(None) } "get or compute value" in { val cache = Scaffeine().buildAsync[String, String]() cache.put("foo", Future.successful("present")) val fooValue = cache.get("foo", _ => "computed") val barValue = cache.get("bar", _ => "computed") fooValue.futureValue should be("present") barValue.futureValue should be("computed") } "get or compute async value" in { val cache = Scaffeine().buildAsync[String, String]() cache.put("foo", Future.successful("present")) val fooValue = cache.getFuture("foo", _ => Future.successful("computed")) val barValue = cache.getFuture("bar", _ => Future.successful("computed")) fooValue.futureValue should be("present") barValue.futureValue should be("computed") } "get or compute all values" in { val cache = Scaffeine().buildAsync[String, String]() cache.put("foo", Future.successful("present")) val values = cache.getAll(List("foo", "bar"), _.map(key => (key, "computed")).toMap) values.futureValue should contain only ("foo" -> "present", "bar" -> "computed") } "get or compute async all values" in { val cache = Scaffeine().buildAsync[String, String]() cache.put("foo", Future.successful("present")) val values = cache.getAllFuture( List("foo", "bar"), keys => Future.successful(keys.map(key => (key, "computed")).toMap) ) values.futureValue should contain only ("foo" -> "present", "bar" -> "computed") } "put value" in { val cache = Scaffeine().buildAsync[String, String]() cache.put("foo", Future.successful("present")) val fooValue = cache.getIfPresent("foo") fooValue.value.futureValue should be("present") } "expose a synchronous view of itself" in { val cache = Scaffeine().buildAsync[String, String]() val synchronousCache = cache.synchronous() synchronousCache shouldBe a[Cache[_, _]] } } }
Example 93
Source File: ChatControllerSpec.scala From Scala-Reactive-Programming with MIT License | 5 votes |
package controllers import org.scalatest.concurrent.PatienceConfiguration.Timeout import org.scalatest.concurrent.{IntegrationPatience, ScalaFutures} import org.scalatestplus.play._ import play.api.inject.guice.GuiceApplicationBuilder import play.api.test._ import play.shaded.ahc.org.asynchttpclient.AsyncHttpClient import play.shaded.ahc.org.asynchttpclient.ws.WebSocket import scala.compat.java8.FutureConverters import scala.concurrent.Await import scala.concurrent.duration._ class ChatControllerSpec extends PlaySpec with ScalaFutures with IntegrationPatience { "ChatController" should { "reject a websocket flow if the origin is set incorrectly" in WsTestClient.withClient { client => // Pick a non standard port that will fail the (somewhat contrived) origin check... lazy val port: Int = 31337 val app = new GuiceApplicationBuilder().build() Helpers.running(TestServer(port, app)) { val myPublicAddress = s"localhost:$port" val serverURL = s"ws://$myPublicAddress/chat" val asyncHttpClient: AsyncHttpClient = client.underlying[AsyncHttpClient] val webSocketClient = new WebSocketClient(asyncHttpClient) try { val origin = "ws://example.com/ws/chat" val listener = new WebSocketClient.LoggingListener val completionStage = webSocketClient.call(serverURL, origin, listener) val f = FutureConverters.toScala(completionStage) val result = Await.result(f, atMost = 1000 millis) listener.getThrowable mustBe a[IllegalStateException] } catch { case e: IllegalStateException => e mustBe an [IllegalStateException] case e: java.util.concurrent.ExecutionException => val foo = e.getCause foo mustBe an [IllegalStateException] } } } "accept a websocket flow if the origin is set correctly" in WsTestClient.withClient { client => lazy val port: Int = Helpers.testServerPort val app = new GuiceApplicationBuilder().build() Helpers.running(TestServer(port, app)) { val myPublicAddress = s"localhost:$port" val serverURL = s"ws://$myPublicAddress/chat" val asyncHttpClient: AsyncHttpClient = client.underlying[AsyncHttpClient] val webSocketClient = new WebSocketClient(asyncHttpClient) val origin = serverURL val listener = new WebSocketClient.LoggingListener val completionStage = webSocketClient.call(serverURL, origin, listener) val f = FutureConverters.toScala(completionStage) whenReady(f, timeout = Timeout(1 second)) { webSocket => webSocket mustBe a [WebSocket] } } } } }
Example 94
Source File: S3AsyncClientImplSpec.scala From reactive-aws-clients with MIT License | 5 votes |
package com.github.j5ik2o.reactive.aws.s3 import org.scalatest.concurrent.ScalaFutures import org.scalatest.{ FreeSpec, Matchers } import software.amazon.awssdk.core.async.AsyncRequestBody import software.amazon.awssdk.services.s3.model._ import scala.concurrent.duration._ class S3AsyncClientImplSpec extends FreeSpec with Matchers with ScalaFutures with S3ContainerSpecSupport { implicit val pc: PatienceConfig = PatienceConfig(20 seconds, 1 seconds) lazy val s3Client = S3AsyncClient(javaS3Client) "S3AsyncClientImpl" - { "create bucket, put object, get object" ignore { val value = "abc" s3Client.createBucket(CreateBucketRequest.builder().bucket("test").build()).futureValue s3Client .putObject(PutObjectRequest.builder().bucket("test").key("test").build(), AsyncRequestBody.fromString(value)).futureValue val response = s3Client.getObjectAsBytes(GetObjectRequest.builder().bucket("test").key("test").build()).futureValue response.asUtf8String() shouldBe value } } }
Example 95
Source File: UnitSpec.scala From kafka-serialization with Apache License 2.0 | 5 votes |
package com.ovoenergy.kafka.serialization.testkit import org.scalacheck.{Arbitrary, Gen} import org.scalacheck.Arbitrary._ import org.scalatest.concurrent.{ScalaFutures, ScaledTimeSpans} import org.scalatest.prop.PropertyChecks import org.scalatest.{Matchers, WordSpec} object UnitSpec { case class Event(id: String, name: String) implicit val arbString: Arbitrary[String] = Arbitrary(for { length <- Gen.chooseNum(3, 64) chars <- Gen.listOfN(length, Gen.alphaNumChar) } yield chars.mkString) implicit val arbEvent: Arbitrary[Event] = Arbitrary(for { id <- arbitrary[String] name <- arbitrary[String] } yield Event(id, name)) } abstract class UnitSpec extends WordSpec with Matchers with PropertyChecks with ScalaFutures with ScaledTimeSpans { override lazy val spanScaleFactor: Double = sys.env.get("TEST_TIME_FACTOR").map(_.toDouble).getOrElse(super.spanScaleFactor) }
Example 96
Source File: LagSim.scala From kafka-lag-exporter with Apache License 2.0 | 5 votes |
package com.lightbend.kafkalagexporter.integration import akka.actor.Cancellable import akka.actor.typed.scaladsl.Behaviors import akka.actor.typed.{Behavior, PostStop} import akka.kafka.{CommitterSettings, Subscriptions} import akka.kafka.scaladsl.{Committer, Consumer} import akka.kafka.testkit.scaladsl.KafkaSpec import akka.stream.OverflowStrategy import akka.stream.scaladsl.Keep import akka.stream.testkit.scaladsl.TestSink import org.scalatest.concurrent.ScalaFutures import scala.concurrent.Await import scala.concurrent.duration._ trait LagSim extends KafkaSpec with ScalaFutures { private implicit val patience: PatienceConfig = PatienceConfig(30.seconds, 1.second) class LagSimulator(topic: String, group: String) { private var offset: Int = 0 private val committerSettings = CommitterSettings(system).withMaxBatch(1).withParallelism(1) private lazy val (consumerControl, consumerProbe) = Consumer .committableSource(consumerDefaults.withGroupId(group), Subscriptions.topics(topic)) .buffer(size = 1, OverflowStrategy.backpressure) .map { elem => log.debug("Committing elem with offset: {}", elem.committableOffset.partitionOffset) elem.committableOffset.commitScaladsl() } .toMat(TestSink.probe)(Keep.both) .run() def produceElements(num: Int): Unit = { Await.result(produce(topic, offset to (offset + num)), remainingOrDefault) offset += num + 1 } // TODO: Replace this with regular Kafka Consumer for more fine-grained control over committing def consumeElements(num: Int): Unit = { consumerProbe .request(num) .expectNextN(num) } def shutdown(): Unit = { consumerControl.shutdown().futureValue consumerProbe.cancel() } } sealed trait Simulator case class Tick(produce: Int, consume: Int) extends Simulator def lagSimActor(simulator: LagSimulator, scheduledTick: Cancellable = Cancellable.alreadyCancelled): Behavior[Simulator] = Behaviors.receive[Simulator] { case (context, tick @ Tick(produce, consume)) => simulator.produceElements(produce) simulator.consumeElements(consume) lagSimActor(simulator, context.scheduleOnce(1 second, context.self, tick)) } receiveSignal { case (_, PostStop) => simulator.shutdown() scheduledTick.cancel() Behaviors.same } }
Example 97
Source File: PrometheusUtils.scala From kafka-lag-exporter with Apache License 2.0 | 5 votes |
package com.lightbend.kafkalagexporter.integration import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model.{HttpRequest, HttpResponse, StatusCodes} import akka.http.scaladsl.unmarshalling.Unmarshal import akka.stream.Materializer import com.lightbend.kafkalagexporter.MetricsSink.GaugeDefinition import org.scalatest.Matchers import org.scalatest.concurrent.ScalaFutures import org.slf4j.{Logger, LoggerFactory} import scala.concurrent.{ExecutionContext, Future} import scala.util.matching.Regex val regex = s"""$name\\{$labels.*\\}\\s+(-?.+)""".r log.debug(s"Created regex: {}", regex.pattern.toString) Rule(regex, assertion) } } case class Rule(regex: Regex, assertion: String => _) case class Result(rule: Rule, groupResults: List[String]) { def assertDne(): Unit = { log.debug(s"Rule: ${rule.regex.toString}") groupResults.length shouldBe 0 } def assert(): Unit = { log.debug(s"Rule: ${rule.regex.toString}") groupResults.length shouldBe 1 log.debug(s"Actual value is ${groupResults.head}") rule.assertion(groupResults.head) } } }
Example 98
Source File: SpecBase.scala From kafka-lag-exporter with Apache License 2.0 | 5 votes |
package com.lightbend.kafkalagexporter.integration import akka.actor.typed.ActorSystem import akka.kafka.testkit.scaladsl.{EmbeddedKafkaLike, ScalatestKafkaSpec} import com.lightbend.kafkalagexporter.MainApp import com.lightbend.kafkalagexporter.KafkaClusterManager import com.typesafe.config.{Config, ConfigFactory} import net.manub.embeddedkafka.EmbeddedKafkaConfig import org.scalatest.concurrent.{Eventually, ScalaFutures} import org.scalatest.{BeforeAndAfterEach, Matchers, WordSpecLike} import scala.concurrent.Await import scala.concurrent.duration._ abstract class SpecBase(kafkaPort: Int, val exporterPort: Int) extends ScalatestKafkaSpec(kafkaPort) with WordSpecLike with BeforeAndAfterEach with EmbeddedKafkaLike with Matchers with ScalaFutures with Eventually with PrometheusUtils with LagSim { override def createKafkaConfig: EmbeddedKafkaConfig = EmbeddedKafkaConfig(kafkaPort, zooKeeperPort, Map( "offsets.topic.replication.factor" -> "1" )) var kafkaLagExporter: ActorSystem[KafkaClusterManager.Message] = _ val clusterName = "default" val config: Config = ConfigFactory.parseString(s""" |kafka-lag-exporter { | port: $exporterPort | clusters = [ | { | name: "$clusterName" | bootstrap-brokers: "localhost:$kafkaPort" | } | ] | poll-interval = 5 seconds | lookup-table-size = 20 |}""".stripMargin).withFallback(ConfigFactory.load()) override def beforeEach(): Unit = { kafkaLagExporter = MainApp.start(config) } override def afterEach(): Unit = { kafkaLagExporter ! KafkaClusterManager.Stop Await.result(kafkaLagExporter.whenTerminated, 10 seconds) } }
Example 99
Source File: AkkaHttpCustomHeadersTest.scala From guardrail with MIT License | 5 votes |
package generators.AkkaHttp.RoundTrip import akka.actor.ActorSystem import akka.http.scaladsl.server.{ Route } import akka.stream.ActorMaterializer import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.SpanSugar._ import org.scalatest.{ EitherValues, FlatSpec, Matchers } import scala.concurrent.ExecutionContext.Implicits.global import tests.customTypes.customHeader.client.akkaHttp.Client import tests.customTypes.customHeader.client.akkaHttp.{ definitions => cdefs } import tests.customTypes.customHeader.server.akkaHttp.Implicits.Formatter import tests.customTypes.customHeader.server.akkaHttp.{ definitions => sdefs, Handler, Resource } import scala.concurrent.Future class AkkaHttpCustomHeadersTest extends FlatSpec with Matchers with ScalaFutures with EitherValues { override implicit val patienceConfig = PatienceConfig(10 seconds, 1 second) it should "encode custom headers" in { Formatter.show(sdefs.Bar.V1) shouldBe "v1" Formatter.show(sdefs.Bar.ILikeSpaces) shouldBe "i like spaces" } it should "round-trip encoded values" in { implicit val as = ActorSystem() implicit val mat = ActorMaterializer() val client = Client.httpClient(Route.asyncHandler(Resource.routes(new Handler { def getFoo(respond: Resource.GetFooResponse.type)( header: String, longHeader: Long, customHeader: sdefs.Bar, customOptionHeader: Option[sdefs.Bar], missingCustomOptionHeader: Option[sdefs.Bar] ): Future[Resource.GetFooResponse] = (header, longHeader, customHeader, customOptionHeader, missingCustomOptionHeader) match { case ("foo", 5L, sdefs.Bar.V1, Some(sdefs.Bar.V2), None) => Future.successful(respond.OK) case _ => Future.successful(respond.BadRequest) } }))) client.getFoo("foo", 5L, cdefs.Bar.V1, Some(cdefs.Bar.V2), None).value.futureValue.right.value } }
Example 100
Source File: Issue121.scala From guardrail with MIT License | 5 votes |
package core.issues import akka.http.scaladsl.model._ import akka.http.scaladsl.model.headers.RawHeader import akka.http.scaladsl.server._ import akka.http.scaladsl.testkit.ScalatestRouteTest import akka.http.scaladsl.unmarshalling.Unmarshaller import cats.instances.future._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.SpanSugar._ import org.scalatest.{ EitherValues, FunSuite, Matchers } import scala.concurrent.Future import io.circe._ class Issue121Suite extends FunSuite with Matchers with EitherValues with ScalaFutures with ScalatestRouteTest { override implicit val patienceConfig = PatienceConfig(10 seconds, 1 second) test("akka-http server can respond with 204") { import issues.issue121.server.akkaHttp.{ Handler, Resource } val route = Resource.routes(new Handler { override def deleteFoo(respond: Resource.DeleteFooResponse.type)(id: Long): Future[Resource.DeleteFooResponse] = Future.successful(respond.NoContent) }) Delete("/entity").withEntity(FormData("id" -> "1234").toEntity) ~> route ~> check { status should equal(StatusCodes.NoContent) response.entity.contentType should equal(ContentTypes.NoContentType) response.entity.contentLengthOption should equal(Some(0)) } } test("akka-http client can respond with 204") { import issues.issue121.client.akkaHttp.Client def noContentResponse: HttpRequest => Future[HttpResponse] = _ => Future.successful(HttpResponse(204)) Client .httpClient(noContentResponse, "http://localhost:80") .deleteFoo(1234) .fold( _ => failTest("Error"), _.fold( handleNoContent = () ) ) .futureValue } }
Example 101
Source File: Issue184.scala From guardrail with MIT License | 5 votes |
package core.issues import akka.http.scaladsl.model._ import akka.http.scaladsl.model.headers.RawHeader import akka.http.scaladsl.server._ import akka.http.scaladsl.testkit.ScalatestRouteTest import akka.http.scaladsl.unmarshalling.Unmarshaller import cats.instances.future._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.SpanSugar._ import org.scalatest.{ EitherValues, FunSuite, Matchers } import scala.concurrent.Future import io.circe._ Delete("/1234?query=2345") .withEntity( Multipart .FormData( Multipart.FormData.BodyPart.Strict("form", "3456") ) .toEntity ) ~> route ~> check { response.status shouldBe (StatusCodes.NoContent) } } }
Example 102
Source File: Issue143.scala From guardrail with MIT License | 5 votes |
package core.issues import _root_.issues.issue143.server.akkaHttp.{ Handler, Resource } import akka.http.scaladsl.model._ import akka.http.scaladsl.server._ import akka.http.scaladsl.testkit.ScalatestRouteTest import akka.stream.scaladsl.Source import cats.implicits._ import java.io.File import org.scalatest.concurrent.ScalaFutures import org.scalatest.{ EitherValues, FunSuite, Matchers } import scala.concurrent.Future import scala.concurrent.duration._ class Issue143 extends FunSuite with Matchers with EitherValues with ScalaFutures with ScalatestRouteTest { override implicit val patienceConfig = PatienceConfig(10.seconds, 1.second) override def testConfigSource = s""" |akka.loglevel = OFF """.stripMargin test("Ensure that failed uploads are cleaned up afterwards") { val tempDest = File.createTempFile("guardrail.", ".dat") val route = Resource.routes(new Handler { def uploadFile( respond: Resource.UploadFileResponse.type )(file: (File, Option[String], akka.http.scaladsl.model.ContentType)): Future[Resource.UploadFileResponse] = Future.successful(respond.Created) def uploadFileMapFileField(fieldName: String, fileName: Option[String], contentType: akka.http.scaladsl.model.ContentType): java.io.File = tempDest }) val chunks = 1000 val data = "foo" val contentLength = chunks * data.length val req = Post("/file").withEntity( Multipart .FormData( Multipart.FormData.BodyPart( "file", HttpEntity( ContentTypes.`text/plain(UTF-8)`, contentLength, Source.fromIterator(() => List.fill(chunks)(akka.util.ByteString.fromString(data)).toIterator) ) ) ) .toEntity .withSizeLimit(1001) ) // Working around https://github.com/akka/akka-http/issues/2381 // The following test fails under some 2.11.12 configurations // (fails in TravisCI, passes in OSX; may be related to filesystem or // other system particulars) // req ~> route ~> check { // status should equal(StatusCodes.RequestEntityTooLarge) // tempDest.exists() should equal(false) // } // The following workaround seems to work: val resp = Route.asyncHandler(route).apply(req).futureValue resp.status should equal(StatusCodes.RequestEntityTooLarge) tempDest.exists() should equal(false) } }
Example 103
Source File: Issue121.scala From guardrail with MIT License | 5 votes |
package core.issues import cats.effect.IO import cats.data.Kleisli import org.http4s._ import org.http4s.client.{ Client => Http4sClient } import org.http4s.client.blaze._ import org.http4s.headers._ import org.http4s.implicits._ import org.http4s.multipart._ import cats.instances.future._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.SpanSugar._ import org.scalatest.{ EitherValues, FunSuite, Matchers } import io.circe._ class Issue121Suite extends FunSuite with Matchers with EitherValues with ScalaFutures { override implicit val patienceConfig = PatienceConfig(10 seconds, 1 second) test("http4s server can respond with 204") { import issues.issue121.server.http4s.{ DeleteFooResponse, Handler, Resource } val route = new Resource[IO]().routes(new Handler[IO] { override def deleteFoo(respond: DeleteFooResponse.type)(id: Long): IO[DeleteFooResponse] = IO.pure(respond.NoContent) }) val client = Http4sClient.fromHttpApp[IO](route.orNotFound) val req = Request[IO](method = Method.DELETE, uri = Uri.unsafeFromString("/entity")).withEntity(UrlForm("id" -> "1234")) client .fetch(req)({ case Status.NoContent(resp) => IO.pure({ resp.status should equal(Status.NoContent) resp.contentType should equal(None) resp.contentLength should equal(None) () }) }) .unsafeRunSync() } test("http4s client can respond with 204") { import issues.issue121.client.http4s.Client def noContentResponse: Http4sClient[IO] = Http4sClient.fromHttpApp[IO](Kleisli.pure(Response[IO](Status.NoContent))) Client .httpClient(noContentResponse, "http://localhost:80") .deleteFoo(1234) .attempt .unsafeRunSync() .fold( _ => fail("Error"), _.fold( handleNoContent = () ) ) } }
Example 104
Source File: Issue542.scala From guardrail with MIT License | 5 votes |
package core.issues import cats.effect.IO import cats.data.Kleisli import org.http4s._ import org.http4s.circe._ import org.http4s.client.{ Client => Http4sClient } import org.http4s.headers._ import org.http4s.implicits._ import cats.instances.future._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.SpanSugar._ import org.scalatest.{ EitherValues, FunSuite, Matchers, OptionValues } import tests.scalatest.EitherTValues class Issue542Suite extends FunSuite with Matchers with EitherValues with ScalaFutures with EitherTValues with OptionValues { override implicit val patienceConfig = PatienceConfig(10 seconds, 1 second) test("base64 bytes can be sent") { import base64.server.http4s.{ FooResponse, Handler, Resource } import base64.server.http4s.definitions.Foo import base64.server.http4s.Implicits.Base64String val route = new Resource[IO]().routes(new Handler[IO] { def foo(respond: FooResponse.type)(): IO[FooResponse] = IO.pure(respond.Ok(Foo(Some(new Base64String("foo".getBytes()))))) }) val client = Http4sClient.fromHttpApp[IO](route.orNotFound) val req = Request[IO](method = Method.GET, uri = Uri.unsafeFromString("/foo")) client .fetch(req)({ case Status.Ok(resp) => resp.status should equal(Status.Ok) resp.contentType should equal(Some(`Content-Type`(MediaType.application.json))) resp.contentLength should equal(Some(16)) jsonOf[IO, Foo].decode(resp, strict = false).rightValue }) .unsafeRunSync() .value .value .data should equal("foo".getBytes()) } test("base64 bytes can be received") { import base64.client.http4s.Client import base64.client.http4s.definitions.Foo import base64.client.http4s.Implicits.Base64String import org.http4s.dsl._ def staticClient: Http4sClient[IO] = { implicit val fooOkEncoder = jsonEncoderOf[IO, Foo] val response = new Http4sDsl[IO] { def route: HttpApp[IO] = Kleisli.liftF(Ok(Foo(Some(Base64String("foo".getBytes()))))) } Http4sClient.fromHttpApp[IO](response.route) } Client .httpClient(staticClient, "http://localhost:80") .foo() .attempt .unsafeRunSync() .fold( _ => fail("Error"), _.fold( handleOk = _.value.value.data should equal("foo".getBytes()) ) ) } }
Example 105
Source File: Issue455.scala From guardrail with MIT License | 5 votes |
package core.issues import cats.implicits._ import org.http4s.implicits._ import org.scalatest.{ EitherValues, FunSuite, Matchers } import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.SpanSugar._ import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import cats.effect.Async import cats.effect.implicits._ import cats.effect.IO import org.http4s.client.{ Client => Http4sClient } class Issue455Suite extends FunSuite with Matchers with EitherValues with ScalaFutures { override implicit val patienceConfig = PatienceConfig(10 seconds, 1 second) test("Circe NPE: https://github.com/circe/circe/issues/561") { val route = { import issues.issue455.server.http4s.{ BooResponse, Handler, Resource } import issues.issue455.server.http4s.definitions.RecursiveData new Resource[IO].routes(new Handler[IO] { val recData = RecursiveData(3, "three", Some(RecursiveData(2, "two", Some(RecursiveData(1, "one", None))))) def boo(respond: BooResponse.type)(body: RecursiveData): IO[BooResponse] = IO.pure(respond.Ok(recData)) }) } { import issues.issue455.client.http4s.Client import issues.issue455.client.http4s.definitions.RecursiveData val recData = RecursiveData(3, "three", Some(RecursiveData(2, "two", Some(RecursiveData(1, "one", None))))) val client = Client.httpClient(Http4sClient.fromHttpApp[IO](route.orNotFound)) val resp = client.boo(recData).unsafeToFuture.futureValue resp.fold(handleOk = { case `recData` => () case data => fail(s"${data} != ${recData}") }) } } }
Example 106
Source File: NotebookDaoImplIntegSpec.scala From seahorse with Apache License 2.0 | 5 votes |
package ai.deepsense.workflowmanager.storage.impl import scala.concurrent.{Await, Future} import org.apache.commons.lang3.RandomStringUtils import org.scalatest.concurrent.ScalaFutures import org.scalatest.mockito.MockitoSugar import org.scalatest.{BeforeAndAfter, Matchers} import ai.deepsense.commons.StandardSpec import ai.deepsense.commons.utils.Logging import ai.deepsense.graph.Node import ai.deepsense.models.workflows.Workflow import ai.deepsense.workflowmanager.storage.GraphJsonTestSupport class NotebookDaoImplIntegSpec extends StandardSpec with ScalaFutures with MockitoSugar with Matchers with BeforeAndAfter with GraphJsonTestSupport with SlickTestSupport with Logging { var notebooksDao: NotebookDaoImpl = _ val n1@(notebook1Id, node1Id, notebook1) = createNotebook() val n2@(notebook2Id, node2Id, notebook2) = createNotebook() val n3@(notebook3Id, node3Id, notebook3) = createNotebook() val n4 = (notebook1Id, node2Id, notebook2) val storedNotebooks = Set(n1, n2, n4) before { notebooksDao = new NotebookDaoImpl(db, driver) } "NotebooksDao" should { "find notebook by id" in withStoredNotebooks(storedNotebooks) { whenReady(notebooksDao.get(notebook1Id, node1Id)) { notebook => notebook shouldBe Some(notebook1) } } "get all notebooks for workflow" in withStoredNotebooks(storedNotebooks) { whenReady(notebooksDao.getAll(notebook1Id)) { notebooks => notebooks.size shouldBe 2 notebooks.get(node1Id) shouldBe Some(notebook1) notebooks.get(node2Id) shouldBe Some(notebook2) } } "return None if notebook does not exist" in withStoredNotebooks(storedNotebooks) { whenReady(notebooksDao.get(notebook3Id, node3Id)) { notebook => notebook shouldBe None } } "create notebook" in withStoredNotebooks(storedNotebooks) { whenReady(notebooksDao.save(notebook3Id, node3Id, notebook3)) { _ => whenReady(notebooksDao.get(notebook3Id, node3Id)) { notebook => notebook shouldBe Some(notebook3) } } } "update notebook" in withStoredNotebooks(storedNotebooks) { val modifiedNotebook2 = "modified" whenReady(notebooksDao.save(notebook2Id, node2Id, modifiedNotebook2)) { _ => whenReady(notebooksDao.get(notebook2Id, node2Id)) { notebook => notebook shouldBe Some(modifiedNotebook2) } } } } private def withStoredNotebooks( storedNotebooks: Set[(Workflow.Id, Node.Id, String)])(testCode: => Any): Unit = { Await.ready(notebooksDao.create(), operationDuration) val s = Future.sequence(storedNotebooks.map { case (workflowId, nodeId, notebook) => notebooksDao.save(workflowId, nodeId, notebook) }) Await.ready(s, operationDuration) try { testCode } finally { Await.ready(notebooksDao.drop(), operationDuration) } } def createNotebook(): (Workflow.Id, Node.Id, String) = { (Workflow.Id.randomId, Node.Id.randomId, RandomStringUtils.randomAlphanumeric(16)) } }
Example 107
Source File: IdentitiesRoutesSpec.scala From nexus-iam with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.iam.routes import akka.http.scaladsl.model.StatusCodes import akka.http.scaladsl.model.headers.OAuth2BearerToken import akka.http.scaladsl.testkit.ScalatestRouteTest import ch.epfl.bluebrain.nexus.commons.test.Resources import ch.epfl.bluebrain.nexus.iam.auth.{AccessToken, TokenRejection} import ch.epfl.bluebrain.nexus.iam.config.{AppConfig, Settings} import ch.epfl.bluebrain.nexus.iam.marshallers.instances._ import ch.epfl.bluebrain.nexus.iam.realms._ import ch.epfl.bluebrain.nexus.iam.testsyntax._ import ch.epfl.bluebrain.nexus.iam.types.Caller import ch.epfl.bluebrain.nexus.iam.types.IamError.InvalidAccessToken import ch.epfl.bluebrain.nexus.iam.types.Identity.{Anonymous, Authenticated, User} import com.typesafe.config.{Config, ConfigFactory} import io.circe.Json import monix.eval.Task import org.mockito.matchers.MacroBasedMatchers import org.mockito.{IdiomaticMockito, Mockito} import org.scalatest.BeforeAndAfter import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike import scala.concurrent.duration._ //noinspection TypeAnnotation class IdentitiesRoutesSpec extends AnyWordSpecLike with Matchers with ScalatestRouteTest with BeforeAndAfter with MacroBasedMatchers with Resources with ScalaFutures with IdiomaticMockito { override implicit def patienceConfig: PatienceConfig = PatienceConfig(3.seconds, 100.milliseconds) override def testConfig: Config = ConfigFactory.load("test.conf") private val appConfig: AppConfig = Settings(system).appConfig private implicit val http = appConfig.http private val realms: Realms[Task] = mock[Realms[Task]] before { Mockito.reset(realms) } "The IdentitiesRoutes" should { val routes = Routes.wrap(new IdentitiesRoutes(realms).routes) "return forbidden" in { val err = InvalidAccessToken(TokenRejection.InvalidAccessToken) realms.caller(any[AccessToken]) shouldReturn Task.raiseError(err) Get("/identities").addCredentials(OAuth2BearerToken("token")) ~> routes ~> check { status shouldEqual StatusCodes.Unauthorized } } "return anonymous" in { realms.caller(any[AccessToken]) shouldReturn Task.pure(Caller.anonymous) Get("/identities") ~> routes ~> check { status shouldEqual StatusCodes.OK responseAs[Json].sort shouldEqual jsonContentOf("/identities/anonymous.json") } } "return all identities" in { val user = User("theuser", "therealm") val auth = Authenticated("therealm") val caller = Caller(user, Set(user, Anonymous, auth)) realms.caller(any[AccessToken]) shouldReturn Task.pure(caller) Get("/identities").addCredentials(OAuth2BearerToken("token")) ~> routes ~> check { status shouldEqual StatusCodes.OK responseAs[Json].sort shouldEqual jsonContentOf("/identities/identities.json") } } } }
Example 108
Source File: RealmDirectivesSpec.scala From nexus-iam with Apache License 2.0 | 5 votes |
package ch.epfl.bluebrain.nexus.iam.directives import java.net.URLEncoder import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.Route import akka.http.scaladsl.testkit.ScalatestRouteTest import ch.epfl.bluebrain.nexus.commons.http.JsonLdCirceSupport._ import ch.epfl.bluebrain.nexus.commons.test.EitherValues import ch.epfl.bluebrain.nexus.iam.directives.RealmDirectives._ import ch.epfl.bluebrain.nexus.iam.routes.SearchParams import ch.epfl.bluebrain.nexus.rdf.Iri.AbsoluteIri import ch.epfl.bluebrain.nexus.rdf.implicits._ import io.circe.generic.auto._ import org.mockito.IdiomaticMockito import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike class RealmDirectivesSpec extends AnyWordSpecLike with ScalatestRouteTest with Matchers with ScalaFutures with EitherValues with IdiomaticMockito { private def route: Route = { (get & searchParams) { params => complete(params) } } private def encode(s: AbsoluteIri) = URLEncoder.encode(s.asString, "UTF-8") "Realm directives" should { "return query params" in { val createdBy: AbsoluteIri = url"http://example.com/created" val updatedBy: AbsoluteIri = url"http://example.com/updated" val tpe: AbsoluteIri = url"http://example.com/tpe" val tpe2: AbsoluteIri = url"http://example.com/tpe2" Get( s"/?rev=2&deprecated=true&type=${encode(tpe)}&type=${encode(tpe2)}&createdBy=${encode(createdBy)}&updatedBy=${encode(updatedBy)}" ) ~> route ~> check { responseAs[SearchParams] shouldEqual SearchParams( Some(true), Some(2L), Some(createdBy), Some(updatedBy), Set(tpe, tpe2) ) } } } }
Example 109
Source File: PlayScalaTestSpec.scala From play-grpc with Apache License 2.0 | 5 votes |
package play.grpc.scalatest import io.grpc.Status import org.scalatest.concurrent.IntegrationPatience import org.scalatest.concurrent.ScalaFutures import org.scalatestplus.play.PlaySpec import org.scalatestplus.play.guice.GuiceOneServerPerTest import play.api.Application import play.api.inject.bind import play.api.inject.guice.GuiceApplicationBuilder import play.api.libs.ws.WSClient import play.api.routing.Router import akka.grpc.internal.GrpcProtocolNative import example.myapp.helloworld.grpc.helloworld._ class PlayScalaTestSpec extends PlaySpec with GuiceOneServerPerTest with ServerGrpcClient with ScalaFutures with IntegrationPatience { override def fakeApplication(): Application = { GuiceApplicationBuilder() .overrides(bind[Router].to[GreeterServiceImpl]) .build() } implicit def ws: WSClient = app.injector.instanceOf(classOf[WSClient]) "A Play server bound to a gRPC router" must { "give a 404 when routing a non-gRPC request" in { val result = wsUrl("/").get.futureValue result.status must be(404) // Maybe should be a 426, see #396 } "give a 415 error when not using a gRPC content-type" in { val result = wsUrl(s"/${GreeterService.name}/FooBar").get.futureValue result.status must be(415) } "give a grpc 'unimplemented' error when routing a non-existent gRPC method" in { val result = wsUrl(s"/${GreeterService.name}/FooBar") .addHttpHeaders("Content-Type" -> GrpcProtocolNative.contentType.toString) .get .futureValue result.status must be(200) // Maybe should be a 426, see #396 result.header("grpc-status") mustEqual Some(Status.Code.UNIMPLEMENTED.value().toString) } "give a grpc 'invalid argument' error when routing an empty request to a gRPC method" in { val result = wsUrl(s"/${GreeterService.name}/SayHello") .addHttpHeaders("Content-Type" -> GrpcProtocolNative.contentType.toString) .get .futureValue result.status must be(200) result.header("grpc-status") mustEqual Some(Status.Code.INVALID_ARGUMENT.value().toString) } "work with a gRPC client" in withGrpcClient[GreeterServiceClient] { client: GreeterServiceClient => val reply = client.sayHello(HelloRequest("Alice")).futureValue reply.message must be("Hello, Alice!") } } }
Example 110
Source File: AkkaHttpHelpersTest.scala From akka-viz with MIT License | 5 votes |
package akkaviz.server import akka.actor.ActorSystem import akka.http.scaladsl.marshalling.Marshaller import akka.http.scaladsl.marshalling.Marshalling.WithFixedContentType import akka.http.scaladsl.model.MediaTypes import akka.http.scaladsl.testkit.ScalatestRouteTest import akka.stream.ActorMaterializer import akka.stream.scaladsl._ import akka.stream.testkit.scaladsl._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FunSuite, Matchers} import scala.concurrent.duration._ class AkkaHttpHelpersTest extends FunSuite with Matchers with ScalaFutures with ScalatestRouteTest { import AkkaHttpHelpers._ override implicit val patienceConfig: PatienceConfig = PatienceConfig(10.seconds) private[this] implicit val system: ActorSystem = ActorSystem() private[this] implicit val materializer = ActorMaterializer()(system) private[this] implicit val marshaller = Marshaller.strict[Int, String] { received => WithFixedContentType(MediaTypes.`application/json`, () => String.valueOf(received)) } test("Should work for empty Source") { whenReady(Source.empty[Int].via(asJsonArray).map(_.data.utf8String).runReduce(_ + _)) { _ shouldBe "[]" } } test("Should work for single element in Source") { whenReady(Source.single(1).via(asJsonArray).map(_.data.utf8String).runReduce(_ + _)) { _ shouldBe "[1]" } } test("Should work for multiple elements element in Source") { whenReady(Source(List(1, 2, 3)).via(asJsonArray).map(_.data.utf8String).runReduce(_ + _)) { _ shouldBe "[1,2,3]" } } test("asJsonArray is incremental") { val (pub, sub) = TestSource.probe[Int] .via(asJsonArray) .map(_.data().utf8String) .toMat(TestSink.probe[String])(Keep.both) .run() pub.sendNext(1) sub.request(10) sub.expectNext("[") pub.sendNext(2) sub.expectNext("1") pub.sendNext(3) sub.expectNext(",2") pub.sendComplete() sub.expectNext(",3") sub.expectNext("]") sub.expectComplete() } test("completeAsJson works properly") { val source = Source(List(1, 2, 3)) Get() ~> completeAsJson(source) ~> check { chunks should have size (5) responseAs[String] shouldEqual "[1,2,3]" } } }
Example 111
Source File: ProtocolSerializationSupportTest.scala From akka-viz with MIT License | 5 votes |
package akkaviz.server import akka.actor.ActorSystem import akka.http.scaladsl.model.ws.BinaryMessage import akka.stream.ActorMaterializer import akka.stream.scaladsl.{Sink, Source} import akka.util.ByteString import akkaviz.protocol.{IO, Killed, SetEnabled} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FunSuite, Matchers} import scala.concurrent.duration._ class ProtocolSerializationSupportTest extends FunSuite with ScalaFutures with Matchers { private[this] implicit val system = ActorSystem() private[this] implicit val materializer = ActorMaterializer() override implicit val patienceConfig: PatienceConfig = PatienceConfig(10.seconds) import ProtocolSerializationSupport._ test("websocketMessageToClientMessage") { val msg = SetEnabled(true) val wsMessage = BinaryMessage(ByteString(IO.write(msg))) val res = Source.single(wsMessage).via(websocketMessageToClientMessage).runWith(Sink.head) whenReady(res) { _ shouldBe msg } } test("protocolServerMessageToByteString") { val msg = Killed("ref") val res = Source.single(msg).via(protocolServerMessageToByteString).runWith(Sink.head) whenReady(res) { serialized => IO.readServer(serialized.asByteBuffer) shouldBe msg } } }
Example 112
Source File: ThroughputMeasurementFlowTest.scala From akka-viz with MIT License | 5 votes |
package akkaviz.events import akka.actor.{ActorRef, ActorSystem} import akka.pattern import akka.stream.ActorMaterializer import akka.stream.scaladsl.{Keep, Sink, Source} import akka.testkit.{TestActorRef, TestKit} import akkaviz.events.types.{BackendEvent, ReceivedWithId, ThroughputMeasurement} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpecLike} import scala.concurrent.Future class ThroughputMeasurementFlowTest extends TestKit(ActorSystem("FlowTestSystem")) with WordSpecLike with Matchers with ScalaFutures { import scala.concurrent.duration._ implicit val materializer = ActorMaterializer()(system) val firstRef = TestActorRef[SomeActor](new SomeActor, "first") val secondRef = TestActorRef[SomeActor](new SomeActor, "second") override implicit val patienceConfig = PatienceConfig(timeout = 5.seconds) "ThroughputMeasurementFlow" should { "not emit any measurements if there are no Received events" in { val src = Source.empty[BackendEvent] val sink: Sink[BackendEvent, Future[List[BackendEvent]]] = Sink.fold(List.empty[BackendEvent])((list, ev) => ev :: list) val materialized = ThroughputMeasurementFlow(1.second).runWith(src, sink)._2 whenReady(materialized) { r => r should be('empty) } } "emit proper measured value for one message" in { val src = Source.single(ReceivedWithId(1, ActorRef.noSender, firstRef, "sup", true)) val mat = src.via(ThroughputMeasurementFlow(1.second)) .toMat(Sink.head[ThroughputMeasurement])(Keep.right).run() whenReady(mat) { measurement => measurement.actorRef should equal(firstRef) measurement.msgsPerSecond should equal(1.0) } } "emit measured value for one message and 0 for actors which didn't receive anything" in { import system.dispatcher val src = Source(List( ReceivedWithId(1, ActorRef.noSender, firstRef, "sup", true), ReceivedWithId(2, ActorRef.noSender, secondRef, "sup", true) )).concat(Source.fromFuture(pattern.after(2.seconds, system.scheduler) { Future.successful(ReceivedWithId(3, ActorRef.noSender, firstRef, "sup", true)) })) val mat = src.via(ThroughputMeasurementFlow(1.second)) .toMat(Sink.fold(List.empty[ThroughputMeasurement]) { (list, ev) => ev :: list })(Keep.right).run() whenReady(mat) { measurements => val measurementsFor = measurements.groupBy(_.actorRef) measurementsFor(firstRef).map(_.msgsPerSecond) should not contain 0.0 measurementsFor(secondRef).sortBy(_.timestamp).map(_.msgsPerSecond) should contain inOrder (1.0, 0.0) } } } }
Example 113
Source File: UtilsSpec.scala From akka-http-extensions with Mozilla Public License 2.0 | 5 votes |
package akka.http.extensions import akka.http.extensions.utils.BiMap import org.scalatest.concurrent.ScalaFutures import org.scalatest._ class UtilsSpec extends WordSpec with ScalaFutures with Matchers { "bimap" should { val mp = BiMap(1->"one",2->"two",3->"three") "be identical" in { mp(1) should equal("one") mp.inverse("one") shouldEqual 1 } "add new elements" in { val mp2: BiMap[Int, String] = mp + (4->"four") mp2(4) shouldEqual "four" mp2(1) shouldEqual "one" val inv = mp2.inverse inv("four") shouldEqual 4 inv("one") shouldEqual 1 } "delete new elements" in { val mp3 = mp - 2 mp3.contains(2) shouldEqual false mp3.contains(3) shouldEqual true val inv = mp3.inverse inv.contains("two") shouldEqual false inv.contains("two") shouldEqual false } } }
Example 114
Source File: ExtensionsTestBase.scala From akka-http-extensions with Mozilla Public License 2.0 | 5 votes |
package akka.http.extensions import akka.http.extensions.security._ import akka.http.scaladsl.server._ import akka.http.scaladsl.testkit.ScalatestRouteTest import org.scalatest._ import org.scalatest.concurrent.ScalaFutures import scala.concurrent.duration._ class ExtensionsTestBase extends WordSpec with Directives with ScalaFutures with ScalatestRouteTest with Matchers { val anton = LoginInfo("anton", "test2test", "[email protected]") val paul = LoginInfo("paul", "test2paul", "[email protected]") val liz = LoginInfo("liz", "test2liz", "[email protected]") val timeout = 500 millis }
Example 115
Source File: PermissionSpec.scala From akka-http-extensions with Mozilla Public License 2.0 | 5 votes |
package akka.http.extensions import java.util.UUID import akka.http.extensions.security._ import akka.http.extensions.stubs.{InMemorySessionController, InMemoryLoginController} import akka.http.scaladsl.model.{DateTime, StatusCodes} import akka.http.scaladsl.model.StatusCodes._ import akka.http.scaladsl.model.headers.{HttpCookie, Cookie, `Set-Cookie`} import akka.http.scaladsl.server._ import akka.http.scaladsl.testkit.ScalatestRouteTest import org.scalatest.concurrent.ScalaFutures import org.scalatest.{WordSpec} import scala.collection.mutable import scala.concurrent.Future import scala.concurrent.duration._ import com.github.t3hnar.bcrypt._ class PermissionSpec extends ExtensionsTestBase with PermissionControllers { "application with authorization" should{ "check permissions" in { val loginController = new TestLoginController val sessionController = new TestSessionController import akka.http.scaladsl.server._ val logins = new Logins(loginController, sessionController) val routes = logins.routes Put("/users/register?username=anton&password=test2test&[email protected]") ~> Route.seal(routes) ~> check { status shouldEqual OK } val permission = new Permissions(sessionController,loginController) Put("/add/drug?name=potion1") ~> permission.routes ~> check { rejection } Put("/users/[email protected]&password=test2test") ~> logins.routes ~> check { status shouldEqual OK } val antonToken = sessionController.tokenByUsername(anton.username).get Put("/add/drug?name=potion1&kind=user") ~> Cookie("X-Token" -> antonToken) ~> permission.routes ~> check { status shouldEqual OK responseAs[String] shouldEqual s"drug potion1 added!" permission.drugs.contains("potion1") shouldEqual true } Put("/add/drug?name=potion2&kind=user") ~> permission.routes ~> check { rejection } val antonR = sessionController.userByToken(antonToken).get //get user with hashed password permission.add2realm(antonR,VIPRealm) permission.checkRights(antonR,SpecialRealm) shouldEqual false permission.checkRights(antonR,VIPRealm) shouldEqual true Put(s"/users/register?username=${liz.username}&password=${liz.password}&email=${liz.email}") ~> Route.seal(routes) ~> check { status shouldEqual OK } val lizToken = sessionController.tokenByUsername(liz.username).get val lizR = sessionController.userByToken(lizToken).get permission.add2realm(lizR,SpecialRealm) permission.checkRights(lizR,SpecialRealm) shouldEqual true permission.checkRights(lizR,VIPRealm) shouldEqual false Put("/add/drug?name=potion2&kind=special") ~> Cookie("X-Token" -> antonToken) ~> permission.routes ~> check { permission.drugs.contains("potion2") shouldEqual false rejection } Put("/add/drug?name=potion2&kind=special") ~> Cookie("X-Token" -> lizToken) ~> permission.routes ~> check { status shouldEqual OK permission.drugs.contains("potion2") shouldEqual true responseAs[String] shouldEqual s"drug potion2 added!" } Put("/add/drug?name=potion3&kind=vip") ~> Cookie("X-Token" -> lizToken) ~> permission.routes ~> check { // permission.drugs.contains("potion3") shouldEqual false rejection } Put("/add/drug?name=potion3&kind=vip") ~> Cookie("X-Token" -> antonToken) ~> permission.routes ~> check { status shouldEqual OK permission.drugs.contains("potion3") shouldEqual true responseAs[String] shouldEqual s"drug potion3 added!" } } } }
Example 116
Source File: AkkaPersistenceRuntimeSpec.scala From aecor with MIT License | 5 votes |
package aecor.tests import aecor.data.Tagging import aecor.runtime.akkapersistence.{ AkkaPersistenceRuntime, CassandraJournalAdapter } import aecor.tests.e2e._ import akka.actor.ActorSystem import akka.stream.ActorMaterializer import akka.stream.scaladsl.Sink import akka.testkit.TestKit import cats.effect.IO import cats.implicits._ import com.typesafe.config.{ Config, ConfigFactory } import org.scalatest.matchers.should.Matchers import org.scalatest.concurrent.ScalaFutures import org.scalatest.funsuite.AnyFunSuiteLike import scala.concurrent.duration._ object AkkaPersistenceRuntimeSpec { def conf: Config = ConfigFactory.parseString(s""" akka { cluster { seed-nodes = [ "akka.tcp://[email protected]:52000" ] } actor.provider = cluster remote { netty.tcp { hostname = 127.0.0.1 port = 52000 bind.hostname = "0.0.0.0" bind.port = 52000 } } } aecor.generic-akka-runtime.idle-timeout = 1s """).withFallback(CassandraLifecycle.config).withFallback(ConfigFactory.load()) } class AkkaPersistenceRuntimeSpec extends TestKit(ActorSystem("test", AkkaPersistenceRuntimeSpec.conf)) with AnyFunSuiteLike with Matchers with ScalaFutures with CassandraLifecycle { override def systemName = system.name override implicit val patienceConfig = PatienceConfig(30.seconds, 150.millis) val timer = IO.timer(system.dispatcher) implicit val contextShift = IO.contextShift(system.dispatcher) override def afterAll(): Unit = { TestKit.shutdownActorSystem(system) super.afterAll() } val runtime = AkkaPersistenceRuntime(system, CassandraJournalAdapter(system)) test("Runtime should work") { val deployCounters: IO[CounterId => Counter[IO]] = runtime.deploy( "Counter", CounterBehavior.instance[IO], Tagging.const[CounterId](CounterEvent.tag) ) val program = for { counters <- deployCounters first = counters(CounterId("1")) second = counters(CounterId("2")) _ <- first.increment _ <- second.increment _2 <- second.value _ <- first.decrement _1 <- first.value afterPassivation <- timer.sleep(2.seconds) >> second.value } yield (_1, _2, afterPassivation) program.unsafeRunSync() shouldEqual ((0L, 1L, 1L)) } test("Journal should work") { implicit val materializer = ActorMaterializer() val journal = runtime.journal[CounterId, CounterEvent] val entries = journal.currentEventsByTag(CounterEvent.tag, None).runWith(Sink.seq).futureValue val map = entries.map(_.event).groupBy(_.entityKey) map(CounterId("1")).size shouldBe 2 map(CounterId("2")).size shouldBe 1 } }
Example 117
Source File: GenericRuntimeSpec.scala From aecor with MIT License | 5 votes |
package aecor.runtime.akkageneric import akka.actor.ActorSystem import akka.testkit.TestKit import cats.effect.IO import cats.implicits._ import com.typesafe.config.{ Config, ConfigFactory } import org.scalatest.concurrent.ScalaFutures import org.scalatest.funsuite.AnyFunSuiteLike import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.should.Matchers import scala.concurrent.duration._ object GenericRuntimeSpec { def conf: Config = ConfigFactory.parseString(s""" cluster.system-name=test cluster.port = 51001 aecor.generic-akka-runtime.idle-timeout = 1s """).withFallback(ConfigFactory.load()) } class GenericRuntimeSpec extends TestKit(ActorSystem("test", GenericRuntimeSpec.conf)) with AnyFunSuiteLike with Matchers with ScalaFutures with BeforeAndAfterAll { implicit val contextShift = IO.contextShift(system.dispatcher) override implicit val patienceConfig = PatienceConfig(15.seconds, 150.millis) val timer = IO.timer(system.dispatcher) override def afterAll: Unit = TestKit.shutdownActorSystem(system) def runCounters(name: String): IO[CounterId => Counter[IO]] = GenericAkkaRuntime(system) .runBehavior[CounterId, Counter, IO](name, (_: CounterId) => Counter.inmem[IO]) test("routing") { val program = for { counters <- runCounters("CounterFoo") first = counters(CounterId("1")) second = counters(CounterId("2")) _ <- first.increment _2 <- second.increment _1 <- first.increment } yield (_1, _2) val (first, second) = program.unsafeRunSync() first shouldBe 2L second shouldBe 1L } test("passivation") { val program = for { counters <- runCounters("CounterBar") first = counters(CounterId("1")) _1 <- first.increment afterPassivation <- timer.sleep(2.seconds) >> first.value } yield (_1, afterPassivation) val (beforePassivation, afterPassivation) = program.unsafeRunSync() beforePassivation shouldBe 1 afterPassivation shouldBe 0 } }
Example 118
Source File: GreeterServiceSpec.scala From akka-grpc with Apache License 2.0 | 5 votes |
package example.myapp.helloworld import akka.actor.{ ActorSystem, ClassicActorSystemProvider } import akka.grpc.GrpcClientSettings import akka.stream.ActorMaterializer import com.typesafe.config.ConfigFactory import example.myapp.helloworld.grpc._ import org.junit.runner.RunWith import org.scalatest.BeforeAndAfterAll import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.time.Span import org.scalatest.wordspec.AnyWordSpecLike import org.scalatestplus.junit.JUnitRunner import scala.concurrent.Await import scala.concurrent.duration._ @RunWith(classOf[JUnitRunner]) class GreeterSpec extends Matchers with AnyWordSpecLike with BeforeAndAfterAll with ScalaFutures { implicit val patience = PatienceConfig(10.seconds, Span(100, org.scalatest.time.Millis)) implicit val serverSystem: ActorSystem = { // important to enable HTTP/2 in server ActorSystem's config val conf = ConfigFactory .parseString("akka.http.server.preview.enable-http2 = on") .withFallback(ConfigFactory.defaultApplication()) val sys = ActorSystem("GreeterServer", conf) // make sure servers are bound before using client new GreeterServer(sys).run().futureValue new PowerGreeterServer(sys).run().futureValue sys } val clientSystem = ActorSystem("GreeterClient") implicit val mat = ActorMaterializer.create(clientSystem) implicit val ec = clientSystem.dispatcher val clients = Seq(8080, 8081).map { port => GreeterServiceClient( GrpcClientSettings .connectToServiceAt("127.0.0.1", port)(clientSystem.asInstanceOf[ClassicActorSystemProvider]) .withTls(false))(clientSystem.asInstanceOf[ClassicActorSystemProvider]) } override def afterAll: Unit = { Await.ready(clientSystem.terminate(), 5.seconds) Await.ready(serverSystem.terminate(), 5.seconds) } "GreeterService" should { "reply to single request" in { val reply = clients.head.sayHello(HelloRequest("Alice")) reply.futureValue should ===(HelloReply("Hello, Alice")) } } "GreeterServicePowerApi" should { Seq( ("Authorization", "Hello, Alice (authenticated)"), ("WrongHeaderName", "Hello, Alice (not authenticated)")).zipWithIndex.foreach { case ((mdName, expResp), ix) => s"use metadata in replying to single request ($ix)" in { val reply = clients.last.sayHello().addHeader(mdName, "<some auth token>").invoke(HelloRequest("Alice")) reply.futureValue should ===(HelloReply(expResp)) } } } }
Example 119
Source File: ErrorReportingSpec.scala From akka-grpc with Apache License 2.0 | 5 votes |
package example.myapp.helloworld import akka.actor.{ ActorSystem, ClassicActorSystemProvider } import akka.grpc.internal.GrpcProtocolNative import akka.http.scaladsl.model.HttpEntity.{ Chunked, LastChunk } import akka.http.scaladsl.model._ import akka.http.scaladsl.model.headers.RawHeader import akka.http.scaladsl.{ Http, HttpConnectionContext } import akka.stream.ActorMaterializer import akka.stream.scaladsl.Sink import example.myapp.helloworld.grpc.{ GreeterService, GreeterServiceHandler } import io.grpc.Status import org.junit.runner.RunWith import org.scalatest.BeforeAndAfterAll import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.time.Span import org.scalatest.wordspec.AnyWordSpec import org.scalatestplus.junit.JUnitRunner import scala.concurrent.Await import scala.concurrent.duration._ @RunWith(classOf[JUnitRunner]) class ErrorReportingSpec extends AnyWordSpec with Matchers with ScalaFutures with BeforeAndAfterAll { override implicit val patienceConfig = PatienceConfig(5.seconds, Span(100, org.scalatest.time.Millis)) implicit val system: ActorSystem = ActorSystem() implicit val mat = ActorMaterializer() "A gRPC server" should { val binding = Http() .bindAndHandleAsync( GreeterServiceHandler(new GreeterServiceImpl())(system.asInstanceOf[ClassicActorSystemProvider]), interface = "127.0.0.1", port = 0, connectionContext = HttpConnectionContext()) .futureValue "respond with an 'unimplemented' gRPC error status when calling an unknown method" in { val request = HttpRequest( method = HttpMethods.POST, entity = HttpEntity.empty(GrpcProtocolNative.contentType), uri = s"http://localhost:${binding.localAddress.getPort}/${GreeterService.name}/UnknownMethod") val response = Http().singleRequest(request).futureValue response.status should be(StatusCodes.OK) allHeaders(response) should contain(RawHeader("grpc-status", Status.Code.UNIMPLEMENTED.value().toString)) } "respond with an 'invalid argument' gRPC error status when calling an method without a request body" in { val request = HttpRequest( method = HttpMethods.POST, entity = HttpEntity.empty(GrpcProtocolNative.contentType), uri = s"http://localhost:${binding.localAddress.getPort}/${GreeterService.name}/SayHello") val response = Http().singleRequest(request).futureValue response.status should be(StatusCodes.OK) allHeaders(response) should contain(RawHeader("grpc-status", Status.Code.INVALID_ARGUMENT.value().toString)) } def allHeaders(response: HttpResponse) = response.entity match { case Chunked(_, chunks) => chunks.runWith(Sink.last).futureValue match { case LastChunk(_, trailingHeaders) => response.headers ++ trailingHeaders case _ => response.headers } case _ => response.headers } } override def afterAll: Unit = Await.result(system.terminate(), 5.seconds) }
Example 120
Source File: ErrorReportingSpec.scala From akka-grpc with Apache License 2.0 | 5 votes |
package example.myapp.helloworld import akka.actor.ActorSystem import akka.grpc.internal.GrpcProtocolNative import akka.http.scaladsl.Http import akka.http.scaladsl.model._ import akka.http.scaladsl.model.HttpEntity.{ Chunked, LastChunk } import akka.http.scaladsl.model.headers.RawHeader import akka.stream.ActorMaterializer import akka.stream.scaladsl.Sink import example.myapp.helloworld.grpc.{ GreeterService, GreeterServiceHandlerFactory } import io.grpc.Status import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.Span import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec import scala.concurrent.Await import scala.concurrent.duration._ class ErrorReportingSpec extends AnyWordSpec with Matchers with ScalaFutures with BeforeAndAfterAll { implicit val sys = ActorSystem() override implicit val patienceConfig = PatienceConfig(5.seconds, Span(100, org.scalatest.time.Millis)) "A gRPC server" should { implicit val mat = ActorMaterializer() val handler = GreeterServiceHandlerFactory.create(new GreeterServiceImpl(mat), sys) val binding = { import akka.http.javadsl.{ ConnectHttp, Http } Http(sys).bindAndHandleAsync(handler, ConnectHttp.toHost("127.0.0.1", 0), mat).toCompletableFuture.get } "respond with an 'unimplemented' gRPC error status when calling an unknown method" in { val request = HttpRequest( method = HttpMethods.POST, entity = HttpEntity.empty(GrpcProtocolNative.contentType), uri = s"http://localhost:${binding.localAddress.getPort}/${GreeterService.name}/UnknownMethod") val response = Http().singleRequest(request).futureValue response.status should be(StatusCodes.OK) allHeaders(response) should contain(RawHeader("grpc-status", Status.Code.UNIMPLEMENTED.value().toString)) } "respond with an 'invalid argument' gRPC error status when calling an method without a request body" in { val request = HttpRequest( method = HttpMethods.POST, entity = HttpEntity.empty(GrpcProtocolNative.contentType), uri = s"http://localhost:${binding.localAddress.getPort}/${GreeterService.name}/SayHello") val response = Http().singleRequest(request).futureValue response.status should be(StatusCodes.OK) allHeaders(response) should contain(RawHeader("grpc-status", Status.Code.INVALID_ARGUMENT.value().toString)) } def allHeaders(response: HttpResponse) = response.entity match { case Chunked(_, chunks) => chunks.runWith(Sink.last).futureValue match { case LastChunk(_, trailingHeaders) => response.headers ++ trailingHeaders case _ => response.headers } case _ => response.headers } } override def afterAll: Unit = Await.result(sys.terminate(), 5.seconds) }
Example 121
Source File: JGreeterServiceSpec.scala From akka-grpc with Apache License 2.0 | 5 votes |
package example.myapp.helloworld import scala.concurrent.Await import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ import akka.actor.ActorSystem import akka.grpc.GrpcClientSettings import akka.stream.ActorMaterializer import com.typesafe.config.ConfigFactory import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.Span import example.myapp.helloworld.grpc._ import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpecLike class JGreeterServiceSpec extends Matchers with AnyWordSpecLike with BeforeAndAfterAll with ScalaFutures { implicit val patience = PatienceConfig(5.seconds, Span(100, org.scalatest.time.Millis)) implicit val serverSystem: ActorSystem = { // important to enable HTTP/2 in server ActorSystem's config val conf = ConfigFactory .parseString("akka.http.server.preview.enable-http2 = on") .withFallback(ConfigFactory.defaultApplication()) val sys = ActorSystem("GreeterServer", conf) // make sure servers are bound before using client GreeterServer.run(sys).toCompletableFuture.get PowerGreeterServer.run(sys).toCompletableFuture.get sys } val clientSystem = ActorSystem("GreeterClient") implicit val mat = ActorMaterializer.create(clientSystem) implicit val ec = clientSystem.dispatcher val clients = Seq(8090, 8091).map { port => GreeterServiceClient.create(GrpcClientSettings.connectToServiceAt("127.0.0.1", port).withTls(false), clientSystem) } override def afterAll: Unit = { Await.ready(clientSystem.terminate(), 5.seconds) Await.ready(serverSystem.terminate(), 5.seconds) } "GreeterService" should { "reply to single request" in { val reply = clients.head.sayHello(HelloRequest.newBuilder.setName("Alice").build()) reply.toCompletableFuture.get should ===(HelloReply.newBuilder.setMessage("Hello, Alice").build()) } } "GreeterServicePowerApi" should { Seq( ("Authorization", "Hello, Alice (authenticated)"), ("WrongHeaderName", "Hello, Alice (not authenticated)")).zipWithIndex.foreach { case ((mdName, expResp), ix) => s"use metadata in replying to single request ($ix)" in { val reply = clients.last .sayHello() .addHeader(mdName, "<some auth token>") .invoke(HelloRequest.newBuilder.setName("Alice").build()) reply.toCompletableFuture.get should ===(HelloReply.newBuilder.setMessage(expResp).build()) } } } }
Example 122
Source File: GrpcExceptionHandlerSpec.scala From akka-grpc with Apache License 2.0 | 5 votes |
package akka.grpc.scaladsl import akka.actor.ActorSystem import akka.grpc.GrpcServiceException import akka.grpc.internal.{ GrpcProtocolNative, GrpcResponseHelpers, Identity } import akka.grpc.scaladsl.GrpcExceptionHandler.defaultMapper import akka.http.scaladsl.model.HttpEntity._ import akka.http.scaladsl.model.HttpResponse import akka.stream.ActorMaterializer import io.grpc.Status import org.scalatest._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.time.{ Millis, Seconds, Span } import org.scalatest.wordspec.AnyWordSpec import scala.concurrent.{ ExecutionException, Future } class GrpcExceptionHandlerSpec extends AnyWordSpec with Matchers with ScalaFutures with BeforeAndAfterAll { implicit val system = ActorSystem("Test") implicit val materializer = ActorMaterializer() implicit override val patienceConfig = PatienceConfig(timeout = scaled(Span(2, Seconds)), interval = scaled(Span(5, Millis))) implicit val writer = GrpcProtocolNative.newWriter(Identity) val expected: Function[Throwable, Status] = { case e: ExecutionException => if (e.getCause == null) Status.INTERNAL else expected(e.getCause) case grpcException: GrpcServiceException => grpcException.status case _: NotImplementedError => Status.UNIMPLEMENTED case _: UnsupportedOperationException => Status.UNIMPLEMENTED case _ => Status.INTERNAL } val otherTypes: Seq[Throwable] = Seq( new GrpcServiceException(status = Status.DEADLINE_EXCEEDED), new NotImplementedError, new UnsupportedOperationException, new NullPointerException, new RuntimeException) val executionExceptions: Seq[Throwable] = otherTypes.map(new ExecutionException(_)) :+ new ExecutionException("doh", null) "defaultMapper" should { (otherTypes ++ executionExceptions).foreach { e => val exp = expected(e) s"Map $e to $exp" in { defaultMapper(system)(e).status shouldBe exp } } } "default(defaultMapper)" should { (otherTypes ++ executionExceptions).foreach { e => s"Correctly map $e" in { val exp = GrpcResponseHelpers.status(defaultMapper(system)(e)) val expChunks = getChunks(exp) val act = GrpcExceptionHandler.from(defaultMapper(system))(system, writer)(e).futureValue val actChunks = getChunks(act) // Following is because aren't equal act.status shouldBe exp.status actChunks.toString shouldEqual expChunks.toString } } } def getChunks(resp: HttpResponse): Seq[ChunkStreamPart] = (resp.entity match { case Chunked(_, chunks) => chunks.runFold(Seq.empty[ChunkStreamPart]) { case (seq, chunk) => seq :+ chunk } case _ => Future.successful(Seq.empty[ChunkStreamPart]) }).futureValue override def afterAll(): Unit = { super.afterAll() system.terminate() } }
Example 123
Source File: ServerReflectionImplSpec.scala From akka-grpc with Apache License 2.0 | 5 votes |
package akka.grpc.internal import grpc.reflection.v1alpha.reflection.ServerReflection import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec class ServerReflectionImplSpec extends AnyWordSpec with Matchers with ScalaFutures { import ServerReflectionImpl._ "The Server Reflection implementation utilities" should { "split strings up until the next dot" in { splitNext("foo.bar") should be(("foo", "bar")) splitNext("foo.bar.baz") should be(("foo", "bar.baz")) } "find a symbol" in { containsSymbol("grpc.reflection.v1alpha.ServerReflection", ServerReflection.descriptor) should be(true) containsSymbol("grpc.reflection.v1alpha.Foo", ServerReflection.descriptor) should be(false) containsSymbol("foo.Foo", ServerReflection.descriptor) should be(false) } } }
Example 124
Source File: AkkaDiscoveryNameResolverSpec.scala From akka-grpc with Apache License 2.0 | 5 votes |
package akka.grpc.internal import java.net.InetSocketAddress import akka.actor.ActorSystem import akka.grpc.{ GrpcClientSettings, GrpcServiceException } import akka.testkit.TestKit import io.grpc.Status import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.time.{ Millis, Seconds, Span } import org.scalatest.wordspec.AnyWordSpecLike import scala.collection.JavaConverters._ class AkkaDiscoveryNameResolverSpec extends TestKit(ActorSystem()) with AnyWordSpecLike with Matchers with ScalaFutures { implicit val ex = system.dispatcher implicit override val patienceConfig = PatienceConfig(timeout = scaled(Span(2, Seconds)), interval = scaled(Span(5, Millis))) "The AkkaDiscovery-backed NameResolver" should { "correctly report an error for an unknown hostname" in { val host = "example.invalid" val resolver = AkkaDiscoveryNameResolver(GrpcClientSettings.connectToServiceAt(host, 80)) val probe = new NameResolverListenerProbe() resolver.start(probe) val exception = probe.future.failed.futureValue.asInstanceOf[GrpcServiceException] exception shouldBe an[GrpcServiceException] exception.status.getCode == Status.UNKNOWN.getCode // FIXME: This description is not portable - it arises from native function response, which differs by OS // exception.status.getDescription should equal(host + ": Name or service not known") } "support serving a static host/port" in { // Unfortunately it needs to be an actually resolvable address... val host = "akka.io" val port = 4040 val resolver = AkkaDiscoveryNameResolver(GrpcClientSettings.connectToServiceAt(host, port)) val probe = new NameResolverListenerProbe() resolver.start(probe) val addresses = probe.future.futureValue match { case Seq(addressGroup) => addressGroup.getAddresses case _ => fail("Expected a single address group") } addresses.asScala.toSeq match { case Seq(address: InetSocketAddress) => address.getPort should be(port) address.getAddress.getHostName should be(host) case other => fail(s"Expected a single InetSocketAddress, got $other") } } } }
Example 125
Source File: AkkaDiscoveryNameResolverProviderSpec.scala From akka-grpc with Apache License 2.0 | 5 votes |
package akka.grpc.internal import java.net.URI import java.net.InetSocketAddress import java.util.{ List => JList } import scala.concurrent.ExecutionContext.Implicits._ import scala.concurrent.Future import scala.concurrent.Promise import scala.concurrent.duration._ import scala.collection.immutable import io.grpc.Attributes import io.grpc.NameResolver.Listener import io.grpc.EquivalentAddressGroup import akka.actor.ActorSystem import akka.discovery.Lookup import akka.discovery.ServiceDiscovery import akka.discovery.ServiceDiscovery.Resolved import akka.discovery.ServiceDiscovery.ResolvedTarget import akka.testkit.TestKit import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.time.{ Millis, Seconds, Span } import org.scalatest.wordspec.AnyWordSpecLike class AkkaDiscoveryNameResolverProviderSpec extends TestKit(ActorSystem()) with AnyWordSpecLike with Matchers with ScalaFutures { implicit override val patienceConfig = PatienceConfig(timeout = scaled(Span(2, Seconds)), interval = scaled(Span(5, Millis))) "AkkaDiscoveryNameResolverProviderSpec" should { "provide a NameResolver that uses the supplied serviceName" in { val serviceName = "testServiceName" val discovery = new ServiceDiscovery() { override def lookup(lookup: Lookup, resolveTimeout: FiniteDuration): Future[Resolved] = { lookup.serviceName should be(serviceName) Future.successful(Resolved(serviceName, immutable.Seq(ResolvedTarget("10.0.0.3", Some(4312), None)))) } } val provider = new AkkaDiscoveryNameResolverProvider( discovery, 443, portName = None, protocol = None, resolveTimeout = 3.seconds) val resolver = provider.newNameResolver(new URI("//" + serviceName), null) val addressGroupsPromise = Promise[List[EquivalentAddressGroup]] val listener = new Listener() { override def onAddresses(addresses: JList[EquivalentAddressGroup], attributes: Attributes): Unit = { import scala.collection.JavaConverters._ addressGroupsPromise.success(addresses.asScala.toList) } override def onError(error: io.grpc.Status): Unit = ??? } resolver.start(listener) val addressGroups = addressGroupsPromise.future.futureValue addressGroups.size should be(1) val addresses = addressGroups(0).getAddresses() addresses.size should be(1) val address = addresses.get(0).asInstanceOf[InetSocketAddress] address.getHostString() should be("10.0.0.3") address.getPort() should be(4312) } } }
Example 126
Source File: ClientStateSpec.scala From akka-grpc with Apache License 2.0 | 5 votes |
package akka.grpc.internal import scala.concurrent.duration._ import scala.concurrent.Promise import io.grpc.ConnectivityState._ import akka.Done import akka.actor.ActorSystem import akka.stream.ActorMaterializer import org.scalatest.concurrent.{ Eventually, ScalaFutures } import org.scalatest.BeforeAndAfterAll import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec class ClientStateSpec extends AnyWordSpec with Matchers with ScalaFutures with Eventually with BeforeAndAfterAll { implicit val sys = ActorSystem() implicit val mat = ActorMaterializer() implicit val ec = sys.dispatcher implicit val patience = PatienceConfig(timeout = 10.seconds, interval = 150.milliseconds) private def clientState(channelCompletion: Promise[Done] = Promise[Done]()) = { val channel = new InternalChannel(new ChannelUtilsSpec.FakeChannel(Stream(IDLE, CONNECTING, READY)), channelCompletion.future) new ClientState(channel) } "Client State" should { "successfully provide a channel" in { // given a state val state = clientState() // it provides a channel when needed state.internalChannel should not be null } "reuse a valid channel" in { // given a state val state = clientState() // it provides a channel when needed val c1 = state.internalChannel.managedChannel val c2 = state.internalChannel.managedChannel c1 should be(c2) } } override def afterAll(): Unit = { super.afterAll() sys.terminate() } }
Example 127
Source File: MultiServiceSpec.scala From akka-http-spring-boot with Apache License 2.0 | 5 votes |
package com.github.scalaspring.akka.http import java.net.ServerSocket import akka.http.scaladsl.client.RequestBuilding._ import akka.http.scaladsl.model.StatusCodes._ import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server._ import akka.http.scaladsl.unmarshalling.Unmarshal import com.github.scalaspring.scalatest.TestContextManagement import com.typesafe.scalalogging.StrictLogging import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FlatSpec, Matchers} import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.SpringApplicationContextLoader import org.springframework.context.annotation.{Bean, Import} import org.springframework.test.context.ContextConfiguration import resource._ import scala.concurrent.duration._ @ContextConfiguration( loader = classOf[SpringApplicationContextLoader], classes = Array(classOf[MultiServiceSpec.Configuration]) ) class MultiServiceSpec extends FlatSpec with TestContextManagement with AkkaStreamsAutowiredImplicits with Matchers with ScalaFutures with StrictLogging { implicit val patience = PatienceConfig((10.seconds)) // Allow time for server startup @Autowired val settings: ServerSettings = null @Autowired val client: HttpClient = null "Echo service" should "echo" in { val name = "name" val future = client.request(Get(s"http://${settings.interface}:${settings.port}/multi/echo/$name")) whenReady(future) { response => response.status shouldBe OK whenReady(Unmarshal(response.entity).to[String])(_ shouldBe name) } } "Reverse service" should "reverse" in { val name = "name" val future = client.request(Get(s"http://${settings.interface}:${settings.port}/multi/reverse/$name")) whenReady(future) { response => response.status shouldBe OK whenReady(Unmarshal(response.entity).to[String])(_ shouldBe name.reverse) } } } object MultiServiceSpec { @Configuration @Import(Array(classOf[AkkaHttpServerAutoConfiguration])) class Configuration extends AkkaHttpServer with EchoService with ReverseService { @Bean def serverSettings = new ServerSettings(port = managed(new ServerSocket(0)).map(_.getLocalPort).opt.get) } trait EchoService extends AkkaHttpService { abstract override def route: Route = { (get & path("multi"/"echo"/Segment)) { name => complete(name) } ~ super.route } } trait ReverseService extends AkkaHttpService { abstract override def route: Route = { (get & path("multi"/"reverse"/Segment)) { name => complete(name.reverse) } } ~ super.route } }
Example 128
Source File: SingleServiceSpec.scala From akka-http-spring-boot with Apache License 2.0 | 5 votes |
package com.github.scalaspring.akka.http import java.net.ServerSocket import akka.http.scaladsl.client.RequestBuilding._ import akka.http.scaladsl.model.StatusCodes._ import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server._ import akka.http.scaladsl.unmarshalling.Unmarshal import com.github.scalaspring.scalatest.TestContextManagement import com.typesafe.scalalogging.StrictLogging import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FlatSpec, Matchers} import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.SpringApplicationContextLoader import org.springframework.context.annotation.{Bean, Import} import org.springframework.test.context.ContextConfiguration import resource._ import scala.concurrent.duration._ @ContextConfiguration( loader = classOf[SpringApplicationContextLoader], classes = Array(classOf[SingleServiceSpec.Configuration]) ) class SingleServiceSpec extends FlatSpec with TestContextManagement with AkkaStreamsAutowiredImplicits with Matchers with ScalaFutures with StrictLogging { implicit val patience = PatienceConfig(10.seconds) // Allow time for server startup @Autowired val settings: ServerSettings = null @Autowired val client: HttpClient = null "Echo service" should "echo" in { val name = "name" val future = client.request(Get(s"http://${settings.interface}:${settings.port}/single/echo/$name")) whenReady(future) { response => //logger.info(s"""received response "$response"""") response.status shouldBe OK whenReady(Unmarshal(response.entity).to[String])(_ shouldBe name) } } } object SingleServiceSpec { @Configuration @Import(Array(classOf[AkkaHttpServerAutoConfiguration])) class Configuration extends AkkaHttpServer with EchoService { @Bean def serverSettings = new ServerSettings(port = managed(new ServerSocket(0)).map(_.getLocalPort).opt.get) } trait EchoService extends AkkaHttpService { abstract override def route: Route = { get { path("single"/ "echo" / Segment) { name => complete(name) } } } ~ super.route } }
Example 129
Source File: RouteTestSpec.scala From akka-http-spring-boot with Apache License 2.0 | 5 votes |
package com.github.scalaspring.akka.http import akka.http.scaladsl.model.StatusCodes._ import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server._ import akka.http.scaladsl.testkit.ScalatestRouteTest import com.github.scalaspring.akka.http.RouteTestSpec.EchoService import com.typesafe.scalalogging.StrictLogging import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FlatSpec, Matchers} class RouteTestSpec extends FlatSpec with EchoService with ScalatestRouteTest with Matchers with ScalaFutures with StrictLogging { "Echo service" should "echo" in { Get(s"/single/echo/hello") ~> route ~> check { status shouldBe OK } } } object RouteTestSpec { trait EchoService extends AkkaHttpService { abstract override def route: Route = { get { path("single"/ "echo" / Segment) { name => complete(name) } } } ~ super.route } }
Example 130
Source File: StockReaderSpec.scala From CSYE7200 with MIT License | 5 votes |
package edu.neu.coe.csye7200.cache import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.util.{Failure, Success} class StockReaderSpec extends FlatSpec with Matchers with Futures with ScalaFutures { implicit val resource: String = "stocks.txt" behavior of "getPrice" it should "work" in { val xf = StockReader.getPrice("AAPL") whenReady(xf) { x => x should matchPattern { case 207.48 => } } } import scala.concurrent.ExecutionContext.Implicits.global it should "fail with badStocks1" in { StockReader.getPrice("AAPL")("badStocks1.txt") onComplete { case Success(_) => fail("this should fail") case Failure(x) => x.getLocalizedMessage should matchPattern { case "no entry matching AAPL" => } } } it should "fail with badStocks2" in { StockReader.getPrice("AAPL")("badStocks2.txt") onComplete { case Success(_) => fail("this should fail") case Failure(x) => x.getLocalizedMessage should matchPattern { case "no entry matching AAPL" => } } } it should "fail with badStocks3" in { StockReader.getPrice("AAPL")("badStocks3.txt") onComplete { case Success(_) => fail("this should fail") case Failure(x) => x should matchPattern { case _: NumberFormatException => } } } }
Example 131
Source File: PortfolioSpec.scala From CSYE7200 with MIT License | 5 votes |
package edu.neu.coe.csye7200.cache import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.concurrent.Future import scala.util._ class PortfolioSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "Position" it should "parse MSFT 55.67" in { Position.parse("MSFT 55.67") should matchPattern { case Success(Position("MSFT",55.67)) => } } it should "get value" in { val xf = Position.value(cache)("MSFT 100.0") whenReady(xf) { u => u should matchPattern { case _: Double => } } xf.value.get.get shouldBe 10616.0 } behavior of "Portfolio" it should "parse MSFT 55.67" in { Position.parse("MSFT 55.67") should matchPattern { case Success(Position("MSFT",55.67)) => } } it should "parse a portfolio (0)" in { val positions = Seq() val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case _: Double => } } xf.value.get.get shouldBe 0.0 } it should "parse a portfolio (1)" in { val positions = Seq("MSFT 100.0") val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case _: Double => } } xf.value.get.get shouldBe 10616.0 } it should "parse a portfolio (2)" in { val positions = Seq("MSFT 55.67", "GOOG 43.20") val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case _: Double => } } xf.value.get.get shouldBe 51606.4552 } implicit val resource: String = "stocks.txt" private val cache = MyCache[String, Double](StockReader.getPrice) }
Example 132
Source File: CacheSpec.scala From CSYE7200 with MIT License | 5 votes |
package edu.neu.coe.csye7200.cache import java.net.URL import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import scala.util.{Random, Try} class CacheSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "apply" val random = Random def lookupStock(k: String): Future[Double] = Future { random.setSeed(k.hashCode) random.nextInt(1000) / 100.0 } it should "work" in { val cache = MyCache[String,Double](lookupStock) val xf: Future[Double] = cache("MSFT") whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 3.64 } }
Example 133
Source File: SortingSpec.scala From CSYE7200 with MIT License | 5 votes |
package edu.neu.coe.csye7200.lbsort import edu.neu.coe.csye7200.util.RandomState import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.util.Random class SortingSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "Insertion Sort" it should "sort List[Int]" in { val list = Array(3, 1, 2) Sorting.insertionSort(list) list shouldBe Array(1, 2, 3) } it should "sort List[String]" in { val list = Array("b", "c", "a") Sorting.insertionSort(list) list shouldBe Array("a", "b", "c") } it should "sort List[Double] using create" in { val list = Array(3.0, 1.5, 2.4) Sorting.insertionSort(list) list shouldBe Array(1.5, 2.4, 3.0) } behavior of "Quick Sort" it should "sort List[Long]" in { val list = RandomState(0L).stream.take(100).toArray Sorting.quickSort(list) list.reverse.take(5) shouldBe Array(9054633673849498218L, 8937230293740383692L, 8613213585075034408L, 8543763135442756639L, 8358116205139703580L) } }
Example 134
Source File: ComparisonSpec.scala From CSYE7200 with MIT License | 5 votes |
package edu.neu.coe.csye7200.lbsort import edu.neu.coe.csye7200.lbsort.Comparison._ import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.language.postfixOps class ComparisonSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "Comparison" it should "apply(Int)" in { Comparison(0) shouldBe Same Comparison(1) shouldBe more Comparison(-1) shouldBe less } it should "toInt" in { Comparison(-1).toInt shouldBe -1 Comparison(0).toInt shouldBe 0 Comparison(1).toInt shouldBe 1 } it should "apply(Option[Boolean])" in { Comparison(None) shouldBe Same Comparison(Some(false)) shouldBe more Comparison(Some(true)) shouldBe less } it should "flip" in { more.flip shouldBe less less.flip shouldBe more Same.flip shouldBe Same } it should "orElse" in { more orElse more shouldBe more more orElse less shouldBe more less orElse more shouldBe less less orElse less shouldBe less Same orElse less shouldBe less Same orElse more shouldBe more Same orElse Same shouldBe Same } it should "implement | correctly" in { more | Same shouldBe more Same | more shouldBe more less | Same shouldBe Same Same | less shouldBe Same more | more shouldBe more more | less shouldBe more less | more shouldBe more Same | Same shouldBe Same less | less shouldBe less } it should "implement & correctly" in { more & Same shouldBe Same Same & more shouldBe Same less & Same shouldBe less Same & less shouldBe less more & more shouldBe more more & less shouldBe less less & more shouldBe less Same & Same shouldBe Same less & less shouldBe less } it should "implement || correctly" in { more || Same shouldBe more Same || more shouldBe more less || Same shouldBe Same Same || less shouldBe Same more || more shouldBe more more || less shouldBe more less || more shouldBe more Same || Same shouldBe Same less || less shouldBe less } it should "implement && correctly" in { more && Same shouldBe Same Same && more shouldBe Same less && Same shouldBe less Same && less shouldBe less more && more shouldBe more more && less shouldBe less less && more shouldBe less Same && Same shouldBe Same less && less shouldBe less } }
Example 135
Source File: SortedSpec.scala From CSYE7200 with MIT License | 5 votes |
package edu.neu.coe.csye7200.lbsort import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.language.postfixOps class SortedSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "Sorted" private val c1a = Composite(1, "a") private val c1z = Composite(1, "z") it should "sort List[Int]" in { val list = List(3, 1, 2) val sorted = Sorted(list) sorted() shouldBe List(1, 2, 3) } it should "sort List[String]" in { val list = List("b", "c", "a") val sorted = Sorted(list) sorted() shouldBe List("a", "b", "c") } it should "sort List[Double] using create" in { val list = List(3.0, 1.5, 2.4) val sorted = Sorted.create(list) sorted() shouldBe List(1.5, 2.4, 3.0) } it should "sort List[Char] given an explicit Comparer" in { val charComparer: Comparer[Char] = Ordering[Char] val list = List('b', 'c', 'a') val sorted = Sorted(list)(charComparer.invert) sorted() shouldBe List('c', 'b', 'a') } private val c2b = Composite(2, "b") private val c3c = Composite(3, "c") it should "sort List[Composite] by Int then String" in { val list = List(c3c, c1a, c1z, c2b) val comparer1: Comparer[Composite] = Composite.OrderingCompositeInt val comparer2: Comparer[Composite] = Composite.OrderingCompositeString val sorted = Sorted(list)(comparer1).sort(comparer2) sorted() shouldBe List(c1a, c1z, c2b, c3c) } it should "sort List[Composite] by String then Int" in { val list = List(c3c, c1a, c1z, c2b) val comparer1: Comparer[Composite] = Composite.OrderingCompositeString val comparer2: Comparer[Composite] = Composite.OrderingCompositeInt val sorted = Sorted(list)(comparer1).sort(comparer2) sorted() shouldBe List(c1a, c2b, c3c, c1z) } it should "sort asynchronously" in { import scala.concurrent.ExecutionContext.Implicits.global val list = List(3, 1, 2) val sorted = Sorted.create(list) val xsf = sorted.async whenReady(xsf) { xs => xs shouldBe List(1, 2, 3) } } behavior of "merge" it should "work" in { val l1 = List(1, 5, 8, 10, 11, 15) val l2 = List(3, 4, 9, 12, 14, 16) Sorted.merge(l1,l2) shouldBe List(1,3,4,5,8,9,10,11,12,14,15,16) } }
Example 136
Source File: PortfolioSpec.scala From CSYE7200 with MIT License | 5 votes |
package edu.neu.coe.csye7200.cache import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import scala.util._ class PortfolioSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "Position" it should "parse MSFT 55.67" in { Position.parse("MSFT 55.67") should matchPattern { case Success(Position("MSFT",55.67)) => } } it should "get value" in { val xf = Position.value(cache)("MSFT 100.0") whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 364 } behavior of "Portfolio" it should "parse MSFT 55.67" in { Position.parse("MSFT 55.67") should matchPattern { case Success(Position("MSFT",55.67)) => } } it should "parse a portfolio (0)" in { val positions = Seq() val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 0.0 } it should "parse a portfolio (1)" in { val positions = Seq("MSFT 100.0") val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 364 } it should "parse a portfolio (2)" in { val positions = Seq("MSFT 55.67", "GOOG 43.20") val py: Try[Portfolio] = Portfolio.parse(positions) py should matchPattern { case Success(_) => } val portfolio = py.get val xf: Future[Double] = portfolio.value(cache) whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 345.6308 } val random = Random def lookupStock(k: String): Future[Double] = Future { random.setSeed(k.hashCode) random.nextInt(1000) / 100.0 } val cache = MyCache[String,Double](lookupStock) }
Example 137
Source File: CacheSpec.scala From CSYE7200 with MIT License | 5 votes |
package edu.neu.coe.csye7200.cache import java.net.URL import org.scalatest.concurrent.{Futures, ScalaFutures} import org.scalatest.{FlatSpec, Matchers} import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import scala.util.{Random, Try} class CacheSpec extends FlatSpec with Matchers with Futures with ScalaFutures { behavior of "apply" val random = Random def lookupStock(k: String): Future[Double] = Future { random.setSeed(k.hashCode) random.nextInt(1000) / 100.0 } it should "work" in { val cache = MyCache[String,Double](lookupStock) val xf: Future[Double] = cache("MSFT") whenReady(xf) { u => u should matchPattern { case x: Double => } } xf.value.get.get shouldBe 3.64 } }
Example 138
Source File: AkkaHttpActionAdapterTest.scala From akka-http-pac4j with Mozilla Public License 2.0 | 5 votes |
package com.stackstate.pac4j import akka.http.scaladsl.model.{ContentTypes, HttpEntity, HttpRequest, HttpResponse} import org.scalatest.{Matchers, WordSpecLike} import akka.http.scaladsl.model.StatusCodes._ import akka.util.ByteString import com.stackstate.pac4j.AkkaHttpActionAdapterTest.ActionInt import com.stackstate.pac4j.http.AkkaHttpActionAdapter import com.stackstate.pac4j.store.ForgetfulSessionStorage import org.pac4j.core.exception.http.{ BadRequestAction, ForbiddenAction, FoundAction, HttpAction, NoContentAction, OkAction, StatusAction, UnauthorizedAction } import org.scalatest.concurrent.ScalaFutures class AkkaHttpActionAdapterTest extends WordSpecLike with Matchers with ScalaFutures { "AkkaHttpActionAdapter" should { "convert 200 to OK" in withContext { context => AkkaHttpActionAdapter.adapt(new OkAction(""), context).futureValue.response shouldEqual HttpResponse( OK, Nil, HttpEntity(ContentTypes.`application/octet-stream`, ByteString("")) ) } "convert 401 to Unauthorized" in withContext { context => AkkaHttpActionAdapter.adapt(UnauthorizedAction.INSTANCE, context).futureValue.response shouldEqual HttpResponse(Unauthorized) context.getChanges.cookies.map(_.name) shouldBe List(AkkaHttpWebContext.DEFAULT_COOKIE_NAME) } "convert 302 to SeeOther (to support login flow)" in withContext { context => val r = AkkaHttpActionAdapter.adapt(new FoundAction("/login"), context).futureValue.response r.status shouldEqual SeeOther r.headers.head.value() shouldEqual "/login" context.getChanges.cookies.map(_.name) shouldBe List(AkkaHttpWebContext.DEFAULT_COOKIE_NAME) } "convert 400 to BadRequest" in withContext { context => AkkaHttpActionAdapter.adapt(BadRequestAction.INSTANCE, context).futureValue.response shouldEqual HttpResponse(BadRequest) } "convert 201 to Created" in withContext { context => AkkaHttpActionAdapter.adapt(201.action(), context).futureValue.response shouldEqual HttpResponse(Created) } "convert 403 to Forbidden" in withContext { context => AkkaHttpActionAdapter.adapt(ForbiddenAction.INSTANCE, context).futureValue.response shouldEqual HttpResponse(Forbidden) } "convert 204 to NoContent" in withContext { context => AkkaHttpActionAdapter.adapt(NoContentAction.INSTANCE, context).futureValue.response shouldEqual HttpResponse(NoContent) } "convert 200 to OK with content set from the context" in withContext { context => AkkaHttpActionAdapter.adapt(new OkAction("content"), context).futureValue.response shouldEqual HttpResponse .apply(OK, Nil, HttpEntity(ContentTypes.`application/octet-stream`, ByteString("content"))) } "convert 200 to OK with content type set from the context" in withContext { context => context.setResponseContentType("application/json") AkkaHttpActionAdapter.adapt(new OkAction(""), context).futureValue.response shouldEqual HttpResponse .apply(OK, Nil, HttpEntity(ContentTypes.`application/json`, ByteString(""))) } } def withContext(f: AkkaHttpWebContext => Unit): Unit = { f(AkkaHttpWebContext(HttpRequest(), Seq.empty, new ForgetfulSessionStorage, AkkaHttpWebContext.DEFAULT_COOKIE_NAME)) } } object AkkaHttpActionAdapterTest { implicit class ActionInt(val i: Int) extends AnyVal { def action(): HttpAction = new StatusAction(i) } }
Example 139
Source File: BoundedOrderingSpec.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.streams import akka.actor.ActorSystem import akka.stream.ActorMaterializer import akka.stream.scaladsl.{Keep, Sink, Source} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FlatSpec, Matchers} class BoundedOrderingSpec extends FlatSpec with Matchers with ScalaFutures { implicit val system = ActorSystem("OrderingStateSpec") implicit val mat = ActorMaterializer() it should "require waitFor > 0" in { an [IllegalArgumentException] should be thrownBy BoundedOrdering[Int, Int](maxBounded = 0, 1, _ + 1, identity) } it should "retain order of a stream" in { val boundedOrdering = BoundedOrdering[Int, Int](maxBounded = 5, 1, _ + 1, identity) val input = List(1, 2, 3, 4, 5) val output = Source(input).via(boundedOrdering).toMat(Sink.seq)(Keep.right).run() output.futureValue should contain theSameElementsInOrderAs input } it should "re-order the stream completely within the ordering range" in { val boundedOrdering = BoundedOrdering[Int, Int](maxBounded = 5, 1, _ + 1, identity) val input = List(2, 3, 4, 1, 5, 7, 8, 6, 9, 10) val output = Source(input).via(boundedOrdering).toMat(Sink.seq)(Keep.right).run() output.futureValue should contain theSameElementsInOrderAs input.sorted } it should "re-order the stream incompletely outside of the ordering range" in { val boundedOrdering = BoundedOrdering[Int, Int](maxBounded = 5, 1, _ + 1, identity) val input = List(1, 3, 4, 5, 6, 7, 8, 9, 2, 10) val output = Source(input).via(boundedOrdering).toMat(Sink.seq)(Keep.right).run() output.futureValue should contain theSameElementsInOrderAs input } it should "ignore the missing element and keep the stream moving" in { val boundedOrdering = BoundedOrdering[Int, Int](maxBounded = 5, 1, _ + 1, identity) val input = List(1, 3, 4, 5, 6, 7, 8, 9, 10, 11) val output = Source(input).via(boundedOrdering).toMat(Sink.seq)(Keep.right).run() output.futureValue should contain theSameElementsInOrderAs input } it should "re-order the stream with identifier type different from message type" in { case class Element(id: Long, content: String) val boundedOrdering = BoundedOrdering[Element, Long](maxBounded = 5, 1L, _ + 1L, _.id) val input = List(Element(1, "one"), Element(3, "three"), Element(5, "five"), Element(2, "two"), Element(6, "six"), Element(7, "seven"), Element(8, "eight"), Element(9, "nine"), Element(10, "ten"), Element(4, "four")) val wisb = List(Element(1, "one"), Element(2, "two"), Element(3, "three"), Element(5, "five"), Element(6, "six"), Element(7, "seven"), Element(8, "eight"), Element(9, "nine"), Element(10, "ten"), Element(4, "four")) val output = Source(input).via(boundedOrdering).toMat(Sink.seq)(Keep.right).run() output.futureValue should contain theSameElementsInOrderAs wisb } it should "re-order the stream using custom id ordering" in { case class Element(id: String, content: String) implicit val order: Ordering[String] = Ordering.by(_.toInt) val boundedOrdering = BoundedOrdering[Element, String](maxBounded = 5, "2", s => (s.toInt + 2).toString, _.id) val input = List(Element("2", "one"), Element("6", "three"), Element("10", "five"), Element("4", "two"), Element("12", "six"), Element("14", "seven"), Element("16", "eight"), Element("18", "nine"), Element("20", "ten"), Element("8", "four")) val wisb = List(Element("2", "one"), Element("4", "two"), Element("6", "three"), Element("10", "five"), Element("12", "six"), Element("14", "seven"), Element("16", "eight"), Element("18", "nine"), Element("20", "ten"), Element("8", "four")) val output = Source(input).via(boundedOrdering).toMat(Sink.seq)(Keep.right).run() output.futureValue should contain theSameElementsInOrderAs wisb } }
Example 140
Source File: LaunchQueueControllerTest.scala From metronome with Apache License 2.0 | 5 votes |
package dcos.metronome package api.v1.controllers import dcos.metronome.api.v1.models.QueuedJobRunMapWrites import dcos.metronome.api.{MockApiComponents, OneAppPerTestWithComponents, TestAuthFixture} import dcos.metronome.model.{JobId, JobRunSpec, QueuedJobRunInfo} import dcos.metronome.queue.LaunchQueueService import mesosphere.marathon.core.plugin.PluginManager import mesosphere.marathon.state.Timestamp import org.mockito.Mockito._ import org.scalatest.BeforeAndAfter import org.scalatest.concurrent.ScalaFutures import org.scalatestplus.mockito.MockitoSugar import org.scalatestplus.play.PlaySpec import play.api.ApplicationLoader.Context import play.api.test.FakeRequest import play.api.test.Helpers.{GET, route, _} class LaunchQueueControllerTest extends PlaySpec with OneAppPerTestWithComponents[MockApiComponents] with ScalaFutures with MockitoSugar with BeforeAndAfter { private val queueServiceMock = mock[LaunchQueueService] "GET /queue" should { "return list of jobs in the queue" in { val queuedJobRun = QueuedJobRunInfo(JobId("job"), Timestamp.zero, JobRunSpec()) val queuedJobList = List(queuedJobRun) when(queueServiceMock.list()).thenReturn(queuedJobList) val response = route(app, FakeRequest(GET, "/v1/queue")).get status(response) mustBe OK contentType(response) mustBe Some("application/json") contentAsJson(response) mustBe QueuedJobRunMapWrites.writes(queuedJobList.groupBy(_.jobId)) } "return nothing when not authorized to see the job" in { auth.authorized = false val queuedJobList = List(QueuedJobRunInfo(JobId("job"), Timestamp.zero, JobRunSpec())) when(queueServiceMock.list()).thenReturn(queuedJobList) val response = route(app, FakeRequest(GET, "/v1/queue")).get contentAsJson(response) mustBe QueuedJobRunMapWrites.writes(Map.empty) } } val auth = new TestAuthFixture before { auth.authorized = true auth.authenticated = true } override def createComponents(context: Context): MockApiComponents = new MockApiComponents(context) { override lazy val queueService: LaunchQueueService = queueServiceMock override lazy val pluginManager: PluginManager = auth.pluginManager } }
Example 141
Source File: ServerSpec.scala From metronome with Apache License 2.0 | 5 votes |
package dcos.metronome package api import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Second, Span} import org.scalatestplus.play._ import play.api.ApplicationLoader.Context import play.api.libs.ws.ahc.AhcWSComponents import play.api.mvc.Results import play.api.test.Helpers._ class ServerSpec extends PlaySpec with OneServerPerSuiteWithComponents[MockApiComponents with AhcWSComponents] with Results with ScalaFutures { override implicit def patienceConfig: PatienceConfig = PatienceConfig(Span(1, Second), Span(50, Millis)) override def createComponents(context: Context) = new MockApiComponents(context) with AhcWSComponents "Server query" should { "work" in { implicit val ec = app.materializer.executionContext val wsClient = components.wsClient whenReady(wsUrl("/ping")(portNumber, wsClient).get) { response => response.status mustBe OK response.body mustBe "pong" } } } }
Example 142
Source File: ZkJobSpecRepositoryTest.scala From metronome with Apache License 2.0 | 5 votes |
package dcos.metronome package repository.impl.kv import dcos.metronome.model.{JobId, JobSpec} import dcos.metronome.utils.state.PersistentStoreWithNestedPathsSupport import dcos.metronome.utils.test.Mockito import org.scalatest.FunSuite import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Seconds, Span} import concurrent.Future class ZkJobSpecRepositoryTest extends FunSuite with Mockito with ScalaFutures { override implicit def patienceConfig: PatienceConfig = PatienceConfig(timeout = Span(5, Seconds), interval = Span(500, Millis)) test("delete") { val f = new Fixture f.store.delete(any).returns(Future.successful(true)) f.repository.delete(f.jobId).futureValue verify(f.store).delete("job-runs/foo.bar") verify(f.store).delete("job-specs/foo.bar") } test("create") { val f = new Fixture f.store.createPath(any).returns(Future.successful(Unit)) f.repository.create(f.jobId, f.jobSpec).failed.futureValue verify(f.store).createPath("job-runs/foo.bar") verify(f.store).create(eq("job-specs/foo.bar"), any) } class Fixture { val ec = scala.concurrent.ExecutionContext.global val store: PersistentStoreWithNestedPathsSupport = mock[PersistentStoreWithNestedPathsSupport] val repository = new ZkJobSpecRepository(store, ec) val jobId = JobId("foo.bar") val jobSpec = JobSpec(jobId) } }
Example 143
Source File: SttpBackendStubZioTests.scala From sttp with Apache License 2.0 | 5 votes |
package sttp.client.asynchttpclient.zio import org.scalatest.concurrent.ScalaFutures import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers import sttp.client._ import sttp.client.testing.SttpBackendStub import sttp.client.impl.zio._ import sttp.client.monad.MonadError import sttp.client.ws.{WebSocket, WebSocketEvent} import sttp.model.Headers import sttp.model.ws._ import zio._ class SttpBackendStubZioTests extends AnyFlatSpec with Matchers with ScalaFutures { "backend stub" should "cycle through responses using a single sent request" in { // given implicit val b: SttpBackendStub[Task, Nothing, NothingT] = SttpBackendStub(new RIOMonadAsyncError[Any]) .whenRequestMatches(_ => true) .thenRespondCyclic("a", "b", "c") // when val r = basicRequest.get(uri"http://example.org/a/b/c").send() // then runtime.unsafeRun(r).body shouldBe Right("a") runtime.unsafeRun(r).body shouldBe Right("b") runtime.unsafeRun(r).body shouldBe Right("c") runtime.unsafeRun(r).body shouldBe Right("a") } it should "return given web socket response" in { val rioMonad: MonadError[zio.Task] = new RIOMonadAsyncError[Any] val frame1 = WebSocketFrame.text("initial frame") val sentFrame = WebSocketFrame.text("sent frame") def webSocket(queue: Queue[WebSocketFrame.Incoming]) = new WebSocket[Task] { override def isOpen: zio.Task[Boolean] = Task.succeed(true) override def monad: MonadError[zio.Task] = rioMonad override def receive: zio.Task[Either[WebSocketEvent.Close, WebSocketFrame.Incoming]] = queue.take.map(Right(_)) override def send(f: WebSocketFrame, isContinuation: Boolean): zio.Task[Unit] = f match { case t: WebSocketFrame.Text => queue.offer(t).unit case _ => Task.unit } } def makeBackend(queue: Queue[WebSocketFrame.Incoming]) = AsyncHttpClientZioBackend.stub .whenRequestMatches(_ => true) .thenRespondWebSocket(Headers(List.empty), webSocket(queue)) val test = for { queue <- Queue.unbounded[WebSocketFrame.Incoming] _ <- queue.offer(frame1) backend = makeBackend(queue) handler <- ZioWebSocketHandler() request = basicRequest.get(uri"http://example.org/a/b/c") ws <- backend.openWebsocket(request, handler).map(_.result) msg1 <- ws.receive _ <- ws.send(sentFrame, false) msg2 <- ws.receive } yield (msg1, msg2) runtime.unsafeRun(test) shouldBe ((Right(frame1), Right(sentFrame))) } }
Example 144
Source File: SttpBackendStubAkkaTests.scala From sttp with Apache License 2.0 | 5 votes |
package sttp.client.akkahttp import akka.actor.ActorSystem import akka.http.scaladsl.model.ws.{Message, TextMessage} import akka.stream.OverflowStrategy import akka.stream.scaladsl.{Flow, Keep, Sink, Source} import org.scalatest.BeforeAndAfterAll import org.scalatest.concurrent.ScalaFutures import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers import sttp.client._ import sttp.model.Headers import scala.concurrent.{Await, Future} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ class SttpBackendStubAkkaTests extends AnyFlatSpec with Matchers with ScalaFutures with BeforeAndAfterAll { implicit val system: ActorSystem = ActorSystem() override protected def afterAll(): Unit = { Await.result(system.terminate().map(_ => ()), 5.seconds) } "backend stub" should "cycle through responses using a single sent request" in { // given implicit val backend = AkkaHttpBackend.stub .whenRequestMatches(_ => true) .thenRespondCyclic("a", "b", "c") // when def r = basicRequest.get(uri"http://example.org/a/b/c").send().futureValue // then r.body shouldBe Right("a") r.body shouldBe Right("b") r.body shouldBe Right("c") r.body shouldBe Right("a") } it should "use given flow as web socket handler" in { // This test is an example how can we test client flow. // We check behavior of client when connected to echo server. // Client responsibility was to send two messages to the server and collect received messages. val useHandler: Flow[Message, Message, Future[Seq[Message]]] => Future[Seq[Message]] = clientFlow => { val ((outQueue, clientReceivedMessages), inQueue) = Source .queue(1, OverflowStrategy.fail) .viaMat(clientFlow)(Keep.both) .toMat(Sink.queue())(Keep.both) .run() def echoMsg(): Future[Unit] = inQueue.pull().flatMap { case None => echoMsg() case Some(msg) => outQueue.offer(TextMessage(s"echo: " + msg.asTextMessage.getStrictText)).map(_ => ()) } (for { _ <- outQueue.offer(TextMessage("Hi!")) _ <- echoMsg() _ <- echoMsg() _ = outQueue.complete() _ <- outQueue.watchCompletion() } yield ()).flatMap(_ => clientReceivedMessages) } val clientFlow: Flow[Message, Message, Future[Seq[Message]]] = { Flow.fromSinkAndSourceMat( Sink.seq[Message], Source((1 to 2).map(i => TextMessage(s"test$i"))) )(Keep.left) } implicit val b = AkkaHttpBackend.stub .whenRequestMatches(_ => true) .thenHandleOpenWebSocket(Headers(List.empty), useHandler) val receivedMessages = basicRequest .get(uri"wss://echo.websocket.org") .openWebsocket(clientFlow) .flatMap(_.result) .futureValue .toList receivedMessages shouldBe List("Hi!", "echo: test1", "echo: test2").map(TextMessage(_)) } }
Example 145
Source File: AkkaKubernetesSpec.scala From akka-kubernetes-tests with Apache License 2.0 | 5 votes |
package akka.kubernetes.sample import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model.{HttpRequest, StatusCodes} import akka.http.scaladsl.unmarshalling.Unmarshal import akka.management.cluster.{ClusterHttpManagementJsonProtocol, ClusterMembers} import akka.stream.ActorMaterializer import org.scalatest.concurrent.{Eventually, ScalaFutures} import org.scalatest.time.{Seconds, Span} import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpec} class AkkaKubernetesSpec extends WordSpec with BeforeAndAfterAll with ScalaFutures with Matchers with ClusterHttpManagementJsonProtocol with Eventually { implicit val system = ActorSystem() implicit val materializer = ActorMaterializer() implicit override val patienceConfig = PatienceConfig(timeout = Span(60, Seconds), interval = Span(2, Seconds)) val target = system.settings.config.getString("akka.k8s.target") val clusterSize = system.settings.config.getInt("akka.k8s.cluster-size") val deployedVersion = system.settings.config.getString("akka.k8s.deployment-version") val log = system.log log.info("Running with target {} clusterSize {} version {}", target, clusterSize, deployedVersion) "Version deployed" should { "should have been updated" in { eventually { val response = Http().singleRequest(HttpRequest(uri = s"$target/version")).futureValue val reportedVersion = Unmarshal(response.entity).to[String].futureValue log.info("Reported version is: {}", reportedVersion) reportedVersion shouldEqual deployedVersion } } } "Cluster formation" should { "work" in { eventually { val response = Http().singleRequest(HttpRequest(uri = s"$target/cluster/members")).futureValue response.status shouldEqual StatusCodes.OK val clusterMembers: ClusterMembers = Unmarshal(response).to[ClusterMembers].futureValue withClue("Latest response: " + clusterMembers) { clusterMembers.members.size shouldEqual clusterSize clusterMembers.unreachable shouldEqual Seq.empty } log.info("Current cluster members: {}", clusterMembers) } } } "Akka Boss (singleton)" should { "say hello" in { val response = Http().singleRequest(HttpRequest(uri = s"$target/boss")).futureValue response.status shouldEqual StatusCodes.OK } } "Akka members (sharding)" should { "do some work" in { val response = Http().singleRequest(HttpRequest(uri = s"$target/team-member/johan")).futureValue response.status shouldEqual StatusCodes.OK } } override protected def afterAll(): Unit = { system.terminate() } }
Example 146
Source File: ClusterSoakSpec.scala From akka-kubernetes-tests with Apache License 2.0 | 5 votes |
package akka.cluster.soak import akka.actor.ActorSystem import akka.discovery.ServiceDiscovery.Resolved import akka.event.Logging import akka.http.scaladsl.Http import akka.http.scaladsl.model.{HttpRequest, StatusCodes} import akka.http.scaladsl.unmarshalling.Unmarshal import akka.kubernetes.soak.Tests.{ResponseTimeNanos, Target} import akka.kubernetes.soak.{StatsJsonSupport, TestResults} import akka.stream.ActorMaterializer import akka.stream.scaladsl.{Sink, Source} import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Seconds, Span} import org.scalatest.{Matchers, WordSpec} import akka.util.PrettyDuration._ import scala.collection.immutable import scala.concurrent.Future import scala.concurrent.duration._ class ClusterSoakSpec(endpoints: Resolved)(implicit system: ActorSystem) extends WordSpec with StatsJsonSupport with ScalaFutures with Matchers { import system.dispatcher implicit val mat = ActorMaterializer() implicit override val patienceConfig = PatienceConfig(timeout = Span(30, Seconds), interval = Span(2, Seconds)) val log = Logging(system, getClass) "The Clustered service" should { "not have had any failures" in { val responses: immutable.Seq[TestResults] = Source(endpoints.addresses) .mapAsyncUnordered(10) { rt => log.info("Hitting {}", rt.host) val request = HttpRequest(uri = s"http://${rt.host}:${rt.port.getOrElse(8080)}/stats") for { response <- Http().singleRequest(request) entity <- response.entity.toStrict(1.second) results <- response.status match { case StatusCodes.OK => Unmarshal(entity).to[TestResults] case unexpected => Future.failed( new RuntimeException(s"Unexpected response code: $unexpected body: ${entity.data.utf8String}") ) } } yield results } .runWith(Sink.seq) .futureValue log.info("{} nodes tested", responses.size) val maxJoinTimes = responses.map(_.joiningTime).sorted.reverse.take(5).map(_.nanos.pretty) log.info("Max join times: {}", maxJoinTimes) val maxResponseTimePerNode: immutable.Seq[(Target, ResponseTimeNanos)] = responses.map(_.lastResult.responses.maxBy(_._2)) val averageResponseTimesPerNode = responses .map((eachNode: TestResults) => { val total = eachNode.lastResult.responses.map(_._2).sum.nanos val count = eachNode.lastResult.responses.size total / count }) .sorted .reverse log.info("All response times: {}", responses) log.info("Slowest response times across all node pings: {}", maxResponseTimePerNode.sortBy(_._2).reverse.take(5).map(_._2.nanos.pretty)) log.info("Slowest average response times across all node pings: {}", averageResponseTimesPerNode.take(5).map(_.pretty)) responses.filter(_.testsFailed != 0) shouldEqual Nil withClue("Response took longer than 2 seconds. Do some investigation") { responses.filter(_.lastResult.responses.exists(_._2.nanos > 2.seconds)) shouldEqual Nil } withClue("Found unreachable events") { responses.filter(_.memberUnreachableEvents != 0) shouldEqual Nil } withClue("Found downed events") { responses.filter(_.memberDownedEvents != 0) shouldEqual Nil } } } }
Example 147
Source File: EnrolmentsConnectorSpec.scala From pertax-frontend with Apache License 2.0 | 5 votes |
package connectors import models._ import org.joda.time.DateTime import org.mockito.Matchers.{any, eq => eqTo} import org.mockito.Mockito.when import org.scalatest.EitherValues import org.scalatest.Inspectors.forAll import org.scalatest.concurrent.ScalaFutures import org.scalatestplus.mockito.MockitoSugar import play.api.http.Status._ import play.api.libs.json.{JsObject, JsResultException, Json} import uk.gov.hmrc.http.{HttpException, HttpResponse} import uk.gov.hmrc.play.bootstrap.http.DefaultHttpClient import util.BaseSpec import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future class EnrolmentsConnectorSpec extends BaseSpec with MockitoSugar with ScalaFutures with EitherValues { val http = mock[DefaultHttpClient] val connector = new EnrolmentsConnector(http, config) val baseUrl = config.enrolmentStoreProxyUrl "getAssignedEnrolments" should { val utr = "1234500000" val url = s"$baseUrl/enrolment-store/enrolments/IR-SA~UTR~$utr/users" "Return the error message for a BAD_REQUEST response" in { when(http.GET[HttpResponse](eqTo(url))(any(), any(), any())) .thenReturn(Future.successful(HttpResponse(BAD_REQUEST))) connector.getUserIdsWithEnrolments(utr).futureValue.left.value should include(BAD_REQUEST.toString) } "NO_CONTENT response should return no enrolments" in { when(http.GET[HttpResponse](eqTo(url))(any(), any(), any())) .thenReturn(Future.successful(HttpResponse(NO_CONTENT))) connector.getUserIdsWithEnrolments(utr).futureValue.right.value shouldBe Seq.empty } "query users with no principal enrolment returns empty enrolments" in { val json = Json.parse(""" |{ | "principalUserIds": [], | "delegatedUserIds": [] |}""".stripMargin) when(http.GET[HttpResponse](eqTo(url))(any(), any(), any())) .thenReturn(Future.successful(HttpResponse(OK, Some(json)))) connector.getUserIdsWithEnrolments(utr).futureValue.right.value shouldBe Seq.empty } "query users with assigned enrolment return two principleIds" in { val json = Json.parse(""" |{ | "principalUserIds": [ | "ABCEDEFGI1234567", | "ABCEDEFGI1234568" | ], | "delegatedUserIds": [ | "dont care" | ] |}""".stripMargin) when(http.GET[HttpResponse](eqTo(url))(any(), any(), any())) .thenReturn(Future.successful(HttpResponse(OK, Some(json)))) val expected = Seq("ABCEDEFGI1234567", "ABCEDEFGI1234568") connector.getUserIdsWithEnrolments(utr).futureValue.right.value shouldBe expected } } }
Example 148
Source File: PayApiConnectorSpec.scala From pertax-frontend with Apache License 2.0 | 5 votes |
package connectors import models.{CreatePayment, PaymentRequest} import org.mockito.Matchers.{any, eq => eqTo} import org.mockito.Mockito.when import org.scalatest.concurrent.ScalaFutures import org.scalatestplus.mockito.MockitoSugar import play.api.http.Status._ import play.api.libs.json.{JsResultException, Json} import uk.gov.hmrc.http.HttpResponse import uk.gov.hmrc.play.bootstrap.http.DefaultHttpClient import util.BaseSpec import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future class PayApiConnectorSpec extends BaseSpec with MockitoSugar with ScalaFutures { val http = mock[DefaultHttpClient] val connector = new PayApiConnector(http, config) val paymentRequest = PaymentRequest(config, "some utr") val postUrl = config.makeAPaymentUrl "createPayment" should { "parse the json load for a successful CREATED response" in { val json = Json.obj( "journeyId" -> "exampleJourneyId", "nextUrl" -> "testNextUrl" ) when( http.POST[PaymentRequest, HttpResponse](eqTo(postUrl), eqTo(paymentRequest), any())(any(), any(), any(), any())) .thenReturn(Future.successful(HttpResponse(CREATED, Some(json)))) connector.createPayment(paymentRequest).futureValue shouldBe Some( CreatePayment("exampleJourneyId", "testNextUrl")) } "Returns a None when the status code is not CREATED" in { when( http.POST[PaymentRequest, HttpResponse](eqTo(postUrl), eqTo(paymentRequest), any())(any(), any(), any(), any())) .thenReturn(Future.successful(HttpResponse(BAD_REQUEST))) connector.createPayment(paymentRequest).futureValue shouldBe None } "Throws a JsResultException when given bad json" in { val badJson = Json.obj("abc" -> "invalidData") when( http.POST[PaymentRequest, HttpResponse](eqTo(postUrl), eqTo(paymentRequest), any())(any(), any(), any(), any())) .thenReturn(Future.successful(HttpResponse(CREATED, Some(badJson)))) val f = connector.createPayment(paymentRequest) whenReady(f.failed) { e => e shouldBe a[JsResultException] } } } }
Example 149
Source File: ExtractSingleMaterializedValueTest.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.util.akkastreams import akka.stream.scaladsl.{Keep, Sink, Source} import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpec} import scala.util.Random class ExtractSingleMaterializedValueTest extends WordSpec with Matchers with ScalaFutures with AkkaBeforeAndAfterAll { private val discriminator = { i: Int => if (i < 0) Some(i) else None } private val elemsThatPassThrough = 0.to(10).toVector ExtractMaterializedValue.getClass.getSimpleName when { "there's a single valid value" should { "extract it" in { val elemToExtract = -1 val elements = elemToExtract +: elemsThatPassThrough val (extractedF, restF) = processElements(Random.shuffle(elements)) whenReady(extractedF)(_ shouldEqual elemToExtract) whenReady(restF)(_ should contain theSameElementsAs elements) } } "there are multiple valid values" should { "extract the first matching element" in { val elemToExtract = -1 val otherCandidateShuffledIn = -2 val elements = elemToExtract +: Random.shuffle( otherCandidateShuffledIn +: elemsThatPassThrough) val (extractedF, restF) = processElements(elements) whenReady(extractedF)(_ shouldEqual elemToExtract) whenReady(restF)(_ should contain theSameElementsAs elements) } } "there are no valid values" should { "fail the materialized future, but let the stream continue otherwise" in { val (extractedF, restF) = processElements(Random.shuffle(elemsThatPassThrough)) whenReady(extractedF.failed)(_ shouldBe a[RuntimeException]) whenReady(restF)(_.sorted shouldEqual elemsThatPassThrough) } } } private def processElements(elements: Iterable[Int]) = { Source .fromIterator(() => elements.iterator) .viaMat(ExtractMaterializedValue(discriminator))(Keep.right) .toMat(Sink.seq)(Keep.both) .run() } }
Example 150
Source File: ScenarioLoadingITDivulgence.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.sandbox import akka.stream.scaladsl.Sink import com.daml.ledger.api.domain.LedgerId import com.daml.ledger.api.testing.utils.{SuiteResourceManagementAroundEach, MockMessages => M} import com.daml.ledger.api.v1.active_contracts_service.ActiveContractsServiceGrpc import com.daml.ledger.api.v1.transaction_filter._ import com.daml.ledger.client.services.acs.ActiveContractSetClient import com.daml.dec.DirectExecutionContext import com.daml.platform.sandbox.services.{SandboxFixture, TestCommands} import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Span} import org.scalatest.{Matchers, WordSpec} @SuppressWarnings(Array("org.wartremover.warts.StringPlusAny")) class ScenarioLoadingITDivulgence extends WordSpec with Matchers with ScalaFutures with TestCommands with SandboxFixture with SuiteResourceManagementAroundEach { override def scenario: Option[String] = Some("Test:testDivulgenceSuccess") private def newACClient(ledgerId: LedgerId) = new ActiveContractSetClient(ledgerId, ActiveContractsServiceGrpc.stub(channel)) override implicit def patienceConfig: PatienceConfig = PatienceConfig(scaled(Span(15000, Millis)), scaled(Span(150, Millis))) private val allTemplatesForParty = M.transactionFilter private def getSnapshot(transactionFilter: TransactionFilter = allTemplatesForParty) = newACClient(ledgerId()) .getActiveContracts(transactionFilter) .runWith(Sink.seq) implicit val ec = DirectExecutionContext "ScenarioLoading" when { "running a divulgence scenario" should { "not fail" in { // The testDivulgenceSuccess scenario uses divulgence // This test checks whether the scenario completes without failing whenReady(getSnapshot()) { resp => resp.size should equal(1) } } } } }
Example 151
Source File: WallClockTimeIT.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.sandbox.services.time import java.time.Instant import akka.stream.scaladsl.Sink import com.daml.api.util.TimestampConversion.fromInstant import com.daml.grpc.GrpcException import com.daml.grpc.adapter.client.akka.ClientAdapter import com.daml.ledger.api.testing.utils.SuiteResourceManagementAroundAll import com.daml.ledger.api.v1.testing.time_service.{GetTimeRequest, SetTimeRequest, TimeServiceGrpc} import com.daml.platform.sandbox.config.SandboxConfig import com.daml.platform.sandbox.services.SandboxFixture import com.daml.platform.services.time.TimeProviderType import org.scalatest.concurrent.{AsyncTimeLimitedTests, ScalaFutures} import org.scalatest.time.Span import org.scalatest.time.SpanSugar.convertIntToGrainOfTime import org.scalatest.{AsyncWordSpec, Matchers} import scalaz.syntax.tag.ToTagOps final class WallClockTimeIT extends AsyncWordSpec with SandboxFixture with SuiteResourceManagementAroundAll with AsyncTimeLimitedTests with ScalaFutures with Matchers { override val timeLimit: Span = 15.seconds override protected def config: SandboxConfig = super.config.copy( timeProviderType = Some(TimeProviderType.WallClock), ) private val unimplemented: PartialFunction[Any, Unit] = { case GrpcException.UNIMPLEMENTED() => () } "Time Service" when { "server is not in static mode" should { "not have getTime available" in { ClientAdapter .serverStreaming(GetTimeRequest(ledgerId().unwrap), TimeServiceGrpc.stub(channel).getTime) .take(1) .runWith(Sink.head) .failed .map(_ should matchPattern(unimplemented)) } "not have setTime available" in { TimeServiceGrpc .stub(channel) .setTime( SetTimeRequest( ledgerId().unwrap, Some(fromInstant(Instant.EPOCH)), Some(fromInstant(Instant.EPOCH.plusSeconds(1))) )) .failed .map(_ should matchPattern(unimplemented)) } } } }
Example 152
Source File: SimpleTimeServiceBackendSpec.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.apiserver import java.time.{Instant, ZoneOffset, ZonedDateTime} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpec} class SimpleTimeServiceBackendSpec extends WordSpec with Matchers with ScalaFutures { "a simple time service backend" should { "return the time it started with" in { val timeService = TimeServiceBackend.simple(instantAt(month = 1)) timeService.getCurrentTime should be(instantAt(month = 1)) } "update the time to a new time" in { val timeService = TimeServiceBackend.simple(instantAt(month = 1)) timeService.setCurrentTime(instantAt(month = 1), instantAt(month = 2)) timeService.getCurrentTime should be(instantAt(month = 2)) } "not allow the time to be updated without a correct expected time" in { val timeService = TimeServiceBackend.simple(instantAt(month = 1)) whenReady(timeService.setCurrentTime(instantAt(month = 1), instantAt(month = 2))) { _ should be(true) } whenReady(timeService.setCurrentTime(instantAt(month = 1), instantAt(month = 3))) { _ should be(false) } timeService.getCurrentTime should be(instantAt(month = 2)) } } // always construct new instants to avoid sharing references, which would allow us to cheat when // comparing them inside the SimpleTimeServiceBackend private def instantAt(month: Int): Instant = ZonedDateTime.of(2020, month, 1, 0, 0, 0, 0, ZoneOffset.UTC).toInstant }
Example 153
Source File: TrackerImplTest.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.apiserver.services.tracking import akka.NotUsed import akka.stream.OverflowStrategy import akka.stream.scaladsl.{Keep, Source, SourceQueueWithComplete} import akka.stream.testkit.TestSubscriber import akka.stream.testkit.scaladsl.TestSink import com.daml.ledger.api.testing.utils.{ AkkaBeforeAndAfterAll, IsStatusException, TestingException } import com.daml.ledger.api.v1.command_service.SubmitAndWaitRequest import com.daml.ledger.api.v1.commands.Commands import com.daml.ledger.api.v1.completion.Completion import com.daml.dec.DirectExecutionContext import com.google.rpc.status.{Status => RpcStatus} import io.grpc.Status import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterEach, Matchers, Succeeded, WordSpec} import scala.concurrent.ExecutionContext.Implicits.global class TrackerImplTest extends WordSpec with Matchers with BeforeAndAfterEach with ScalaFutures with AkkaBeforeAndAfterAll { private var sut: Tracker = _ private var consumer: TestSubscriber.Probe[NotUsed] = _ private var queue: SourceQueueWithComplete[TrackerImpl.QueueInput] = _ private def input(cid: Int) = SubmitAndWaitRequest(Some(Commands(commandId = cid.toString))) override protected def beforeEach(): Unit = { val (q, sink) = Source .queue[TrackerImpl.QueueInput](1, OverflowStrategy.dropNew) .map { in => in.context.success(Completion(in.value.getCommands.commandId, Some(RpcStatus()))) NotUsed } .toMat(TestSink.probe[NotUsed])(Keep.both) .run() queue = q sut = new TrackerImpl(q) consumer = sink } override protected def afterEach(): Unit = { consumer.cancel() queue.complete() } "Tracker Implementation" when { "input is submitted, and the queue is available" should { "work successfully" in { val resultF1 = sut.track(input(1)) consumer.requestNext() val resultF = resultF1.flatMap(_ => sut.track(input(2)))(DirectExecutionContext) consumer.requestNext() whenReady(resultF)(_ => Succeeded) } } "input is submitted, and the queue is backpressuring" should { "return a RESOURCE_EXHAUSTED error" in { sut.track(input(1)) whenReady(sut.track(input(2)).failed)(IsStatusException(Status.RESOURCE_EXHAUSTED)) } } "input is submitted, and the queue has been completed" should { "return an ABORTED error" in { queue.complete() whenReady(sut.track(input(2)).failed)(IsStatusException(Status.ABORTED)) } } "input is submitted, and the queue has failed" should { "return an ABORTED error" in { queue.fail(TestingException("The queue fails with this error.")) whenReady(sut.track(input(2)).failed)(IsStatusException(Status.ABORTED)) } } } }
Example 154
Source File: GroupContiguousSpec.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.store.dao.events import akka.stream.scaladsl.{Sink, Source} import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll import org.scalatest.concurrent.ScalaFutures import org.scalatest.prop.PropertyChecks import org.scalatest.{AsyncFlatSpec, Matchers} final class GroupContiguousSpec extends AsyncFlatSpec with Matchers with PropertyChecks with ScalaFutures with AkkaBeforeAndAfterAll { behavior of "groupContiguous" override def spanScaleFactor: Double = 10 // Give some extra slack on CI it should "be equivalent to grouping on inputs with an ordered key" in forAll { pairs: List[(Int, String)] => val sortedPairs = pairs.sortBy(_._1) val grouped = groupContiguous(Source(sortedPairs))(by = _._1) whenReady(grouped.runWith(Sink.seq[Vector[(Int, String)]])) { _ should contain theSameElementsAs pairs.groupBy(_._1).values } } it should "be equivalent to grouping on inputs with a contiguous key" in { val pairsWithContiguousKeys = List(1 -> "baz", 0 -> "foo", 0 -> "bar", 0 -> "quux") val grouped = groupContiguous(Source(pairsWithContiguousKeys))(by = _._1) whenReady(grouped.runWith(Sink.seq[Vector[(Int, String)]])) { _.map(_.toSet) should contain theSameElementsAs pairsWithContiguousKeys .groupBy(_._1) .map(_._2.toSet) } } it should "behave as expected when grouping inputs without a contiguous key" in { val pairs = List(0 -> "foo", 0 -> "bar", 1 -> "baz", 0 -> "quux") val grouped = groupContiguous(Source(pairs))(by = _._1) whenReady(grouped.runWith(Sink.seq[Vector[(Int, String)]])) { _.map(_.toSet) should contain theSameElementsAs Vector( Set(0 -> "foo", 0 -> "bar"), Set(1 -> "baz"), Set(0 -> "quux"), ) } } }
Example 155
Source File: GetLedgerIdentityIT.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.api.checks.ledgerid import com.daml.ledger.api.v1.ledger_identity_service.GetLedgerIdentityRequest import com.daml.ledger.api.v1.ledger_identity_service.LedgerIdentityServiceGrpc.LedgerIdentityService import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpec} class GetLedgerIdentityIT(service: => LedgerIdentityService, expectedLedgerId: String) extends WordSpec with Matchers with ScalaFutures { "Ledger Identity Service" when { "Ledger Identity is requested" should { "return it" in { whenReady(service.getLedgerIdentity(GetLedgerIdentityRequest()))( _.ledgerId shouldEqual expectedLedgerId) } } } }
Example 156
Source File: DispatcherTest.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.akkastreams.dispatcher import java.util.concurrent.atomic.AtomicReference import akka.NotUsed import akka.stream.scaladsl.{Keep, Sink} import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll import com.daml.platform.akkastreams.dispatcher.SubSource.OneAfterAnother import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Milliseconds, Seconds, Span} import org.scalatest.{Matchers, WordSpec} import scala.concurrent.{ExecutionContextExecutor, Future} //TODO: merge/review the tests we have around the Dispatcher! class DispatcherTest extends WordSpec with AkkaBeforeAndAfterAll with Matchers with ScalaFutures { override implicit def patienceConfig: PatienceConfig = PatienceConfig(scaled(Span(10, Seconds)), scaled(Span(250, Milliseconds))) "A Dispatcher" should { "not race when creating new subscriptions" in { // The test setup here is a little different from the above tests, // because we wanted to be specific about emitted pairs and use of Thread.sleep. implicit val ec: ExecutionContextExecutor = materializer.executionContext val elements = new AtomicReference(Map.empty[Int, Int]) def readElement(i: Int): Future[Int] = Future { Thread.sleep(10) // In a previous version of Dispatcher, this sleep caused a race condition. elements.get()(i) } def readSuccessor(i: Int): Int = i + 1 // compromise between catching flakes and not taking too long 0 until 25 foreach { _ => val d = Dispatcher("test", 0, 0) // Verify that the results are what we expected val subscriptions = 1 until 10 map { i => elements.updateAndGet(m => m + (i -> i)) d.signalNewHead(i) d.startingAt(i - 1, OneAfterAnother(readSuccessor, readElement)) .toMat(Sink.collection)(Keep.right[NotUsed, Future[Seq[(Int, Int)]]]) .run() } d.close() subscriptions.zip(1 until 10) foreach { case (f, i) => whenReady(f) { vals => vals.map(_._1) should contain theSameElementsAs (i to 9) vals.map(_._2) should contain theSameElementsAs (i until 10) } } } } } }
Example 157
Source File: FlowUtilTest.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.http.util import akka.NotUsed import akka.actor.ActorSystem import akka.stream.Materializer import akka.stream.scaladsl.Source import org.scalacheck.{Gen, Arbitrary} import org.scalatest.concurrent.ScalaFutures import org.scalatest.prop.GeneratorDrivenPropertyChecks import org.scalatest.{FlatSpec, Matchers} import scalaz.{-\/, \/, \/-} import scala.concurrent.Future class FlowUtilTest extends FlatSpec with ScalaFutures with Matchers with GeneratorDrivenPropertyChecks { import FlowUtil._ implicit val asys: ActorSystem = ActorSystem(this.getClass.getSimpleName) implicit val materializer: Materializer = Materializer(asys) "allowOnlyFirstInput" should "pass 1st message through and replace all others with errors" in forAll( nonEmptyVectorOfInts) { xs: Vector[Int] => val error = "Error" val errorNum = Math.max(xs.size - 1, 0) val expected: Vector[String \/ Int] = xs.take(1).map(\/-(_)) ++ Vector.fill(errorNum)(-\/(error)) val input: Source[String \/ Int, NotUsed] = Source.fromIterator(() => xs.toIterator).map(\/-(_)) val actualF: Future[Vector[String \/ Int]] = input .via(allowOnlyFirstInput[String, Int](error)) .runFold(Vector.empty[String \/ Int])(_ :+ _) whenReady(actualF) { actual => actual shouldBe expected } } private val nonEmptyVectorOfInts: Gen[Vector[Int]] = Gen.nonEmptyBuildableOf[Vector[Int], Int](Arbitrary.arbitrary[Int]) }
Example 158
Source File: ReferenceServiceAndClientSpecHttp.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.grpc.adapter.operation import com.daml.grpc.adapter.client.ReferenceClientCompatibilityCheck import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpec} import java.net.InetSocketAddress class ReferenceServiceAndClientHttpSpec extends WordSpec with Matchers with BeforeAndAfterAll with ScalaFutures with ReferenceClientCompatibilityCheck with ReferenceServiceFixture { "Reference service" when { "testing with reference client" should { behave like referenceClientCompatible(clientStub) } } override def socketAddress = Some(new InetSocketAddress("127.0.0.1", 0)) }
Example 159
Source File: ReferenceServiceAndClientSpecInProcess.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.grpc.adapter.operation import com.daml.grpc.adapter.client.ReferenceClientCompatibilityCheck import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpec} class ReferenceServiceAndClientSpecInProcess extends WordSpec with Matchers with BeforeAndAfterAll with ScalaFutures with ReferenceClientCompatibilityCheck with ReferenceServiceFixture { "Reference service" when { "testing with reference client" should { behave like referenceClientCompatible(clientStub) } } override def socketAddress = None }
Example 160
Source File: ReferenceClientCompatibilityCheck.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.grpc.adapter.client import com.daml.grpc.adapter.utils.BufferingObserver import com.daml.platform.hello.HelloServiceGrpc.HelloServiceStub import com.daml.platform.hello.{HelloRequest, HelloResponse} import io.grpc.stub.StreamObserver import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpec} trait ReferenceClientCompatibilityCheck extends ResultAssertions with ScalaFutures with Matchers { self: WordSpec => def referenceClientCompatible(helloStub: => HelloServiceStub) = { "respond with the correct number of elements and correct content in 1-* setup" in { val observer = new BufferingObserver[HelloResponse] helloStub.serverStreaming(HelloRequest(elemCount), observer) whenReady(observer.resultsF)(assertElementsAreInOrder(elemCount.toLong)) } "handle cancellation in 1-* setup" in { val observer = new BufferingObserver[HelloResponse](Some(halfCount)) helloStub .serverStreaming(HelloRequest(elemCount), observer) whenReady(observer.resultsF)(assertElementsAreInOrder(halfCount.toLong)) } } private def checkClientStreamingSetup( observer: BufferingObserver[HelloResponse], reqObserver: StreamObserver[HelloRequest]) = { for (i <- elemRange) { reqObserver.onNext(HelloRequest(i)) } reqObserver.onCompleted() whenReady(observer.resultsF)(elementsAreSummed) } private def checkBidiSetup( observer: BufferingObserver[HelloResponse], reqObserver: StreamObserver[HelloRequest]) = { for (i <- elemRange) { reqObserver.onNext(HelloRequest(i)) } reqObserver.onCompleted() whenReady(observer.resultsF)(everyElementIsDoubled) } }
Example 161
Source File: AkkaClientCompatibilityCheck.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.grpc.adapter.operation import akka.actor.ActorSystem import akka.stream.scaladsl.Sink import akka.stream.{Materializer, ThrottleMode} import com.daml.grpc.adapter.ExecutionSequencerFactory import com.daml.grpc.adapter.client.ResultAssertions import com.daml.grpc.adapter.client.akka.ClientAdapter import com.daml.platform.hello.HelloRequest import com.daml.platform.hello.HelloServiceGrpc.HelloServiceStub import io.grpc.{ClientCall, MethodDescriptor} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpec} import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ trait AkkaClientCompatibilityCheck { self: WordSpec with Matchers with ScalaFutures with ResultAssertions => implicit protected def system: ActorSystem implicit protected def materializer: Materializer implicit protected def esf: ExecutionSequencerFactory def akkaClientCompatible(helloStub: => HelloServiceStub): Unit = { def getCall[Req, Resp](call: MethodDescriptor[Req, Resp]): ClientCall[Req, Resp] = helloStub.getChannel.newCall(call, helloStub.getCallOptions) "respond with the correct number of elements and correct content in 1-* setup" in { val elemsF = ClientAdapter .serverStreaming(HelloRequest(elemCount), helloStub.serverStreaming) .runWith(Sink.seq) whenReady(elemsF)(assertElementsAreInOrder(elemCount.toLong)) } "tolerate rematerialization of the same response source in 1-* setup" in { val source = ClientAdapter .serverStreaming(HelloRequest(elemCount), helloStub.serverStreaming) val elemsF1 = source.runWith(Sink.seq) val elemsF2 = source.runWith(Sink.seq) whenReady(for { elems1 <- elemsF1 elems2 <- elemsF2 } yield elems1 -> elems2)({ case (elems1, elems2) => val check = assertElementsAreInOrder(elemCount.toLong) _ check(elems1) check(elems2) }) } "respond with the correct number of elements and correct content in 1-* setup when back-pressured" in { val elemsF = ClientAdapter .serverStreaming(HelloRequest(elemCount), helloStub.serverStreaming) .throttle(100, 1.second, 16, ThrottleMode.shaping) .runWith(Sink.seq) whenReady(elemsF)(assertElementsAreInOrder(elemCount.toLong)) } "handle cancellation in 1-* setup" in { val elemsF = ClientAdapter .serverStreaming(HelloRequest(elemCount), helloStub.serverStreaming) .take(halfCount.toLong) .runWith(Sink.seq) whenReady(elemsF)(assertElementsAreInOrder(halfCount.toLong)) } } }
Example 162
Source File: AkkaServiceSpecBase.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.grpc.adapter.operation import java.util.concurrent.TimeUnit._ import java.net.SocketAddress import com.daml.grpc.adapter.{ExecutionSequencerFactory, TestExecutionSequencerFactory} import com.daml.grpc.adapter.client.ReferenceClientCompatibilityCheck import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll import org.awaitility.Awaitility._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.{Matchers, WordSpec} abstract class AkkaServiceSpecBase(override protected val socketAddress: Option[SocketAddress]) extends WordSpec with Matchers with AkkaBeforeAndAfterAll with ScalaFutures with ReferenceClientCompatibilityCheck with AkkaClientCompatibilityCheck with AkkaServiceFixture { "Akka service" when { "testing with reference client" should { behave like referenceClientCompatible(clientStub) } "testing with akka client" should { behave like akkaClientCompatible(clientStub) } "asked for server call count" should { "return the correct number" in { await() .atMost(5, SECONDS) .until(() => service.getServerStreamingCalls == 7) // The number of calls in the previous tests } } } override implicit protected def esf: ExecutionSequencerFactory = TestExecutionSequencerFactory.instance }
Example 163
Source File: AkkaClientWithReferenceServiceSpecBase.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.grpc.adapter.operation import akka.stream.scaladsl.Sink import com.daml.grpc.adapter.client.ReferenceClientCompatibilityCheck import com.daml.grpc.adapter.client.akka.ClientAdapter import com.daml.grpc.adapter.{ExecutionSequencerFactory, TestExecutionSequencerFactory} import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll import com.daml.platform.hello.HelloRequest import io.grpc.StatusRuntimeException import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpec} import java.net.SocketAddress abstract class AkkaClientWithReferenceServiceSpecBase( override protected val socketAddress: Option[SocketAddress]) extends WordSpec with Matchers with BeforeAndAfterAll with AkkaBeforeAndAfterAll with ScalaFutures with ReferenceClientCompatibilityCheck with AkkaClientCompatibilityCheck with ReferenceServiceFixture { protected implicit val esf: ExecutionSequencerFactory = TestExecutionSequencerFactory.instance "Akka client" when { "testing with reference service" should { behave like akkaClientCompatible(clientStub) } "handle request errors when server streaming" in { val elemsF = ClientAdapter .serverStreaming(HelloRequest(-1), clientStub.serverStreaming) .runWith(Sink.ignore) whenReady(elemsF.failed)(_ shouldBe a[StatusRuntimeException]) } } }
Example 164
Source File: ScenarioRunnerTest.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.lf package speedy import com.daml.lf.data.Ref import com.daml.lf.language.Ast import com.daml.lf.language.Ast.ScenarioGetParty import com.daml.lf.transaction.TransactionVersions import com.daml.lf.value.ValueVersions import org.scalatest._ import org.scalatest.concurrent.ScalaFutures class ScenarioRunnerTest extends AsyncWordSpec with Matchers with ScalaFutures { "ScenarioRunner" can { "mangle party names correctly" in { val compiledPackages = PureCompiledPackages(Map.empty).right.get val e = Ast.EScenario(ScenarioGetParty(Ast.EPrimLit(Ast.PLText(("foo-bar"))))) val txSeed = crypto.Hash.hashPrivateKey("ScenarioRunnerTest") val m = Speedy.Machine.fromScenarioExpr( compiledPackages, txSeed, e, ValueVersions.SupportedDevVersions, TransactionVersions.SupportedDevVersions, ) val sr = ScenarioRunner(m, _ + "-XXX") sr.run() match { case Right((_, _, _, value)) => value shouldBe SValue.SParty(Ref.Party.assertFromString("foo-bar-XXX")) case res => sys.error(s"unexpected result $res") } } } }
Example 165
Source File: ApplicationSpec.scala From Scala-Programming-Projects with MIT License | 5 votes |
import org.scalatest.Matchers._ import org.scalatest.concurrent.PatienceConfiguration.Timeout import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Seconds, Span} import org.scalatestplus.play.PlaySpec import org.scalatestplus.play.guice.GuiceOneServerPerSuite import play.api.libs.ws.WSClient import play.api.test.Helpers._ import scala.concurrent.duration._ class ApplicationSpec extends PlaySpec with ScalaFutures with GuiceOneServerPerSuite { "Application" should { val wsClient = app.injector.instanceOf[WSClient] val myPublicAddress = s"localhost:$port" "send 404 on a bad request" in { val testURL = s"http://$myPublicAddress/boom" whenReady(wsClient.url(testURL).get(), Timeout(1 second)) { response => response.status mustBe NOT_FOUND } } "render the index page" in { val testURL = s"http://$myPublicAddress/" whenReady(wsClient.url(testURL).get(), Timeout(1 second)) { response => response.status mustBe OK response.contentType should include("text/html") } } } }
Example 166
Source File: ProductDaoSpec.scala From Scala-Programming-Projects with MIT License | 5 votes |
import dao.ProductDao import io.fscala.shopping.shared.Product import org.scalatest.Matchers._ import org.scalatest.concurrent.ScalaFutures import org.scalatestplus.play._ import org.scalatestplus.play.guice.GuiceOneAppPerSuite import play.api.Application class ProductDaoSpec extends PlaySpec with ScalaFutures with GuiceOneAppPerSuite { "ProductDao" should { "Have default rows on database creation" in { val app2dao = Application.instanceCache[ProductDao] val dao: ProductDao = app2dao(app) val expected = Set( Product("PEPPER", "ALD2", "PEPPER is a robot moving with wheels and with a screen as human interaction", 7000), Product("NAO", "ALD1", "NAO is an humanoid robot.", 3500), Product("BEOBOT", "BEO1", "Beobot is a multipurpose robot.", 159.0) ) dao.all().futureValue should contain theSameElementsAs (expected) } } }
Example 167
Source File: CartDaoSpec.scala From Scala-Programming-Projects with MIT License | 5 votes |
import dao.CartDao import io.fscala.shopping.shared.{Cart, ProductInCart} import org.scalatest.Matchers._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.RecoverMethods._ import org.scalatestplus.play._ import org.scalatestplus.play.guice.GuiceOneAppPerSuite import play.api.Application import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.Future class CartDaoSpec extends PlaySpec with ScalaFutures with GuiceOneAppPerSuite { "CartDao" should { val app2dao = Application.instanceCache[CartDao] "be empty on database creation" in { val dao: CartDao = app2dao(app) dao.all().futureValue shouldBe empty } "accept to add new cart" in { val dao: CartDao = app2dao(app) val user = "userAdd" val expected = Set( Cart(user, "ALD1", 1), Cart(user, "BEO1", 5) ) val noise = Set( Cart("userNoise", "ALD2", 10) ) val allCarts = expected ++ noise val insertFutures = allCarts.map(dao.insert) whenReady(Future.sequence(insertFutures)) { _ => dao.cart4(user).futureValue should contain theSameElementsAs expected dao.all().futureValue.size should equal(allCarts.size) } } "error thrown when adding a cart with same user and productCode" in { val dao: CartDao = app2dao(app) val user = "userAdd" val expected = Set( Cart(user, "ALD1", 1), Cart(user, "BEO1", 5) ) val noise = Set( Cart(user, "ALD1", 10) ) val allCarts = expected ++ noise val insertFutures = allCarts.map(dao.insert) recoverToSucceededIf[org.h2.jdbc.JdbcSQLException]{ Future.sequence(insertFutures) } } "accept to remove a product in a cart" in { val dao: CartDao = app2dao(app) val user = "userRmv" val initial = Vector( Cart(user, "ALD1", 1), Cart(user, "BEO1", 5) ) val expected = Vector(Cart(user, "ALD1", 1)) whenReady(Future.sequence(initial.map(dao.insert(_)))) { _ => dao.remove(ProductInCart(user, "BEO1")).futureValue dao.cart4(user).futureValue should contain theSameElementsAs (expected) } } "accept to update quantities of an item in a cart" in { val dao: CartDao = app2dao(app) val user = "userUpd" val initial = Vector(Cart(user, "ALD1", 1)) val expected = Vector(Cart(user, "ALD1", 5)) whenReady(Future.sequence(initial.map(dao.insert(_)))) { _ => dao.update(Cart(user, "ALD1", 5)).futureValue dao.cart4(user).futureValue should contain theSameElementsAs (expected) } } } }
Example 168
Source File: ObservableSpec.scala From gbf-raidfinder with MIT License | 5 votes |
package walfie.gbf.raidfinder.util import monix.eval.Task import monix.execution.Ack import monix.execution.schedulers.TestScheduler import monix.reactive.{Observable, Observer} import org.scalatest._ import org.scalatest.concurrent.ScalaFutures import org.scalatest.Matchers._ import scala.concurrent.Future class ObservableSpec extends FreeSpec with ScalaFutures { case class Item(id: Int) object ItemRepository { def getItems(count: Int, pageNum: Int): Future[Seq[Item]] = Future.successful { (0 until count).map(i => Item(pageNum * count + i)) } } // This was added as [[ObservableUtil.fromAsyncStateAction]] before // [[Observable.fromAsyncStateAction]] existed in Monix. Keeping these // tests around because why not. "fromAsyncStateAction" - { implicit val scheduler = TestScheduler() "yield an observable" in { val itemsPerPage = 5 val observable = Observable.fromAsyncStateAction { pageNum: Int => val nextPage = pageNum + 1 val itemsF = ItemRepository.getItems(itemsPerPage, pageNum) Task.fromFuture(itemsF).map(_ -> nextPage) }(0) val resultF = observable.take(3).toListL.runAsync scheduler.tick() resultF.futureValue shouldBe Seq( (0 to 4).map(Item.apply), (5 to 9).map(Item.apply), (10 to 14).map(Item.apply) ) } "stop on error" in { implicit val scheduler = TestScheduler() // Create an observable counter that errors when it gets to 5 val error = new RuntimeException("Oh no!") val observable = Observable .fromAsyncStateAction[Int, Int] { counter: Int => Task.fromFuture { if (counter == 5) Future.failed(error) else Future.successful(counter -> (counter + 1)) } }(0) val observer = new TestObserver[Int] observable.take(10).subscribe(observer) scheduler.tick() observer.received shouldBe (0 to 4) } } }
Example 169
Source File: NetServiceSpec.scala From mantis with Apache License 2.0 | 5 votes |
package io.iohk.ethereum.jsonrpc import java.net.InetSocketAddress import akka.actor.ActorSystem import akka.agent.Agent import akka.testkit.TestProbe import io.iohk.ethereum.{NormalPatience, crypto} import io.iohk.ethereum.jsonrpc.NetService._ import io.iohk.ethereum.network.{Peer, PeerActor, PeerManagerActor} import io.iohk.ethereum.nodebuilder.SecureRandomBuilder import io.iohk.ethereum.utils.{NodeStatus, ServerStatus} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{FlatSpec, Matchers} import scala.concurrent.duration._ import scala.concurrent.ExecutionContext.Implicits.global class NetServiceSpec extends FlatSpec with Matchers with ScalaFutures with NormalPatience with SecureRandomBuilder { "NetService" should "return handshaked peer count" in new TestSetup { val resF = netService.peerCount(PeerCountRequest()) peerManager.expectMsg(PeerManagerActor.GetPeers) peerManager.reply(PeerManagerActor.Peers(Map( Peer(new InetSocketAddress(1), testRef, false) -> PeerActor.Status.Handshaked, Peer(new InetSocketAddress(2), testRef, false) -> PeerActor.Status.Handshaked, Peer(new InetSocketAddress(3), testRef, false) -> PeerActor.Status.Connecting))) resF.futureValue shouldBe Right(PeerCountResponse(2)) } it should "return listening response" in new TestSetup { netService.listening(ListeningRequest()).futureValue shouldBe Right(ListeningResponse(true)) } it should "return version response" in new TestSetup { netService.version(VersionRequest()).futureValue shouldBe Right(VersionResponse("1")) } trait TestSetup { implicit val system = ActorSystem("Testsystem") val testRef = TestProbe().ref val peerManager = TestProbe() val nodeStatus = NodeStatus(crypto.generateKeyPair(secureRandom), ServerStatus.Listening(new InetSocketAddress(9000)), discoveryStatus = ServerStatus.NotListening) val netService = new NetService(Agent(nodeStatus), peerManager.ref, NetServiceConfig(5.seconds)) } }
Example 170
Source File: TestSpec.scala From akka-serialization-test with Apache License 2.0 | 5 votes |
package com.github.dnvriend import akka.actor.{ ActorRef, ActorSystem, PoisonPill } import akka.event.{ Logging, LoggingAdapter } import akka.serialization.SerializationExtension import akka.stream.{ ActorMaterializer, Materializer } import akka.testkit.TestProbe import akka.util.Timeout import org.scalatest.concurrent.{ Eventually, ScalaFutures } import org.scalatest.prop.PropertyChecks import org.scalatest.{ BeforeAndAfterAll, FlatSpec, GivenWhenThen, Matchers } import scala.concurrent.duration._ import scala.concurrent.{ ExecutionContext, Future } import scala.util.Try trait TestSpec extends FlatSpec with Matchers with GivenWhenThen with ScalaFutures with BeforeAndAfterAll with Eventually with PropertyChecks with AkkaPersistenceQueries with AkkaStreamUtils with InMemoryCleanup { implicit val timeout: Timeout = Timeout(10.seconds) implicit val system: ActorSystem = ActorSystem() implicit val ec: ExecutionContext = system.dispatcher implicit val mat: Materializer = ActorMaterializer() implicit val log: LoggingAdapter = Logging(system, this.getClass) implicit val pc: PatienceConfig = PatienceConfig(timeout = 50.seconds) val serialization = SerializationExtension(system) implicit class FutureToTry[T](f: Future[T]) { def toTry: Try[T] = Try(f.futureValue) } def killActors(actors: ActorRef*): Unit = { val probe = TestProbe() actors.foreach { actor ⇒ probe watch actor actor ! PoisonPill probe expectTerminated actor } } override protected def afterAll(): Unit = { system.terminate() system.whenTerminated.toTry should be a 'success } }
Example 171
Source File: MutateRouteSpec.scala From incubator-s2graph with Apache License 2.0 | 5 votes |
package org.apache.s2graph.http import akka.http.scaladsl.marshalling.Marshal import akka.http.scaladsl.model._ import akka.http.scaladsl.testkit.ScalatestRouteTest import com.typesafe.config.ConfigFactory import org.apache.s2graph.core.Management.JsonModel.Prop import org.apache.s2graph.core.S2Graph import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpec} import org.slf4j.LoggerFactory import play.api.libs.json.{JsValue, Json} class MutateRouteSpec extends WordSpec with Matchers with PlayJsonSupport with ScalaFutures with ScalatestRouteTest with S2GraphMutateRoute with BeforeAndAfterAll { import scala.collection.JavaConverters._ val dbUrl = "jdbc:h2:file:./var/metastore_mutate_route;MODE=MYSQL;AUTO_SERVER=true" val config = ConfigFactory.parseMap(Map("db.default.url" -> dbUrl).asJava) lazy val s2graph = new S2Graph(config.withFallback(ConfigFactory.load())) override val logger = LoggerFactory.getLogger(this.getClass) override def afterAll(): Unit = { s2graph.shutdown(true) } lazy val routes = mutateRoute val serviceName = "kakaoFavorites" val columnName = "userName" "MutateRoute" should { "be able to insert vertex (POST /mutate/vertex/insert)" in { s2graph.management.createService(serviceName, "localhost", s"${serviceName}-dev", 1, None) s2graph.management.createServiceColumn(serviceName, columnName, "string", Seq(Prop("age", "0", "integer"))) // {"timestamp": 10, "serviceName": "s2graph", "columnName": "user", "id": 1, "props": {}} val param = Json.obj( "timestamp" -> 10, "serviceName" -> serviceName, "columnName" -> columnName, "id" -> "user_a", "props" -> Json.obj( "age" -> 20 ) ) val entity = Marshal(param).to[MessageEntity].futureValue val request = Post("/vertex/insert").withEntity(entity) request ~> routes ~> check { status should ===(StatusCodes.OK) contentType should ===(ContentTypes.`application/json`) val response = entityAs[JsValue] response should ===(Json.toJson(Seq(true))) } } } }
Example 172
Source File: AdminRouteSpec.scala From incubator-s2graph with Apache License 2.0 | 5 votes |
package org.apache.s2graph.http import akka.http.scaladsl.marshalling.Marshal import akka.http.scaladsl.model._ import akka.http.scaladsl.testkit.ScalatestRouteTest import com.typesafe.config.ConfigFactory import org.apache.s2graph.core.Management.JsonModel.Prop import org.apache.s2graph.core.S2Graph import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Matchers, WordSpec} import org.slf4j.LoggerFactory import play.api.libs.json.{JsString, JsValue, Json} class AdminRoutesSpec extends WordSpec with Matchers with ScalaFutures with ScalatestRouteTest with S2GraphAdminRoute with BeforeAndAfterAll { import scala.collection.JavaConverters._ val dbUrl = "jdbc:h2:file:./var/metastore_admin_route;MODE=MYSQL;AUTO_SERVER=true" val config = ConfigFactory.parseMap(Map("db.default.url" -> dbUrl).asJava) lazy val s2graph = new S2Graph(config.withFallback(ConfigFactory.load())) override val logger = LoggerFactory.getLogger(this.getClass) override def afterAll(): Unit = { s2graph.shutdown(true) } lazy val routes = adminRoute val serviceName = "kakaoFavorites" val columnName = "userName" "AdminRoute" should { "be able to create service (POST /createService)" in { val serviceParam = Json.obj( "serviceName" -> serviceName, "compressionAlgorithm" -> "gz" ) val serviceEntity = Marshal(serviceParam).to[MessageEntity].futureValue val request = Post("/createService").withEntity(serviceEntity) request ~> routes ~> check { status should ===(StatusCodes.Created) contentType should ===(ContentTypes.`application/json`) val response = entityAs[JsValue] (response \\ "name").head should ===(JsString("kakaoFavorites")) (response \\ "status").head should ===(JsString("ok")) } } "return service if present (GET /getService/{serviceName})" in { val request = HttpRequest(uri = s"/getService/$serviceName") request ~> routes ~> check { status should ===(StatusCodes.OK) contentType should ===(ContentTypes.`application/json`) val response = entityAs[JsValue] (response \\ "name").head should ===(JsString("kakaoFavorites")) } } "be able to create serviceColumn (POST /createServiceColumn)" in { val serviceColumnParam = Json.obj( "serviceName" -> serviceName, "columnName" -> columnName, "columnType" -> "string", "props" -> Json.toJson( Seq( Json.obj("name" -> "age", "defaultValue" -> "-1", "dataType" -> "integer") ) ) ) val serviceColumnEntity = Marshal(serviceColumnParam).to[MessageEntity].futureValue val request = Post("/createServiceColumn").withEntity(serviceColumnEntity) request ~> routes ~> check { status should ===(StatusCodes.Created) contentType should ===(ContentTypes.`application/json`) val response = entityAs[JsValue] (response \\ "serviceName").head should ===(JsString("kakaoFavorites")) (response \\ "columnName").head should ===(JsString("userName")) (response \\ "status").head should ===(JsString("ok")) } } } }
Example 173
Source File: DynamoDBJournalV1SyncSpec.scala From akka-persistence-dynamodb with Apache License 2.0 | 5 votes |
package com.github.j5ik2o.akka.persistence.dynamodb.journal import java.net.URI import akka.persistence.CapabilityFlag import akka.persistence.journal.JournalSpec import com.github.j5ik2o.akka.persistence.dynamodb.config.client.{ ClientType, ClientVersion } import com.github.j5ik2o.akka.persistence.dynamodb.utils.{ DynamoDBSpecSupport, RandomPortUtil } import com.github.j5ik2o.reactive.aws.dynamodb.DynamoDbAsyncClient import com.typesafe.config.{ Config, ConfigFactory } import org.scalatest.concurrent.ScalaFutures import software.amazon.awssdk.auth.credentials.{ AwsBasicCredentials, StaticCredentialsProvider } import software.amazon.awssdk.services.dynamodb.{ DynamoDbAsyncClient => JavaDynamoDbAsyncClient } import scala.concurrent.duration._ object DynamoDBJournalV1SyncSpec { val dynamoDBPort: Int = RandomPortUtil.temporaryServerPort() val legacyJournalMode: Boolean = false } class DynamoDBJournalV1SyncSpec extends JournalSpec( ConfigHelper .config( "journal-reference", legacyConfigFormat = false, legacyJournalMode = DynamoDBJournalV1AsyncSpec.legacyJournalMode, dynamoDBPort = DynamoDBJournalV1AsyncSpec.dynamoDBPort, clientVersion = ClientVersion.V1, clientType = ClientType.Sync, None, None ) ) with ScalaFutures with DynamoDBSpecSupport { override protected def supportsRejectingNonSerializableObjects: CapabilityFlag = CapabilityFlag.on() implicit val pc: PatienceConfig = PatienceConfig(30 seconds, 1 seconds) override protected lazy val dynamoDBPort: Int = DynamoDBJournalV1AsyncSpec.dynamoDBPort override val legacyJournalTable: Boolean = DynamoDBJournalV1AsyncSpec.legacyJournalMode val underlying: JavaDynamoDbAsyncClient = JavaDynamoDbAsyncClient .builder() .credentialsProvider( StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKeyId, secretAccessKey)) ) .endpointOverride(URI.create(dynamoDBEndpoint)) .build() override def dynamoDbAsyncClient: DynamoDbAsyncClient = DynamoDbAsyncClient(underlying) override def beforeAll(): Unit = { super.beforeAll() createTable() } override def afterAll(): Unit = { deleteTable() super.afterAll() } }
Example 174
Source File: DynamoDBJournalV2SyncSpec.scala From akka-persistence-dynamodb with Apache License 2.0 | 5 votes |
package com.github.j5ik2o.akka.persistence.dynamodb.journal import java.net.URI import akka.persistence.CapabilityFlag import akka.persistence.journal.JournalSpec import com.github.j5ik2o.akka.persistence.dynamodb.config.client.{ ClientType, ClientVersion } import com.github.j5ik2o.akka.persistence.dynamodb.utils.{ DynamoDBSpecSupport, RandomPortUtil } import com.github.j5ik2o.reactive.aws.dynamodb.DynamoDbAsyncClient import com.typesafe.config.ConfigFactory import org.scalatest.concurrent.ScalaFutures import software.amazon.awssdk.auth.credentials.{ AwsBasicCredentials, StaticCredentialsProvider } import software.amazon.awssdk.services.dynamodb.{ DynamoDbAsyncClient => JavaDynamoDbAsyncClient } import scala.concurrent.duration._ object DynamoDBJournalV2SyncSpec { val dynamoDBPort: Int = RandomPortUtil.temporaryServerPort() val legacyJournalMode: Boolean = false } class DynamoDBJournalV2SyncSpec extends JournalSpec( ConfigHelper.config( "journal-reference", legacyConfigFormat = false, legacyJournalMode = DynamoDBJournalV2AsyncSpec.legacyJournalMode, dynamoDBPort = DynamoDBJournalV2AsyncSpec.dynamoDBPort, clientVersion = ClientVersion.V2, clientType = ClientType.Sync, None, None ) ) with ScalaFutures with DynamoDBSpecSupport { override protected def supportsRejectingNonSerializableObjects: CapabilityFlag = CapabilityFlag.on() implicit val pc: PatienceConfig = PatienceConfig(30 seconds, 1 seconds) override protected lazy val dynamoDBPort: Int = DynamoDBJournalV2AsyncSpec.dynamoDBPort override val legacyJournalTable: Boolean = DynamoDBJournalV2AsyncSpec.legacyJournalMode val underlying: JavaDynamoDbAsyncClient = JavaDynamoDbAsyncClient .builder() .credentialsProvider( StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKeyId, secretAccessKey)) ) .endpointOverride(URI.create(dynamoDBEndpoint)) .build() override def dynamoDbAsyncClient: DynamoDbAsyncClient = DynamoDbAsyncClient(underlying) override def beforeAll(): Unit = { super.beforeAll() createTable() } override def afterAll(): Unit = { deleteTable() super.afterAll() } }
Example 175
Source File: DynamoDBJournalPerfSpec.scala From akka-persistence-dynamodb with Apache License 2.0 | 5 votes |
package com.github.j5ik2o.akka.persistence.dynamodb.journal import java.net.URI import akka.persistence.CapabilityFlag import akka.persistence.journal.JournalPerfSpec import com.github.j5ik2o.akka.persistence.dynamodb.utils.{ DynamoDBSpecSupport, RandomPortUtil } import com.github.j5ik2o.reactive.aws.dynamodb.DynamoDbAsyncClient import com.typesafe.config.ConfigFactory import org.scalatest.BeforeAndAfterAll import org.scalatest.concurrent.ScalaFutures import software.amazon.awssdk.auth.credentials.{ AwsBasicCredentials, StaticCredentialsProvider } import software.amazon.awssdk.services.dynamodb.{ DynamoDbAsyncClient => JavaDynamoDbAsyncClient } import scala.concurrent.duration._ object DynamoDBJournalPerfSpec { val dynamoDBPort = RandomPortUtil.temporaryServerPort() } class DynamoDBJournalPerfSpec extends JournalPerfSpec( ConfigFactory .parseString( s""" |j5ik2o.dynamo-db-journal { | shard-count = 2 | queue-buffer-size = 1024 | queue-parallelism = 1 | write-parallelism = 1 | query-batch-size = 1024 | dynamo-db-client { | endpoint = "http://127.0.0.1:${DynamoDBJournalPerfSpec.dynamoDBPort}/" | } |} | |j5ik2o.dynamo-db-snapshot.dynamo-db-client { | endpoint = "http://127.0.0.1:${DynamoDBJournalPerfSpec.dynamoDBPort}/" |} | """.stripMargin ).withFallback(ConfigFactory.load("journal-reference")) ) with BeforeAndAfterAll with ScalaFutures with DynamoDBSpecSupport { override protected def supportsRejectingNonSerializableObjects: CapabilityFlag = false override def measurementIterations: Int = 5 override protected lazy val dynamoDBPort: Int = DynamoDBJournalPerfSpec.dynamoDBPort val underlying: JavaDynamoDbAsyncClient = JavaDynamoDbAsyncClient .builder() .credentialsProvider( StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKeyId, secretAccessKey)) ) .endpointOverride(URI.create(dynamoDBEndpoint)) .build() override def dynamoDbAsyncClient: DynamoDbAsyncClient = DynamoDbAsyncClient(underlying) override def beforeAll(): Unit = { super.beforeAll() createTable() } override def afterAll(): Unit = { deleteTable() super.afterAll() } }
Example 176
Source File: DynamoDBJournalV1AsyncSpec.scala From akka-persistence-dynamodb with Apache License 2.0 | 5 votes |
package com.github.j5ik2o.akka.persistence.dynamodb.journal import java.net.URI import akka.persistence.CapabilityFlag import akka.persistence.journal.JournalSpec import com.github.j5ik2o.akka.persistence.dynamodb.config.client.{ ClientType, ClientVersion } import com.github.j5ik2o.akka.persistence.dynamodb.utils.{ DynamoDBSpecSupport, RandomPortUtil } import com.github.j5ik2o.reactive.aws.dynamodb.DynamoDbAsyncClient import org.scalatest.concurrent.ScalaFutures import software.amazon.awssdk.auth.credentials.{ AwsBasicCredentials, StaticCredentialsProvider } import software.amazon.awssdk.services.dynamodb.{ DynamoDbAsyncClient => JavaDynamoDbAsyncClient } import scala.concurrent.duration._ object DynamoDBJournalV1AsyncSpec { val dynamoDBPort: Int = RandomPortUtil.temporaryServerPort() val legacyJournalMode: Boolean = false } class DynamoDBJournalV1AsyncSpec extends JournalSpec( ConfigHelper .config( "journal-reference", legacyConfigFormat = false, legacyJournalMode = DynamoDBJournalV1AsyncSpec.legacyJournalMode, dynamoDBPort = DynamoDBJournalV1AsyncSpec.dynamoDBPort, clientVersion = ClientVersion.V1, clientType = ClientType.Async, None, None ) ) with ScalaFutures with DynamoDBSpecSupport { override protected def supportsRejectingNonSerializableObjects: CapabilityFlag = CapabilityFlag.on() implicit val pc: PatienceConfig = PatienceConfig(30 seconds, 1 seconds) override protected lazy val dynamoDBPort: Int = DynamoDBJournalV1AsyncSpec.dynamoDBPort override val legacyJournalTable: Boolean = DynamoDBJournalV1AsyncSpec.legacyJournalMode val underlying: JavaDynamoDbAsyncClient = JavaDynamoDbAsyncClient .builder() .credentialsProvider( StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKeyId, secretAccessKey)) ) .endpointOverride(URI.create(dynamoDBEndpoint)) .build() override def dynamoDbAsyncClient: DynamoDbAsyncClient = DynamoDbAsyncClient(underlying) override def beforeAll(): Unit = { super.beforeAll() createTable() } override def afterAll(): Unit = { deleteTable() super.afterAll() } }
Example 177
Source File: DynamoDBJournalV2AsyncSpec.scala From akka-persistence-dynamodb with Apache License 2.0 | 5 votes |
package com.github.j5ik2o.akka.persistence.dynamodb.journal import java.net.URI import akka.persistence.CapabilityFlag import akka.persistence.journal.JournalSpec import com.github.j5ik2o.akka.persistence.dynamodb.config.client.{ ClientType, ClientVersion } import com.github.j5ik2o.akka.persistence.dynamodb.utils.{ DynamoDBSpecSupport, RandomPortUtil } import com.github.j5ik2o.reactive.aws.dynamodb.DynamoDbAsyncClient import org.scalatest.concurrent.ScalaFutures import software.amazon.awssdk.auth.credentials.{ AwsBasicCredentials, StaticCredentialsProvider } import software.amazon.awssdk.services.dynamodb.{ DynamoDbAsyncClient => JavaDynamoDbAsyncClient } import scala.concurrent.duration._ object DynamoDBJournalV2AsyncSpec { val dynamoDBPort: Int = RandomPortUtil.temporaryServerPort() val legacyJournalMode: Boolean = false } class DynamoDBJournalV2AsyncSpec extends JournalSpec( ConfigHelper.config( "journal-reference", legacyConfigFormat = false, legacyJournalMode = DynamoDBJournalV2AsyncSpec.legacyJournalMode, dynamoDBPort = DynamoDBJournalV2AsyncSpec.dynamoDBPort, clientVersion = ClientVersion.V2, clientType = ClientType.Async, None, None ) ) with ScalaFutures with DynamoDBSpecSupport { override protected def supportsRejectingNonSerializableObjects: CapabilityFlag = CapabilityFlag.on() implicit val pc: PatienceConfig = PatienceConfig(30 seconds, 1 seconds) override protected lazy val dynamoDBPort: Int = DynamoDBJournalV2AsyncSpec.dynamoDBPort override val legacyJournalTable: Boolean = DynamoDBJournalV2AsyncSpec.legacyJournalMode val underlying: JavaDynamoDbAsyncClient = JavaDynamoDbAsyncClient .builder() .credentialsProvider( StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKeyId, secretAccessKey)) ) .endpointOverride(URI.create(dynamoDBEndpoint)) .build() override def dynamoDbAsyncClient: DynamoDbAsyncClient = DynamoDbAsyncClient(underlying) override def beforeAll(): Unit = { super.beforeAll() createTable() } override def afterAll(): Unit = { deleteTable() super.afterAll() } }
Example 178
Source File: DynamoDBSnapshotStoreSpec.scala From akka-persistence-dynamodb with Apache License 2.0 | 5 votes |
package com.github.j5ik2o.akka.persistence.dynamodb.snapshot import java.net.URI import akka.persistence.snapshot.SnapshotStoreSpec import com.github.j5ik2o.akka.persistence.dynamodb.utils.{ DynamoDBSpecSupport, RandomPortUtil } import com.github.j5ik2o.reactive.aws.dynamodb.DynamoDbAsyncClient import com.typesafe.config.ConfigFactory import org.scalatest.concurrent.ScalaFutures import software.amazon.awssdk.auth.credentials.{ AwsBasicCredentials, StaticCredentialsProvider } import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient import software.amazon.awssdk.services.dynamodb.{ DynamoDbAsyncClient => JavaDynamoDbAsyncClient } import scala.concurrent.duration._ object DynamoDBSnapshotStoreSpec { val dynamoDBPort = RandomPortUtil.temporaryServerPort() } class DynamoDBSnapshotStoreSpec extends SnapshotStoreSpec( ConfigFactory .parseString( s""" |j5ik2o.dynamo-db-journal.dynamo-db-client { | endpoint = "http://127.0.0.1:${DynamoDBSnapshotStoreSpec.dynamoDBPort}/" |} | |j5ik2o.dynamo-db-snapshot.dynamo-db-client { | endpoint = "http://127.0.0.1:${DynamoDBSnapshotStoreSpec.dynamoDBPort}/" |} | |j5ik2o.dynamo-db-read-journal.dynamo-db-client { | endpoint = "http://127.0.0.1:${DynamoDBSnapshotStoreSpec.dynamoDBPort}/" |} """.stripMargin ).withFallback(ConfigFactory.load("snapshot-reference")) ) with ScalaFutures with DynamoDBSpecSupport { implicit val pc: PatienceConfig = PatienceConfig(30 seconds, 1 seconds) override protected lazy val dynamoDBPort: Int = DynamoDBSnapshotStoreSpec.dynamoDBPort val underlying: JavaDynamoDbAsyncClient = JavaDynamoDbAsyncClient .builder() .httpClient(NettyNioAsyncHttpClient.builder().maxConcurrency(1).build()) .credentialsProvider( StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKeyId, secretAccessKey)) ) .endpointOverride(URI.create(dynamoDBEndpoint)) .build() override def dynamoDbAsyncClient: DynamoDbAsyncClient = DynamoDbAsyncClient(underlying) before { createTable } after { deleteTable } }
Example 179
Source File: TestSpec.scala From intro-to-akka-streams with Apache License 2.0 | 5 votes |
package com.github.dnvriend.streams import akka.NotUsed import akka.actor.{ ActorRef, ActorSystem, PoisonPill } import akka.event.{ Logging, LoggingAdapter } import akka.stream.Materializer import akka.stream.scaladsl.Source import akka.stream.testkit.TestSubscriber import akka.stream.testkit.scaladsl.TestSink import akka.testkit.TestProbe import akka.util.Timeout import com.github.dnvriend.streams.util.ClasspathResources import org.scalatest._ import org.scalatest.concurrent.{ Eventually, ScalaFutures } import org.scalatestplus.play.guice.GuiceOneServerPerSuite import play.api.inject.BindingKey import play.api.libs.json.{ Format, Json } import play.api.test.WsTestClient import scala.collection.immutable._ import scala.concurrent.duration._ import scala.concurrent.{ ExecutionContext, Future } import scala.reflect.ClassTag import scala.util.Try object Person { implicit val format: Format[Person] = Json.format[Person] } final case class Person(firstName: String, age: Int) class TestSpec extends FlatSpec with Matchers with GivenWhenThen with OptionValues with TryValues with ScalaFutures with WsTestClient with BeforeAndAfterAll with BeforeAndAfterEach with Eventually with ClasspathResources with GuiceOneServerPerSuite { def getComponent[A: ClassTag] = app.injector.instanceOf[A] def getNamedComponent[A](name: String)(implicit ct: ClassTag[A]): A = app.injector.instanceOf[A](BindingKey(ct.runtimeClass.asInstanceOf[Class[A]]).qualifiedWith(name)) // set the port number of the HTTP server override lazy val port: Int = 8081 implicit val timeout: Timeout = 1.second implicit val pc: PatienceConfig = PatienceConfig(timeout = 30.seconds, interval = 300.millis) implicit val system: ActorSystem = getComponent[ActorSystem] implicit val ec: ExecutionContext = getComponent[ExecutionContext] implicit val mat: Materializer = getComponent[Materializer] val log: LoggingAdapter = Logging(system, this.getClass) // ================================== Supporting Operations ==================================== def id: String = java.util.UUID.randomUUID().toString implicit class FutureToTry[T](f: Future[T]) { def toTry: Try[T] = Try(f.futureValue) } implicit class SourceOps[A](src: Source[A, NotUsed]) { def testProbe(f: TestSubscriber.Probe[A] ⇒ Unit): Unit = f(src.runWith(TestSink.probe(system))) } def withIterator[T](start: Int = 0)(f: Source[Int, NotUsed] ⇒ T): T = f(Source.fromIterator(() ⇒ Iterator from start)) def fromCollection[A](xs: Iterable[A])(f: TestSubscriber.Probe[A] ⇒ Unit): Unit = f(Source(xs).runWith(TestSink.probe(system))) def killActors(refs: ActorRef*): Unit = { val tp = TestProbe() refs.foreach { ref ⇒ tp watch ref tp.send(ref, PoisonPill) tp.expectTerminated(ref) } } }
Example 180
Source File: CitizenDetailsServiceSpec.scala From nisp-frontend with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.nisp.services import org.joda.time.LocalDate import org.scalatest.BeforeAndAfter import org.scalatest.concurrent.ScalaFutures import org.scalatest.mock.MockitoSugar import org.scalatestplus.play.OneAppPerSuite import uk.gov.hmrc.domain.Nino import uk.gov.hmrc.http.{HeaderCarrier, Upstream5xxResponse} import uk.gov.hmrc.nisp.helpers.{MockCitizenDetailsService, TestAccountBuilder} import uk.gov.hmrc.nisp.models.citizen.{Address, Citizen, CitizenDetailsError, CitizenDetailsResponse} import uk.gov.hmrc.play.test.UnitSpec import scala.concurrent.Future class CitizenDetailsServiceSpec extends UnitSpec with MockitoSugar with BeforeAndAfter with ScalaFutures with OneAppPerSuite { val nino: Nino = TestAccountBuilder.regularNino val noNameNino: Nino = TestAccountBuilder.noNameNino val nonExistentNino: Nino = TestAccountBuilder.nonExistentNino val badRequestNino: Nino = TestAccountBuilder.blankNino "CitizenDetailsService" should { "return something for valid NINO" in { val person: Future[Either[CitizenDetailsError, CitizenDetailsResponse]] = MockCitizenDetailsService.retrievePerson(nino)(new HeaderCarrier()) whenReady(person) {p => p.isRight shouldBe true } } "return None for bad NINO" in { val person: Future[Either[CitizenDetailsError, CitizenDetailsResponse]] = MockCitizenDetailsService.retrievePerson(nonExistentNino)(new HeaderCarrier()) whenReady(person) {p => p.isLeft shouldBe true } } "return None for bad request" in { val person: Future[Either[CitizenDetailsError, CitizenDetailsResponse]] = MockCitizenDetailsService.retrievePerson(badRequestNino)(new HeaderCarrier()) whenReady(person) {p => p.isLeft shouldBe true } } "return a Failed Future for a 5XX error" in { val person: Future[Either[CitizenDetailsError, CitizenDetailsResponse]] = MockCitizenDetailsService.retrievePerson(TestAccountBuilder.internalServerError)(new HeaderCarrier()) whenReady(person.failed) { ex => ex shouldBe a [Upstream5xxResponse] } } "return correct name and Date of Birth for NINO" in { val person: Future[Either[CitizenDetailsError, CitizenDetailsResponse]] = MockCitizenDetailsService.retrievePerson(nino)(new HeaderCarrier()) whenReady(person) {p => p.right.map(_.person.copy(nino = nino)) shouldBe Right(Citizen(nino, Some("AHMED"), Some("BRENNAN"), new LocalDate(1954, 3, 9))) p.right.get.person.getNameFormatted shouldBe Some("AHMED BRENNAN") } } "return formatted name of None if Citizen returns without a name" in { val person: Future[Either[CitizenDetailsError, CitizenDetailsResponse]] = MockCitizenDetailsService.retrievePerson(noNameNino)(new HeaderCarrier()) whenReady(person) {p => p shouldBe Right(CitizenDetailsResponse(Citizen(noNameNino, None, None, new LocalDate(1954, 3, 9)), Some(Address(Some("GREAT BRITAIN"))))) p.right.get.person.getNameFormatted shouldBe None } } } }
Example 181
Source File: IdentityVerificationConnectorSpec.scala From nisp-frontend with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.nisp.connectors import org.scalatest.concurrent.ScalaFutures import org.scalatestplus.play.OneAppPerSuite import uk.gov.hmrc.nisp.helpers.MockIdentityVerificationConnector import uk.gov.hmrc.play.test.UnitSpec import uk.gov.hmrc.http.HeaderCarrier class IdentityVerificationConnectorSpec extends UnitSpec with OneAppPerSuite with ScalaFutures { implicit val headerCarrier: HeaderCarrier = HeaderCarrier() import IdentityVerificationSuccessResponse._ "return success when identityVerification returns success" in { MockIdentityVerificationConnector.identityVerificationResponse("success-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse(Success) } "return incomplete when identityVerification returns incomplete" in { MockIdentityVerificationConnector.identityVerificationResponse("incomplete-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse(Incomplete) } "return failed matching when identityVerification returns failed matching" in { MockIdentityVerificationConnector.identityVerificationResponse("failed-matching-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse(FailedMatching) } "return failed iv when identityVerification returns failed matching" in { MockIdentityVerificationConnector.identityVerificationResponse("failed-iv-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse(FailedIV) } "return insufficient evidence when identityVerification returns insufficient evidence" in { MockIdentityVerificationConnector.identityVerificationResponse("insufficient-evidence-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse(InsufficientEvidence) } "return locked out when identityVerification returns locked out" in { MockIdentityVerificationConnector.identityVerificationResponse("locked-out-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse(LockedOut) } "return user aborted when identityVerification returns user aborted" in { MockIdentityVerificationConnector.identityVerificationResponse("user-aborted-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse(UserAborted) } "return timeout when identityVerification returns timeout" in { MockIdentityVerificationConnector.identityVerificationResponse("timeout-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse(Timeout) } "return technical issue when identityVerification returns technical issue" in { MockIdentityVerificationConnector.identityVerificationResponse("technical-issue-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse(TechnicalIssue) } "return precondition failed when identityVerification returns precondition failed" in { MockIdentityVerificationConnector.identityVerificationResponse("precondition-failed-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse(PreconditionFailed) } "return no failure when identityVerification returns non-existant result type" in { MockIdentityVerificationConnector.identityVerificationResponse("invalid-journey-id").futureValue shouldBe IdentityVerificationSuccessResponse("ABCDEFG") } "return failed future for invalid json fields" in { val result = MockIdentityVerificationConnector.identityVerificationResponse("invalid-fields-journey-id") ScalaFutures.whenReady(result) { e => e shouldBe a [IdentityVerificationErrorResponse] } } }
Example 182
Source File: BackendConnectorSpec.scala From nisp-frontend with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.nisp.connectors import org.mockito.Mockito.when import org.scalatest.concurrent.ScalaFutures import org.scalatest.mock.MockitoSugar import play.api.libs.json.Json import uk.gov.hmrc.http.cache.client.SessionCache import uk.gov.hmrc.nisp.helpers.{MockMetricsService, MockSessionCache} import uk.gov.hmrc.nisp.models.NationalInsuranceRecord import uk.gov.hmrc.nisp.models.enums.APIType import uk.gov.hmrc.nisp.services.MetricsService import uk.gov.hmrc.nisp.utils.JsonDepersonaliser import uk.gov.hmrc.play.test.UnitSpec import scala.concurrent.Future import scala.concurrent.ExecutionContext.Implicits.global import scala.util.{Failure, Success} import uk.gov.hmrc.http.{HeaderCarrier, HttpGet, HttpResponse} class BackendConnectorSpec extends UnitSpec with MockitoSugar with ScalaFutures { val mockHttp: HttpGet = mock[HttpGet] object BackendConnectorImpl extends BackendConnector { override def http: HttpGet = mockHttp override def sessionCache: SessionCache = MockSessionCache override def serviceUrl: String = "national-insurance" override val metricsService: MetricsService = MockMetricsService def getNationalInsurance()(implicit headerCarrier: HeaderCarrier): Future[NationalInsuranceRecord] = { val urlToRead = s"$serviceUrl/ni" retrieveFromCache[NationalInsuranceRecord](APIType.NationalInsurance, urlToRead)(headerCarrier, NationalInsuranceRecord.formats) } } implicit val headerCarrier = HeaderCarrier(extraHeaders = Seq("Accept" -> "application/vnd.hmrc.1.0+json")) "connectToMicroservice" should { "should return depersonalised JSON" in { val json = Json.obj( "qualifyingYearsPriorTo1975" -> 0, "numberOfGaps" -> 6, "numberOfGapsPayable" -> 4, "dateOfEntry" -> "1975-08-01", "homeResponsibilitiesProtection" -> false, "earningsIncludedUpTo" -> "2016-04-05", "_embedded" -> Json.obj( "taxYears" -> Json.arr() ) ) val depersonalisedJson = JsonDepersonaliser.depersonalise(json) match { case Success(s) => s case Failure(_) => fail() } val Ok = 200 val response = Future(HttpResponse(Ok, Option.apply(json))) when(mockHttp.GET[HttpResponse]("national-insurance/ni")).thenReturn(response) val future: Future[NationalInsuranceRecord] = BackendConnectorImpl.getNationalInsurance() whenReady(future.failed) { t: Throwable => t.getMessage.contains(depersonalisedJson) shouldBe true t.getMessage.contains("2016-04-05") shouldBe false } } } }
Example 183
Source File: RepositoryTest.scala From akka-http-slick-sample with MIT License | 5 votes |
package net.softler.data import java.util.UUID import akka.actor.ActorSystem import akka.testkit.TestKit import net.softler.data.model.User import net.softler.data.persistence.{H2, UserComponent} import org.scalatest._ import org.scalatest.concurrent.ScalaFutures import scala.concurrent.ExecutionContext import scala.concurrent.duration._ import scala.language.postfixOps class RepositoryTest extends TestKit(ActorSystem("test-system")) with FlatSpecLike with Matchers with ScalaFutures with UserComponent with H2 { implicit val ec: ExecutionContext = system.dispatcher val repo: UserRepository = new UserRepository private val testId = UUID.fromString("00000000-0000-0000-0000-000000000000") override implicit def patienceConfig: PatienceConfig = PatienceConfig(5 seconds) "The generic repository" should "handle a in memory database" in { whenReady(repo.all)(_.size shouldBe 3) } it should "retrieve a user by id" in { whenReady(repo.byId(testId)) { user => user.get.login shouldBe "tom" } } it should "update a single entity" in { val testEntity: User = repo.byId(testId).futureValue.get val result = repo.update(testEntity).futureValue result shouldBe 1 } it should "delete a single user by id" in { whenReady(repo.delete(testId)) { result => result shouldBe true } whenReady(repo.byId(testId)) { user => user shouldBe None } whenReady(repo.all)(_.size shouldBe 2) } }
Example 184
Source File: DataTransactionTest.scala From EncryCore with GNU General Public License v3.0 | 5 votes |
package encry.it.transactions import TransactionGenerator.CreateTransaction import com.typesafe.config.Config import com.typesafe.scalalogging.StrictLogging import encry.it.configs.Configs import encry.it.docker.NodesFromDocker import encry.it.util.KeyHelper._ import org.encryfoundation.common.crypto.PrivateKey25519 import org.encryfoundation.common.modifiers.history.Block import org.encryfoundation.common.modifiers.mempool.transaction.{PubKeyLockedContract, Transaction} import org.encryfoundation.common.modifiers.state.box.{AssetBox, EncryBaseBox} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{AsyncFunSuite, Matchers} import scorex.utils.Random import scala.concurrent.{Await, Future} import scala.concurrent.duration._ class DataTransactionTest extends AsyncFunSuite with Matchers with ScalaFutures with StrictLogging with NodesFromDocker { override protected def nodeConfigs: Seq[Config] = Seq(Configs.mining(true) .withFallback(Configs.offlineGeneration(true)) .withFallback(Configs.nodeName("node1"))) test("Create and send data transaction. Check chain for it.") { val firstHeightToWait: Int = 5 val secondHeightToWait: Int = 8 val mnemonicKey: String = "index another island accuse valid aerobic little absurd bunker keep insect scissors" val privKey: PrivateKey25519 = createPrivKey(Some(mnemonicKey)) val waitTime: FiniteDuration = 30.minutes val fee: Long = scala.util.Random.nextInt(500) Await.result(dockerNodes().head.waitForHeadersHeight(firstHeightToWait), waitTime) val boxes: Seq[EncryBaseBox] = Await.result(dockerNodes().head.outputs, waitTime) val oneBox: AssetBox = boxes.collect { case ab: AssetBox => ab }.head val transaction: Transaction = CreateTransaction.dataTransactionScratch( privKey, fee, System.currentTimeMillis(), IndexedSeq(oneBox).map(_ -> None), PubKeyLockedContract(privKey.publicImage.pubKeyBytes).contract, Random.randomBytes(32) ) Await.result(dockerNodes().head.sendTransaction(transaction), waitTime) Await.result(dockerNodes().head.waitForHeadersHeight(secondHeightToWait), waitTime) val headersAtHeight: List[String] = (firstHeightToWait + 1 to secondHeightToWait) .foldLeft(List[String]()) { case (list, blockHeight) => val headers: Future[List[String]] = dockerNodes().head.getHeadersIdAtHeight(blockHeight) val result: List[String] = Await.result(headers, waitTime) list ::: result } Await.result(dockerNodes().head.getBlock(headersAtHeight.head), waitTime) val lastBlocks: Future[Seq[Block]] = Future.sequence(headersAtHeight.map { h => dockerNodes().head.getBlock(h) }) lastBlocks.map { blocks => val txsNum: Int = blocks.map(_.payload.txs.size).sum docker.close() val transactionFromChain: Transaction = blocks.flatMap(_.payload.txs.init).head transactionFromChain.id shouldEqual transaction.id true shouldEqual (txsNum > secondHeightToWait - firstHeightToWait) txsNum shouldEqual (secondHeightToWait - firstHeightToWait + 1) } } }
Example 185
Source File: ProcessingTransferTransactionWithEncryCoinsTest.scala From EncryCore with GNU General Public License v3.0 | 5 votes |
package encry.it.transactions import TransactionGenerator.CreateTransaction import com.typesafe.config.Config import com.typesafe.scalalogging.StrictLogging import encry.consensus.EncrySupplyController import encry.it.configs.Configs import encry.it.docker.NodesFromDocker import encry.it.util.KeyHelper._ import encry.settings.Settings import org.encryfoundation.common.crypto.{PrivateKey25519, PublicKey25519} import org.encryfoundation.common.modifiers.history.Block import org.encryfoundation.common.modifiers.mempool.transaction.EncryAddress.Address import org.encryfoundation.common.modifiers.mempool.transaction.Transaction import org.encryfoundation.common.modifiers.state.box.{AssetBox, EncryBaseBox} import org.encryfoundation.common.utils.Algos import org.encryfoundation.common.utils.TaggedTypes.Height import org.scalatest.concurrent.ScalaFutures import org.scalatest.{AsyncFunSuite, Matchers} import scorex.crypto.signatures.Curve25519 import scorex.utils.Random import scala.concurrent.duration._ import scala.concurrent.{Await, Future} class ProcessingTransferTransactionWithEncryCoinsTest extends AsyncFunSuite with Matchers with ScalaFutures with StrictLogging with NodesFromDocker with Settings { override protected def nodeConfigs: Seq[Config] = Seq(Configs.mining(true) .withFallback(Configs.offlineGeneration(true)) .withFallback(Configs.nodeName("node1"))) test("Create and send monetary transaction. Check balance.") { val amount: Int = scala.util.Random.nextInt(2000) val fee: Long = scala.util.Random.nextInt(500) val firstHeightToWait: Int = 5 val secondHeightToWait: Int = 8 val mnemonicKey: String = "index another island accuse valid aerobic little absurd bunker keep insect scissors" val privKey: PrivateKey25519 = createPrivKey(Some(mnemonicKey)) val recipientAddress: Address = PublicKey25519(Curve25519.createKeyPair(Random.randomBytes())._2).address.address val waitTime: FiniteDuration = 30.minutes val supplyAtHeight: Long = (0 to secondHeightToWait).foldLeft(0: Long) { case (supply, i) => supply + EncrySupplyController.supplyAt(Height @@ i, settings.constants) } Await.result(dockerNodes().head.waitForHeadersHeight(firstHeightToWait), waitTime) val boxes: Seq[EncryBaseBox] = Await.result(dockerNodes().head.outputs, waitTime) val oneBox: AssetBox = boxes.collect { case ab: AssetBox => ab }.head val transaction: Transaction = CreateTransaction.defaultPaymentTransaction( privKey, fee, System.currentTimeMillis(), IndexedSeq(oneBox).map(_ -> None), recipientAddress, amount ) Await.result(dockerNodes().head.sendTransaction(transaction), waitTime) Await.result(dockerNodes().head.waitForHeadersHeight(secondHeightToWait), waitTime) val checkBalance: Boolean = Await.result(dockerNodes().head.balances, waitTime) .find(_._1 == Algos.encode(settings.constants.IntrinsicTokenId)) .map(_._2 == supplyAtHeight - amount) .get val headersAtHeight: List[String] = (firstHeightToWait + 1 to secondHeightToWait) .foldLeft(List[String]()) { case (list, blockHeight) => val headers: Future[List[String]] = dockerNodes().head.getHeadersIdAtHeight(blockHeight) val result: List[String] = Await.result(headers, waitTime) list ::: result } Await.result(dockerNodes().head.getBlock(headersAtHeight.head), waitTime) val lastBlocks: Future[Seq[Block]] = Future.sequence(headersAtHeight.map { h => dockerNodes().head.getBlock(h) }) lastBlocks.map { blocks => val txsNum: Int = blocks.map(_.payload.txs.size).sum docker.close() val transactionFromChain: Transaction = blocks.flatMap(_.payload.txs.init).head transactionFromChain.id shouldEqual transaction.id true shouldEqual (txsNum > secondHeightToWait - firstHeightToWait) txsNum shouldEqual (secondHeightToWait - firstHeightToWait + 1) checkBalance shouldBe true } } }
Example 186
Source File: IngestorRegistrarSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.ingest.services import java.util.concurrent.TimeUnit import akka.actor.{ActorSystem, Props} import akka.pattern.ask import akka.testkit.{ImplicitSender, TestKit} import akka.util.Timeout import hydra.common.util.ActorUtils import hydra.ingest.services.IngestorRegistrar.UnregisterAll import hydra.ingest.services.IngestorRegistry.{ FindAll, FindByName, LookupResult } import hydra.ingest.test.TestIngestor import org.scalatest.concurrent.{Eventually, ScalaFutures} import org.scalatest.time.{Seconds, Span} import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ class IngestorRegistrarSpec extends TestKit(ActorSystem("IngestorRegistrarSpec")) with Matchers with AnyFunSpecLike with ImplicitSender with ScalaFutures with BeforeAndAfterAll with Eventually { override def afterAll = TestKit.shutdownActorSystem(system, verifySystemShutdown = true) implicit override val patienceConfig = PatienceConfig(timeout = Span(10, Seconds), interval = Span(1, Seconds)) val registry = system.actorOf(Props[IngestorRegistry], "ingestor_registry") val act = system.actorOf(Props[IngestorRegistrar]) implicit val timeout = Timeout(3, TimeUnit.SECONDS) describe("The ingestor registrar actor") { it("registers from classpath on bootstrap") { eventually { whenReady( (registry ? FindByName(ActorUtils.actorName(classOf[TestIngestor]))) .mapTo[LookupResult] ) { i => i.ingestors.size shouldBe 1 i.ingestors(0).name shouldBe ActorUtils.actorName( classOf[TestIngestor] ) } } } it("unregisters") { act ! UnregisterAll eventually { whenReady((registry ? FindAll).mapTo[LookupResult]) { i => i.ingestors.size shouldBe 0 } } } } }
Example 187
Source File: RequestFactoriesSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.ingest.bootstrap import akka.actor.ActorSystem import akka.http.scaladsl.model.HttpRequest import akka.stream.ActorMaterializer import akka.testkit.TestKit import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ class RequestFactoriesSpec extends TestKit(ActorSystem("RequestFactoriesSpec")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll with ScalaFutures { override def afterAll = TestKit.shutdownActorSystem( system, verifySystemShutdown = true, duration = 10.seconds ) import RequestFactories._ describe("The RequestFactories") { it("build a Hydra request from an HTTP request") { val hr = HttpRequest(entity = "test") val hydraReq = createRequest("1", hr) whenReady(hydraReq) { r => r.payload shouldBe "test" } } } }
Example 188
Source File: HydraIngestorRegistrySpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.ingest.bootstrap import akka.actor.{ActorSystem, Props} import akka.testkit.{ImplicitSender, TestKit} import com.typesafe.config.ConfigFactory import hydra.common.util.ActorUtils import hydra.core.bootstrap.ReflectionsWrapper import hydra.ingest.IngestorInfo import hydra.ingest.services.IngestorRegistry import hydra.ingest.services.IngestorRegistry.RegisterWithClass import hydra.ingest.test.TestIngestor import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.duration._ class HydraIngestorRegistrySpec extends TestKit(ActorSystem("HydraIngestorRegistrySpec")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll with ImplicitSender with ScalaFutures { override def afterAll = TestKit.shutdownActorSystem( system, verifySystemShutdown = true, duration = 10.seconds ) val testRegistry = system.actorOf(Props[IngestorRegistry], "ingestor_registry") val cfg = ConfigFactory.parseString( "ingest.ingestor-registry.path=/user/ingestor_registry" ) val registry = HydraIngestorRegistryClient(cfg) implicit val actorRefFactory = system ReflectionsWrapper.rescan() registry.registry ! RegisterWithClass(classOf[TestIngestor], "global") expectMsgType[IngestorInfo] describe("The Ingestor Registry") { it("uses the default registry if no config") { val path = HydraIngestorRegistryClient.registryPath(ConfigFactory.empty()) path shouldBe s"/user/service/${ActorUtils.actorName(classOf[IngestorRegistry])}" } it("looks up an ingestor") { implicit val timeout = akka.util.Timeout(10.seconds) whenReady(registry.lookupIngestor("test_ingestor")) { i => i.ingestors.size shouldBe 1 i.ingestors(0).name shouldBe "test_ingestor" i.ingestors(0).path shouldBe testRegistry.path / "test_ingestor" } } } }
Example 189
Source File: RabbitRecordFactorySpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.rabbit import hydra.core.ingest.HydraRequest import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import scala.concurrent.ExecutionContext.Implicits.global class RabbitRecordFactorySpec extends Matchers with AnyFunSpecLike with ScalaFutures { describe("The Rabbit record factory") { it("throws an error if no exchange or queue metadata provided") { val request = HydraRequest("123", "{'name': 'test'}") whenReady(RabbitRecordFactory.build(request).failed)( _ shouldBe an[IllegalArgumentException] ) } it("throws an error if both exchange and queue metadata provided") { val request = HydraRequest("123", "{'name': 'test'}").withMetadata( RabbitRecord.HYDRA_RABBIT_EXCHANGE -> "test.exchange", RabbitRecord.HYDRA_RABBIT_QUEUE -> "test.queue" ) whenReady(RabbitRecordFactory.build(request).failed)( _ shouldBe an[IllegalArgumentException] ) } it("builds a record with the exchange") { val request = HydraRequest("123", "{'name': 'test'}").withMetadata( RabbitRecord.HYDRA_RABBIT_EXCHANGE -> "test.exchange" ) whenReady(RabbitRecordFactory.build(request)) { rec => rec.destination shouldBe "test.exchange" rec.destinationType shouldBe RabbitRecord.DESTINATION_TYPE_EXCHANGE rec.payload shouldBe "{'name': 'test'}" } } it("builds a record with the queue") { val request = HydraRequest("123", "{'name': 'test'}").withMetadata( RabbitRecord.HYDRA_RABBIT_QUEUE -> "test.queue" ) whenReady(RabbitRecordFactory.build(request)) { rec => rec.destination shouldBe "test.queue" rec.destinationType shouldBe RabbitRecord.DESTINATION_TYPE_QUEUE rec.payload shouldBe "{'name': 'test'}" } } } }
Example 190
Source File: StringRecordFactorySpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.kafka.producer import hydra.core.ingest.HydraRequest import hydra.core.ingest.RequestParams.{ HYDRA_KAFKA_TOPIC_PARAM, HYDRA_RECORD_KEY_PARAM } import hydra.core.protocol.MissingMetadataException import hydra.core.transport.AckStrategy import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ class StringRecordFactorySpec extends Matchers with AnyFunSpecLike with ScalaFutures { override implicit val patienceConfig = PatienceConfig( timeout = scaled(1000 millis), interval = scaled(100 millis) ) describe("When using the StringRecordFactory") { it("handles valid strings") { val request = HydraRequest("123", """{"name":"test"}""").withMetadata( HYDRA_KAFKA_TOPIC_PARAM -> "test" ) val rec = StringRecordFactory.build(request) whenReady(rec)( _ shouldBe StringRecord( "test", None, """{"name":"test"}""", AckStrategy.NoAck ) ) } it("builds") { val request = HydraRequest("123", """{"name":"test"}""") .withMetadata(HYDRA_RECORD_KEY_PARAM -> "{$.name}") .withMetadata(HYDRA_KAFKA_TOPIC_PARAM -> "test-topic") whenReady(StringRecordFactory.build(request)) { msg => msg.destination shouldBe "test-topic" msg.key shouldBe "test" msg.payload shouldBe """{"name":"test"}""" } } it("throws an error if no topic is in the request") { val request = HydraRequest("123", """{"name":test"}""") whenReady(StringRecordFactory.build(request).failed)( _ shouldBe an[MissingMetadataException] ) } } }
Example 191
Source File: JsonRecordFactorySpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.kafka.producer import com.fasterxml.jackson.core.JsonParseException import com.fasterxml.jackson.databind.ObjectMapper import hydra.core.ingest.HydraRequest import hydra.core.ingest.RequestParams.{ HYDRA_KAFKA_TOPIC_PARAM, HYDRA_RECORD_KEY_PARAM } import hydra.core.protocol.MissingMetadataException import hydra.core.transport.AckStrategy import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import scala.concurrent.ExecutionContext.Implicits.global class JsonRecordFactorySpec extends Matchers with AnyFunSpecLike with ScalaFutures { describe("When using the JsonRecordFactory") { it("errors with no topic on the request") { val request = HydraRequest("123", """{"name":test"}""") val rec = JsonRecordFactory.build(request) whenReady(rec.failed)(_ shouldBe an[MissingMetadataException]) } it("handles invalid json") { val request = HydraRequest("123", """{"name":test"}""") .withMetadata(HYDRA_KAFKA_TOPIC_PARAM -> "test-topic") val rec = JsonRecordFactory.build(request) whenReady(rec.failed)(_ shouldBe a[JsonParseException]) } it("handles valid json") { val request = HydraRequest("123", """{"name":"test"}""") .withMetadata(HYDRA_KAFKA_TOPIC_PARAM -> "test-topic") val rec = JsonRecordFactory.build(request) val node = new ObjectMapper().reader().readTree("""{"name":"test"}""") whenReady(rec)( _ shouldBe JsonRecord("test-topic", None, node, AckStrategy.NoAck) ) } it("builds") { val request = HydraRequest("123", """{"name":"test"}""") .withMetadata(HYDRA_RECORD_KEY_PARAM -> "{$.name}") .withMetadata(HYDRA_KAFKA_TOPIC_PARAM -> "test-topic") whenReady(JsonRecordFactory.build(request)) { msg => msg.destination shouldBe "test-topic" msg.key shouldBe "test" msg.payload shouldBe new ObjectMapper() .reader() .readTree("""{"name":"test"}""") } } it("throws an error if no topic is in the request") { val request = HydraRequest("123", """{"name":"test"}""") whenReady(JsonRecordFactory.build(request).failed)( _ shouldBe a[MissingMetadataException] ) } } }
Example 192
Source File: DeleteTombstoneRecordFactorySpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.kafka.producer import hydra.core.ingest.HydraRequest import hydra.core.ingest.RequestParams.{ HYDRA_KAFKA_TOPIC_PARAM, HYDRA_RECORD_KEY_PARAM } import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ class DeleteTombstoneRecordFactorySpec extends Matchers with AnyFunSpecLike with ScalaFutures { override implicit val patienceConfig = PatienceConfig( timeout = scaled(1000 millis), interval = scaled(100 millis) ) describe("When using the DeleteTombstoneRecordFactory") { it("errors without keys") { val request = HydraRequest("123", payload = null) .withMetadata(HYDRA_KAFKA_TOPIC_PARAM -> "test") val rec = DeleteTombstoneRecordFactory.build(request) whenReady(rec.failed)(_ shouldBe an[IllegalArgumentException]) } it("builds a delete record") { val request = HydraRequest("123", null) .withMetadata(HYDRA_RECORD_KEY_PARAM -> "key") .withMetadata(HYDRA_KAFKA_TOPIC_PARAM -> "test-topic") whenReady(DeleteTombstoneRecordFactory.build(request)) { rec => rec.destination shouldBe "test-topic" rec.key shouldBe "key" rec.formatName shouldBe "string" Option(rec.payload).isDefined shouldBe false } } } }
Example 193
Source File: TransportOpsSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.core.ingest import akka.actor.{ActorRef, ActorSystem, Props} import akka.testkit.TestActors.ForwardActor import akka.testkit.{ImplicitSender, TestKit, TestProbe} import com.pluralsight.hydra.reflect.DoNotScan import hydra.core.akka.ActorInitializationException import hydra.core.protocol.{IngestorError, Produce} import hydra.core.test.TestRecordFactory import hydra.core.transport.AckStrategy.NoAck import org.scalatest.concurrent.ScalaFutures import org.scalatest.matchers.should.Matchers import org.scalatest.funspec.AnyFunSpecLike import org.scalatest.BeforeAndAfterAll import scala.concurrent.Await import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ class TransportOpsSpec extends TestKit(ActorSystem("test")) with Matchers with AnyFunSpecLike with BeforeAndAfterAll with ImplicitSender with ScalaFutures { override def afterAll() = TestKit.shutdownActorSystem(system) val supervisor = TestProbe() val tm = TestProbe() val transport = system.actorOf(Props(new ForwardActor(tm.ref)), "test-transport") describe("TransportOps") { it("looks up a transport") { val t = system.actorOf(Props(classOf[TestTransportIngestor], supervisor.ref)) t ! "hello" expectMsg("hi!") } it("won't initialize if transport can't be found") { val t = system.actorOf(Props[TestTransportIngestorError]) t ! "hello" expectNoMessage() } it("transports a record") { val req = HydraRequest("123", "test-produce") val t = system.actorOf(Props(classOf[TestTransportIngestor], supervisor.ref)) t ! req whenReady(TestRecordFactory.build(req))(r => tm.expectMsg(Produce(r, self, NoAck)) ) } } } @DoNotScan class TestTransportIngestor(supervisor: ActorRef) extends Ingestor with TransportOps { override val recordFactory = TestRecordFactory override def initTimeout = 500 millis ingest { case "hello" => sender ! "hi!" case req: HydraRequest => val record = Await.result(TestRecordFactory.build(req), 3.seconds) transport(record, NoAck) } override def transportName = "test-transport" } class TestTransportIngestorError extends Ingestor with TransportOps { override val recordFactory = TestRecordFactory override def transportName = "test-transport-unknown" }
Example 194
Source File: HydraMetricsSpec.scala From hydra with Apache License 2.0 | 5 votes |
package hydra.core.monitor import akka.japi.Option.Some import kamon.Kamon import kamon.metric.{Counter, Gauge} import org.scalamock.scalatest.proxy.MockFactory import org.scalatest.{BeforeAndAfterAll, _} import org.scalatest.concurrent.{Eventually, ScalaFutures} import org.scalatest.flatspec.AnyFlatSpecLike import org.scalatest.matchers.should.Matchers import org.scalatest.time.{Millis, Seconds, Span} import scalacache.guava.GuavaCache import scala.concurrent.ExecutionContext.Implicits.global import scala.util.{Random, Try} class HydraMetricsSpec extends Matchers with AnyFlatSpecLike with Eventually with BeforeAndAfterAll with BeforeAndAfterEach with MockFactory with ScalaFutures { import HydraMetrics._ import scalacache.modes.try_._ implicit override val patienceConfig = PatienceConfig( timeout = scaled(Span(2, Seconds)), interval = scaled(Span(5, Millis)) ) override def beforeEach() = { gaugesCache.removeAll() countersCache.removeAll() histogramsCache.removeAll() } override def afterAll = Try(Kamon.stopModules()) val lookup = "lookup.xyz" val lookup2 = "lookup.abc" def generateTags: Seq[(String, String)] = Seq("tag1" -> "Everything's fine.") "An object mixing in HydraMetrics" should "create new counters with new lookup keys + metric names" in { shouldCreateNewMetric[Counter](incrementCounter _, countersCache) } it should "create new gauges with new lookup keys + metric names" in { shouldCreateNewMetric[Gauge](incrementGauge _, gaugesCache) } it should "lookup existing counters" in { shouldLookupExistingMetric[Counter](incrementCounter _, countersCache) } it should "lookup an existing gauge" in { shouldLookupExistingMetric[Gauge](decrementGauge _, gaugesCache) } it should "lookup an existing histogram" in { val f = recordToHistogram _ whenReady(f(lookup, "histogram.metric", 100, generateTags)) { r => whenReady(f(lookup, "histogram.metric", 100, generateTags)) { x => r shouldEqual x } } } private def shouldCreateNewMetric[A]( f: (String, String, => Seq[(String, String)]) => Unit, cache: GuavaCache[A] ) = { cache.get(lookup).map { result => result shouldBe None } f(lookup, "metric" + Random.nextInt(Integer.MAX_VALUE), generateTags) cache.get(lookup).map { result => result shouldBe a[Some[_]] } } private def shouldLookupExistingMetric[A]( f: (String, String, => Seq[(String, String)]) => Unit, cache: GuavaCache[A] ) = { val metric = "metric" + Random.nextInt(Integer.MAX_VALUE) f(lookup, metric, generateTags) shouldEqual f(lookup, metric, generateTags) } }
Example 195
Source File: AkkaUnitTestLike.scala From reactive-kinesis with Apache License 2.0 | 5 votes |
package com.weightwatchers.reactive.kinesis.common import akka.actor.{ActorSystem, Scheduler} import akka.stream.{ActorMaterializer, Materializer} import akka.testkit.TestKitBase import com.typesafe.config.{Config, ConfigFactory} import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Suite} import scala.concurrent.ExecutionContextExecutor trait AkkaUnitTestLike extends TestKitBase with ScalaFutures with BeforeAndAfterAll { self: Suite => implicit lazy val config: Config = ConfigFactory.load("sample.conf") implicit lazy val system: ActorSystem = ActorSystem(suiteName, config) implicit lazy val scheduler: Scheduler = system.scheduler implicit lazy val mat: Materializer = ActorMaterializer() implicit lazy val ctx: ExecutionContextExecutor = system.dispatcher abstract override def afterAll(): Unit = { super.afterAll() // intentionally shutdown the actor system last. system.terminate().futureValue } }
Example 196
Source File: MainServiceSpec.scala From akka-api-gateway-example with MIT License | 5 votes |
package jp.co.dzl.example.akka.api import akka.http.scaladsl.Http import com.typesafe.config.ConfigFactory import org.scalatest.concurrent.ScalaFutures import org.scalatest.{ BeforeAndAfterAll, Matchers, FlatSpec } import scala.concurrent.Await import scala.concurrent.duration.Duration class MainServiceSpec extends FlatSpec with Matchers with BeforeAndAfterAll with ScalaFutures with MainService { override protected def afterAll: Unit = { Await.result(system.terminate(), Duration.Inf) } it should "inject configuration of http" in { val config = ConfigFactory.load() host shouldEqual config.getString("http.listen.host") port shouldEqual config.getInt("http.listen.port") } it should "bind and handle" in { val http = Http().bindAndHandle(handler.routes, host, port) http.futureValue.localAddress.getPort shouldEqual port http.futureValue.unbind() } }
Example 197
Source File: GitHubSpec.scala From akka-api-gateway-example with MIT License | 5 votes |
package jp.co.dzl.example.akka.api.service import akka.actor.ActorSystem import akka.http.scaladsl.model.headers.RawHeader import akka.http.scaladsl.model.{ HttpMethods, HttpRequest, HttpResponse } import akka.stream.ActorMaterializer import akka.stream.scaladsl.{ Flow, Source } import akka.stream.testkit.scaladsl.TestSink import org.scalamock.scalatest.MockFactory import org.scalatest.concurrent.ScalaFutures import org.scalatest.{ BeforeAndAfterAll, FlatSpec, Matchers } import scala.concurrent.Await import scala.concurrent.duration.Duration class GitHubSpec extends FlatSpec with Matchers with ScalaFutures with BeforeAndAfterAll with MockFactory { implicit val system = ActorSystem("github-spec") implicit val executor = system.dispatcher implicit val materializer = ActorMaterializer() override protected def afterAll: Unit = { Await.result(system.terminate(), Duration.Inf) } "#from" should "merge original headers to github request" in { val github = new GitHubImpl("127.0.0.1", 8000, 5, mock[HttpClient]) val request = HttpRequest(HttpMethods.GET, "/") .addHeader(RawHeader("host", "dummy")) .addHeader(RawHeader("timeout-access", "dummy")) val result = Source.single(HttpRequest(HttpMethods.GET, "/v1/github/users/xxxxxx")) .via(github.from(request)) .runWith(TestSink.probe[HttpRequest]) .request(1) .expectNext() result.headers.filter(_.lowercaseName() == "host") shouldBe empty result.headers.filter(_.lowercaseName() == "timeout-access") shouldBe empty result.headers.filter(_.lowercaseName() == "x-forwarded-host") shouldNot be(empty) } "#send" should "connect using http client" in { val httpResponse = HttpResponse() val httpClient = mock[HttpClient] (httpClient.connectionHttps _).expects(*, *, *).returning(Flow[HttpRequest].map(_ => httpResponse)) val github = new GitHubImpl("127.0.0.1", 8000, 5, httpClient) val result = Source.single(HttpRequest(HttpMethods.GET, "/")) .via(github.send) .runWith(TestSink.probe[HttpResponse]) .request(1) .expectNext() result shouldBe httpResponse } }
Example 198
Source File: ColumnFunctionTest.scala From clickhouse-scala-client with GNU Lesser General Public License v3.0 | 5 votes |
package com.crobox.clickhouse.dsl.column import com.crobox.clickhouse.dsl.language.ClickhouseTokenizerModule import com.crobox.clickhouse.dsl._ import com.crobox.clickhouse.{ClickhouseClientSpec, TestSchemaClickhouseQuerySpec} import org.joda.time.DateTime import org.joda.time.format.DateTimeFormat import org.scalatest.concurrent.ScalaFutures import scala.concurrent.Future trait ColumnFunctionTest extends ClickhouseClientSpec with TestSchemaClickhouseQuerySpec with ScalaFutures with ClickhouseTokenizerModule{ implicit val clickhouseClient = clickClient protected def r(query: Column): String = { runSql(select(query)).futureValue.trim } protected def runSql(query: OperationalQuery): Future[String] = { clickhouseClient.query(toSql(query.internalQuery,None)) } implicit class DDTStringify(ddt: DateTime) { def printAsDate: String = DateTimeFormat.forPattern("yyyy-MM-dd").print(ddt) def printAsDateTime: String = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").print(ddt) def printAsYYYYMM: String = DateTimeFormat.forPattern("yyyyMM").print(ddt) def toStartOfQuarter: DateTime = { val remainder = (ddt.getMonthOfYear - 1) % 3 ddt.withDayOfMonth(1).minusMonths(remainder) } def toStartOfMin(min: Int): DateTime = { val remainder = ddt.getMinuteOfHour % min ddt .withSecondOfMinute(0) .withMillisOfSecond(0) .minusMinutes(remainder) } def toStartOfHr: DateTime = { ddt .withMinuteOfHour(0) .withSecondOfMinute(0) .withMillisOfSecond(0) } } }
Example 199
Source File: StringFunctionsIT.scala From clickhouse-scala-client with GNU Lesser General Public License v3.0 | 5 votes |
package com.crobox.clickhouse.dsl import java.util.UUID import com.crobox.clickhouse.{ClickhouseClientSpec, TestSchemaClickhouseQuerySpec} import org.scalatest.concurrent.ScalaFutures import org.scalatest.time.{Millis, Seconds, Span} import spray.json.DefaultJsonProtocol.{jsonFormat, _} import spray.json.RootJsonFormat class StringFunctionsIT extends ClickhouseClientSpec with TestSchemaClickhouseQuerySpec with ScalaFutures { private val columnString = "oneem,twoem,threeem" override val table2Entries: Seq[Table2Entry] = Seq(Table2Entry(UUID.randomUUID(), columnString, randomInt, randomString, None)) override implicit def patienceConfig = PatienceConfig(timeout = scaled(Span(10, Seconds)), interval = scaled(Span(20, Millis))) case class Result(result: String) implicit val resultFormat: RootJsonFormat[Result] = jsonFormat[String, Result](Result.apply, "result") it should "split by character" in { val resultRows = chExecutor.execute[Result](select(arrayJoin(splitByChar(",", col1)) as "result") from TwoTestTable).futureValue.rows resultRows.length shouldBe 3 resultRows.map(_.result) should contain theSameElementsAs Seq("oneem", "twoem", "threeem") } it should "split by string" in { val resultRows = chExecutor.execute[Result](select(arrayJoin(splitByString("em,", col1)) as "result") from TwoTestTable).futureValue.rows resultRows.length shouldBe 3 resultRows.map(_.result) should contain theSameElementsAs Seq("one", "two", "threeem") } it should "concatenate string back" in { val resultRows = chExecutor .execute[Result](select(arrayStringConcat(splitByChar(",", col1), ",") as "result") from TwoTestTable) .futureValue .rows resultRows.length shouldBe 1 resultRows.map(_.result).head shouldBe columnString } }
Example 200
Source File: TestSchemaClickhouseQuerySpec.scala From clickhouse-scala-client with GNU Lesser General Public License v3.0 | 5 votes |
package com.crobox.clickhouse import com.crobox.clickhouse.dsl.TestSchema import com.crobox.clickhouse.dsl.execution.ClickhouseQueryExecutor import com.crobox.clickhouse.dsl.schemabuilder.{CreateTable, Engine} import com.crobox.clickhouse.testkit.ClickhouseSpec import org.scalatest.concurrent.ScalaFutures import org.scalatest.{BeforeAndAfterAll, Suite} import scala.concurrent.ExecutionContext trait TestSchemaClickhouseQuerySpec extends ClickhouseSpec with BeforeAndAfterAll with TestSchema with ScalaFutures { this: Suite => val table1Entries: Seq[Table1Entry] = Seq() val table2Entries: Seq[Table2Entry] = Seq() implicit val ec: ExecutionContext implicit lazy val chExecutor: ClickhouseQueryExecutor = ClickhouseQueryExecutor.default(clickClient) override def beforeAll(): Unit = { super.beforeAll() val tables = for { _ <- clickClient.execute( CreateTable(OneTestTable, Engine.Memory, ifNotExists = true).query ) _ <- clickClient.execute( CreateTable( TwoTestTable, Engine.Memory, ifNotExists = true ).query ) } yield {} whenReady(tables) { _ => val inserts = for { _ <- table1Entries.into(OneTestTable) _ <- table2Entries.into(TwoTestTable) } yield {} inserts.futureValue } } override def afterAll(): Unit = { super.afterAll() } }