|
Akka/Scala example source code file (InitialHeartbeatSpec.scala)
The InitialHeartbeatSpec.scala Akka example source code
/**
* Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.cluster
import language.postfixOps
import scala.concurrent.duration._
import com.typesafe.config.ConfigFactory
import akka.actor.Actor
import akka.actor.Props
import akka.cluster.ClusterEvent.CurrentClusterState
import akka.remote.testkit.MultiNodeConfig
import akka.remote.testkit.MultiNodeSpec
import akka.remote.transport.ThrottlerTransportAdapter.Direction
import akka.testkit._
object InitialHeartbeatMultiJvmSpec extends MultiNodeConfig {
val controller = role("controller")
val first = role("first")
val second = role("second")
commonConfig(debugConfig(on = false).
withFallback(ConfigFactory.parseString("""
akka.cluster.failure-detector.threshold = 4""")).
withFallback(MultiNodeClusterSpec.clusterConfig))
testTransport(on = true)
}
class InitialHeartbeatMultiJvmNode1 extends InitialHeartbeatSpec
class InitialHeartbeatMultiJvmNode2 extends InitialHeartbeatSpec
class InitialHeartbeatMultiJvmNode3 extends InitialHeartbeatSpec
abstract class InitialHeartbeatSpec
extends MultiNodeSpec(InitialHeartbeatMultiJvmSpec)
with MultiNodeClusterSpec {
import InitialHeartbeatMultiJvmSpec._
muteMarkingAsUnreachable()
"A member" must {
"detect failure even though no heartbeats have been received" taggedAs LongRunningTest in {
val firstAddress = address(first)
val secondAddress = address(second)
awaitClusterUp(first)
runOn(first) {
within(10 seconds) {
awaitAssert({
cluster.sendCurrentClusterState(testActor)
expectMsgType[CurrentClusterState].members.map(_.address) should contain(secondAddress)
}, interval = 50.millis)
}
}
runOn(second) {
cluster.join(first)
within(10 seconds) {
awaitAssert({
cluster.sendCurrentClusterState(testActor)
expectMsgType[CurrentClusterState].members.map(_.address) should contain(firstAddress)
}, interval = 50.millis)
}
}
enterBarrier("second-joined")
runOn(controller) {
// It is likely that second has not started heartbeating to first yet,
// and when it does the messages doesn't go through and the first extra heartbeat is triggered.
// If the first heartbeat arrives, it will detect the failure anyway but not really exercise the
// part that we are trying to test here.
testConductor.blackhole(first, second, Direction.Both).await
}
runOn(second) {
within(15 seconds) {
awaitCond(!cluster.failureDetector.isAvailable(first))
}
}
enterBarrier("after-1")
}
}
}
Other Akka source code examplesHere is a short list of links related to this Akka InitialHeartbeatSpec.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.