Reland "Use dev_server to determine the url of the devserver."
Condition for deploying required a scheduler restart. Original
change was fine.
This reverts commit 5ca9d1b7a16b80d71acdbf01bd5b8019b13e3165.
BUG=chromium-os:26451
TEST=Unittests + local run with prod devservers
Change-Id: I9acd6bce50a8919f85ca3ed65420ad235e8501e7
Reviewed-on: https://gerrit.chromium.org/gerrit/28855
Reviewed-by: Chris Sosa <sosa@chromium.org>
Tested-by: Chris Sosa <sosa@chromium.org>
diff --git a/server/cros/dynamic_suite.py b/server/cros/dynamic_suite.py
index fa4a7fa..86e935d 100644
--- a/server/cros/dynamic_suite.py
+++ b/server/cros/dynamic_suite.py
@@ -277,7 +277,6 @@
debug=False)
manager = host_lock_manager.HostLockManager(afe=afe)
reimager = Reimager(job.autodir, afe, tko, results_dir=job.resultdir)
-
try:
if skip_reimage or reimager.attempt(build, board, pool,
job.record_entry, check_hosts,
@@ -368,6 +367,12 @@
return CONFIG.get_config_value('CROS', 'package_url_pattern', type=str)
+def get_package_url(build):
+ """Returns the package url for the given build."""
+ devserver_url = dev_server.DevServer.devserver_url_for_build(build)
+ return _package_url_pattern() % (devserver_url, build)
+
+
def skip_reimage(g):
return g.get('SKIP_IMAGE')
@@ -493,7 +498,7 @@
return job_status.gather_per_host_results(self._afe,
self._tko,
[canary_job],
- REIMAGE_JOB_NAME+'-')
+ REIMAGE_JOB_NAME + '-')
def _ensure_enough_hosts(self, board, pool, num):
@@ -601,8 +606,10 @@
@param num_machines: how many devices to reimage.
@return a frontend.Job object for the reimaging job we scheduled.
"""
+ image_url = _image_url_pattern() % (
+ dev_server.DevServer.devserver_url_for_build(build), build)
control_file = inject_vars(
- {'image_url': _image_url_pattern() % build, 'image_name': build},
+ dict(image_url=image_url, image_name=build),
self._cf_getter.get_control_file_contents_by_name('autoupdate'))
job_deps = []
if pool:
diff --git a/server/cros/dynamic_suite_unittest.py b/server/cros/dynamic_suite_unittest.py
index 5efd76f..476ac51 100755
--- a/server/cros/dynamic_suite_unittest.py
+++ b/server/cros/dynamic_suite_unittest.py
@@ -16,6 +16,7 @@
from autotest_lib.client.common_lib import base_job, control_data, error
from autotest_lib.client.common_lib import global_config
+from autotest_lib.client.common_lib.cros import dev_server
from autotest_lib.frontend.afe.json_rpc import proxy
from autotest_lib.server.cros import control_file_getter, dynamic_suite
from autotest_lib.server.cros import host_lock_manager, job_status
@@ -89,7 +90,7 @@
def testVetRequiredReimageAndRunArgs(self):
"""Should verify only that required args are present and correct."""
- build, board, name, job, _, _, _, _,_ = \
+ build, board, name, job, _, _, _, _, _ = \
dynamic_suite._vet_reimage_and_run_args(**self._DARGS)
self.assertEquals(build, self._DARGS['build'])
self.assertEquals(board, self._DARGS['board'])
@@ -165,7 +166,8 @@
@var _BOARD: fake board to reimage
"""
- _URL = 'http://nothing/%s'
+ _DEVSERVER_URL = 'http://nothing:8082'
+ _URL = '%s/%s'
_BUILD = 'build'
_NUM = 4
_BOARD = 'board'
@@ -232,12 +234,12 @@
"""Should inject dict of varibles into provided strings."""
def find_all_in(d, s):
"""Returns true if all key-value pairs in |d| are printed in |s|."""
- for k,v in d.iteritems():
+ for k, v in d.iteritems():
if isinstance(v, str):
- if "%s='%s'\n" % (k,v) not in s:
+ if "%s='%s'\n" % (k, v) not in s:
return False
else:
- if "%s=%r\n" % (k,v) not in s:
+ if "%s=%r\n" % (k, v) not in s:
return False
return True
@@ -252,13 +254,17 @@
cf_getter = self.mox.CreateMock(control_file_getter.ControlFileGetter)
cf_getter.get_control_file_contents_by_name('autoupdate').AndReturn('')
self.reimager._cf_getter = cf_getter
-
+ self._CONFIG.override_config_value('CROS',
+ 'dev_server',
+ self._DEVSERVER_URL)
self._CONFIG.override_config_value('CROS',
'image_url_pattern',
self._URL)
self.afe.create_job(
- control_file=mox.And(mox.StrContains(self._BUILD),
- mox.StrContains(self._URL % self._BUILD)),
+ control_file=mox.And(
+ mox.StrContains(self._BUILD),
+ mox.StrContains(self._URL % (self._DEVSERVER_URL,
+ self._BUILD))),
name=mox.StrContains(self._BUILD),
control_type='Server',
meta_hosts=[self._BOARD] * self._NUM,
@@ -268,6 +274,18 @@
self.reimager._schedule_reimage_job(self._BUILD, self._BOARD, None,
self._NUM)
+ def testPackageUrl(self):
+ """Should be able to get the package_url for any build."""
+ self._CONFIG.override_config_value('CROS',
+ 'dev_server',
+ self._DEVSERVER_URL)
+ self._CONFIG.override_config_value('CROS',
+ 'package_url_pattern',
+ self._URL)
+ self.mox.ReplayAll()
+ package_url = dynamic_suite.get_package_url(self._BUILD)
+ self.assertEqual(package_url, self._URL % (self._DEVSERVER_URL,
+ self._BUILD))
def expect_attempt(self, canary_job, statuses, ex=None, check_hosts=True):
"""Sets up |self.reimager| to expect an attempt() that returns |success|
@@ -293,7 +311,6 @@
self.mox.StubOutWithMock(job_status, 'gather_per_host_results')
self.mox.StubOutWithMock(job_status, 'record_and_report_results')
-
self.reimager._ensure_version_label(mox.StrContains(self._BUILD))
self.reimager._schedule_reimage_job(self._BUILD,
self._BOARD,
@@ -318,7 +335,7 @@
statuses)
if statuses:
- ret_val = reduce(lambda v,s: v and s.is_good(),
+ ret_val = reduce(lambda v, s: v and s.is_good(),
statuses.values(), True)
job_status.record_and_report_results(
statuses.values(), mox.IgnoreArg()).AndReturn(ret_val)
diff --git a/server/site_tests/autoupdate/control b/server/site_tests/autoupdate/control
index 374a4ce..0f36977 100644
--- a/server/site_tests/autoupdate/control
+++ b/server/site_tests/autoupdate/control
@@ -16,7 +16,7 @@
Assumes that a label including the image name has already been created.
@param image_url: the devserver URL at which the image to install is served.
-@param image_name: the name of the image, used to label the device
+@param image_name: the name of the image, used to label the device a.k.a. build
"""
from autotest_lib.server.cros import frontend_wrappers
@@ -26,7 +26,7 @@
if 'image_name' in locals():
from autotest_lib.server.cros import dynamic_suite
vers = dynamic_suite.VERSION_PREFIX
- repo_url = dynamic_suite._package_url_pattern() % image_name
+ repo_url = dynamic_suite.get_package_url(build=image_name)
AFE = frontend_wrappers.RetryingAFE(timeout_min=30, delay_sec=10, debug=False)