introduce base64 random names
- remove Props.randomName and associated logic - ActorRefFactory contains AtomicLong which is used to generate unique children names - base64-like encoding is used with reverse “digit” order - disallow given names which are null, empty or start with ‘$’ - random names start have ‘$’ prepended (‘$’ not being one of the 64 characters) - special marker “$_” for tempPath until “/tmp” supervisor is introduced - TestActorRef uses globally unique “$$” prefix, as it creates actors beneath any supervisor as instructed by the user
This commit is contained in:
parent
5d85ab37e3
commit
a08234cd9a
10 changed files with 130 additions and 101 deletions
|
|
@ -9,6 +9,7 @@ import akka.util.ReflectiveAccess
|
|||
import com.eaio.uuid.UUID
|
||||
import akka.actor.Props._
|
||||
import akka.actor.ActorSystem
|
||||
import java.util.concurrent.atomic.AtomicLong
|
||||
|
||||
/**
|
||||
* This special ActorRef is exclusively for use during unit testing in a single-threaded environment. Therefore, it
|
||||
|
|
@ -41,23 +42,25 @@ class TestActorRef[T <: Actor](_app: ActorSystem, _props: Props, _supervisor: Ac
|
|||
|
||||
object TestActorRef {
|
||||
|
||||
def apply[T <: Actor](factory: ⇒ T)(implicit app: ActorSystem): TestActorRef[T] = apply[T](Props(factory), Props.randomName)
|
||||
private val number = new AtomicLong
|
||||
private[testkit] def randomName: String = {
|
||||
val l = number.getAndIncrement()
|
||||
"$" + akka.util.Helpers.base64(l)
|
||||
}
|
||||
|
||||
def apply[T <: Actor](factory: ⇒ T)(implicit app: ActorSystem): TestActorRef[T] = apply[T](Props(factory), randomName)
|
||||
|
||||
def apply[T <: Actor](factory: ⇒ T, name: String)(implicit app: ActorSystem): TestActorRef[T] = apply[T](Props(factory), name)
|
||||
|
||||
def apply[T <: Actor](props: Props)(implicit app: ActorSystem): TestActorRef[T] = apply[T](props, Props.randomName)
|
||||
def apply[T <: Actor](props: Props)(implicit app: ActorSystem): TestActorRef[T] = apply[T](props, randomName)
|
||||
|
||||
def apply[T <: Actor](props: Props, name: String)(implicit app: ActorSystem): TestActorRef[T] = apply[T](props, app.guardian, name)
|
||||
|
||||
def apply[T <: Actor](props: Props, supervisor: ActorRef, givenName: String)(implicit app: ActorSystem): TestActorRef[T] = {
|
||||
val name: String = givenName match {
|
||||
case null | Props.randomName ⇒ newUuid.toString
|
||||
case given ⇒ given
|
||||
}
|
||||
def apply[T <: Actor](props: Props, supervisor: ActorRef, name: String)(implicit app: ActorSystem): TestActorRef[T] = {
|
||||
new TestActorRef(app, props, supervisor, name)
|
||||
}
|
||||
|
||||
def apply[T <: Actor](implicit m: Manifest[T], app: ActorSystem): TestActorRef[T] = apply[T](Props.randomName)
|
||||
def apply[T <: Actor](implicit m: Manifest[T], app: ActorSystem): TestActorRef[T] = apply[T](randomName)
|
||||
|
||||
def apply[T <: Actor](name: String)(implicit m: Manifest[T], app: ActorSystem): TestActorRef[T] = apply[T](Props({
|
||||
import ReflectiveAccess.{ createInstance, noParams, noArgs }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue