summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Harlow <jxharlow@godaddy.com>2016-04-29 20:49:28 -0500
committerJoshua Harlow <jxharlow@godaddy.com>2016-05-09 13:23:37 -0700
commit315b9a82618e612c0d0c2964cdecea219fe33687 (patch)
treef2e4b33ccc76c668a68a9ad10768359f6220e878
parentd5974a05f7aa9b8d5406003f1fb9ac6290fe6f0e (diff)
downloadoslo-middleware-315b9a82618e612c0d0c2964cdecea219fe33687.tar.gz
Add a simple __main__ to easily show healthcheck output
Seems like not many people know what the detailed output of this thing does, so in order to make it easier to see that add a simple __main__ entrypoint. Change-Id: Ife3b49c29df7d3558efebb4584971cf69bc8359d
-rw-r--r--oslo_middleware/healthcheck/__main__.py69
-rw-r--r--oslo_middleware/tests/test_healthcheck.py24
2 files changed, 93 insertions, 0 deletions
diff --git a/oslo_middleware/healthcheck/__main__.py b/oslo_middleware/healthcheck/__main__.py
new file mode 100644
index 0000000..217fff6
--- /dev/null
+++ b/oslo_middleware/healthcheck/__main__.py
@@ -0,0 +1,69 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import argparse
+
+from six.moves import SimpleHTTPServer # noqa
+from six.moves import socketserver
+import webob
+
+from oslo_middleware import healthcheck
+
+
+class HttpHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
+ def do_GET(self):
+ @webob.dec.wsgify
+ def dummy_application(req):
+ return 'test'
+ app = healthcheck.Healthcheck(dummy_application, {'detailed': True})
+ req = webob.Request.blank("/healthcheck", accept='text/html',
+ method='GET')
+ res = req.get_response(app)
+ self.send_response(res.status_code)
+ for header_name, header_value in res.headerlist:
+ self.send_header(header_name, header_value)
+ self.end_headers()
+ self.wfile.write(res.body)
+ self.wfile.close()
+
+
+def positive_int(blob):
+ value = int(blob)
+ if value < 0:
+ msg = "%r is not a positive integer" % blob
+ raise argparse.ArgumentTypeError(msg)
+ return value
+
+
+def create_server(port=0):
+ handler = HttpHandler
+ server = socketserver.TCPServer(("", port), handler)
+ return server
+
+
+def main(args=None):
+ """Runs a basic http server to show healthcheck functionality."""
+ parser = argparse.ArgumentParser()
+ parser.add_argument("-p", "--port",
+ help="Unused port to run the tiny"
+ " http server on (or zero to select a"
+ " random unused port)",
+ type=positive_int, required=True)
+ args = parser.parse_args(args=args)
+ server = create_server(args.port)
+ print("Serving at port: %s" % server.server_address[1])
+ server.serve_forever()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/oslo_middleware/tests/test_healthcheck.py b/oslo_middleware/tests/test_healthcheck.py
index 3ffb03f..19fc63a 100644
--- a/oslo_middleware/tests/test_healthcheck.py
+++ b/oslo_middleware/tests/test_healthcheck.py
@@ -13,12 +13,36 @@
# License for the specific language governing permissions and limitations
# under the License.
+import threading
+import time
+
import mock
from oslotest import base as test_base
+import requests
import webob.dec
import webob.exc
from oslo_middleware import healthcheck
+from oslo_middleware.healthcheck import __main__
+
+
+class HealthcheckMainTests(test_base.BaseTestCase):
+
+ def test_startup_response(self):
+ server = __main__.create_server(0)
+ th = threading.Thread(target=server.serve_forever)
+ th.start()
+ self.addCleanup(server.shutdown)
+ while True:
+ try:
+ r = requests.get("http://%s:%s" % (server.server_address[0],
+ server.server_address[1]))
+ except requests.ConnectionError:
+ # Server hasn't started up yet, try again in a few.
+ time.sleep(1)
+ else:
+ self.assertEqual(200, r.status_code)
+ break
class HealthcheckTests(test_base.BaseTestCase):