def setUp(self): self.mock_backend = DotDict() self.mock_backend['create_definition'] = Mock() self.mock_backend['read_definition'] = Mock() self.mock_backend['read_definition_by_name'] = Mock() self.mock_backend['update_definition'] = Mock() self.mock_backend['delete_definition'] = Mock() self.mock_backend['create'] = Mock() self.mock_backend['schedule'] = Mock() self.mock_backend['read_process'] = Mock() self.mock_backend['list'] = Mock() self.mock_backend['cancel'] = Mock() self.mock_backend['set_system_boot'] = Mock() self.mock_dashi = DotDict() self.mock_dashi['handle'] = Mock() self.mock_pyon_dashi_exc_map = { NotFound: FakeDashiNotFoundError, BadRequest: FakeDashiBadRequestError, Conflict: FakeDashiWriteConflictError } self.pd_dashi_handler = PDDashiHandler(self.mock_backend, self.mock_dashi)
def setUp(self): self.mock_backend = DotDict() self.mock_backend['create_definition'] = Mock() self.mock_backend['read_definition'] = Mock() self.mock_backend['read_definition_by_name'] = Mock() self.mock_backend['delete_definition'] = Mock() self.mock_backend['spawn'] = Mock() self.mock_backend['read_process'] = Mock() self.mock_backend['list'] = Mock() self.mock_backend['cancel'] = Mock() self.mock_dashi = DotDict() self.mock_dashi['handle'] = Mock() self.pd_dashi_handler = PDDashiHandler(self.mock_backend, self.mock_dashi)
class ProcessDispatcherServiceDashiHandlerTest(PyonTestCase): """Tests the dashi frontend of the PD """ #TODO: add some more thorough tests def setUp(self): self.mock_backend = DotDict() self.mock_backend['create_definition'] = Mock() self.mock_backend['read_definition'] = Mock() self.mock_backend['read_definition_by_name'] = Mock() self.mock_backend['delete_definition'] = Mock() self.mock_backend['spawn'] = Mock() self.mock_backend['read_process'] = Mock() self.mock_backend['list'] = Mock() self.mock_backend['cancel'] = Mock() self.mock_dashi = DotDict() self.mock_dashi['handle'] = Mock() self.pd_dashi_handler = PDDashiHandler(self.mock_backend, self.mock_dashi) def test_process_definitions(self): definition_id = "hello" definition_type = ProcessDefinitionType.PYON_STREAM executable = {'class': 'SomeThing', 'module': 'some.module'} name = "whataname" description = "describing stuff" self.pd_dashi_handler.create_definition(definition_id, definition_type, executable, name, description) self.assertEqual(self.mock_backend.create_definition.call_count, 1) self.pd_dashi_handler.describe_definition(definition_id) self.assertEqual(self.mock_backend.read_definition.call_count, 1) raised = False try: self.pd_dashi_handler.update_definition(definition_id, definition_type, executable, name, description) except BadRequest: raised = True assert raised, "update_definition didn't raise badrequest" self.pd_dashi_handler.remove_definition(definition_id) self.assertEqual(self.mock_backend.delete_definition.call_count, 1) raised = False try: self.pd_dashi_handler.list_definitions() except BadRequest: raised = True assert raised, "list_definitions didn't raise badrequest" def test_schedule(self): self.mock_backend['read_definition'].return_value = ProcessDefinition() upid = 'myupid' definition_id = 'something' queueing_mode = 'RESTART_ONLY' restart_mode = 'ABNORMAL' self.pd_dashi_handler.schedule_process(upid, definition_id, queueing_mode=queueing_mode, restart_mode=restart_mode) self.assertEqual(self.mock_backend.spawn.call_count, 1) args, kwargs = self.mock_backend.spawn.call_args passed_schedule = args[2] assert passed_schedule.queueing_mode == ProcessQueueingMode.RESTART_ONLY assert passed_schedule.restart_mode == ProcessRestartMode.ABNORMAL def test_schedule_by_name(self): pdef = ProcessDefinition() pdef._id = "someprocessid" self.mock_backend['read_definition_by_name'].return_value = pdef upid = 'myupid' definition_name = 'something' queueing_mode = 'RESTART_ONLY' restart_mode = 'ABNORMAL' self.pd_dashi_handler.schedule_process(upid, definition_name=definition_name, queueing_mode=queueing_mode, restart_mode=restart_mode) self.mock_backend.read_definition_by_name.assert_called_once_with(definition_name) self.assertFalse(self.mock_backend.read_definition.call_count) self.assertEqual(self.mock_backend.spawn.call_count, 1) args, kwargs = self.mock_backend.spawn.call_args passed_schedule = args[2] assert passed_schedule.queueing_mode == ProcessQueueingMode.RESTART_ONLY assert passed_schedule.restart_mode == ProcessRestartMode.ABNORMAL
class ProcessDispatcherServiceDashiHandlerTest(PyonTestCase): """Tests the dashi frontend of the PD """ def setUp(self): self.mock_backend = DotDict() self.mock_backend['create_definition'] = Mock() self.mock_backend['read_definition'] = Mock() self.mock_backend['read_definition_by_name'] = Mock() self.mock_backend['update_definition'] = Mock() self.mock_backend['delete_definition'] = Mock() self.mock_backend['create'] = Mock() self.mock_backend['schedule'] = Mock() self.mock_backend['read_process'] = Mock() self.mock_backend['list'] = Mock() self.mock_backend['cancel'] = Mock() self.mock_backend['set_system_boot'] = Mock() self.mock_dashi = DotDict() self.mock_dashi['handle'] = Mock() self.mock_pyon_dashi_exc_map = { NotFound: FakeDashiNotFoundError, BadRequest: FakeDashiBadRequestError, Conflict: FakeDashiWriteConflictError } self.pd_dashi_handler = PDDashiHandler(self.mock_backend, self.mock_dashi) def test_process_definitions(self): definition_id = "hello" definition_type = ProcessDefinitionType.PYON_STREAM executable = {'class': 'SomeThing', 'module': 'some.module'} name = "whataname" description = "describing stuff" self.pd_dashi_handler.create_definition(definition_id, definition_type, executable, name, description) self.assertEqual(self.mock_backend.create_definition.call_count, 1) self.pd_dashi_handler.describe_definition(definition_id) self.assertEqual(self.mock_backend.read_definition.call_count, 1) self.pd_dashi_handler.describe_definition(definition_name=name) self.assertEqual(self.mock_backend.read_definition_by_name.call_count, 1) self.pd_dashi_handler.update_definition(definition_id, definition_type, executable, name, description) self.assertEqual(self.mock_backend.update_definition.call_count, 1) self.pd_dashi_handler.remove_definition(definition_id) self.assertEqual(self.mock_backend.delete_definition.call_count, 1) with patch('ion.services.cei.process_dispatcher_service._PYON_DASHI_EXC_MAP', self.mock_pyon_dashi_exc_map): with self.assertRaises(FakeDashiBadRequestError): self.pd_dashi_handler.list_definitions() # need to specify either definition id or name with self.assertRaises(FakeDashiBadRequestError): self.pd_dashi_handler.describe_definition() def test_exception_map(self): # only testing one of the handlers. assuming they all share the decorator with patch('ion.services.cei.process_dispatcher_service._PYON_DASHI_EXC_MAP', self.mock_pyon_dashi_exc_map): self.mock_backend.read_definition.side_effect = NotFound() with self.assertRaises(FakeDashiNotFoundError): self.pd_dashi_handler.describe_definition("some-def") self.mock_backend.read_definition.side_effect = Conflict() with self.assertRaises(FakeDashiWriteConflictError): self.pd_dashi_handler.describe_definition("some-def") self.mock_backend.read_definition.side_effect = BadRequest() with self.assertRaises(FakeDashiBadRequestError): self.pd_dashi_handler.describe_definition("some-def") # try with an unmapped IonException. should get passed through directly self.mock_backend.read_definition.side_effect = IonException() with self.assertRaises(IonException): self.pd_dashi_handler.describe_definition("some-def") def test_schedule(self): self.mock_backend['read_definition'].return_value = ProcessDefinition() upid = 'myupid' name = 'myname' definition_id = 'something' queueing_mode = 'RESTART_ONLY' restart_mode = 'ABNORMAL' self.pd_dashi_handler.schedule_process(upid, definition_id, queueing_mode=queueing_mode, restart_mode=restart_mode, name=name) self.assertEqual(self.mock_backend.schedule.call_count, 1) args, kwargs = self.mock_backend.schedule.call_args passed_schedule = args[2] assert passed_schedule.queueing_mode == ProcessQueueingMode.RESTART_ONLY assert passed_schedule.restart_mode == ProcessRestartMode.ABNORMAL passed_name = args[4] assert passed_name == name def test_schedule_by_name(self): pdef = ProcessDefinition() pdef._id = "someprocessid" self.mock_backend['read_definition_by_name'].return_value = pdef upid = 'myupid' definition_name = 'something' queueing_mode = 'RESTART_ONLY' restart_mode = 'ABNORMAL' self.pd_dashi_handler.schedule_process(upid, definition_name=definition_name, queueing_mode=queueing_mode, restart_mode=restart_mode) self.mock_backend.read_definition_by_name.assert_called_once_with(definition_name) self.assertFalse(self.mock_backend.read_definition.call_count) self.assertEqual(self.mock_backend.schedule.call_count, 1) args, kwargs = self.mock_backend.schedule.call_args passed_schedule = args[2] assert passed_schedule.queueing_mode == ProcessQueueingMode.RESTART_ONLY assert passed_schedule.restart_mode == ProcessRestartMode.ABNORMAL def test_set_system_boot(self): self.pd_dashi_handler.set_system_boot(False) self.mock_backend.set_system_boot.assert_called_once_with(False)
class ProcessDispatcherServiceDashiHandlerTest(PyonTestCase): """Tests the dashi frontend of the PD """ def setUp(self): self.mock_backend = DotDict() self.mock_backend['create_definition'] = Mock() self.mock_backend['read_definition'] = Mock() self.mock_backend['read_definition_by_name'] = Mock() self.mock_backend['update_definition'] = Mock() self.mock_backend['delete_definition'] = Mock() self.mock_backend['create'] = Mock() self.mock_backend['schedule'] = Mock() self.mock_backend['read_process'] = Mock() self.mock_backend['list'] = Mock() self.mock_backend['cancel'] = Mock() self.mock_backend['set_system_boot'] = Mock() self.mock_dashi = DotDict() self.mock_dashi['handle'] = Mock() self.mock_pyon_dashi_exc_map = { NotFound: FakeDashiNotFoundError, BadRequest: FakeDashiBadRequestError, Conflict: FakeDashiWriteConflictError } self.pd_dashi_handler = PDDashiHandler(self.mock_backend, self.mock_dashi) def test_process_definitions(self): definition_id = "hello" definition_type = ProcessDefinitionType.PYON_STREAM executable = {'class': 'SomeThing', 'module': 'some.module'} name = "whataname" description = "describing stuff" self.pd_dashi_handler.create_definition(definition_id, definition_type, executable, name, description) self.assertEqual(self.mock_backend.create_definition.call_count, 1) self.pd_dashi_handler.describe_definition(definition_id) self.assertEqual(self.mock_backend.read_definition.call_count, 1) self.pd_dashi_handler.describe_definition(definition_name=name) self.assertEqual(self.mock_backend.read_definition_by_name.call_count, 1) self.pd_dashi_handler.update_definition(definition_id, definition_type, executable, name, description) self.assertEqual(self.mock_backend.update_definition.call_count, 1) self.pd_dashi_handler.remove_definition(definition_id) self.assertEqual(self.mock_backend.delete_definition.call_count, 1) with patch( 'ion.services.cei.process_dispatcher_service._PYON_DASHI_EXC_MAP', self.mock_pyon_dashi_exc_map): with self.assertRaises(FakeDashiBadRequestError): self.pd_dashi_handler.list_definitions() # need to specify either definition id or name with self.assertRaises(FakeDashiBadRequestError): self.pd_dashi_handler.describe_definition() def test_exception_map(self): # only testing one of the handlers. assuming they all share the decorator with patch( 'ion.services.cei.process_dispatcher_service._PYON_DASHI_EXC_MAP', self.mock_pyon_dashi_exc_map): self.mock_backend.read_definition.side_effect = NotFound() with self.assertRaises(FakeDashiNotFoundError): self.pd_dashi_handler.describe_definition("some-def") self.mock_backend.read_definition.side_effect = Conflict() with self.assertRaises(FakeDashiWriteConflictError): self.pd_dashi_handler.describe_definition("some-def") self.mock_backend.read_definition.side_effect = BadRequest() with self.assertRaises(FakeDashiBadRequestError): self.pd_dashi_handler.describe_definition("some-def") # try with an unmapped IonException. should get passed through directly self.mock_backend.read_definition.side_effect = IonException() with self.assertRaises(IonException): self.pd_dashi_handler.describe_definition("some-def") def test_schedule(self): self.mock_backend['read_definition'].return_value = ProcessDefinition() upid = 'myupid' name = 'myname' definition_id = 'something' queueing_mode = 'RESTART_ONLY' restart_mode = 'ABNORMAL' self.pd_dashi_handler.schedule_process(upid, definition_id, queueing_mode=queueing_mode, restart_mode=restart_mode, name=name) self.assertEqual(self.mock_backend.schedule.call_count, 1) args, kwargs = self.mock_backend.schedule.call_args passed_schedule = args[2] assert passed_schedule.queueing_mode == ProcessQueueingMode.RESTART_ONLY assert passed_schedule.restart_mode == ProcessRestartMode.ABNORMAL passed_name = args[4] assert passed_name == name def test_schedule_by_name(self): pdef = ProcessDefinition() pdef._id = "someprocessid" self.mock_backend['read_definition_by_name'].return_value = pdef upid = 'myupid' definition_name = 'something' queueing_mode = 'RESTART_ONLY' restart_mode = 'ABNORMAL' self.pd_dashi_handler.schedule_process(upid, definition_name=definition_name, queueing_mode=queueing_mode, restart_mode=restart_mode) self.mock_backend.read_definition_by_name.assert_called_once_with( definition_name) self.assertFalse(self.mock_backend.read_definition.call_count) self.assertEqual(self.mock_backend.schedule.call_count, 1) args, kwargs = self.mock_backend.schedule.call_args passed_schedule = args[2] assert passed_schedule.queueing_mode == ProcessQueueingMode.RESTART_ONLY assert passed_schedule.restart_mode == ProcessRestartMode.ABNORMAL def test_set_system_boot(self): self.pd_dashi_handler.set_system_boot(False) self.mock_backend.set_system_boot.assert_called_once_with(False)