|
Akka/Scala example source code file (AutoDownSpec.scala)
The AutoDownSpec.scala Akka example source code/** * Copyright (C) 2009-2014 Typesafe Inc. <http://www.typesafe.com> */ package akka.cluster import language.postfixOps import language.reflectiveCalls import scala.concurrent.duration._ import akka.actor.Address import akka.actor.Scheduler import akka.actor.ActorRef import akka.actor.Props import akka.cluster.MemberStatus._ import akka.cluster.ClusterEvent._ import akka.testkit.AkkaSpec object AutoDownSpec { final case class DownCalled(address: Address) val memberA = TestMember(Address("akka.tcp", "sys", "a", 2552), Up) val memberB = TestMember(Address("akka.tcp", "sys", "b", 2552), Up) val memberC = TestMember(Address("akka.tcp", "sys", "c", 2552), Up) class AutoDownTestActor( autoDownUnreachableAfter: FiniteDuration, probe: ActorRef) extends AutoDownBase(autoDownUnreachableAfter) { override def selfAddress = memberA.address override def scheduler: Scheduler = context.system.scheduler override def down(node: Address): Unit = { if (leader) probe ! DownCalled(node) else probe ! "down must only be done by leader" } } } @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) class AutoDownSpec extends AkkaSpec { import AutoDownSpec._ def autoDownActor(autoDownUnreachableAfter: FiniteDuration): ActorRef = system.actorOf(Props(classOf[AutoDownTestActor], autoDownUnreachableAfter, testActor)) "AutoDown" must { "down unreachable when leader" in { val a = autoDownActor(Duration.Zero) a ! LeaderChanged(Some(memberA.address)) a ! UnreachableMember(memberB) expectMsg(DownCalled(memberB.address)) } "not down unreachable when not leader" in { val a = autoDownActor(Duration.Zero) a ! LeaderChanged(Some(memberB.address)) a ! UnreachableMember(memberC) expectNoMsg(1.second) } "down unreachable when becoming leader" in { val a = autoDownActor(Duration.Zero) a ! LeaderChanged(Some(memberB.address)) a ! UnreachableMember(memberC) a ! LeaderChanged(Some(memberA.address)) expectMsg(DownCalled(memberC.address)) } "down unreachable after specified duration" in { val a = autoDownActor(2.seconds) a ! LeaderChanged(Some(memberA.address)) a ! UnreachableMember(memberB) expectNoMsg(1.second) expectMsg(DownCalled(memberB.address)) } "down unreachable when becoming leader inbetween detection and specified duration" in { val a = autoDownActor(2.seconds) a ! LeaderChanged(Some(memberB.address)) a ! UnreachableMember(memberC) a ! LeaderChanged(Some(memberA.address)) expectNoMsg(1.second) expectMsg(DownCalled(memberC.address)) } "not down unreachable when loosing leadership inbetween detection and specified duration" in { val a = autoDownActor(2.seconds) a ! LeaderChanged(Some(memberA.address)) a ! UnreachableMember(memberC) a ! LeaderChanged(Some(memberB.address)) expectNoMsg(3.second) } "not down when unreachable become reachable inbetween detection and specified duration" in { val a = autoDownActor(2.seconds) a ! LeaderChanged(Some(memberA.address)) a ! UnreachableMember(memberB) a ! ReachableMember(memberB) expectNoMsg(3.second) } "not down when unreachable is removed inbetween detection and specified duration" in { val a = autoDownActor(2.seconds) a ! LeaderChanged(Some(memberA.address)) a ! UnreachableMember(memberB) a ! MemberRemoved(memberB.copy(Removed), previousStatus = Exiting) expectNoMsg(3.second) } "not down when unreachable is already Down" in { val a = autoDownActor(Duration.Zero) a ! LeaderChanged(Some(memberA.address)) a ! UnreachableMember(memberB.copy(Down)) expectNoMsg(1.second) } } } Other Akka source code examplesHere is a short list of links related to this Akka AutoDownSpec.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.