Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: frontend/planner/execution_engine.py

Issue 1595019: Merge remote branch 'origin/upstream' into tempbranch (Closed)
Patch Set: Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: frontend/planner/execution_engine.py
diff --git a/frontend/planner/execution_engine.py b/frontend/planner/execution_engine.py
index c0d164381f173e027c4c0f26b6eef631b7507317..9eea6ad7365b67c92719c928f63f2a7b9d453774 100644
--- a/frontend/planner/execution_engine.py
+++ b/frontend/planner/execution_engine.py
@@ -1,7 +1,7 @@
import time, logging
from autotest_lib.frontend.afe import model_attributes as afe_model_attributes
from autotest_lib.frontend.shared import rest_client
-from autotest_lib.frontend.planner import model_attributes
+from autotest_lib.frontend.planner import model_attributes, support
from autotest_lib.server import frontend
@@ -133,8 +133,19 @@ class ExecutionEngine(object):
finalized=False)
for run in runs:
logging.info('finalizing test run %s', run)
- if run['status'] == Status.FAILED:
- self._planner_rpc.run('modify_host', id=run['host'],
+
+ controller = support.TestPlanController(
+ machine=run['host']['host'],
+ test_alias=run['test_job']['test_config']['alias'])
+ self._run_execute_after(controller, tko_test_id=run['tko_test'],
+ success=(run['status'] == Status.PASSED))
+
+ if controller._fail:
+ raise NotImplemented('TODO: implement forced failure')
+
+ failed = (run['status'] == Status.FAILED or controller._fail)
+ if failed and not controller._unblock:
+ self._planner_rpc.run('modify_host', id=run['host']['id'],
blocked=True)
self._planner_rpc.run('modify_test_run', id=run['id'],
finalized=True)
@@ -162,19 +173,36 @@ class ExecutionEngine(object):
return True
for config in next_configs['next_configs']:
+ config_id = config['next_test_config_id']
+ controller = support.TestPlanController(
+ machine=config['host'],
+ test_alias=config['next_test_config_alias'])
+ self._run_execute_before(controller)
+ if controller._skip:
+ self._planner_rpc.run('skip_test', test_config_id=config_id,
+ hostname=config['host'])
+ continue
+
self._run_job(hostname=config['host'],
- test_config_id=config['next_test_config_id'])
+ test_config_id=config_id,
+ cleanup_before_job=controller._reboot_before,
+ cleanup_after_job=controller._reboot_after,
+ run_verify=controller._run_verify)
return False
- def _run_job(self, hostname, test_config_id):
+ def _run_job(self, hostname, test_config_id, cleanup_before_job,
+ cleanup_after_job, run_verify):
test_config = self._planner_rpc.run('get_test_config',
id=test_config_id)
info = self._afe_rest.execution_info.get().execution_info
info['control_file'] = test_config['control_file']['contents']
info['is_server'] = test_config['is_server']
+ info['cleanup_before_job'] = cleanup_before_job
+ info['cleanup_after_job'] = cleanup_after_job
+ info['run_verify'] = run_verify
atomic_group_class = self._afe_rest.labels.get(
name=self._label_name).members[0].get().atomic_group_class.href
@@ -199,3 +227,31 @@ class ExecutionEngine(object):
plan_id=self._plan_id,
test_config_id=test_config_id,
afe_job_id=job.get().id)
+
+
+ def _run_execute_before(self, controller):
+ """
+ Execute the global support's execute_before() for the plan
+ """
+ self._run_global_support(controller, 'execute_before')
+
+
+ def _run_execute_after(self, controller, tko_test_id, success):
+ """
+ Execute the global support's execute_after() for the plan
+ """
+ self._run_global_support(controller, 'execute_after',
+ tko_test_id=tko_test_id, success=success)
+
+
+ def _run_global_support(self, controller, function_name, **kwargs):
+ plan = self._planner_rpc.run('get_plan', id=self._plan_id)
+ if plan['support']:
+ context = {'model_attributes': afe_model_attributes}
+ exec plan['support'] in context
+ function = context.get(function_name)
+ if function:
+ if not callable(function):
+ raise Exception('Global support defines %s, but it is not '
+ 'callable' % function_name)
+ function(controller, **kwargs)
« no previous file with comments | « frontend/migrations/057_add_planner_triage_actions.py ('k') | frontend/planner/execution_engine_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698