Renaming 'on-finish' to 'on-complete' in task spec

* Renamed 'on-finish' to 'on-complete'
* Added unit tests
* Renamed obsolete LinearWorkflowHandlerTest to DirectWorkflowHandlerTest

Change-Id: Ia88a1f6c0ebc4cd81cb1de7cd8b8deb18d105251
This commit is contained in:
Renat Akhmerov
2014-09-02 12:46:38 +07:00
committed by Nikolay Mahotkin
parent 534c193e16
commit f2a29c29e3
4 changed files with 38 additions and 11 deletions

View File

@@ -65,6 +65,21 @@ Workflows:
workflow: wf1 name="John Doe" age=32 param1="Bonnie" param2="Clyde" workflow: wf1 name="John Doe" age=32 param1="Bonnie" param2="Clyde"
workflow-parameters: workflow-parameters:
param1: val1 param1: val1
on-error:
task4: $.my_val = 1
on-success:
task5: $.my_val = 2
on-complete:
task6: $.my_val = 3
task4:
action: std.echo output="Task 4 echo"
task5:
action: std.echo output="Task 5 echo"
task6:
action: std.echo output="Task 6 echo"
""" """
# TODO(rakhmerov): Add more tests when v2 spec is complete. # TODO(rakhmerov): Add more tests when v2 spec is complete.
@@ -156,7 +171,7 @@ class DSLv2ModelTest(base.BaseTest):
self.assertEqual('2.0', wf2_spec.get_version()) self.assertEqual('2.0', wf2_spec.get_version())
self.assertEqual('wf2', wf2_spec.get_name()) self.assertEqual('wf2', wf2_spec.get_name())
self.assertEqual('direct', wf2_spec.get_type()) self.assertEqual('direct', wf2_spec.get_type())
self.assertEqual(1, len(wf2_spec.get_tasks())) self.assertEqual(4, len(wf2_spec.get_tasks()))
self.assertEqual('task3', wf2_spec.get_start_task().get_name()) self.assertEqual('task3', wf2_spec.get_start_task().get_name())
task3_spec = wf2_spec.get_tasks().get('task3') task3_spec = wf2_spec.get_tasks().get('task3')
@@ -183,6 +198,18 @@ class DSLv2ModelTest(base.BaseTest):
{'param1': 'val1'}, {'param1': 'val1'},
task3_spec.get_workflow_parameters() task3_spec.get_workflow_parameters()
) )
self.assertDictEqual(
{'task4': '$.my_val = 1'},
task3_spec.get_on_error()
)
self.assertDictEqual(
{'task5': '$.my_val = 2'},
task3_spec.get_on_success()
)
self.assertDictEqual(
{'task6': '$.my_val = 3'},
task3_spec.get_on_complete()
)
def test_to_dict(self): def test_to_dict(self):
wb_spec = spec_parser.get_workbook_spec_from_yaml(VALID_WB) wb_spec = spec_parser.get_workbook_spec_from_yaml(VALID_WB)

View File

@@ -38,7 +38,7 @@ Workflows:
action: std.echo output="Hey" action: std.echo output="Hey"
publish: publish:
res1: $ res1: $
on-finish: on-complete:
- task2: $.res1 = 'Hey' - task2: $.res1 = 'Hey'
- task3: $.res1 = 'Not Hey' - task3: $.res1 = 'Not Hey'
@@ -50,9 +50,9 @@ Workflows:
""" """
class LinearWorkflowHandlerTest(base.BaseTest): class DirectWorkflowHandlerTest(base.BaseTest):
def setUp(self): def setUp(self):
super(LinearWorkflowHandlerTest, self).setUp() super(DirectWorkflowHandlerTest, self).setUp()
wb_spec = spec_parser.get_workbook_spec_from_yaml(WORKBOOK) wb_spec = spec_parser.get_workbook_spec_from_yaml(WORKBOOK)

View File

@@ -40,7 +40,7 @@ class TaskSpec(base.BaseSpec):
"publish": {"type": ["object", "null"]}, "publish": {"type": ["object", "null"]},
"policies": {"type": ["object", "null"]}, "policies": {"type": ["object", "null"]},
"requires": {"type": ["string", "array", "null"]}, "requires": {"type": ["string", "array", "null"]},
"on-finish": {"type": ["string", "object", "array", "null"]}, "on-complete": {"type": ["string", "object", "array", "null"]},
"on-success": {"type": ["string", "object", "array", "null"]}, "on-success": {"type": ["string", "object", "array", "null"]},
"on-error": {"type": ["string", "object", "array", "null"]} "on-error": {"type": ["string", "object", "array", "null"]}
}, },
@@ -154,8 +154,8 @@ class TaskSpec(base.BaseSpec):
return self._requires return self._requires
def get_on_finish(self): def get_on_complete(self):
return self._get_as_dict("on-finish") return self._get_as_dict("on-complete")
def get_on_success(self): def get_on_success(self):
return self._get_as_dict("on-success") return self._get_as_dict("on-success")

View File

@@ -47,7 +47,7 @@ class DirectWorkflowHandler(base.WorkflowHandler):
def _find_next_tasks(self, task_db): def _find_next_tasks(self, task_db):
"""Finds tasks that should run after completing given task. """Finds tasks that should run after completing given task.
Expression 'on_finish' is not mutually exclusive to 'on_success' Expression 'on_complete' is not mutually exclusive to 'on_success'
and 'on_error'. and 'on_error'.
:param task_db: Task DB model. :param task_db: Task DB model.
:return: List of task specifications. :return: List of task specifications.
@@ -74,10 +74,10 @@ class DirectWorkflowHandler(base.WorkflowHandler):
task_specs = self._get_tasks_to_schedule(on_success, ctx) task_specs = self._get_tasks_to_schedule(on_success, ctx)
if states.is_finished(t_state): if states.is_finished(t_state):
on_finish = tasks_spec[t_name].get_on_finish() on_complete = tasks_spec[t_name].get_on_complete()
if on_finish: if on_complete:
task_specs += self._get_tasks_to_schedule(on_finish, ctx) task_specs += self._get_tasks_to_schedule(on_complete, ctx)
LOG.debug("Found tasks: %s" % task_specs) LOG.debug("Found tasks: %s" % task_specs)