Import all the stacktester stuff as-is (s/stacktester/kong/, though).
diff --git a/kong/common/http.py b/kong/common/http.py
new file mode 100644
index 0000000..47ac058
--- /dev/null
+++ b/kong/common/http.py
@@ -0,0 +1,57 @@
+from kong import exceptions
+
+import httplib2
+import os
+import time
+
+
+class Client(object):
+
+ USER_AGENT = 'python-nova_test_client'
+
+ def __init__(self, host='localhost', port=80, base_url=''):
+ #TODO: join these more robustly
+ self.base_url = "http://%s:%s/%s" % (host, port, base_url)
+
+ def poll_request(self, method, url, check_response, **kwargs):
+
+ timeout = kwargs.pop('timeout', 180)
+ interval = kwargs.pop('interval', 2)
+ # Start timestamp
+ start_ts = int(time.time())
+
+ while True:
+ resp, body = self.request(method, url, **kwargs)
+ if (check_response(resp, body)):
+ break
+ if (int(time.time()) - start_ts >= timeout):
+ raise exceptions.TimeoutException
+ time.sleep(interval)
+
+ def poll_request_status(self, method, url, status=200, **kwargs):
+
+ def check_response(resp, body):
+ return resp['status'] == str(status)
+
+ self.poll_request(method, url, check_response, **kwargs)
+
+
+ def request(self, method, url, **kwargs):
+ # Default to management_url, but can be overridden here
+ # (for auth requests)
+ base_url = kwargs.get('base_url', self.management_url)
+
+ self.http_obj = httplib2.Http()
+
+ params = {}
+ params['headers'] = {'User-Agent': self.USER_AGENT}
+ params['headers'].update(kwargs.get('headers', {}))
+ if 'Content-Type' not in params.get('headers',{}):
+ params['headers']['Content-Type'] = 'application/json'
+
+ if 'body' in kwargs:
+ params['body'] = kwargs.get('body')
+
+ req_url = os.path.join(base_url, url.strip('/'))
+ resp, body = self.http_obj.request(req_url, method, **params)
+ return resp, body