Add a JSON status test
And have the webapp listen on a configurable port to facilitate parallel testing. Start the webapp for every test to be consistent with production use. Change-Id: I2f5c0d1669fac6db1604154ae9cd9d91fa073ba1 Reviewed-on: https://review.openstack.org/35553 Reviewed-by: Jeremy Stanley <fungi@yuggoth.org> Reviewed-by: Clark Boylan <clark.boylan@gmail.com> Approved: James E. Blair <corvus@inaugust.com> Tested-by: Jenkins
This commit is contained in:
parent
8a6f0c20f3
commit
1843a551a9
|
@ -32,6 +32,7 @@ import subprocess
|
||||||
import tempfile
|
import tempfile
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
import urllib
|
||||||
import urllib2
|
import urllib2
|
||||||
import urlparse
|
import urlparse
|
||||||
|
|
||||||
|
@ -42,6 +43,7 @@ import statsd
|
||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
import zuul.scheduler
|
import zuul.scheduler
|
||||||
|
import zuul.webapp
|
||||||
import zuul.launcher.gearman
|
import zuul.launcher.gearman
|
||||||
import zuul.trigger.gerrit
|
import zuul.trigger.gerrit
|
||||||
|
|
||||||
|
@ -754,12 +756,15 @@ class TestScheduler(testtools.TestCase):
|
||||||
self.fake_gerrit = self.gerrit.gerrit
|
self.fake_gerrit = self.gerrit.gerrit
|
||||||
self.fake_gerrit.upstream_root = self.upstream_root
|
self.fake_gerrit.upstream_root = self.upstream_root
|
||||||
|
|
||||||
|
self.webapp = zuul.webapp.WebApp(self.sched, port=0)
|
||||||
|
|
||||||
self.sched.setLauncher(self.launcher)
|
self.sched.setLauncher(self.launcher)
|
||||||
self.sched.setTrigger(self.gerrit)
|
self.sched.setTrigger(self.gerrit)
|
||||||
|
|
||||||
self.sched.start()
|
self.sched.start()
|
||||||
self.sched.reconfigure(self.config)
|
self.sched.reconfigure(self.config)
|
||||||
self.sched.resume()
|
self.sched.resume()
|
||||||
|
self.webapp.start()
|
||||||
self.launcher.gearman.waitForServer()
|
self.launcher.gearman.waitForServer()
|
||||||
self.registerJobs()
|
self.registerJobs()
|
||||||
self.builds = self.worker.running_builds
|
self.builds = self.worker.running_builds
|
||||||
|
@ -774,6 +779,8 @@ class TestScheduler(testtools.TestCase):
|
||||||
self.sched.join()
|
self.sched.join()
|
||||||
self.statsd.stop()
|
self.statsd.stop()
|
||||||
self.statsd.join()
|
self.statsd.join()
|
||||||
|
self.webapp.stop()
|
||||||
|
self.webapp.join()
|
||||||
threads = threading.enumerate()
|
threads = threading.enumerate()
|
||||||
if len(threads) > 1:
|
if len(threads) > 1:
|
||||||
self.log.error("More than one thread is running: %s" % threads)
|
self.log.error("More than one thread is running: %s" % threads)
|
||||||
|
@ -2258,6 +2265,36 @@ class TestScheduler(testtools.TestCase):
|
||||||
assert re.search("project-test2.*SUCCESS", desc)
|
assert re.search("project-test2.*SUCCESS", desc)
|
||||||
assert re.search("Reported result.*SUCCESS", desc)
|
assert re.search("Reported result.*SUCCESS", desc)
|
||||||
|
|
||||||
|
def test_json_status(self):
|
||||||
|
"Test that we can retrieve JSON status info"
|
||||||
|
self.worker.hold_jobs_in_build = True
|
||||||
|
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
|
||||||
|
A.addApproval('CRVW', 2)
|
||||||
|
self.fake_gerrit.addEvent(A.addApproval('APRV', 1))
|
||||||
|
self.waitUntilSettled()
|
||||||
|
|
||||||
|
port = self.webapp.server.socket.getsockname()[1]
|
||||||
|
|
||||||
|
f = urllib.urlopen("http://localhost:%s/status.json" % port)
|
||||||
|
data = f.read()
|
||||||
|
|
||||||
|
self.worker.hold_jobs_in_build = False
|
||||||
|
self.worker.release()
|
||||||
|
self.waitUntilSettled()
|
||||||
|
|
||||||
|
data = json.loads(data)
|
||||||
|
status_jobs = set()
|
||||||
|
for p in data['pipelines']:
|
||||||
|
for q in p['change_queues']:
|
||||||
|
for head in q['heads']:
|
||||||
|
for change in head:
|
||||||
|
assert change['id'] == '1,1'
|
||||||
|
for job in change['jobs']:
|
||||||
|
status_jobs.add(job['name'])
|
||||||
|
assert 'project-merge' in status_jobs
|
||||||
|
assert 'project-test1' in status_jobs
|
||||||
|
assert 'project-test2' in status_jobs
|
||||||
|
|
||||||
def test_node_label(self):
|
def test_node_label(self):
|
||||||
"Test that a job runs on a specific node label"
|
"Test that a job runs on a specific node label"
|
||||||
self.worker.registerFunction('build:node-project-test1:debian')
|
self.worker.registerFunction('build:node-project-test1:debian')
|
||||||
|
|
|
@ -22,13 +22,14 @@ from webob import Request
|
||||||
class WebApp(threading.Thread):
|
class WebApp(threading.Thread):
|
||||||
log = logging.getLogger("zuul.WebApp")
|
log = logging.getLogger("zuul.WebApp")
|
||||||
|
|
||||||
def __init__(self, scheduler):
|
def __init__(self, scheduler, port=8001):
|
||||||
threading.Thread.__init__(self)
|
threading.Thread.__init__(self)
|
||||||
self.scheduler = scheduler
|
self.scheduler = scheduler
|
||||||
|
self.port = port
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.server = httpserver.serve(self.app, host='0.0.0.0', port='8001',
|
self.server = httpserver.serve(self.app, host='0.0.0.0',
|
||||||
start_loop=False)
|
port=self.port, start_loop=False)
|
||||||
self.server.serve_forever()
|
self.server.serve_forever()
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
|
|
Loading…
Reference in New Issue