def setUp(self): try: from epu.highavailability.core import HighAvailabilityCore # noqa except ImportError: raise SkipTest( "HA Core not available. Run buildout with autolaunch.cfg") self.ha_agent = HighAvailabilityAgent() self.ha_agent.container = DotDict() self.ha_agent.CFG = DotDict() self.ha_agent.CFG.highavailability = DotDict() self.ha_agent.CFG.highavailability.policy = DotDict() self.ha_agent.CFG.highavailability.policy.name = 'npreserving' self.ha_agent.CFG.highavailability.policy.interval = 1 self.ha_agent.CFG.highavailability.policy.parameters = { 'preserve_n': 0 } self.ha_agent.CFG.highavailability.process_definition_id = 'myprocdef' service_id = 'ha_agent' definition_name = 'mydef' self.ha_agent._register_service = Mock(return_value=(service_id, definition_name)) self.ha_agent.container['resource_registry'] = Mock() service = DotDict() service.state = 'state' service.policy = {} self.ha_agent.container.resource_registry.read = Mock( return_value=service) self.ha_agent.container.resource_registry.update = Mock() with patch( 'ion.agents.cei.high_availability_agent.ProcessDispatcherServiceClient' ) as pd_client: pd_client.read_process_definition.return_value = Mock() self.ha_agent.init() self.ha_agent.control = Mock() self.ha_agent.control.get_all_processes = Mock(return_value={}) self.ha_agent.control.reload_processes = Mock() self.ha_agent.core.control = self.ha_agent.control self.policy_thread = gevent.spawn(self.ha_agent._policy_thread_loop) self.threads = [self.policy_thread]
def setUp(self): try: from epu.highavailability.core import HighAvailabilityCore # noqa except ImportError: raise SkipTest("HA Core not available. Run buildout with autolaunch.cfg") self.ha_agent = HighAvailabilityAgent() self.ha_agent.container = DotDict() self.ha_agent.CFG = DotDict() self.ha_agent.CFG.highavailability = DotDict() self.ha_agent.CFG.highavailability.policy = DotDict() self.ha_agent.CFG.highavailability.policy.name = 'npreserving' self.ha_agent.CFG.highavailability.policy.interval = 1 self.ha_agent.CFG.highavailability.policy.parameters = {'preserve_n': 0} self.ha_agent.CFG.highavailability.process_definition_id = 'myprocdef' service_id = 'ha_agent' definition_name = 'mydef' self.ha_agent._register_service = Mock(return_value=(service_id, definition_name)) self.ha_agent.container['resource_registry'] = Mock() service = DotDict() service.state = 'state' service.policy = {} self.ha_agent.container.resource_registry.read = Mock(return_value=service) self.ha_agent.container.resource_registry.update = Mock() with patch('ion.agents.cei.high_availability_agent.ProcessDispatcherServiceClient') as pd_client: pd_client.read_process_definition.return_value = Mock() self.ha_agent.init() self.ha_agent.control = Mock() self.ha_agent.control.get_all_processes = Mock(return_value={}) self.ha_agent.control.reload_processes = Mock() self.ha_agent.core.control = self.ha_agent.control self.policy_thread = gevent.spawn(self.ha_agent._policy_thread_loop) self.threads = [self.policy_thread]
class HAAgentMockTest(PyonTestCase): """Tests which mock out parts of the HA Agent """ def setUp(self): try: from epu.highavailability.core import HighAvailabilityCore except ImportError: raise SkipTest("HA Core not available. Run buildout with autolaunch.cfg") self.ha_agent = HighAvailabilityAgent() self.ha_agent.container = DotDict() self.ha_agent.CFG = DotDict() self.ha_agent.CFG.highavailability = DotDict() self.ha_agent.CFG.highavailability.policy = DotDict() self.ha_agent.CFG.highavailability.policy.name = 'npreserving' self.ha_agent.CFG.highavailability.policy.interval = 1 self.ha_agent.CFG.highavailability.policy.parameters = {'preserve_n': 0} self.ha_agent.CFG.highavailability.process_definition_id = 'myprocdef' service_id = 'ha_agent' definition_name = 'mydef' self.ha_agent._register_service = Mock(return_value=(service_id, definition_name)) self.ha_agent.container['resource_registry'] = Mock() service = DotDict() service.state = 'state' self.ha_agent.container.resource_registry.read = Mock() self.ha_agent.container.resource_registry.update = Mock() with patch('ion.agents.cei.high_availability_agent.ProcessDispatcherServiceClient') as pd_client: pd_client.read_process_definition.return_value = Mock() self.ha_agent.init() self.ha_agent.control = Mock() self.ha_agent.control.get_all_processes = Mock(return_value={}) self.ha_agent.control.reload_processes = Mock() self.ha_agent.core.control = self.ha_agent.control self.policy_thread = gevent.spawn(self.ha_agent._policy_thread_loop) self.threads = [self.policy_thread] def tearDown(self): for thread in self.threads: thread.kill() def test_policy_crash(self): """test_policy_crash This test ensures that the policy thread will catch any exceptions arising from deep inside HA Agent """ # First make reload_processes raise an Exception self.ha_agent.control.reload_processes = Mock(side_effect=ValueError) while not self.ha_agent.control.reload_processes.called: gevent.sleep(0.5) self.assertFalse(self.policy_thread.dead) # Next make reload_processes raise a Timeout, not derived from Exception self.ha_agent.control.reload_processes = Mock(side_effect=gevent.Timeout) while not self.ha_agent.control.reload_processes.called: gevent.sleep(0.5) self.assertFalse(self.policy_thread.dead) self.ha_agent.control.reload_processes = Mock() # Next make apply_policy raise an Exception self.ha_agent.control.get_all_processes = Mock(side_effect=ValueError) while not self.ha_agent.control.get_all_processes.called: gevent.sleep(0.5) self.assertFalse(self.policy_thread.dead) # Next make apply_policy raise a Timeout self.ha_agent.control.get_all_processes = Mock(side_effect=gevent.Timeout) while not self.ha_agent.control.get_all_processes.called: gevent.sleep(0.5) self.assertFalse(self.policy_thread.dead)
class HAAgentMockTest(PyonTestCase): """Tests which mock out parts of the HA Agent """ def setUp(self): try: from epu.highavailability.core import HighAvailabilityCore except ImportError: raise SkipTest( "HA Core not available. Run buildout with autolaunch.cfg") self.ha_agent = HighAvailabilityAgent() self.ha_agent.container = DotDict() self.ha_agent.CFG = DotDict() self.ha_agent.CFG.highavailability = DotDict() self.ha_agent.CFG.highavailability.policy = DotDict() self.ha_agent.CFG.highavailability.policy.name = 'npreserving' self.ha_agent.CFG.highavailability.policy.interval = 1 self.ha_agent.CFG.highavailability.policy.parameters = { 'preserve_n': 0 } self.ha_agent.CFG.highavailability.process_definition_id = 'myprocdef' service_id = 'ha_agent' definition_name = 'mydef' self.ha_agent._register_service = Mock(return_value=(service_id, definition_name)) self.ha_agent.container['resource_registry'] = Mock() service = DotDict() service.state = 'state' self.ha_agent.container.resource_registry.read = Mock() self.ha_agent.container.resource_registry.update = Mock() with patch( 'ion.agents.cei.high_availability_agent.ProcessDispatcherServiceClient' ) as pd_client: pd_client.read_process_definition.return_value = Mock() self.ha_agent.init() self.ha_agent.control = Mock() self.ha_agent.control.get_all_processes = Mock(return_value={}) self.ha_agent.control.reload_processes = Mock() self.ha_agent.core.control = self.ha_agent.control self.policy_thread = gevent.spawn(self.ha_agent._policy_thread_loop) self.threads = [self.policy_thread] def tearDown(self): for thread in self.threads: thread.kill() def test_policy_crash(self): """test_policy_crash This test ensures that the policy thread will catch any exceptions arising from deep inside HA Agent """ # First make reload_processes raise an Exception self.ha_agent.control.reload_processes = Mock(side_effect=ValueError) while not self.ha_agent.control.reload_processes.called: gevent.sleep(0.5) self.assertFalse(self.policy_thread.dead) # Next make reload_processes raise a Timeout, not derived from Exception self.ha_agent.control.reload_processes = Mock( side_effect=gevent.Timeout) while not self.ha_agent.control.reload_processes.called: gevent.sleep(0.5) self.assertFalse(self.policy_thread.dead) self.ha_agent.control.reload_processes = Mock() # Next make apply_policy raise an Exception self.ha_agent.control.get_all_processes = Mock(side_effect=ValueError) while not self.ha_agent.control.get_all_processes.called: gevent.sleep(0.5) self.assertFalse(self.policy_thread.dead) # Next make apply_policy raise a Timeout self.ha_agent.control.get_all_processes = Mock( side_effect=gevent.Timeout) while not self.ha_agent.control.get_all_processes.called: gevent.sleep(0.5) self.assertFalse(self.policy_thread.dead)