You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ja...@apache.org on 2015/04/11 02:04:26 UTC
[2/4] trafficserver-qa git commit: Refactor endpoint and add tests
Refactor endpoint and add tests
Project: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/commit/6b2d7bbe
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/tree/6b2d7bbe
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/diff/6b2d7bbe
Branch: refs/heads/master
Commit: 6b2d7bbe6b6b0d77024165bc5254b205a9e8f8bd
Parents: 0e32055
Author: Thomas Jackson <ja...@apache.org>
Authored: Fri Apr 10 16:24:22 2015 -0700
Committer: Thomas Jackson <ja...@apache.org>
Committed: Fri Apr 10 16:24:22 2015 -0700
----------------------------------------------------------------------
tests/test_endpoint.py | 77 +++++++++++++++++++++++++++++++++++++++++++++
tsqa/endpoint.py | 23 ++++++++------
2 files changed, 91 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver-qa/blob/6b2d7bbe/tests/test_endpoint.py
----------------------------------------------------------------------
diff --git a/tests/test_endpoint.py b/tests/test_endpoint.py
new file mode 100644
index 0000000..c4a0a03
--- /dev/null
+++ b/tests/test_endpoint.py
@@ -0,0 +1,77 @@
+'''
+'''
+import helpers
+
+import tsqa.utils
+unittest = tsqa.utils.import_unittest()
+import tsqa.endpoint
+
+import requests
+
+class TestDynamicHTTPEndpoint(unittest.TestCase):
+ def setUp(self):
+ self.endpoint = tsqa.endpoint.DynamicHTTPEndpoint()
+ self.endpoint.start()
+ self.endpoint.ready.wait()
+
+ def tearDown(self):
+ self.endpoint.server.shutdown()
+
+ def test_url(self):
+ '''
+ Test the "url" method, to ensure it returns the correct url
+ '''
+ self.assertEqual(self.endpoint.url(), 'http://127.0.0.1:{0}'.format(self.endpoint.address[1]))
+
+ self.assertEqual(self.endpoint.url('/foo'), 'http://127.0.0.1:{0}/foo'.format(self.endpoint.address[1]))
+
+ def test_normalize_path(self):
+ self.assertEqual(self.endpoint.normalize_path('foo'), 'foo')
+ self.assertEqual(self.endpoint.normalize_path('/foo'), 'foo')
+
+ def test_handlers(self):
+ # make sure we get 404s
+ ret = requests.get(self.endpoint.url('/echo'))
+ self.assertEqual(ret.status_code, 404)
+
+ def echo(r):
+ return 'echo'
+
+ # check that echo works
+ self.endpoint.add_handler('/echo', echo)
+ ret = requests.get(self.endpoint.url('/echo'))
+ self.assertEqual(ret.text, 'echo')
+
+ # remove echo
+ self.endpoint.remove_handler('/echo')
+
+ # make sure its removed
+ ret = requests.get(self.endpoint.url('/echo'))
+ self.assertEqual(ret.status_code, 404)
+
+ # re-add echo
+ self.endpoint.add_handler('/echo', echo)
+ ret = requests.get(self.endpoint.url('/echo'))
+ self.assertEqual(ret.text, 'echo')
+
+ # clear all, ensure its cleared
+ self.endpoint.clear_handlers()
+ ret = requests.get(self.endpoint.url('/echo'))
+ self.assertEqual(ret.status_code, 404)
+
+
+class TestTrackingRequests(unittest.TestCase):
+ def setUp(self):
+ self.endpoint = tsqa.endpoint.DynamicHTTPEndpoint()
+ self.endpoint.start()
+ self.endpoint.ready.wait()
+
+ self.track = tsqa.endpoint.TrackingRequests(self.endpoint)
+
+ def tearDown(self):
+ self.endpoint.server.shutdown()
+
+ def test_basic(self):
+ ret = self.track.get(self.endpoint.url('/echo'))
+ # TODO: test the request?? This requires some intermediate objects
+ self.assertEqual(ret['client_response'].status_code, ret['server_response'].status_code)
http://git-wip-us.apache.org/repos/asf/trafficserver-qa/blob/6b2d7bbe/tsqa/endpoint.py
----------------------------------------------------------------------
diff --git a/tsqa/endpoint.py b/tsqa/endpoint.py
index b5de009..76c9773 100644
--- a/tsqa/endpoint.py
+++ b/tsqa/endpoint.py
@@ -124,7 +124,7 @@ class DynamicHTTPEndpoint(threading.Thread):
self.ready = threading.Event()
# dict of pathname (no starting /) -> function
- self.handlers = {}
+ self._handlers = {}
self.app = flask.Flask(__name__)
self.app.debug = True
@@ -136,8 +136,7 @@ class DynamicHTTPEndpoint(threading.Thread):
If the tracking header is set, save the request
'''
if flask.request.headers.get(self.TRACKING_HEADER):
- self._tracked_requests[flask.request.headers[self.TRACKING_HEADER]] = {'request': request.copy()}
-
+ self._tracked_requests[flask.request.headers[self.TRACKING_HEADER]] = {'request': flask.request}
@self.app.after_request
def save_response(response):
@@ -153,8 +152,8 @@ class DynamicHTTPEndpoint(threading.Thread):
@self.app.route('/<path:path>')
def catch_all(path=''):
# get path key
- if path in self.handlers:
- return self.handlers[path](flask.request)
+ if path in self._handlers:
+ return self._handlers[path](flask.request)
# return a 404 since we didn't find it
return ('', 404)
@@ -193,18 +192,24 @@ class DynamicHTTPEndpoint(threading.Thread):
Add a new handler attached to a specific path
'''
path = self.normalize_path(path)
- if path in self.handlers:
+ if path in self._handlers:
raise Exception()
- self.handlers[path] = func
+ self._handlers[path] = func
def remove_handler(self, path):
'''
remove a handler attached to a specific path
'''
path = self.normalize_path(path)
- if path not in self.handlers:
+ if path not in self._handlers:
raise Exception()
- del self.handlers[path]
+ del self._handlers[path]
+
+ def clear_handlers(self):
+ '''
+ Clear all handlers that have been registered
+ '''
+ self._handlers = {}
def url(self, path=''):
'''