[Autotest] Correct version check for chrome-perf build.
Code is changed in check_version_to_confirm_install, so that special logic is
only applied to trybot paladin build. For any other build, the version without
any tail part (e.g., -rc#) is used to match the version in lsb-release.
BUG=chromium:230375
TEST=local unit test, run_suite with lumpy-chrome-perf/R28-3970.0.0-b2996
DEPLOY=none
Change-Id: I0283546a0b1d7f1036240bb6062d37b54ca53120
Reviewed-on: https://gerrit.chromium.org/gerrit/48016
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Commit-Queue: Dan Shi <dshi@chromium.org>
Reviewed-by: Dan Shi <dshi@chromium.org>
Tested-by: Dan Shi <dshi@chromium.org>
diff --git a/client/common_lib/cros/autoupdater.py b/client/common_lib/cros/autoupdater.py
index 24b19ba..ec60cff 100644
--- a/client/common_lib/cros/autoupdater.py
+++ b/client/common_lib/cros/autoupdater.py
@@ -374,6 +374,10 @@
update version: lumpy-paladin/R27-3878.0.0-rc7
booted version: 3837.0.0-rc7
+ 5. chrome-perf build.
+ update version: lumpy-chrome-perf/R28-3837.0.0-b2996
+ booted version: 3837.0.0
+
When we are checking if a DUT needs to do a full install, we should NOT
use this method to check if the DUT is running the same version, since
it may return false positive for a DUT running trybot paladin build to
@@ -403,21 +407,27 @@
booted_version = self.get_build_id()
- is_release_build = '-release/' in url_to_image_name(self.update_url)
- is_rc_build = '-rc' in self.update_version
+ is_trybot_paladin_build = re.match(r'.+trybot-.+-paladin',
+ self.update_url)
- if is_release_build or is_rc_build:
- # Versioned build, i.e., rc or release build.
- return stripped_version == booted_version
- else:
- # Replace date string with 0 in booted_version
- booted_version_no_date = re.sub(r'\d{4}_\d{2}_\d{2}_\d+', '0',
- booted_version)
- if booted_version == booted_version_no_date:
- logging.error('A paladin build is expected. Version "%s" is ' +
- 'not a paladin build.', booted_version)
+ # Replace date string with 0 in booted_version
+ booted_version_no_date = re.sub(r'\d{4}_\d{2}_\d{2}_\d+', '0',
+ booted_version)
+ has_date_string = booted_version != booted_version_no_date
+
+ if is_trybot_paladin_build:
+ if not has_date_string:
+ logging.error('A trybot paladin build is expected. Version ' +
+ '"%s" is not a paladin build.', booted_version)
return False
return stripped_version == booted_version_no_date
+ else:
+ if has_date_string:
+ logging.error('Unexpected date found in a non trybot paladin' +
+ ' build.')
+ return False
+ # Versioned build, i.e., rc or release build.
+ return stripped_version == booted_version
def get_build_id(self):
diff --git a/client/common_lib/cros/autoupdater_unittest.py b/client/common_lib/cros/autoupdater_unittest.py
index 2f92e47..7d6f2b8 100755
--- a/client/common_lib/cros/autoupdater_unittest.py
+++ b/client/common_lib/cros/autoupdater_unittest.py
@@ -183,5 +183,45 @@
self.assertFalse(updater.check_version_to_confirm_install())
+ def testCheckVersion_5(self):
+ """Test version check methods work for any build.
+
+ Test two methods used to check version, check_version and
+ check_version_to_confirm_install, for:
+ 5. chrome-perf build.
+ update version: lumpy-chrome-perf/R28-3837.0.0-b2996
+ booted version: 3837.0.0
+
+ """
+ update_url = ('http://172.22.50.205:8082/update/lumpy-chrome-perf/'
+ 'R28-4444.0.0-b2996')
+ updater = autoupdater.ChromiumOSUpdater(update_url)
+
+ self.mox.UnsetStubs()
+ self.mox.StubOutWithMock(updater, 'get_build_id')
+ updater.get_build_id().MultipleTimes().AndReturn(
+ '4444.0.2013_03_21_1340')
+ self.mox.ReplayAll()
+
+ self.assertFalse(updater.check_version())
+ self.assertFalse(updater.check_version_to_confirm_install())
+
+ self.mox.UnsetStubs()
+ self.mox.StubOutWithMock(updater, 'get_build_id')
+ updater.get_build_id().MultipleTimes().AndReturn('4444.0.0-rc7')
+ self.mox.ReplayAll()
+
+ self.assertFalse(updater.check_version())
+ self.assertFalse(updater.check_version_to_confirm_install())
+
+ self.mox.UnsetStubs()
+ self.mox.StubOutWithMock(updater, 'get_build_id')
+ updater.get_build_id().MultipleTimes().AndReturn('4444.0.0')
+ self.mox.ReplayAll()
+
+ self.assertFalse(updater.check_version())
+ self.assertTrue(updater.check_version_to_confirm_install())
+
+
if __name__ == '__main__':
unittest.main()