Index: frontend/planner/support.py |
diff --git a/frontend/planner/support.py b/frontend/planner/support.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..bfd141758f67558d6412065f509cec74f27eb47f |
--- /dev/null |
+++ b/frontend/planner/support.py |
@@ -0,0 +1,84 @@ |
+import common |
+from autotest_lib.frontend.afe import model_attributes as afe_model_attributes |
+ |
+class TestPlanController(object): |
+ """ |
+ Allows a TestPlanSupport to manage the test plan. |
+ |
+ Contains the variables that the TestPlanSupport methods can manipulate, as |
+ well as methods for controlling the flow of the test plan. |
+ """ |
+ def __init__(self, machine, test_alias, *args, **kwargs): |
+ super(TestPlanController, self).__init__(*args, **kwargs) |
+ self.machine = machine |
+ self.test_alias = test_alias |
+ |
+ self._skip = False |
+ self._fail = None |
+ self._unblock = False |
+ |
+ self._reboot_before = afe_model_attributes.RebootBefore.IF_DIRTY |
+ self._reboot_after = afe_model_attributes.RebootAfter.ALWAYS |
+ self._run_verify = True |
+ |
+ |
+ def skip_test(self): |
+ """ |
+ Call this in execute_before() to skip the current test. |
+ """ |
+ self._skip = True |
+ |
+ |
+ def fail_test(self, reason, attributes={}): |
+ """ |
+ Fails the test with the reason and optional attributes provided. |
+ |
+ Call this in execute_before() to force the test to fail, setting the |
+ reason to the provided reason. You may optionally specify some test |
+ attributes to set as well, as a dictionary. |
+ """ |
+ self._fail = (reason, attributes) |
+ |
+ |
+ def unblock(self): |
+ """ |
+ Call this in execute_after() to keep the host unblocked. |
+ |
+ Hosts will block by default if a test fails. If this has been called, |
+ the host will be unblocked and will continue in the plan. |
+ |
+ You do not need to call this method for the test plan to continue if the |
+ test succeeded. Calling this method from a successful run has no effect. |
+ """ |
+ self._unblock = True |
+ |
+ |
+ def set_reboot_before(self, reboot_before): |
+ """ |
+ Sets the upcoming job's "Reboot Before" option. |
+ |
+ Must be a value from the RebootBefore frontend model attributes. |
+ Defaults to IF_DIRTY. |
+ """ |
+ assert reboot_before in afe_model_attributes.RebootBefore.values |
+ self._reboot_before = reboot_before |
+ |
+ |
+ def set_reboot_after(self, reboot_after): |
+ """ |
+ Sets the upcoming job's "Reboot After" option. |
+ |
+ Must be a value from the RebootAfter frontend model attributes. |
+ Defaults to ALWAYS. |
+ """ |
+ assert reboot_after in afe_model_attributes.RebootAfter.values |
+ self._reboot_after = reboot_after |
+ |
+ |
+ def set_run_verify(self, run_verify): |
+ """ |
+ Sets whether or not the job should run the "Verify" stage. |
+ |
+ Defaults to True. |
+ """ |
+ self._run_verify = run_verify |