You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iota.apache.org by to...@apache.org on 2017/01/31 22:29:13 UTC
[10/12] incubator-iota git commit: [IOTA-36] Unit test for
GlobalPerformer
[IOTA-36] Unit test for GlobalPerformer
Project: http://git-wip-us.apache.org/repos/asf/incubator-iota/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-iota/commit/35a83e9a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-iota/tree/35a83e9a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-iota/diff/35a83e9a
Branch: refs/heads/master
Commit: 35a83e9ae451b78331e0b10f0b5dd202514d4b42
Parents: 048934f
Author: Barbara Gomes <ba...@gmail.com>
Authored: Tue Jan 31 11:56:53 2017 -0800
Committer: Barbara Gomes <ba...@gmail.com>
Committed: Tue Jan 31 11:56:53 2017 -0800
----------------------------------------------------------------------
.../scala/org/apache/iota/fey/Ensemble.scala | 17 ++--
.../scala/org/apache/iota/fey/FeyCoreSpec.scala | 17 ++++
.../apache/iota/fey/GlobalPerformerSpec.scala | 98 ++++++++++++++++++++
3 files changed, 124 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-iota/blob/35a83e9a/fey-core/src/main/scala/org/apache/iota/fey/Ensemble.scala
----------------------------------------------------------------------
diff --git a/fey-core/src/main/scala/org/apache/iota/fey/Ensemble.scala b/fey-core/src/main/scala/org/apache/iota/fey/Ensemble.scala
index 15b6ead..3f74cec 100644
--- a/fey-core/src/main/scala/org/apache/iota/fey/Ensemble.scala
+++ b/fey-core/src/main/scala/org/apache/iota/fey/Ensemble.scala
@@ -162,13 +162,8 @@ protected class Ensemble(val orchestrationID: String,
* @return (performerID, ActorRef of the performer)
*/
private def createFeyActor(performerID: String, connectionIDs: Array[String], tmpActors:HashMap[String, ActorRef]):(String, ActorRef) = {
- // Performer is a global performer and is already created
- if(GlobalPerformer.activeGlobalPerformers.contains(orchestrationID)
- && GlobalPerformer.activeGlobalPerformers.get(orchestrationID).get.contains(performerID)){
- (performerID, GlobalPerformer.activeGlobalPerformers.get(orchestrationID).get.get(performerID).get)
- }
- // performer was already created
- else if(tmpActors.contains(performerID)){
+ // performer was already created
+ if(tmpActors.contains(performerID)){
(performerID, tmpActors.get(performerID).get)
}
else{
@@ -204,7 +199,13 @@ protected class Ensemble(val orchestrationID: String,
tmpActors.put(performerID, actor)
(performerID, actor)
}else{
- throw new IllegalPerformerCreation(s"Performer $performerID is not defined in the JSON")
+ // Performer is a global performer and is already created
+ if(GlobalPerformer.activeGlobalPerformers.contains(orchestrationID)
+ && GlobalPerformer.activeGlobalPerformers.get(orchestrationID).get.contains(performerID)){
+ (performerID, GlobalPerformer.activeGlobalPerformers.get(orchestrationID).get.get(performerID).get)
+ }else {
+ throw new IllegalPerformerCreation(s"Performer $performerID is not defined in the JSON")
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-iota/blob/35a83e9a/fey-core/src/test/scala/org/apache/iota/fey/FeyCoreSpec.scala
----------------------------------------------------------------------
diff --git a/fey-core/src/test/scala/org/apache/iota/fey/FeyCoreSpec.scala b/fey-core/src/test/scala/org/apache/iota/fey/FeyCoreSpec.scala
index 927b87a..5db4760 100644
--- a/fey-core/src/test/scala/org/apache/iota/fey/FeyCoreSpec.scala
+++ b/fey-core/src/test/scala/org/apache/iota/fey/FeyCoreSpec.scala
@@ -275,6 +275,23 @@ class FeyCoreSpec extends BaseAkkaSpec {
TestProbe().expectActor(s"$feyPath/$global_orch_name/ENS-GLOBAL/PERFORMER-SCHEDULER")
TestProbe().expectActor(s"$feyPath/$global_orch_name/ENS-GLOBAL")
}
+ "all previous actors restarted" in {
+ val routee = """$a"""
+ val routee2 = """$b"""
+ val routee3 = """$c"""
+ val routee4 = """$d"""
+ globalIdentifierRef ! IdentifyFeyActors.IDENTIFY_TREE(s"${feyCoreRef.path.toString}/$global_orch_name")
+ Thread.sleep(500)
+ IdentifyFeyActors.actorsPath should have size (8)
+ IdentifyFeyActors.actorsPath should contain(s"$feyPath/$global_orch_name/GLOBAL_MANAGER")
+ IdentifyFeyActors.actorsPath should contain(s"$feyPath/$global_orch_name/GLOBAL_MANAGER/GLOBAL-TEST")
+ IdentifyFeyActors.actorsPath should contain(s"$feyPath/$global_orch_name/ENS-GLOBAL")
+ IdentifyFeyActors.actorsPath should contain(s"$feyPath/$global_orch_name/ENS-GLOBAL/PERFORMER-SCHEDULER")
+ IdentifyFeyActors.actorsPath should contain(s"$feyPath/$global_orch_name/ENS-GLOBAL/PERFORMER-SCHEDULER/$routee")
+ IdentifyFeyActors.actorsPath should contain(s"$feyPath/$global_orch_name/ENS-GLOBAL/PERFORMER-SCHEDULER/$routee2")
+ IdentifyFeyActors.actorsPath should contain(s"$feyPath/$global_orch_name/ENS-GLOBAL/PERFORMER-SCHEDULER/$routee3")
+ IdentifyFeyActors.actorsPath should contain(s"$feyPath/$global_orch_name/ENS-GLOBAL/PERFORMER-SCHEDULER/$routee4")
+ }
}
"Stopping orchestration with global performer" should {
http://git-wip-us.apache.org/repos/asf/incubator-iota/blob/35a83e9a/fey-core/src/test/scala/org/apache/iota/fey/GlobalPerformerSpec.scala
----------------------------------------------------------------------
diff --git a/fey-core/src/test/scala/org/apache/iota/fey/GlobalPerformerSpec.scala b/fey-core/src/test/scala/org/apache/iota/fey/GlobalPerformerSpec.scala
index 0acc44c..9bed93b 100644
--- a/fey-core/src/test/scala/org/apache/iota/fey/GlobalPerformerSpec.scala
+++ b/fey-core/src/test/scala/org/apache/iota/fey/GlobalPerformerSpec.scala
@@ -45,6 +45,9 @@ class GlobalPerformerSpec extends BaseAkkaSpec{
var global_managerRef:TestActorRef[GlobalPerformer] = null
var global_managerState:GlobalPerformer = null
+ var ensembleglobal:ActorRef = null
+ var childPerformer:ActorRef = null
+ var globalPerformer: ActorRef = null
"Creating an Global Manager " should {
"result in sending START message to Monitor actor" in {
@@ -54,5 +57,100 @@ class GlobalPerformerSpec extends BaseAkkaSpec{
global_managerState = global_managerRef.underlyingActor
monitor.expectMsgClass(1.seconds, classOf[Monitor.START])
}
+ s"result in creating an Orchestration child actor with the name '$orch_id'" in {
+ TestProbe().expectActor(s"${orchRef.path.toString}")
+ }
+ s"result in creating an Ensemble child actor with the name '${orchRef.path.toString}/ENS-GLOBAL'" in {
+ ensembleglobal = TestProbe().expectActor(s"${orchRef.path.toString}/ENS-GLOBAL")
+ }
+ s"result in creating a global Performer child actor with the name '${orchRef.path.toString}/GLOBAL_MANAGER/GLOBAL-TEST'" in {
+ globalPerformer = TestProbe().expectActor(s"${orchRef.path.toString}/$global_name/GLOBAL-TEST")
+ TestProbe().expectActor(s"${orchRef.path.toString}/$global_name")
+ }
+ s"result in creating a Performer child actor with the name '${orchRef.path.toString}/ENS-GLOBAL/PERFORMER-SCHEDULER'" in {
+ childPerformer = TestProbe().expectActor(s"${orchRef.path.toString}/ENS-GLOBAL/PERFORMER-SCHEDULER")
+ }
+ s"result in one global actor created for orchestration" in {
+ GlobalPerformer.activeGlobalPerformers should have size(1)
+ GlobalPerformer.activeGlobalPerformers should contain key(orch_id)
+ }
+ s"result in right number of running actors" in {
+ globalIdentifierRef ! IdentifyFeyActors.IDENTIFY_TREE(parent.ref.path.toString)
+ Thread.sleep(500)
+ IdentifyFeyActors.actorsPath should have size (9)
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}")
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}/GLOBAL-MANAGER")
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}/GLOBAL-MANAGER/GLOBAL-TEST")
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}/ENS-GLOBAL")
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}/ENS-GLOBAL/PERFORMER-SCHEDULER")
+ }
+ }
+
+ "Stopping performer inside ensemble" should {
+ "Send stop message to monitor" in {
+ EventFilter.error(pattern = s".*DEAD nPerformers.*", occurrences = 1) intercept {
+ childPerformer ! PoisonPill
+ }
+ //Restarted ensemble
+ monitor.expectMsgClass(1.seconds, classOf[Monitor.START])
+ }
+ }
+
+ "Stopping ensemble" should {
+ "Send stop message to monitor" in {
+ EventFilter.warning(pattern = s".*ACTOR DEAD.*", occurrences = 1) intercept {
+ ensembleglobal ! PoisonPill
+ }
+ //Restarted ensemble
+ monitor.expectMsgClass(1.seconds, classOf[Monitor.TERMINATE])
+ }
+ "result in no orchestration running" in {
+ globalIdentifierRef ! IdentifyFeyActors.IDENTIFY_TREE(parent.ref.path.toString)
+ Thread.sleep(500)
+ IdentifyFeyActors.actorsPath should have size (3)
+ IdentifyFeyActors.actorsPath should not contain(s"${orchRef.path.toString}/ENS-GLOBAL")
+ }
+ "not affect global performer" in {
+ globalIdentifierRef ! IdentifyFeyActors.IDENTIFY_TREE(parent.ref.path.toString)
+ Thread.sleep(500)
+ IdentifyFeyActors.actorsPath should have size (3)
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}")
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}/GLOBAL-MANAGER")
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}/GLOBAL-MANAGER/GLOBAL-TEST")
+ }
+ }
+
+ "Stopping global performer" should {
+ "result in restart the orchestration" in {
+ EventFilter.error(pattern = s".*DEAD Global Performers.*", occurrences = 1) intercept {
+ globalPerformer ! PoisonPill
+ }
+ monitor.expectMsgClass(1.seconds, classOf[Monitor.TERMINATE])
+ }
+ "all previous actors restarted" in {
+ globalIdentifierRef ! IdentifyFeyActors.IDENTIFY_TREE(parent.ref.path.toString)
+ Thread.sleep(500)
+ IdentifyFeyActors.actorsPath should have size (7)
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}")
+ //TestProbe does not contain the right supervisor estrategy to restart global
+ //IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}/GLOBAL-MANAGER")
+ //IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}/GLOBAL-MANAGER/GLOBAL-TEST")
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}/ENS-GLOBAL")
+ IdentifyFeyActors.actorsPath should contain(s"${orchRef.path.toString}/ENS-GLOBAL/PERFORMER-SCHEDULER")
+ }
+ }
+
+ "Stopping orchestration" should {
+ "result in empty global" in {
+ orchRef ! PoisonPill
+ GlobalPerformer.activeGlobalPerformers.remove("GLOBAL-ORCH")
+ globalIdentifierRef ! IdentifyFeyActors.IDENTIFY_TREE(parent.ref.path.toString)
+ Thread.sleep(500)
+ IdentifyFeyActors.actorsPath should not contain(s"${orchRef.path.toString}/ENS-GLOBAL")
+ IdentifyFeyActors.actorsPath should not contain(s"${orchRef.path.toString}/GLOBAL-MANAGER")
+ IdentifyFeyActors.actorsPath should not contain(s"${orchRef.path.toString}/GLOBAL-MANAGER/GLOBAL-TEST")
+
+ GlobalPerformer.activeGlobalPerformers should have size(0)
+ }
}
}