[autotest] Change GetBranchBuildsForBoard() to return a dict of lists
Unlike TimedEvents, BuildEvents might see multiple new builds that need testing
appear between calls to ShouldHandle(). As such, we should be able to handle
multiple builds being ready for a given branch at the same time.
BUG=chromium-os:27586
TEST=unit
Change-Id: Ifde4bb35595e5d67ffe25b7d108985b58def9e04
Reviewed-on: https://gerrit.chromium.org/gerrit/20397
Tested-by: Chris Masone <cmasone@chromium.org>
Reviewed-by: Scott Zawalski <scottz@chromium.org>
Commit-Ready: Chris Masone <cmasone@chromium.org>
diff --git a/site_utils/suite_scheduler/base_event.py b/site_utils/suite_scheduler/base_event.py
index d03ea48..a1172e5 100644
--- a/site_utils/suite_scheduler/base_event.py
+++ b/site_utils/suite_scheduler/base_event.py
@@ -97,7 +97,7 @@
@param board: the board whose builds we want.
@param manifest_versions: ManifestVersions instance to use for querying.
- @return {branch: build-name}
+ @return {branch: [build-name]}
Must be implemented by subclasses.
"""
@@ -119,9 +119,9 @@
deduping_scheduler.py
@param branch_builds: a dict mapping branch name to the build to
install for that branch, e.g.
- {'R18': 'x86-alex-release/R18-1655.0.0',
- 'R19': 'x86-alex-release/R19-2077.0.0',
- 'factory': 'x86-alex-factory/R19-2077.0.5'}
+ {'R18': ['x86-alex-release/R18-1655.0.0'],
+ 'R19': ['x86-alex-release/R19-2077.0.0']
+ 'factory': ['x86-alex-factory/R19-2077.0.5']}
@param board: the board against which to Run() all of self._tasks.
@param force: Tell every Task to always Run().
"""
diff --git a/site_utils/suite_scheduler/task.py b/site_utils/suite_scheduler/task.py
index dae0cfd..8a5ed0a 100644
--- a/site_utils/suite_scheduler/task.py
+++ b/site_utils/suite_scheduler/task.py
@@ -211,10 +211,10 @@
@param scheduler: an instance of DedupingScheduler, as defined in
deduping_scheduler.py
- @param branch_builds: a dict mapping branch name to the build to
+ @param branch_builds: a dict mapping branch name to the build(s) to
install for that branch, e.g.
- {'R18': 'x86-alex-release/R18-1655.0.0-a1-b1584',
- 'R19': 'x86-alex-release/R19-2077.0.0-a1-b2056'}
+ {'R18': ['x86-alex-release/R18-1655.0.0'],
+ 'R19': ['x86-alex-release/R19-2077.0.0']}
@param board: the board against which to run self._suite.
@param force: Always schedule the suite.
@return True if the task should be kept, False if not
@@ -224,7 +224,7 @@
logging.debug('Checking if %s fits spec %r',
branch, self.branch_specs)
if self._FitsSpec(branch):
- builds.append(build)
+ builds.extend(build)
for build in builds:
try:
if not scheduler.ScheduleSuite(self._suite, board, build,
@@ -248,10 +248,10 @@
@param scheduler: an instance of DedupingScheduler, as defined in
deduping_scheduler.py
- @param branch_builds: a dict mapping branch name to the build to
+ @param branch_builds: a dict mapping branch name to the build(s) to
install for that branch, e.g.
- {'beta': 'x86-alex-release/R18-1655.0.0-a1-b1584',
- 'dev': 'x86-alex-release/R19-2077.0.0-a1-b2056'}
+ {'R18': ['x86-alex-release/R18-1655.0.0'],
+ 'R19': ['x86-alex-release/R19-2077.0.0']}
@param board: the board against which to run self._suite.
@param force: Always schedule the suite.
@return False
diff --git a/site_utils/suite_scheduler/task_unittest.py b/site_utils/suite_scheduler/task_unittest.py
index 46ef476..c09a289 100644
--- a/site_utils/suite_scheduler/task_unittest.py
+++ b/site_utils/suite_scheduler/task_unittest.py
@@ -27,7 +27,7 @@
_BOARD = 'board1'
_BRANCH = '20'
_BRANCH_SPEC = '>=R' + _BRANCH
- _MAP = {_BRANCH: _BUILD}
+ _MAP = {_BRANCH: [_BUILD]}
_POOL = 'fake_pool'
_SUITE = 'suite'
diff --git a/site_utils/suite_scheduler/timed_event.py b/site_utils/suite_scheduler/timed_event.py
index 19c72b1..0972cbc 100644
--- a/site_utils/suite_scheduler/timed_event.py
+++ b/site_utils/suite_scheduler/timed_event.py
@@ -57,12 +57,12 @@
@param board: the board whose builds we want.
@param days_ago: how many days back to look for manifests.
@param manifest_versions: ManifestVersions instance to use for querying.
- @return {branch: build-name}
+ @return {branch: [build-name]}
"""
all_branch_manifests = manifest_versions.ManifestsSince(days_ago, board)
latest_branch_builds = {}
for (type, milestone), manifests in all_branch_manifests.iteritems():
- build = base_event.BuildName(board, type, milestone, manifests[-1])
+ build = base_event.BuildName(board, type, milestone, manifests[-1:])
latest_branch_builds[task.PickBranchName(type, milestone)] = build
return latest_branch_builds
diff --git a/site_utils/suite_scheduler/timed_event_unittest.py b/site_utils/suite_scheduler/timed_event_unittest.py
index 92a8ea0..3892481 100644
--- a/site_utils/suite_scheduler/timed_event_unittest.py
+++ b/site_utils/suite_scheduler/timed_event_unittest.py
@@ -97,7 +97,7 @@
else:
build = branch_builds[milestone]
self.assertTrue(build.startswith('%s-release' % board))
- self.assertTrue('R%s-%s' % (milestone, manifests[-1]) in build)
+ self.assertTrue('R%s-%s' % (milestone, manifests[-1:]) in build)
class NightlyTest(TimedEventTestBase):