Tidy up tests/base.py
This is a general tidy up and squashed commit of 3 previous changes to ease reviewing. - Generalize event queue handling in tests Store the event queue list in the base test class, so operation on the queues can be delegated to separate method instead of operating on each queue explicitly. Previously: I4c23143b4d49fa409fe378d1348bb6397b748cb9 - Don't pass fake_gerrit to FakeURLOpener It's not used there whatsoever. Previously: Ieefb09aaf60d4044c567b4d51fedf2068c3de1a6 - Pass upstream_root to fake gerrit explicitly Previously: Ifb7d47caec430d0a209140e87ada98b8531c5d04 Co-Authored-By: Joshua Hesketh <josh@nitrotech.org> Change-Id: I4c23143b4d49fa409fe378d1348bb6397b748cb9
This commit is contained in:
parent
fe485c6091
commit
6b71aff8d8
|
@ -385,7 +385,7 @@ class FakeGerritConnection(zuul.connection.gerrit.GerritConnection):
|
|||
log = logging.getLogger("zuul.test.FakeGerritConnection")
|
||||
|
||||
def __init__(self, connection_name, connection_config,
|
||||
changes_db=None, queues_db=None):
|
||||
changes_db=None, queues_db=None, upstream_root=None):
|
||||
super(FakeGerritConnection, self).__init__(connection_name,
|
||||
connection_config)
|
||||
|
||||
|
@ -394,7 +394,7 @@ class FakeGerritConnection(zuul.connection.gerrit.GerritConnection):
|
|||
self.change_number = 0
|
||||
self.changes = changes_db
|
||||
self.queries = []
|
||||
self.upstream_root = None
|
||||
self.upstream_root = upstream_root
|
||||
|
||||
def addFakeChange(self, project, branch, subject, status='NEW'):
|
||||
self.change_number += 1
|
||||
|
@ -474,9 +474,8 @@ class BuildHistory(object):
|
|||
|
||||
|
||||
class FakeURLOpener(object):
|
||||
def __init__(self, upstream_root, fake_gerrit, url):
|
||||
def __init__(self, upstream_root, url):
|
||||
self.upstream_root = upstream_root
|
||||
self.fake_gerrit = fake_gerrit
|
||||
self.url = url
|
||||
|
||||
def read(self):
|
||||
|
@ -934,16 +933,19 @@ class ZuulTestCase(BaseTestCase):
|
|||
FakeSwiftClientConnection))
|
||||
self.swift = zuul.lib.swift.Swift(self.config)
|
||||
|
||||
self.event_queues = [
|
||||
self.sched.result_event_queue,
|
||||
self.sched.trigger_event_queue
|
||||
]
|
||||
|
||||
# Set up connections and give out the default gerrit for testing
|
||||
self.configure_connections()
|
||||
self.sched.registerConnections(self.connections)
|
||||
self.fake_gerrit = self.connections['gerrit']
|
||||
self.fake_gerrit.upstream_root = self.upstream_root
|
||||
|
||||
def URLOpenerFactory(*args, **kw):
|
||||
if isinstance(args[0], urllib2.Request):
|
||||
return old_urlopen(*args, **kw)
|
||||
args = [self.fake_gerrit] + list(args)
|
||||
return FakeURLOpener(self.upstream_root, *args, **kw)
|
||||
|
||||
old_urlopen = urllib2.urlopen
|
||||
|
@ -1011,10 +1013,12 @@ class ZuulTestCase(BaseTestCase):
|
|||
if con_driver == 'gerrit':
|
||||
self.gerrit_changes_dbs[con_name] = {}
|
||||
self.gerrit_queues_dbs[con_name] = Queue.Queue()
|
||||
self.event_queues.append(self.gerrit_queues_dbs['gerrit'])
|
||||
self.connections[con_name] = FakeGerritConnection(
|
||||
con_name, con_config,
|
||||
changes_db=self.gerrit_changes_dbs[con_name],
|
||||
queues_db=self.gerrit_queues_dbs[con_name]
|
||||
queues_db=self.gerrit_queues_dbs[con_name],
|
||||
upstream_root=self.upstream_root
|
||||
)
|
||||
elif con_driver == 'smtp':
|
||||
self.connections[con_name] = \
|
||||
|
@ -1029,6 +1033,7 @@ class ZuulTestCase(BaseTestCase):
|
|||
if 'gerrit' in self.config.sections():
|
||||
self.gerrit_changes_dbs['gerrit'] = {}
|
||||
self.gerrit_queues_dbs['gerrit'] = Queue.Queue()
|
||||
self.event_queues.append(self.gerrit_queues_dbs['gerrit'])
|
||||
self.connections['gerrit'] = FakeGerritConnection(
|
||||
'_legacy_gerrit', dict(self.config.items('gerrit')),
|
||||
changes_db=self.gerrit_changes_dbs['gerrit'],
|
||||
|
@ -1270,15 +1275,21 @@ class ZuulTestCase(BaseTestCase):
|
|||
return False
|
||||
return True
|
||||
|
||||
def eventQueuesEmpty(self):
|
||||
for queue in self.event_queues:
|
||||
yield queue.empty()
|
||||
|
||||
def eventQueuesJoin(self):
|
||||
for queue in self.event_queues:
|
||||
queue.join()
|
||||
|
||||
def waitUntilSettled(self):
|
||||
self.log.debug("Waiting until settled...")
|
||||
start = time.time()
|
||||
while True:
|
||||
if time.time() - start > 10:
|
||||
print 'queue status:',
|
||||
print self.sched.trigger_event_queue.empty(),
|
||||
print self.sched.result_event_queue.empty(),
|
||||
print self.fake_gerrit.event_queue.empty(),
|
||||
print ' '.join(self.eventQueuesEmpty())
|
||||
print self.areAllBuildsWaiting()
|
||||
raise Exception("Timeout waiting for Zuul to settle")
|
||||
# Make sure no new events show up while we're checking
|
||||
|
@ -1287,14 +1298,10 @@ class ZuulTestCase(BaseTestCase):
|
|||
if self.haveAllBuildsReported():
|
||||
# Join ensures that the queue is empty _and_ events have been
|
||||
# processed
|
||||
self.fake_gerrit.event_queue.join()
|
||||
self.sched.trigger_event_queue.join()
|
||||
self.sched.result_event_queue.join()
|
||||
self.eventQueuesJoin()
|
||||
self.sched.run_handler_lock.acquire()
|
||||
if (not self.merge_client.build_sets and
|
||||
self.sched.trigger_event_queue.empty() and
|
||||
self.sched.result_event_queue.empty() and
|
||||
self.fake_gerrit.event_queue.empty() and
|
||||
all(self.eventQueuesEmpty()) and
|
||||
self.haveAllBuildsReported() and
|
||||
self.areAllBuildsWaiting()):
|
||||
self.sched.run_handler_lock.release()
|
||||
|
|
Loading…
Reference in New Issue