Modify dynamic suite pathway to allow some artifacts to be staged in the bgnd.
This change modifies the site_rpc_interface->dynamic_suite.py workflow to allow
autotest to stage larger build components while imaging devices. It uses
the download/wait_for_status interface provided by the devserver to
accomplish it.
BUG=chromium-os:27285
TEST=All effected unittests pass. Staging larger test on local devserver in
parallel.
Change-Id: Iae2a20762c565b8e6d440c9a501c1f99c73129ed
Reviewed-on: https://gerrit.chromium.org/gerrit/19328
Tested-by: Chris Sosa <sosa@chromium.org>
Reviewed-by: Scott Zawalski <scottz@chromium.org>
Tested-by: Scott Zawalski <scottz@chromium.org>
Commit-Ready: Scott Zawalski <scottz@chromium.org>
diff --git a/frontend/afe/site_rpc_interface.py b/frontend/afe/site_rpc_interface.py
index 3fb8937..c727319 100644
--- a/frontend/afe/site_rpc_interface.py
+++ b/frontend/afe/site_rpc_interface.py
@@ -63,9 +63,11 @@
"""
# All suite names are assumed under test_suites/control.XX.
suite_name = canonicalize_suite_name(suite_name)
- # Ensure |build| is staged is on the dev server.
+ # Ensure components of |build| necessary for installing images are staged
+ # on the dev server. However set synchronous to False to allow other
+ # components to be downloaded in the background.
ds = dev_server.DevServer.create()
- if not ds.trigger_download(build):
+ if not ds.trigger_download(build, synchronous=False):
raise StageBuildFailure("Server error while staging " + build)
getter = control_file_getter.DevServerGetter.create(build, ds)
diff --git a/frontend/afe/site_rpc_interface_unittest.py b/frontend/afe/site_rpc_interface_unittest.py
index 686d636..c691e28 100644
--- a/frontend/afe/site_rpc_interface_unittest.py
+++ b/frontend/afe/site_rpc_interface_unittest.py
@@ -67,7 +67,8 @@
def testStageBuildFail(self):
"""Ensure that a failure to stage the desired build fails the RPC."""
- self.dev_server.trigger_download(self._BUILD).AndReturn(False)
+ self.dev_server.trigger_download(self._BUILD,
+ synchronous=False).AndReturn(False)
self.mox.ReplayAll()
self.assertRaises(site_rpc_interface.StageBuildFailure,
site_rpc_interface.create_suite_job,
@@ -80,7 +81,8 @@
def testGetControlFileFail(self):
"""Ensure that a failure to get needed control file fails the RPC."""
self._mockDevServerGetter()
- self.dev_server.trigger_download(self._BUILD).AndReturn(True)
+ self.dev_server.trigger_download(self._BUILD,
+ synchronous=False).AndReturn(True)
self.getter.get_control_file_contents_by_name(
self._SUITE_NAME).AndReturn(None)
self.mox.ReplayAll()
@@ -95,7 +97,8 @@
def testGetControlFileListFail(self):
"""Ensure that a failure to get needed control file fails the RPC."""
self._mockDevServerGetter()
- self.dev_server.trigger_download(self._BUILD).AndReturn(True)
+ self.dev_server.trigger_download(self._BUILD,
+ synchronous=False).AndReturn(True)
self.getter.get_control_file_contents_by_name(
self._SUITE_NAME).AndRaise(control_file_getter.NoControlFileList())
self.mox.ReplayAll()
@@ -110,7 +113,8 @@
def testCreateSuiteJobFail(self):
"""Ensure that failure to schedule the suite job fails the RPC."""
self._mockDevServerGetter()
- self.dev_server.trigger_download(self._BUILD).AndReturn(True)
+ self.dev_server.trigger_download(self._BUILD,
+ synchronous=False).AndReturn(True)
self.getter.get_control_file_contents_by_name(
self._SUITE_NAME).AndReturn('f')
self._mockRpcUtils(-1)
@@ -119,13 +123,14 @@
self._BOARD,
self._BUILD,
None),
- -1)
+ - 1)
def testCreateSuiteJobSuccess(self):
"""Ensures that success results in a successful RPC."""
self._mockDevServerGetter()
- self.dev_server.trigger_download(self._BUILD).AndReturn(True)
+ self.dev_server.trigger_download(self._BUILD,
+ synchronous=False).AndReturn(True)
self.getter.get_control_file_contents_by_name(
self._SUITE_NAME).AndReturn('f')
job_id = 5
@@ -141,7 +146,8 @@
def testCreateSuiteJobNoHostCheckSuccess(self):
"""Ensures that success results in a successful RPC."""
self._mockDevServerGetter()
- self.dev_server.trigger_download(self._BUILD).AndReturn(True)
+ self.dev_server.trigger_download(self._BUILD,
+ synchronous=False).AndReturn(True)
self.getter.get_control_file_contents_by_name(
self._SUITE_NAME).AndReturn('f')
job_id = 5