def test_task_policy_class(self): policy = policies.base.TaskPolicy() policy._schema = {"properties": {"delay": {"type": "integer"}}} wf_ex = models.WorkflowExecution(id='1-2-3-4', context={}, input={}, params={}) task_ex = models.TaskExecution(in_context={'int_var': 5}) task_ex.workflow_execution = wf_ex policy.delay = "<% $.int_var %>" # Validation is ok. policy.before_task_start(task_ex, None) policy.delay = "some_string" # Validation is failing now. exception = self.assertRaises(exc.InvalidModelException, policy.before_task_start, task_ex, None) self.assertIn("Invalid data type in TaskPolicy", str(exception))
def update_workflow_execution_state(id, cur_state, state, session=None): wf_ex = None # Use WHERE clause to exclude possible conflicts if the state has # already been changed. try: specimen = models.WorkflowExecution( id=id, state=cur_state ) wf_ex = b.model_query( models.WorkflowExecution).update_on_match( specimen=specimen, surrogate_key='id', values={'state': state} ) except oslo_sqlalchemy.update_match.NoRowsMatched: LOG.info( "Can't change workflow execution state from %s to %s, " "because it has already been changed. [execution_id=%s]", cur_state, state, id ) return wf_ex
def create_workflow_execution(values, session=None): wf_ex = models.WorkflowExecution() wf_ex.update(values.copy()) try: wf_ex.save(session=session) except db_exc.DBDuplicateEntry as e: raise exc.DBDuplicateEntryError( "Duplicate entry for WorkflowExecution: %s" % e.columns) return wf_ex
def _prepare_test(self, wf_text): wfs = wf_service.create_workflows(wf_text) wf_spec = spec_parser.get_workflow_spec_by_id(wfs[0].id) wf_ex = models.WorkflowExecution(id='1-2-3-4', spec=wf_spec.to_dict(), state=states.RUNNING, workflow_id=wfs[0].id) self.wf_ex = wf_ex self.wf_spec = wf_spec self.wf_ctrl = d_wf.DirectWorkflowController(wf_ex)
def _prepare_test(self, wf_text): wf_spec = spec_parser.get_workflow_list_spec_from_yaml(wf_text)[0] wf_ex = models.WorkflowExecution() wf_ex.update({ 'id': '1-2-3-4', 'spec': wf_spec.to_dict(), 'state': states.RUNNING }) self.wf_ex = wf_ex self.wf_spec = wf_spec self.wf_ctrl = d_wf.DirectWorkflowController(wf_ex)
def create_workflow_execution(values, session=None): wf_ex = models.WorkflowExecution() wf_ex.update(values.copy()) try: wf_ex.save(session=session) except db_exc.DBDuplicateEntry as e: raise exc.DBDuplicateEntryError( "Duplicate entry for WorkflowExecution with ID: {value} ".format( value=e.value)) return wf_ex
def _prepare_test(self, wf_text): wfs = wf_service.create_workflows(wf_text) wf_spec = spec_parser.get_workflow_spec_by_definition_id( wfs[0].id, wfs[0].updated_at) wf_ex = models.WorkflowExecution(id='1-2-3-4', spec=wf_spec.to_dict(), state=states.RUNNING, workflow_id=wfs[0].id) self.wf_ex = wf_ex self.wf_spec = wf_spec return wf_ex
def setUp(self): super(ReverseWorkflowControllerTest, self).setUp() wb_spec = spec_parser.get_workbook_spec_from_yaml(WB) wf_ex = models.WorkflowExecution( id='1-2-3-4', spec=wb_spec.get_workflows().get('wf').to_dict(), state=states.RUNNING, params={} ) self.wf_ex = wf_ex self.wb_spec = wb_spec self.wf_ctrl = reverse_wf.ReverseWorkflowController(wf_ex)
def setUp(self): super(DirectWorkflowControllerTest, self).setUp() wb_spec = spec_parser.get_workbook_spec_from_yaml(WB) wf_ex = models.WorkflowExecution() wf_ex.update({ 'id': '1-2-3-4', 'spec': wb_spec.get_workflows().get('wf').to_dict(), 'state': states.RUNNING }) self.wf_ex = wf_ex self.wb_spec = wb_spec self.wf_ctrl = d_wf.DirectWorkflowController(wf_ex)
def setUp(self): super(ReverseWorkflowControllerTest, self).setUp() wb_service.create_workbook_v2(WB) wf_def = db_api.get_workflow_definitions()[0] wb_spec = spec_parser.get_workbook_spec_from_yaml(WB) wf_ex = models.WorkflowExecution( id='1-2-3-4', spec=wb_spec.get_workflows().get('wf').to_dict(), state=states.RUNNING, params={}, workflow_id=wf_def.id) self.wf_ex = wf_ex self.wb_spec = wb_spec
from mistral.tests.unit.api import base from mistral.workflow import data_flow from mistral.workflow import states # TODO(everyone): later we need additional tests verifying all the errors etc. RESULT = {"some": "result"} PUBLISHED = {"var": "val"} WF_EX = models.WorkflowExecution(id='abc', workflow_name='some', description='execution description.', spec={'name': 'some'}, state=states.RUNNING, state_info=None, input={'foo': 'bar'}, output={}, params={'env': { 'k1': 'abc' }}, created_at=datetime.datetime(1970, 1, 1), updated_at=datetime.datetime(1970, 1, 1)) TASK_EX = models.TaskExecution( id='123', name='task', workflow_name='flow', workflow_id='123e4567-e89b-12d3-a456-426655441111', spec={ 'type': 'direct', 'version': '2.0',
from mistral.tests.unit import base as unit_base from mistral import utils from mistral.utils import rest_utils from mistral.workflow import states # This line is needed for correct initialization of messaging config. oslo_messaging.get_rpc_transport(cfg.CONF) WF_EX = models.WorkflowExecution( id='123e4567-e89b-12d3-a456-426655440000', workflow_name='some', workflow_id='123e4567-e89b-12d3-a456-426655441111', description='execution description.', spec={'name': 'some'}, state=states.RUNNING, state_info=None, input={'foo': 'bar'}, output={}, params={'env': { 'k1': 'abc' }}, created_at=datetime.datetime(1970, 1, 1), updated_at=datetime.datetime(1970, 1, 1)) WF_EX_JSON = { 'id': '123e4567-e89b-12d3-a456-426655440000', 'input': '{"foo": "bar"}', 'output': '{}', 'params': '{"env": {"k1": "abc"}}', 'state': 'RUNNING', 'state_info': None,
def test_get_controller_reverse(self): wf_spec = spec_parser.get_workflow_list_spec_from_yaml(REVERSE_WF)[0] wf_ex = db_models.WorkflowExecution(spec=wf_spec.to_dict()) self.assertIsInstance(wf_base.get_controller(wf_ex, wf_spec), reverse_wf.ReverseWorkflowController)
def test_get_controller_direct(self): wf_spec = spec_parser.get_workflow_list_spec_from_yaml(DIRECT_WF)[0] wf_ex = db_models.WorkflowExecution(spec=wf_spec.to_dict()) self.assertIsInstance(wf_base.get_controller(wf_ex, wf_spec), direct_wf.DirectWorkflowController)
def update_workflow_execution_state(id, cur_state, state): specimen = models.WorkflowExecution(id=id, state=cur_state) return update_on_match(id, specimen, values={'state': state}, attempts=1)