port remaining remote multi-node tests to Artery

This commit is contained in:
Patrik Nordwall 2016-06-02 20:44:27 +02:00
parent 415a1cc7f9
commit bdfbffcde5
10 changed files with 239 additions and 155 deletions

View file

@ -19,12 +19,12 @@ import akka.actor.ActorLogging
import akka.remote.testconductor.TestConductor
import akka.testkit.TestProbe
object RemoteReDeploymentMultiJvmSpec extends MultiNodeConfig {
class RemoteReDeploymentConfig(artery: Boolean) extends MultiNodeConfig {
val first = role("first")
val second = role("second")
commonConfig(debugConfig(on = false).withFallback(ConfigFactory.parseString(
"""akka.remote.transport-failure-detector {
s"""akka.remote.transport-failure-detector {
threshold=0.1
heartbeat-interval=0.1s
acceptable-heartbeat-pause=1s
@ -33,11 +33,52 @@ object RemoteReDeploymentMultiJvmSpec extends MultiNodeConfig {
threshold=0.1
heartbeat-interval=0.1s
acceptable-heartbeat-pause=2.5s
}""")))
}
akka.remote.artery.enabled = $artery
""")))
testTransport(on = true)
deployOn(second, "/parent/hello.remote = \"@first@\"")
}
class RemoteReDeploymentFastMultiJvmNode1 extends RemoteReDeploymentFastMultiJvmSpec(artery = false)
class RemoteReDeploymentFastMultiJvmNode2 extends RemoteReDeploymentFastMultiJvmSpec(artery = false)
class ArteryRemoteReDeploymentFastMultiJvmNode1 extends RemoteReDeploymentFastMultiJvmSpec(artery = true)
class ArteryRemoteReDeploymentFastMultiJvmNode2 extends RemoteReDeploymentFastMultiJvmSpec(artery = true)
abstract class RemoteReDeploymentFastMultiJvmSpec(artery: Boolean) extends RemoteReDeploymentMultiJvmSpec(
new RemoteReDeploymentConfig(artery)) {
override def sleepAfterKill = 0.seconds // new association will come in while old is still healthy
override def expectQuarantine = false
}
class RemoteReDeploymentMediumMultiJvmNode1 extends RemoteReDeploymentMediumMultiJvmSpec(artery = false)
class RemoteReDeploymentMediumMultiJvmNode2 extends RemoteReDeploymentMediumMultiJvmSpec(artery = false)
class ArteryRemoteReDeploymentMediumMultiJvmNode1 extends RemoteReDeploymentMediumMultiJvmSpec(artery = true)
class ArteryRemoteReDeploymentMediumMultiJvmNode2 extends RemoteReDeploymentMediumMultiJvmSpec(artery = true)
abstract class RemoteReDeploymentMediumMultiJvmSpec(artery: Boolean) extends RemoteReDeploymentMultiJvmSpec(
new RemoteReDeploymentConfig(artery)) {
override def sleepAfterKill = 1.seconds // new association will come in while old is gated in ReliableDeliverySupervisor
override def expectQuarantine = false
}
class RemoteReDeploymentSlowMultiJvmNode1 extends RemoteReDeploymentSlowMultiJvmSpec(artery = false)
class RemoteReDeploymentSlowMultiJvmNode2 extends RemoteReDeploymentSlowMultiJvmSpec(artery = false)
class ArteryRemoteReDeploymentSlowMultiJvmNode1 extends RemoteReDeploymentSlowMultiJvmSpec(artery = true)
class ArteryRemoteReDeploymentSlowMultiJvmNode2 extends RemoteReDeploymentSlowMultiJvmSpec(artery = true)
abstract class RemoteReDeploymentSlowMultiJvmSpec(artery: Boolean) extends RemoteReDeploymentMultiJvmSpec(
new RemoteReDeploymentConfig(artery)) {
override def sleepAfterKill = 10.seconds // new association will come in after old has been quarantined
override def expectQuarantine = true
}
object RemoteReDeploymentMultiJvmSpec {
class Parent extends Actor {
val monitor = context.actorSelection("/user/echo")
def receive = {
@ -64,28 +105,7 @@ object RemoteReDeploymentMultiJvmSpec extends MultiNodeConfig {
def echoProps(target: ActorRef) = Props(new Echo(target))
}
class RemoteReDeploymentFastMultiJvmNode1 extends RemoteReDeploymentFastMultiJvmSpec
class RemoteReDeploymentFastMultiJvmNode2 extends RemoteReDeploymentFastMultiJvmSpec
abstract class RemoteReDeploymentFastMultiJvmSpec extends RemoteReDeploymentMultiJvmSpec {
override def sleepAfterKill = 0.seconds // new association will come in while old is still healthy
override def expectQuarantine = false
}
class RemoteReDeploymentMediumMultiJvmNode1 extends RemoteReDeploymentMediumMultiJvmSpec
class RemoteReDeploymentMediumMultiJvmNode2 extends RemoteReDeploymentMediumMultiJvmSpec
abstract class RemoteReDeploymentMediumMultiJvmSpec extends RemoteReDeploymentMultiJvmSpec {
override def sleepAfterKill = 1.seconds // new association will come in while old is gated in ReliableDeliverySupervisor
override def expectQuarantine = false
}
class RemoteReDeploymentSlowMultiJvmNode1 extends RemoteReDeploymentSlowMultiJvmSpec
class RemoteReDeploymentSlowMultiJvmNode2 extends RemoteReDeploymentSlowMultiJvmSpec
abstract class RemoteReDeploymentSlowMultiJvmSpec extends RemoteReDeploymentMultiJvmSpec {
override def sleepAfterKill = 10.seconds // new association will come in after old has been quarantined
override def expectQuarantine = true
}
abstract class RemoteReDeploymentMultiJvmSpec extends MultiNodeSpec(RemoteReDeploymentMultiJvmSpec)
abstract class RemoteReDeploymentMultiJvmSpec(multiNodeConfig: RemoteReDeploymentConfig) extends MultiNodeSpec(multiNodeConfig)
with STMultiNodeSpec with ImplicitSender {
def sleepAfterKill: FiniteDuration
@ -93,6 +113,7 @@ abstract class RemoteReDeploymentMultiJvmSpec extends MultiNodeSpec(RemoteReDepl
def initialParticipants = roles.size
import multiNodeConfig._
import RemoteReDeploymentMultiJvmSpec._
"A remote deployment target system" must {
@ -113,6 +134,11 @@ abstract class RemoteReDeploymentMultiJvmSpec extends MultiNodeSpec(RemoteReDepl
enterBarrier("first-deployed")
// FIXME When running with Artery:
// [akka://RemoteReDeploymentMultiJvmSpec/user/parent] received Supervise from unregistered child
// Actor[artery://RemoteReDeploymentMultiJvmSpec@localhost:55627/remote/artery/RemoteReDeploymentMultiJvmSpec@localhost:65490/user/parent/hello#-370928728],
// this will not end well
runOn(first) {
testConductor.blackhole(second, first, Both).await
testConductor.shutdown(second, abort = true).await