org.scalatest.FunSuiteLike Scala Examples
The following examples show how to use org.scalatest.FunSuiteLike.
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: CogroupTest.scala From spark-tools with Apache License 2.0 | 6 votes |
package io.univalence.plumbus import io.univalence.plumbus.test.SparkTestLike import org.apache.spark.sql.Dataset import org.scalatest.{ FunSuiteLike, Matchers } import com.github.mrpowers.spark.fast.tests.DatasetComparer class CogroupTest extends FunSuiteLike with SparkTestLike with Matchers with DatasetComparer { import spark.implicits._ import io.univalence.plumbus.cogroup._ val person1 = PersonWithId("1", "John", 32) val person2 = PersonWithId("2", "Mary", 32) val address1 = Address("1", "address1") val address2 = Address("2", "address2") val address3 = Address("1", "address3") val persons: Dataset[PersonWithId] = Seq(person1, person2).toDS() val addresses: Dataset[Address] = Seq(address1, address2, address3).toDS() test("apply test") { val applyDS = apply(persons, addresses)(_.id, _.idPerson) val expectedDS = Seq( ("1", Seq(person1), Seq(address1, address3)), ("2", Seq(person2), Seq(address2)) ).toDS() assertSmallDatasetEquality(applyDS, expectedDS, orderedComparison = false) } } case class Address(idPerson: String, name: String)
Example 2
Source File: Step1_PrimarySpec.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.testkit.TestKit import akka.actor.ActorSystem import org.scalatest.FunSuiteLike import org.scalatest.BeforeAndAfterAll import org.scalatest.Matchers import akka.testkit.ImplicitSender import akka.testkit.TestProbe import scala.concurrent.duration._ import kvstore.Persistence.{ Persisted, Persist } import kvstore.Replica.OperationFailed import kvstore.Replicator.{ Snapshot } import scala.util.Random import scala.util.control.NonFatal import org.scalactic.ConversionCheckedTripleEquals class Step1_PrimarySpec extends TestKit(ActorSystem("Step1PrimarySpec")) with FunSuiteLike with BeforeAndAfterAll with Matchers with ConversionCheckedTripleEquals with ImplicitSender with Tools { override def afterAll(): Unit = { system.shutdown() } import Arbiter._ test("case1: Primary (in isolation) should properly register itself to the provided Arbiter") { val arbiter = TestProbe() system.actorOf(Replica.props(arbiter.ref, Persistence.props(flaky = false)), "case1-primary") arbiter.expectMsg(Join) } test("case2: Primary (in isolation) should react properly to Insert, Remove, Get") { val arbiter = TestProbe() val primary = system.actorOf(Replica.props(arbiter.ref, Persistence.props(flaky = false)), "case2-primary") val client = session(primary) arbiter.expectMsg(Join) arbiter.send(primary, JoinedPrimary) client.getAndVerify("k1") client.setAcked("k1", "v1") client.getAndVerify("k1") client.getAndVerify("k2") client.setAcked("k2", "v2") client.getAndVerify("k2") client.removeAcked("k1") client.getAndVerify("k1") } }
Example 3
Source File: LightSnapshotTest.scala From akka-viz with MIT License | 5 votes |
package akkaviz.events import akka.actor.{ActorSystem, Actor} import akka.testkit.{TestKit, TestActorRef} import akkaviz.events.types._ import org.scalatest.{FunSuiteLike, Matchers} class LightSnapshotTest() extends TestKit(ActorSystem("SnapshotTests")) with FunSuiteLike with Matchers with Helpers { val firstRef = TestActorRef[SomeActor](new SomeActor, "first") val secondRef = TestActorRef[SomeActor](new SomeActor, "second") test("should include actors receiving messages as live") { val events = Seq( ReceivedWithId(1, firstRef, secondRef, "sup", true), ReceivedWithId(2, secondRef, firstRef, "sup", true) ) val snapshot = snapshotOf(events) snapshot.liveActors should contain allOf (firstRef.path.toString, secondRef.path.toString) } test("should contain dead actors") { val events = Seq( ReceivedWithId(1, firstRef, secondRef, "sup", true), ReceivedWithId(2, secondRef, firstRef, "sup", true), Killed(secondRef) ) val snapshot = snapshotOf(events) snapshot.liveActors should contain(actorRefToString(firstRef)) snapshot.liveActors should not contain actorRefToString(secondRef) snapshot.dead should contain(actorRefToString(secondRef)) } test("should contain classes of instantiated actors") { val events = Seq( Instantiated(firstRef, firstRef.underlyingActor), Instantiated(secondRef, secondRef.underlyingActor) ) val snapshot = snapshotOf(events) snapshot.classNameFor(firstRef.path.toString) should equal(Some(firstRef.underlyingActor.getClass.getName)) snapshot.classNameFor(secondRef.path.toString) should equal(Some(secondRef.underlyingActor.getClass.getName)) } test("should include recreated actor as live") { val events = Seq( Instantiated(firstRef, firstRef.underlyingActor), Killed(firstRef), Spawned(firstRef) ) val snapshot = snapshotOf(events) snapshot.liveActors should contain(actorRefToString(firstRef)) snapshot.dead should be('empty) } test("should ignore BackendEvents not pertaining to actor state") { import scala.concurrent.duration._ val events = Seq( ActorSystemCreated(system), ReportingDisabled, ReportingEnabled, ThroughputMeasurement(firstRef, 0.0, 0xDEB1L), ReceiveDelaySet(2000.seconds) ) snapshotOf(events) should equal(LightSnapshot()) } test("should include restarted actors as live") { val events = Seq( Instantiated(firstRef, firstRef.underlyingActor), Killed(firstRef), Restarted(firstRef) ) val snaphshot = snapshotOf(events) snaphshot.dead should be('empty) snaphshot.liveActors should contain(actorRefToString(firstRef)) } def snapshotOf(events: Seq[BackendEvent]): LightSnapshot = { events.foldLeft(LightSnapshot())(_.update(_)) } } class SomeActor extends Actor { override def receive: Receive = { case _ => () } }
Example 4
Source File: DerivedFunctionTest.scala From maha with Apache License 2.0 | 5 votes |
package com.yahoo.maha.core import java.util.TimeZone import com.yahoo.maha.core.DruidDerivedFunction._ import org.joda.time.DateTimeZone import org.json4s.JObject import org.scalatest.{FunSuiteLike, Matchers} class DerivedFunctionTest extends FunSuiteLike with Matchers { test("Create a DECODE_DIM failure cases") { val minLengthCatch = intercept[IllegalArgumentException] { new DECODE_DIM("fieldName", "tooFewArgs") } assert(minLengthCatch.getMessage.contains("Usage: DECODE( expression , search , result [, search , result]... [, default] )")) } test("Create value DECODE_DIM") { val newDecode = new DECODE_DIM("fieldName", "arg1", "decodeVal1", "arg2", "decodeVal2", "default") val newDecodeWithoutDefault = new DECODE_DIM("fieldName", "arg1", "decodeVal1", "arg2", "decodeVal2") assert(newDecode.apply("arg1") == Some("decodeVal1")) assert(newDecode.apply("arg3") == Some("default")) assert(newDecodeWithoutDefault.apply("arg3") == None) assert(newDecode.apply.isDefinedAt("arg20")) } test("Attempt LOOKUP_WITH_DECODE fail") { val minLengthCatch = intercept[IllegalArgumentException] { new LOOKUP_WITH_DECODE("fieldNameSpace", "valueCol", dimensionOverrideMap = Map.empty, "tooFewArgs") } assert(minLengthCatch.getMessage.contains("Usage: DECODE( expression , search , result [, search , result]... [, default] )")) } test("Failure to get interval date with blank format") { val thrown = intercept[IllegalArgumentException]{ GET_INTERVAL_DATE.checkFormat("") } assert(thrown.getMessage.contains("Format for get_interval_date must be d|w|m|day|yr not")) } test("All Derived Functions should generate proper JSON Strings.") { val gid = GET_INTERVAL_DATE("fieldName", "yyyyMMdd") val dow = DAY_OF_WEEK("fieldName") val dtf = DATETIME_FORMATTER("fieldName", 0, 10) val dd = DECODE_DIM("fieldName", "arg1", "decodeVal1", "arg2", "decodeVal2", "default") val js = JAVASCRIPT("fieldName", "function(x) { return x > 0; }") val rgx = REGEX("fieldName", "blah", 0, true, "t") val lu = LOOKUP("namespace", "val", Map("a" -> "b")) val lwd = LOOKUP_WITH_DECODE("namespace", "valCol", Map("b" -> "a"), "arg1", "decodeVal1", "arg2", "decodeVal2", "default") val lwe = LOOKUP_WITH_EMPTY_VALUE_OVERRIDE("namespace", "valCol", "ovr", Map("c" -> "d")) val lwo = LOOKUP_WITH_DECODE_ON_OTHER_COLUMN("namespace", "valCol", "valToCheck", "valIfMatched", "valIfNot", Map("2" -> "4", "b" -> "a")) val ltf = LOOKUP_WITH_TIMEFORMATTER("namespace", "valCol", "yyyyMMdd", "yyyy", Map("do" -> "dont"), Some("override")) val ldr = LOOKUP_WITH_DECODE_RETAIN_MISSING_VALUE("namespace", "valCol", true, true, Map("rtn" -> "not"), "arg1", "decodeVal1", "arg2", "decodeVal2", "default") val dtz = DRUID_TIME_FORMAT("format", DateTimeZone.forID("Asia/Jakarta")) val dpg = DRUID_TIME_FORMAT_WITH_PERIOD_GRANULARITY("format", "P1D", DateTimeZone.forID("Asia/Jakarta")) val rc = TIME_FORMAT_WITH_REQUEST_CONTEXT("yyyy") val lwt = LOOKUP_WITH_TIMESTAMP("namespace", "val", "fmt", Map.empty, Some("ovrVal"), asMillis = false) val resultArray = List(gid, dow, dtf, dd, js, rgx, lu, lwd, lwe, lwo, ltf, ldr, dtz, dpg, rc, lwt) val expectedJSONs = List( """{"function_type":"GET_INTERVAL_DATE","fieldName":"fieldName","format":"yyyyMMdd"}""", """{"function_type":"DAY_OF_WEEK","fieldName":"fieldName"}""", """{"function_type":"DATETIME_FORMATTER","fieldName":"fieldName","index":0,"length":10}""", """{"function_type":"DECODE_DIM","fieldName":"fieldName","args":"arg1,decodeVal1,arg2,decodeVal2,default"}""", """{"function_type":"JAVASCRIPT","fieldName":"fieldName","function":"function(x) { return x > 0; }"}""", """{"function_type":"REGEX","fieldName":"fieldName","expr":"blah","index":0,"replaceMissingValue":true,"replaceMissingValueWith":"t"}""", """{"function_type":"LOOKUP","lookupNamespace":"namespace","valueColumn":"val","dimensionOverrideMap":{"a":"b"}}""", """{"function_type":"LOOKUP_WITH_DECODE","lookupNamespace":"namespace","valueColumn":"valCol","dimensionOverrideMap":{"b":"a"},"args":"arg1,decodeVal1,arg2,decodeVal2,default"}""", """{"function_type":"LOOKUP_WITH_EMPTY_VALUE_OVERRIDE","lookupNamespace":"namespace","valueColumn":"valCol","overrideValue":"ovr","dimensionOverrideMap":{"c":"d"}}""", """{"function_type":"LOOKUP_WITH_DECODE_ON_OTHER_COLUMN","lookupNamespace":"namespace","columnToCheck":"valCol","valueToCheck":"valToCheck","columnIfValueMatched":"valIfMatched","columnIfValueNotMatched":"valIfNot","dimensionOverrideMap":{"2":"4","b":"a"}}""", """{"function_type":"LOOKUP_WITH_TIMEFORMATTER","lookupNamespace":"namespace","valueColumn":"valCol","inputFormat":"yyyyMMdd","resultFormat":"yyyy","dimensionOverrideMap":{"do":"dont"}}""", """{"function_type":"LOOKUP_WITH_DECODE_RETAIN_MISSING_VALUE","lookupNamespace":"namespace","valueColumn":"valCol","retainMissingValue":true,"injective":true,"dimensionOverrideMap":{"rtn":"not"},"args":"arg1,decodeVal1,arg2,decodeVal2,default"}""", """{"function_type":"DRUID_TIME_FORMAT","format":"format","zone":"Asia/Jakarta"}""", """{"function_type":"DRUID_TIME_FORMAT_WITH_PERIOD_GRANULARITY","format":"format","period":"P1D","zone":"Asia/Jakarta"}""", """{"function_type":"TIME_FORMAT_WITH_REQUEST_CONTEXT","format":"yyyy"}""", """{"function_type":"LOOKUP_WITH_TIMESTAMP","lookupNamespace":"namespace","valueColumn":"val","resultFormat":"fmt","dimensionOverrideMap":{},"overrideValue":"ovrVal","asMillis":false}""" ) import org.json4s._ import org.json4s.jackson.JsonMethods._ implicit val formats = DefaultFormats val allJSONs: List[JObject] = resultArray.map(expn => expn.asJSON) val allJsonStrings: List[String] = allJSONs.map(json => compact(json)) assert(allJsonStrings.forall(str => expectedJSONs.contains(str))) } }
Example 5
Source File: LiteralMapperTest.scala From maha with Apache License 2.0 | 5 votes |
package com.yahoo.maha.core import com.yahoo.maha.core.dimension.DimCol import org.scalatest.{FunSuiteLike, Matchers} class LiteralMapperTest extends FunSuiteLike with Matchers { test("Test DruidLiteralMapper ") { val druidMapper = new DruidLiteralMapper implicit val cc: ColumnContext = new ColumnContext val col = DimCol("field1", IntType()) val colDateNoFormat = DimCol("field1_date", DateType()) val colDateWithFormat = DimCol("field1_date_fmt", DateType("YYYY-MM-dd")) val colTSNoFmt = DimCol("field1_ts", TimestampType()) val colTSWithFmt = DimCol("field1_ts_fmt", TimestampType("YYYY-MM-dd")) assert(druidMapper.toDateTime(col, "2018-01-01", Option(DailyGrain)).toString == "2018-01-01T00:00:00.000Z") assert(druidMapper.toDateTime(colDateNoFormat, "2018-01-01", Option(DailyGrain)).toString == "2018-01-01T00:00:00.000Z") assert(druidMapper.toDateTime(colDateWithFormat, "2018-01-01", Option(DailyGrain)).toString == "2018-01-01T00:00:00.000Z") assert(druidMapper.toDateTime(colTSNoFmt, "2018-01-01", Option(DailyGrain)).toString == "2018-01-01T00:00:00.000Z") assert(druidMapper.toDateTime(colTSWithFmt, "2018-01-01", Option(DailyGrain)).toString == "2018-01-01T00:00:00.000Z") assert(druidMapper.toLiteral(col, "2018-01-01", Option(DailyGrain)).toString == "2018-01-01") assert(druidMapper.toLiteral(colTSNoFmt, "2018-01-01", Option(DailyGrain)).toString == "2018-01-01") assert(druidMapper.toLiteral(colTSWithFmt, "2018-01-01", Option(DailyGrain)).toString == "2018-01-01") assert(druidMapper.toNumber(col, "1") == 1) assertThrows[UnsupportedOperationException](druidMapper.toNumber(colTSNoFmt, "1"), "Expected UnsupportedOperationException, but didn't get it.") } }
Example 6
Source File: EngineTest.scala From maha with Apache License 2.0 | 5 votes |
package com.yahoo.maha.core import org.scalatest.{FunSuiteLike, Matchers} class EngineTest extends FunSuiteLike with Matchers{ test("Ensure a valid return in Engine.from(String)") { val p = Engine.from("presto") assert(p.get.equals(PrestoEngine)) val o = Engine.from("oracle") assert(o.get.equals(OracleEngine)) val d = Engine.from("druid") assert(d.get.equals(DruidEngine)) val h = Engine.from("hive") assert(h.get.equals(HiveEngine)) val fail = Engine.from("fail") assert(fail.equals(None)) } }
Example 7
Source File: QueryBuilderTest.scala From maha with Apache License 2.0 | 5 votes |
package com.yahoo.maha.core.query import org.scalatest.{FunSuiteLike, Matchers} class QueryBuilderTest extends FunSuiteLike with Matchers{ test("Create a QueryBuilder") { val qb : QueryBuilder = new QueryBuilder(initSize = 100, orderBySize = 10) assert(qb.getGroupByClause == "") assert(qb.getOuterGroupByClause == "") qb.addMultiDimensionJoin("test_join") assert(qb.getMultiDimensionJoinExpressions == "test_join") qb.addPartitionPredicate("pred") qb.addPartitionPredicate("pred2") assert(qb.getPartitionPredicates == "pred OR pred2") qb.addColumnHeader("header") assert(qb.getColumnHeaders == "header") qb.addOuterQueryEndClause("endClause") assert(qb.getOuterQueryEndClause == "endClause") } }
Example 8
Source File: QueryAttributesTest.scala From maha with Apache License 2.0 | 5 votes |
package com.yahoo.maha.core.query import org.scalatest.{FunSuiteLike, Matchers} class QueryAttributesTest extends FunSuiteLike with Matchers{ test("QueryAttribute Creation") { val longAttrib : LongAttribute = new LongAttribute(1) assert(longAttrib.toString == "1") val stringAttribute : StringAttribute = new StringAttribute("10") assert(stringAttribute.toString == "10") } test("QueryAttributes Listing failure/success cases") { val longAttrib : LongAttribute = new LongAttribute(1) assert(longAttrib.toString == "1") val stringAttribute : StringAttribute = new StringAttribute("10") assert(stringAttribute.toString == "10") val attributes : QueryAttributes = new QueryAttributes(Map("1" -> longAttrib, "10" -> stringAttribute)) assert(attributes.getAttribute("1").equals(longAttrib)) assert(attributes.getAttributeOption("10").equals(Option(stringAttribute))) val getThrown = intercept[IllegalArgumentException] { attributes.getAttribute("fake attribute") } assert(getThrown.getMessage.equals("requirement failed: Attribute is not defined: fake attribute")) } }
Example 9
Source File: SqlHelperTest.scala From maha with Apache License 2.0 | 5 votes |
package com.yahoo.maha.core.helper import com.yahoo.maha.core.query.{InnerJoin, LeftOuterJoin, RightOuterJoin} import com.yahoo.maha.core.{DruidEngine, HiveEngine, OracleEngine, PrestoEngine} import org.scalatest.{FunSuiteLike, Matchers} class SqlHelperTest extends FunSuiteLike with Matchers{ test("Attempt to use each join-able engine") { assert(SqlHelper.getJoinString(InnerJoin, HiveEngine).contains("INNER JOIN")) assert(SqlHelper.getJoinString(LeftOuterJoin, OracleEngine).contains("LEFT OUTER JOIN")) assert(SqlHelper.getJoinString(RightOuterJoin, PrestoEngine).contains("RIGHT OUTER JOIN")) } test("Should fail with DruidEngine") { val thrown = intercept[IllegalArgumentException] { SqlHelper.getJoinString(InnerJoin, DruidEngine) } assert(thrown.getMessage.contains("Unexpected Engine")) } test("Should fail with invalid JoinType") { val thrown = intercept[IllegalArgumentException] { SqlHelper.getJoinString(null, OracleEngine) } assert(thrown.getMessage.contains("Unexpected Join Type")) } }
Example 10
Source File: SidechainNodeViewHolderTest.scala From Sidechains-SDK with MIT License | 5 votes |
package com.horizen.actors import java.util.concurrent.TimeUnit import akka.actor.{ActorRef, ActorSystem} import akka.pattern.ask import akka.testkit.TestKit import akka.util.Timeout import com.horizen.SidechainNodeViewHolder.ReceivableMessages.GetDataFromCurrentSidechainNodeView import com.horizen.fixtures.SidechainNodeViewHolderFixture import com.horizen.node.SidechainNodeView import org.scalatest.{BeforeAndAfterAll, FunSuiteLike} import scala.concurrent._ import scala.concurrent.duration._ import org.scalatest._ import org.junit.runner.RunWith import org.scalatest.junit.JUnitRunner @RunWith(classOf[JUnitRunner]) class SidechainNodeViewHolderTest extends Suites( new SidechainNodeViewHolderTest1, new SidechainNodeViewHolderTest2 ) @RunWith(classOf[JUnitRunner]) class SidechainNodeViewHolderTest1 extends TestKit(ActorSystem("testsystem")) with FunSuiteLike with BeforeAndAfterAll with SidechainNodeViewHolderFixture { implicit val timeout = Timeout(5, TimeUnit.SECONDS) override def afterAll: Unit = { //info("Actor system is shutting down...") TestKit.shutdownActorSystem(system) } test ("Test1") { def f(v: SidechainNodeView) = v val sidechainNodeViewHolderRef: ActorRef = getSidechainNodeViewHolderRef val nodeView = (sidechainNodeViewHolderRef ? GetDataFromCurrentSidechainNodeView(f)) .mapTo[SidechainNodeView] assert(Await.result(nodeView, 5 seconds) != null) } test("Test2") { } } @RunWith(classOf[JUnitRunner]) class SidechainNodeViewHolderTest2 extends TestKit(ActorSystem("testSystem")) with FeatureSpecLike with BeforeAndAfterAll with Matchers with SidechainNodeViewHolderFixture { implicit val timeout = Timeout(5, TimeUnit.SECONDS) override def afterAll: Unit = { //info("Actor system is shutting down...") TestKit.shutdownActorSystem(system) } feature("Actor1") { scenario("Scenario 1"){ system should not be(null) def f(v: SidechainNodeView) = v val sidechainNodeViewHolderRef: ActorRef = getSidechainNodeViewHolderRef val nodeView = (sidechainNodeViewHolderRef ? GetDataFromCurrentSidechainNodeView(f)) .mapTo[SidechainNodeView] Await.result(nodeView, 5 seconds) should not be(null) } } }
Example 11
Source File: Step3_ReplicatorSpec.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.testkit.{ TestProbe, TestKit, ImplicitSender } import org.scalatest.BeforeAndAfterAll import org.scalatest.Matchers import org.scalatest.FunSuiteLike import akka.actor.ActorSystem import scala.concurrent.duration._ import kvstore.Arbiter.{ JoinedSecondary, Join } import kvstore.Persistence.{ Persisted, Persist } import kvstore.Replicator.{ SnapshotAck, Snapshot, Replicate } import org.scalactic.ConversionCheckedTripleEquals class Step3_ReplicatorSpec extends TestKit(ActorSystem("Step3ReplicatorSpec")) with FunSuiteLike with BeforeAndAfterAll with Matchers with ConversionCheckedTripleEquals with ImplicitSender with Tools { override def afterAll(): Unit = { system.shutdown() } test("case1: Replicator should send snapshots when asked to replicate") { val secondary = TestProbe() val replicator = system.actorOf(Replicator.props(secondary.ref), "case1-replicator") replicator ! Replicate("k1", Some("v1"), 0L) secondary.expectMsg(Snapshot("k1", Some("v1"), 0L)) secondary.ignoreMsg({ case Snapshot(_, _, 0L) => true }) secondary.reply(SnapshotAck("k1", 0L)) replicator ! Replicate("k1", Some("v2"), 1L) secondary.expectMsg(Snapshot("k1", Some("v2"), 1L)) secondary.ignoreMsg({ case Snapshot(_, _, 1L) => true }) secondary.reply(SnapshotAck("k1", 1L)) replicator ! Replicate("k2", Some("v1"), 2L) secondary.expectMsg(Snapshot("k2", Some("v1"), 2L)) secondary.ignoreMsg({ case Snapshot(_, _, 2L) => true }) secondary.reply(SnapshotAck("k2", 2L)) replicator ! Replicate("k1", None, 3L) secondary.expectMsg(Snapshot("k1", None, 3L)) secondary.reply(SnapshotAck("k1", 3L)) } test("case2: Replicator should retry until acknowledged by secondary") { val secondary = TestProbe() val replicator = system.actorOf(Replicator.props(secondary.ref), "case2-replicator") replicator ! Replicate("k1", Some("v1"), 0L) secondary.expectMsg(Snapshot("k1", Some("v1"), 0L)) secondary.expectMsg(300.milliseconds, Snapshot("k1", Some("v1"), 0L)) secondary.expectMsg(300.milliseconds, Snapshot("k1", Some("v1"), 0L)) secondary.reply(SnapshotAck("k1", 0L)) } }
Example 12
Source File: Step6_NewSecondarySpec.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.testkit.TestKit import akka.testkit.ImplicitSender import org.scalatest.BeforeAndAfterAll import org.scalatest.Matchers import org.scalatest.FunSuiteLike import akka.actor.ActorSystem import akka.testkit.TestProbe import Arbiter._ import Replicator._ import org.scalactic.ConversionCheckedTripleEquals class Step6_NewSecondarySpec extends TestKit(ActorSystem("Step6NewSecondarySpec")) with FunSuiteLike with BeforeAndAfterAll with Matchers with ConversionCheckedTripleEquals with ImplicitSender with Tools { override def afterAll(): Unit = { system.shutdown() } test("case1: Primary must start replication to new replicas") { val arbiter = TestProbe() val primary = system.actorOf(Replica.props(arbiter.ref, Persistence.props(flaky = false)), "case1-primary") val user = session(primary) val secondary = TestProbe() arbiter.expectMsg(Join) arbiter.send(primary, JoinedPrimary) user.setAcked("k1", "v1") arbiter.send(primary, Replicas(Set(primary, secondary.ref))) secondary.expectMsg(Snapshot("k1", Some("v1"), 0L)) secondary.reply(SnapshotAck("k1", 0L)) val ack1 = user.set("k1", "v2") secondary.expectMsg(Snapshot("k1", Some("v2"), 1L)) secondary.reply(SnapshotAck("k1", 1L)) user.waitAck(ack1) val ack2 = user.remove("k1") secondary.expectMsg(Snapshot("k1", None, 2L)) secondary.reply(SnapshotAck("k1", 2L)) user.waitAck(ack2) } test("case2: Primary must stop replication to removed replicas and stop Replicator") { val arbiter = TestProbe() val primary = system.actorOf(Replica.props(arbiter.ref, Persistence.props(flaky = false)), "case2-primary") val user = session(primary) val secondary = TestProbe() arbiter.expectMsg(Join) arbiter.send(primary, JoinedPrimary) arbiter.send(primary, Replicas(Set(primary, secondary.ref))) val ack1 = user.set("k1", "v1") secondary.expectMsg(Snapshot("k1", Some("v1"), 0L)) val replicator = secondary.lastSender secondary.reply(SnapshotAck("k1", 0L)) user.waitAck(ack1) watch(replicator) arbiter.send(primary, Replicas(Set(primary))) expectTerminated(replicator) } test("case3: Primary must stop replication to removed replicas and waive their outstanding acknowledgements") { val arbiter = TestProbe() val primary = system.actorOf(Replica.props(arbiter.ref, Persistence.props(flaky = false)), "case3-primary") val user = session(primary) val secondary = TestProbe() arbiter.expectMsg(Join) arbiter.send(primary, JoinedPrimary) arbiter.send(primary, Replicas(Set(primary, secondary.ref))) val ack1 = user.set("k1", "v1") secondary.expectMsg(Snapshot("k1", Some("v1"), 0L)) secondary.reply(SnapshotAck("k1", 0L)) user.waitAck(ack1) val ack2 = user.set("k1", "v2") secondary.expectMsg(Snapshot("k1", Some("v2"), 1L)) arbiter.send(primary, Replicas(Set(primary))) user.waitAck(ack2) } }
Example 13
Source File: IntegrationSpec.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.actor.{ Actor, Props, ActorRef, ActorSystem } import akka.testkit.{ TestProbe, ImplicitSender, TestKit } import org.scalatest.{ BeforeAndAfterAll, FlatSpec, Matchers } import scala.concurrent.duration._ import org.scalatest.FunSuiteLike import org.scalactic.ConversionCheckedTripleEquals class IntegrationSpec(_system: ActorSystem) extends TestKit(_system) with FunSuiteLike with Matchers with BeforeAndAfterAll with ConversionCheckedTripleEquals with ImplicitSender with Tools { import Replica._ import Replicator._ import Arbiter._ def this() = this(ActorSystem("ReplicatorSpec")) override def afterAll: Unit = system.shutdown() }
Example 14
Source File: Tools.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.actor.ActorSystem import scala.concurrent.duration.FiniteDuration import akka.testkit.TestProbe import akka.actor.{ ActorRef, Actor } import org.scalatest.Matchers import org.scalatest.FunSuiteLike import akka.actor.Props import akka.testkit.TestKit import akka.testkit.ImplicitSender import scala.concurrent.duration._ object Tools { class TestRefWrappingActor(val probe: TestProbe) extends Actor { def receive = { case msg => probe.ref forward msg } } } trait Tools { this: TestKit with FunSuiteLike with Matchers with ImplicitSender => import Arbiter._ import Tools._ def probeProps(probe: TestProbe): Props = Props(classOf[TestRefWrappingActor], probe) class Session(val probe: TestProbe, val replica: ActorRef) { import Replica._ @volatile private var seq = 0L private def nextSeq: Long = { val next = seq seq += 1 next } @volatile private var referenceMap = Map.empty[String, String] def waitAck(s: Long): Unit = probe.expectMsg(OperationAck(s)) def waitFailed(s: Long): Unit = probe.expectMsg(OperationFailed(s)) def set(key: String, value: String): Long = { referenceMap += key -> value val s = nextSeq probe.send(replica, Insert(key, value, s)) s } def setAcked(key: String, value: String): Unit = waitAck(set(key, value)) def remove(key: String): Long = { referenceMap -= key val s = nextSeq probe.send(replica, Remove(key, s)) s } def removeAcked(key: String): Unit = waitAck(remove(key)) def getAndVerify(key: String): Unit = { val s = nextSeq probe.send(replica, Get(key, s)) probe.expectMsg(GetResult(key, referenceMap.get(key), s)) } def get(key: String): Option[String] = { val s = nextSeq probe.send(replica, Get(key, s)) probe.expectMsgType[GetResult].valueOption } def nothingHappens(duration: FiniteDuration): Unit = probe.expectNoMsg(duration) } def session(replica: ActorRef)(implicit system: ActorSystem) = new Session(TestProbe(), replica) }
Example 15
Source File: Step4_SecondaryPersistenceSpec.scala From Principles-of-Reactive-Programming with GNU General Public License v3.0 | 5 votes |
package kvstore import akka.testkit.TestKit import akka.testkit.ImplicitSender import org.scalatest.BeforeAndAfterAll import org.scalatest.Matchers import org.scalatest.FunSuiteLike import akka.actor.ActorSystem import akka.testkit.TestProbe import scala.concurrent.duration._ import Arbiter._ import Persistence._ import org.scalactic.ConversionCheckedTripleEquals class Step4_SecondaryPersistenceSpec extends TestKit(ActorSystem("Step4SecondaryPersistenceSpec")) with FunSuiteLike with BeforeAndAfterAll with Matchers with ConversionCheckedTripleEquals with ImplicitSender with Tools { override def afterAll(): Unit = { system.shutdown() } test("case1: Secondary should not acknowledge snapshots until persisted") { import Replicator._ val arbiter = TestProbe() val persistence = TestProbe() val replicator = TestProbe() val secondary = system.actorOf(Replica.props(arbiter.ref, probeProps(persistence)), "case1-secondary") val client = session(secondary) arbiter.expectMsg(Join) arbiter.send(secondary, JoinedSecondary) client.get("k1") should ===(None) replicator.send(secondary, Snapshot("k1", Some("v1"), 0L)) val persistId = persistence.expectMsgPF() { case Persist("k1", Some("v1"), id) => id } withClue("secondary replica should already serve the received update while waiting for persistence: ") { client.get("k1") should ===(Some("v1")) } replicator.expectNoMsg(500.milliseconds) persistence.reply(Persisted("k1", persistId)) replicator.expectMsg(SnapshotAck("k1", 0L)) client.get("k1") should ===(Some("v1")) } test("case2: Secondary should retry persistence in every 100 milliseconds") { import Replicator._ val arbiter = TestProbe() val persistence = TestProbe() val replicator = TestProbe() val secondary = system.actorOf(Replica.props(arbiter.ref, probeProps(persistence)), "case2-secondary") val client = session(secondary) arbiter.expectMsg(Join) arbiter.send(secondary, JoinedSecondary) client.get("k1") should ===(None) replicator.send(secondary, Snapshot("k1", Some("v1"), 0L)) val persistId = persistence.expectMsgPF() { case Persist("k1", Some("v1"), id) => id } withClue("secondary replica should already serve the received update while waiting for persistence: ") { client.get("k1") should ===(Some("v1")) } // Persistence should be retried persistence.expectMsg(200.milliseconds, Persist("k1", Some("v1"), persistId)) persistence.expectMsg(200.milliseconds, Persist("k1", Some("v1"), persistId)) replicator.expectNoMsg(500.milliseconds) persistence.reply(Persisted("k1", persistId)) replicator.expectMsg(SnapshotAck("k1", 0L)) client.get("k1") should ===(Some("v1")) } }
Example 16
Source File: ActorWithDMSupportTest.scala From akka-tools with MIT License | 5 votes |
package no.nextgentel.oss.akkatools.persistence import java.util.concurrent.TimeUnit import akka.actor.{Props, ActorSystem} import akka.testkit.{TestProbe, TestKit} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, Matchers, FunSuiteLike} import scala.concurrent.duration.FiniteDuration class ActorWithDMSupportTest(_system:ActorSystem) extends TestKit(_system) with FunSuiteLike with Matchers with BeforeAndAfterAll with BeforeAndAfter { def this() = this(ActorSystem("ActorWithDMSupportTest", ConfigFactory.load("application-test.conf"))) test("success with dm") { val a = system.actorOf(Props(new TestActorWithDMSupport())) val s = TestProbe() // send raw s.send(a, "sendok") s.expectMsg("ok") // send via dm and withNewPayload val dm = DurableMessage(1L, "sendok", s.ref.path) s.send(a, dm) s.expectMsg(dm.withNewPayload("ok")) // send raw - do nothing s.send(a, "silent") // send silent - wait for configm s.send(a, DurableMessage(1L, "silent", s.ref.path)) s.expectMsg( DurableMessageReceived(1,None) ) // send noconfirm - with dm s.send(a, DurableMessage(1L, "no-confirm", s.ref.path)) s.expectNoMessage(FiniteDuration(500, TimeUnit.MILLISECONDS)) // send noconfirm - with dm s.send(a, DurableMessage(1L, "no-confirm-custom", s.ref.path)) s.expectNoMessage(FiniteDuration(500, TimeUnit.MILLISECONDS)) // send noconfirm - without dm s.send(a, "no-confirm") s.expectNoMessage(FiniteDuration(500, TimeUnit.MILLISECONDS)) // send noconfirm - without dm s.send(a, "no-confirm-custom") s.expectNoMessage(FiniteDuration(500, TimeUnit.MILLISECONDS)) } } class TestActorWithDMSupport extends ActorWithDMSupport { // All raw messages or payloads in DMs are passed to this function. override def receivePayload = { case "sendok" => send(sender.path, "ok") case "silent" => Unit case "no-confirm" => throw new LogWarningAndSkipDMConfirmException("something went wrong") case "no-confirm-custom" => throw new CustomLogWarningAndSkipDMConfirm() } } class CustomLogWarningAndSkipDMConfirm extends Exception("") with LogWarningAndSkipDMConfirm
Example 17
Source File: GeneralAggregateBaseTest_handleSnapshotMessages.scala From akka-tools with MIT License | 5 votes |
package no.nextgentel.oss.akkatools.aggregate.aggregateTest_usingAggregateStateBase import java.util.UUID import akka.actor.{ActorPath, ActorSystem, Props} import akka.persistence.{DeleteMessagesFailure, DeleteMessagesSuccess, SaveSnapshotFailure, SaveSnapshotSuccess, SnapshotMetadata, SnapshotOffer} import akka.testkit.{TestKit, TestProbe} import com.typesafe.config.ConfigFactory import no.nextgentel.oss.akkatools.aggregate._ import no.nextgentel.oss.akkatools.testing.AggregateTesting import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FunSuiteLike, Matchers} import org.slf4j.LoggerFactory override def onSnapshotOffer(offer: SnapshotOffer): Unit = { state = offer.snapshot.asInstanceOf[StringState] } override def acceptSnapshotRequest(req: SaveSnapshotOfCurrentState): Boolean = { if (state == StringState("WAT")) { state = StringState("SAVED") true } else { state = StringState("WAT") //So it works second time false } } override def onSnapshotSuccess(success: SaveSnapshotSuccess): Unit = { state = StringState("SUCCESS_SNAP") } override def onSnapshotFailure(failure: SaveSnapshotFailure): Unit = { state = StringState("FAIL_SNAP") } override def onDeleteMessagesSuccess(success: DeleteMessagesSuccess): Unit = { state = StringState("SUCCESS_MSG") } override def onDeleteMessagesFailure(failure: DeleteMessagesFailure): Unit = { state = StringState("FAIL_MSG") } // Used as prefix/base when constructing the persistenceId to use - the unique ID is extracted runtime from actorPath which is construced by Sharding-coordinator override def persistenceIdBase(): String = "/x/" } case class StringEv(data: String) case class StringState(data:String) extends AggregateStateBase[StringEv, StringState] { override def transitionState(event: StringEv): StateTransition[StringEv, StringState] = StateTransition(StringState(event.data)) }
Example 18
Source File: ClusterSingletonHelperTest.scala From akka-tools with MIT License | 5 votes |
package no.nextgentel.oss.akkatools.cluster import akka.actor.{Actor, ActorRef, ActorSystem, Props} import akka.testkit.{TestKit, TestProbe} import com.typesafe.config.ConfigFactory import org.scalatest.{BeforeAndAfter, BeforeAndAfterAll, FunSuiteLike, Matchers} import org.slf4j.LoggerFactory import scala.util.Random object ClusterSingletonHelperTest { val port = 20000 + Random.nextInt(20000) } class ClusterSingletonHelperTest (_system:ActorSystem) extends TestKit(_system) with FunSuiteLike with Matchers with BeforeAndAfterAll with BeforeAndAfter { def this() = this(ActorSystem("test-actor-system", ConfigFactory.parseString( s"""akka.actor.provider = "akka.cluster.ClusterActorRefProvider" |akka.remote.enabled-transports = ["akka.remote.netty.tcp"] |akka.remote.netty.tcp.hostname="localhost" |akka.remote.netty.tcp.port=${ClusterSingletonHelperTest.port} |akka.cluster.seed-nodes = ["akka.tcp://test-actor-system@localhost:${ClusterSingletonHelperTest.port}"] """.stripMargin ).withFallback(ConfigFactory.load("application-test.conf")))) override def afterAll { TestKit.shutdownActorSystem(system) } val log = LoggerFactory.getLogger(getClass) test("start and communicate with cluster-singleton") { val started = TestProbe() val proxy = ClusterSingletonHelper.startClusterSingleton(system, Props(new OurClusterSingleton(started.ref)), "ocl") started.expectMsg("started") val sender = TestProbe() sender.send(proxy, "ping") sender.expectMsg("pong") } } class OurClusterSingleton(started:ActorRef) extends Actor { started ! "started" def receive = { case "ping" => sender ! "pong" } }
Example 19
Source File: OpCodeTesting.scala From mantis with Apache License 2.0 | 5 votes |
package io.iohk.ethereum.vm import io.iohk.ethereum.vm.MockWorldState.PS import org.scalatest.{FunSuiteLike, Matchers} trait OpCodeTesting extends FunSuiteLike { matchers: Matchers => val config: EvmConfig lazy val unaryOps = config.opCodes.collect { case op: UnaryOp => op } lazy val binaryOps = config.opCodes.collect { case op: BinaryOp => op } lazy val ternaryOps = config.opCodes.collect { case op: TernaryOp => op } lazy val constOps = config.opCodes.collect { case op: ConstOp => op } lazy val pushOps = config.opCodes.collect { case op: PushOp => op } lazy val dupOps = config.opCodes.collect { case op: DupOp => op } lazy val swapOps = config.opCodes.collect { case op: SwapOp => op } lazy val logOps = config.opCodes.collect { case op: LogOp => op } lazy val constGasOps = config.opCodes.collect { case op: ConstGas if op != INVALID => op } def test[T <: OpCode](ops: T*)(f: T => Any): Unit = ops.foreach(op => test(op.toString)(f(op))) def ignore[T <: OpCode](ops: T*)(f: T => Any): Unit = ops.foreach(op => ignore(op.toString)(f(op))) def verifyAllOpCodesRegistered(except: OpCode*): Unit = { test("all opcodes have been registered") { val untested = config.opCodes.filterNot(op => testNames(op.toString)).diff(except) if (untested.isEmpty) succeed else fail("Unregistered opcodes: " + untested.mkString(", ")) } } def verifyGas(expectedGas: BigInt, stateIn: PS, stateOut: PS, allowOOG: Boolean = true): Unit = { if (stateOut.error.contains(OutOfGas) && allowOOG) stateIn.gas should be < expectedGas else if (stateOut.error.contains(OutOfGas) && !allowOOG) fail(s"Unexpected $OutOfGas error") else if (stateOut.error.isDefined && stateOut.error.collect{ case InvalidJump(dest) => dest }.isEmpty) //Found error that is not an InvalidJump fail(s"Unexpected ${stateOut.error.get} error") else { stateOut.gas shouldEqual (stateIn.gas - expectedGas) } } }