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=''):
         '''