summaryrefslogtreecommitdiff
path: root/tests/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/base.py')
-rwxr-xr-xtests/base.py40
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...")