Skip to content

Instantly share code, notes, and snippets.

@RayRoestenburg
Last active August 29, 2015 13:57
Show Gist options
  • Save RayRoestenburg/9580479 to your computer and use it in GitHub Desktop.
Save RayRoestenburg/9580479 to your computer and use it in GitHub Desktop.
Failing persistence test when one probe is used.
package akka.persistence
import com.typesafe.config._
import scala.concurrent.duration._
import akka.actor._
import akka.persistence._
import akka.testkit._
case class SetNumber(number: Int)
case class Add(number: Int)
case class Subtract(number: Int)
case object DecrementAndGet
case object GetNumber
class NumberProcessor(name: String) extends NamedProcessor(name) {
override def processorId = name
var num = 0
def receive = {
case Persistent(SetNumber(number), _) ⇒ num = number
case Persistent(Add(number), _) ⇒ num = num + number
case Persistent(Subtract(number), _) ⇒ num = num - number
case GetNumber ⇒ sender ! num
case p @ Persistent(DecrementAndGet, _) ⇒
num = num - 1
sender ! num
case DecrementAndGet ⇒
num = num - 1
sender ! num
}
}
abstract class NumberProcessorSpec(config: Config) extends AkkaSpec(config)
with PersistenceSpec {
"A processor" must {
"this works" in {
val probe = TestProbe()
val processor = namedProcessor[NumberProcessor]
processor.tell(GetNumber, probe.testActor)
probe.expectMsg(0)
processor.tell(Persistent(DecrementAndGet), probe.testActor)
probe.expectMsg(-1)
watch(processor)
system.stop(processor)
expectMsgType[Terminated]
val processorResurrected = namedProcessor[NumberProcessor]
val anotherProbe = TestProbe()
processorResurrected.tell(Persistent(DecrementAndGet), anotherProbe.testActor)
anotherProbe.expectMsg(-2)
}
"this doesn't, why?" in {
val probe = TestProbe()
val processor = namedProcessor[NumberProcessor]
processor.tell(GetNumber, probe.testActor)
probe.expectMsg(0)
processor.tell(Persistent(DecrementAndGet), probe.testActor)
probe.expectMsg(-1)
watch(processor)
system.stop(processor)
expectMsgType[Terminated]
val processorResurrected = namedProcessor[NumberProcessor]
processorResurrected.tell(Persistent(DecrementAndGet), probe.testActor)
probe.expectMsg(-2)
}
}
}
class NumberSpec extends NumberProcessorSpec(PersistenceSpec.config("leveldb", "NumberSpec"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment