scala - Akka - test supervision strategy -
i have following scenario: parent supervisor actor creates child each message using factory (function) passed in constructor.
class supervisoractor(childactormaker: actorreffactory => actorref) extends actor actorlogging{ def receive: receive = { case "testthis" => val childactor = childactormaker(context) childactor!"messageforchild" } override val supervisorstrategy = oneforonestrategy() { case _ => stop } } class childactor extends actor { def receive:receive = { case _ => /** whatever **/ } } in test override child receive force exception. expectation child actor stopped every time because of supervision strategy set.
"when child actor throws exception supervisor actor " should " " + " stop it" in { val childactorref = testactorref(new childactor() { override def receive = { case msg: string => throw new illegalargumentexception("kaboom") } }) watch(childactorref) val maker = (_: actorreffactory) => childactorref val supervisoractorref = system.actorof(props(new supervisoractor(maker))) supervisoractorref!"testthis" expectterminated(childactorref, 1.second) } i expect child actor stoped because of supervisorstrategy stop. instead error:
java.lang.assertionerror: assertion failed: timeout (1 second) during expectmsg: terminated any idea of why happening? thank you
it seems childactorref not created supervisoractorref's context (i mean actorcontext of supervisoractor created in test code). childactor(childactorref) not child of supervisoractor(supervisoractorref) in test code. that's why supervisor strategy of supervisoractor doesn't serve purpose.
Comments
Post a Comment