From 98d9dbf98f94e68ed42c6112d763cb8b43ac6244 Mon Sep 17 00:00:00 2001 From: Fabien Boucher Date: Thu, 12 Jul 2018 17:33:29 +0200 Subject: [PATCH] zuul-web: config_errors endpoint: return 404 when tenant not found Fix the endpoint to remove 500 error when tenant is not found. Change-Id: I1e76d3f120a3d1abec8253f01cd661e0947b3e65 --- tests/unit/test_web.py | 3 +++ zuul/rpclistener.py | 3 +++ zuul/web/__init__.py | 2 ++ 3 files changed, 8 insertions(+) diff --git a/tests/unit/test_web.py b/tests/unit/test_web.py index a9b0879c6d..84bd8751c7 100644 --- a/tests/unit/test_web.py +++ b/tests/unit/test_web.py @@ -336,6 +336,9 @@ class TestTenantInfoConfigBroken(BaseTestWeb): self.assertIn('Zuul encountered a syntax error', config_errors[0]['error']) + resp = self.get_url("api/tenant/non-tenant/config-errors") + self.assertEqual(404, resp.status_code) + class TestWebSocketInfo(TestInfo): diff --git a/zuul/rpclistener.py b/zuul/rpclistener.py index a756bedd17..5c0c1dc580 100644 --- a/zuul/rpclistener.py +++ b/zuul/rpclistener.py @@ -362,6 +362,9 @@ 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)) + return for err in tenant.layout.loading_errors.errors: output.append({ 'source_context': err.key.context.toDict(), diff --git a/zuul/web/__init__.py b/zuul/web/__init__.py index 418ccd8b83..cf831e7e8f 100755 --- a/zuul/web/__init__.py +++ b/zuul/web/__init__.py @@ -280,6 +280,8 @@ class ZuulWebAPI(object): config_errors = self.rpc.submitJob( 'zuul:config_errors_list', {'tenant': tenant}) ret = json.loads(config_errors.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