diff options
Diffstat (limited to 'tests/base.py')
-rwxr-xr-x | tests/base.py | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/tests/base.py b/tests/base.py index 18d5f5a84..8c96d18a5 100755 --- a/tests/base.py +++ b/tests/base.py @@ -378,6 +378,8 @@ class FakeChange(object): class FakeGerrit(object): + log = logging.getLogger("zuul.test.FakeGerrit") + def __init__(self, *args, **kw): self.event_queue = Queue.Queue() self.fixture_dir = os.path.join(FIXTURE_DIR, 'gerrit') @@ -394,7 +396,7 @@ class FakeGerrit(object): return c def addEvent(self, data): - return self.event_queue.put(data) + return self.event_queue.put((time.time(), data)) def getEvent(self): return self.event_queue.get() @@ -418,12 +420,18 @@ class FakeGerrit(object): return {} def simpleQuery(self, query): + self.log.debug("simpleQuery: %s" % query) self.queries.append(query) if query.startswith('change:'): # Query a specific changeid changeid = query[len('change:'):] l = [change.query() for change in self.changes.values() if change.data['id'] == changeid] + elif query.startswith('message:'): + # Query the content of a commit message + msg = query[len('message:'):].strip() + l = [change.query() for change in self.changes.values() + if msg in change.data['commitMessage']] else: # Query all open changes l = [change.query() for change in self.changes.values()] @@ -471,6 +479,7 @@ class FakeGerritTrigger(zuul.trigger.gerrit.Gerrit): def __init__(self, upstream_root, *args): super(FakeGerritTrigger, self).__init__(*args) self.upstream_root = upstream_root + self.gerrit_connector.delay = 0.0 def getGitUrl(self, project): return os.path.join(self.upstream_root, project.name) @@ -1107,6 +1116,12 @@ class ZuulTestCase(BaseTestCase): while len(self.gearman_server.functions) < count: time.sleep(0) + def orderedRelease(self): + # Run one build at a time to ensure non-race order: + while len(self.builds): + self.release(self.builds[0]) + self.waitUntilSettled() + def release(self, job): if isinstance(job, FakeBuild): job.release() @@ -1159,8 +1174,6 @@ class ZuulTestCase(BaseTestCase): return True def areAllBuildsWaiting(self): - ret = True - builds = self.launcher.builds.values() for build in builds: client_job = None @@ -1172,35 +1185,34 @@ class ZuulTestCase(BaseTestCase): if not client_job: self.log.debug("%s is not known to the gearman client" % build) - ret = False - continue + return False if not client_job.handle: self.log.debug("%s has no handle" % client_job) - ret = False - continue + return False server_job = self.gearman_server.jobs.get(client_job.handle) if not server_job: self.log.debug("%s is not known to the gearman server" % client_job) - ret = False - continue + return False if not hasattr(server_job, 'waiting'): self.log.debug("%s is being enqueued" % server_job) - ret = False - continue + return False if server_job.waiting: continue worker_job = self.worker.gearman_jobs.get(server_job.unique) if worker_job: + if build.number is None: + self.log.debug("%s has not reported start" % worker_job) + return False if worker_job.build.isWaiting(): continue else: self.log.debug("%s is running" % worker_job) - ret = False + return False else: self.log.debug("%s is unassigned" % server_job) - ret = False - return ret + return False + return True def waitUntilSettled(self): self.log.debug("Waiting until settled...") |