+per #13815 akka-persistence-tck based on @krasserm's work

Original here: https://github.com/krasserm/akka-persistence-testkit

New features:
* merged martin's tests
* usable from java (junit 4)
* simple bench test, which helps checking if ordering is perserved under
  bigger workloads and simple perf checking
* does NOT include tests for already deprecated features (deleteMessages)
* docs

Resolves #13815

Conflicts:
	project/AkkaBuild.scala
This commit is contained in:
Konrad 'ktoso' Malawski 2014-07-08 18:30:15 +02:00
parent 7ca3a9699e
commit 90bc347607
22 changed files with 965 additions and 186 deletions

View file

@ -4,8 +4,9 @@
package docs.persistence
import akka.actor.{ Actor, ActorSystem, Props }
import akka.actor.{Actor, ActorSystem, Props}
import akka.persistence._
import com.typesafe.config.ConfigFactory
import scala.concurrent.duration._
import scala.language.postfixOps
@ -28,7 +29,7 @@ trait PersistenceDocSpec {
new AnyRef {
//#definition
import akka.persistence.{ PersistenceFailure, Persistent, Processor }
import akka.persistence.{PersistenceFailure, Persistent, Processor}
class MyProcessor extends Processor {
def receive = {
@ -93,11 +94,11 @@ trait PersistenceDocSpec {
def receiveRecover: Receive = {
case RecoveryCompleted => recoveryCompleted()
case evt => //...
case evt => //...
}
def receiveCommand: Receive = {
case msg => //...
case msg => //...
}
def recoveryCompleted(): Unit = {
@ -134,7 +135,7 @@ trait PersistenceDocSpec {
new AnyRef {
//#at-least-once-example
import akka.actor.{ Actor, ActorPath, Props }
import akka.actor.{Actor, ActorPath}
import akka.persistence.AtLeastOnceDelivery
case class Msg(deliveryId: Long, s: String)
@ -176,8 +177,8 @@ trait PersistenceDocSpec {
new AnyRef {
//#channel-example
import akka.actor.{ Actor, Props }
import akka.persistence.{ Channel, Deliver, Persistent, Processor }
import akka.actor.{Actor, Props}
import akka.persistence.{Channel, Deliver, Persistent, Processor}
class MyProcessor extends Processor {
val destination = context.actorOf(Props[MyDestination])
@ -251,7 +252,7 @@ trait PersistenceDocSpec {
new AnyRef {
//#fsm-example
import akka.actor.FSM
import akka.persistence.{ Persistent, Processor }
import akka.persistence.{Persistent, Processor}
class PersistentDoor extends Processor with FSM[String, Int] {
startWith("closed", 0)

View file

@ -5,20 +5,18 @@
package docs.persistence
//#plugin-imports
import scala.concurrent.Future
import scala.collection.immutable.Seq
//#plugin-imports
import com.typesafe.config._
import org.scalatest.WordSpec
import scala.concurrent.duration._
import akka.testkit.TestKit
import akka.actor.ActorSystem
//#plugin-imports
import akka.persistence._
import akka.persistence.journal._
import akka.persistence.snapshot._
import akka.testkit.TestKit
import com.typesafe.config._
import org.scalatest.WordSpec
import scala.collection.immutable.Seq
import scala.concurrent.Future
import scala.concurrent.duration._
//#plugin-imports
object PersistencePluginDocSpec {
@ -115,7 +113,6 @@ trait SharedLeveldbPluginDocSpec {
new AnyRef {
import akka.actor._
//#shared-store-creation
import akka.persistence.journal.leveldb.SharedLeveldbStore
val store = system.actorOf(Props[SharedLeveldbStore], "store")
@ -139,3 +136,60 @@ class MySnapshotStore extends SnapshotStore {
def delete(metadata: SnapshotMetadata): Unit = ???
def delete(persistenceId: String, criteria: SnapshotSelectionCriteria): Unit = ???
}
object PersistenceTCKDoc {
new AnyRef {
import akka.persistence.journal.JournalSpec
//#journal-tck-scala
class MyJournalSpec extends JournalSpec {
override val config = ConfigFactory.parseString(
"""
|akka.persistence.journal.plugin = "my.journal.plugin"
""".stripMargin)
}
//#journal-tck-scala
}
new AnyRef {
import akka.persistence.snapshot.SnapshotStoreSpec
//#snapshot-store-tck-scala
class MySnapshotStoreSpec extends SnapshotStoreSpec {
override val config = ConfigFactory.parseString(
"""
|akka.persistence.snapshot-store.plugin = "my.snapshot-store.plugin"
""".stripMargin)
}
//#snapshot-store-tck-scala
}
new AnyRef {
import java.io.File
import akka.persistence.journal.JournalSpec
import org.iq80.leveldb.util.FileUtils
//#journal-tck-before-after-scala
class MyJournalSpec extends JournalSpec {
override val config = ConfigFactory.parseString(
"""
|akka.persistence.journal.plugin = "my.journal.plugin"
""".stripMargin)
val storageLocations = List(
new File(system.settings.config.getString("akka.persistence.journal.leveldb.dir")),
new File(config.getString("akka.persistence.snapshot-store.local.dir")))
override def beforeAll() {
super.beforeAll()
storageLocations foreach FileUtils.deleteRecursively
}
override def afterAll() {
storageLocations foreach FileUtils.deleteRecursively
super.afterAll()
}
}
//#journal-tck-before-after-scala
}
}