diff --git a/tests/unit/test_web.py b/tests/unit/test_web.py index b2db176f04..33c4953560 100644 --- a/tests/unit/test_web.py +++ b/tests/unit/test_web.py @@ -277,6 +277,13 @@ class TestWeb(BaseTestWeb): resp = self.get_url("api/tenant/non-tenant/status") self.assertEqual(404, resp.status_code) + def test_jobs_list(self): + jobs = self.get_url("api/tenant/tenant-one/jobs").json() + self.assertEqual(len(jobs), 8) + + resp = self.get_url("api/tenant/non-tenant/jobs") + self.assertEqual(404, resp.status_code) + class TestInfo(BaseTestWeb): diff --git a/zuul/rpclistener.py b/zuul/rpclistener.py index e1ea9c6435..6afcec4005 100644 --- a/zuul/rpclistener.py +++ b/zuul/rpclistener.py @@ -341,6 +341,8 @@ class RPCListener(object): args = json.loads(job.arguments) tenant = self.sched.abide.tenants.get(args.get("tenant")) output = [] + if not tenant: + job.sendWorkComplete(json.dumps(None)) for job_name in sorted(tenant.layout.jobs): desc = None for tenant_job in tenant.layout.jobs[job_name]: diff --git a/zuul/web/__init__.py b/zuul/web/__init__.py index 2096e7758a..bbe370990d 100755 --- a/zuul/web/__init__.py +++ b/zuul/web/__init__.py @@ -269,6 +269,8 @@ class ZuulWebAPI(object): def jobs(self, tenant): job = self.rpc.submitJob('zuul:job_list', {'tenant': tenant}) ret = json.loads(job.data[0]) + if ret is None: + raise cherrypy.HTTPError(404, 'Tenant %s does not exist.' % tenant) resp = cherrypy.response resp.headers['Access-Control-Allow-Origin'] = '*' return ret