public void RecoverTwoTimesAndThenGiveUp() { MockUnhandledExceptionReceiver exceptionReceiver = new MockUnhandledExceptionReceiver(); m_moduleCoordinator.UnhandledExceptionOccurred += new EventHandler <UnhandledModuleExceptionEventArgs>(exceptionReceiver.OnUnhandledExceptionOccurred); m_moduleCoordinator.AddModule("SuicidalModule", m_suicidalModule); m_moduleCoordinator.AddModule("Watchdog", new WatchdogModule(2)); m_moduleCoordinator.AddExtension <TimedTriggerExtension>("Watchdog", new TimedTriggerExtension(100, 100, true)); m_moduleCoordinator.StartAll(); Assert.IsTrue(m_moduleCoordinator.ModuleControllers["SuicidalModule"].IsAlive); m_moduleCoordinator.PostMessage("SuicidalModule", true); Thread.Sleep(50); Assert.IsFalse(m_moduleCoordinator.ModuleControllers["SuicidalModule"].IsAlive); Thread.Sleep(100); Assert.IsTrue(m_moduleCoordinator.ModuleControllers["SuicidalModule"].IsAlive); m_moduleCoordinator.PostMessage("SuicidalModule", true); Thread.Sleep(100); m_moduleCoordinator.PostMessage("SuicidalModule", true); Thread.Sleep(100); Assert.IsFalse(m_moduleCoordinator.ModuleControllers["SuicidalModule"].IsAlive); Assert.AreEqual(4, exceptionReceiver.Exceptions.Count); Assert.IsInstanceOfType(typeof(ThreadAbortException), exceptionReceiver.Exceptions[0].UnhandledException); Assert.IsInstanceOfType(typeof(ThreadAbortException), exceptionReceiver.Exceptions[1].UnhandledException); Assert.IsInstanceOfType(typeof(ThreadAbortException), exceptionReceiver.Exceptions[2].UnhandledException); Assert.AreEqual("SuicidalModule", exceptionReceiver.Exceptions[3].ModuleName); Assert.AreEqual("Module SuicidalModule died and could not be restarted.", exceptionReceiver.Exceptions[3].UnhandledException.Message); m_moduleCoordinator.StopAll(); }
public void RecoverTwoTimesAndThenGiveUp() { MockUnhandledExceptionReceiver exceptionReceiver = new MockUnhandledExceptionReceiver(); m_moduleCoordinator.UnhandledExceptionOccurred += new EventHandler<UnhandledModuleExceptionEventArgs>(exceptionReceiver.OnUnhandledExceptionOccurred); m_moduleCoordinator.AddModule("SuicidalModule", m_suicidalModule); m_moduleCoordinator.AddModule("Watchdog", new WatchdogModule(2)); m_moduleCoordinator.AddExtension<TimedTriggerExtension>("Watchdog", new TimedTriggerExtension(100,100, true)); m_moduleCoordinator.StartAll(); Assert.IsTrue(m_moduleCoordinator.ModuleControllers["SuicidalModule"].IsAlive); m_moduleCoordinator.PostMessage("SuicidalModule", true); Thread.Sleep(50); Assert.IsFalse(m_moduleCoordinator.ModuleControllers["SuicidalModule"].IsAlive); Thread.Sleep(100); Assert.IsTrue(m_moduleCoordinator.ModuleControllers["SuicidalModule"].IsAlive); m_moduleCoordinator.PostMessage("SuicidalModule", true); Thread.Sleep(100); m_moduleCoordinator.PostMessage("SuicidalModule", true); Thread.Sleep(100); Assert.IsFalse(m_moduleCoordinator.ModuleControllers["SuicidalModule"].IsAlive); Assert.AreEqual(4, exceptionReceiver.Exceptions.Count); Assert.IsInstanceOfType(typeof(ThreadAbortException), exceptionReceiver.Exceptions[0].UnhandledException); Assert.IsInstanceOfType(typeof(ThreadAbortException), exceptionReceiver.Exceptions[1].UnhandledException); Assert.IsInstanceOfType(typeof(ThreadAbortException), exceptionReceiver.Exceptions[2].UnhandledException); Assert.AreEqual("SuicidalModule", exceptionReceiver.Exceptions[3].ModuleName); Assert.AreEqual("Module SuicidalModule died and could not be restarted.", exceptionReceiver.Exceptions[3].UnhandledException.Message); m_moduleCoordinator.StopAll(); }