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:25 UTC

[1/4] trafficserver-qa git commit: Cleanup of DynamicHTTPEndpoint

Repository: trafficserver-qa
Updated Branches:
  refs/heads/master 1e7b648b3 -> 3ed1bcd90


Cleanup of DynamicHTTPEndpoint

This makes the tracking data a private variable, in addition this moves the "url" method down into the endpoint-- instead of in the test case class


Project: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/commit/0e320555
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/tree/0e320555
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/diff/0e320555

Branch: refs/heads/master
Commit: 0e32055538545bfe58ab83b7c0f57cba46ac9ed3
Parents: 1e7b648
Author: Thomas Jackson <ja...@apache.org>
Authored: Fri Apr 10 14:53:08 2015 -0700
Committer: Thomas Jackson <ja...@apache.org>
Committed: Fri Apr 10 14:53:08 2015 -0700

----------------------------------------------------------------------
 tsqa/endpoint.py   | 36 ++++++++++++++++++++++--------------
 tsqa/test_cases.py |  8 +-------
 2 files changed, 23 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver-qa/blob/0e320555/tsqa/endpoint.py
----------------------------------------------------------------------
diff --git a/tsqa/endpoint.py b/tsqa/endpoint.py
index 99888bb..b5de009 100644
--- a/tsqa/endpoint.py
+++ b/tsqa/endpoint.py
@@ -117,7 +117,7 @@ class DynamicHTTPEndpoint(threading.Thread):
     def __init__(self, port=0):
         threading.Thread.__init__(self)
         # dict to store request data in
-        self.tracked_requests = {}
+        self._tracked_requests = {}
 
         self.daemon = True
         self.port = port
@@ -136,7 +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': request.copy()}
 
 
         @self.app.after_request
@@ -145,7 +145,7 @@ class DynamicHTTPEndpoint(threading.Thread):
             If the tracking header is set, save the response
             '''
             if flask.request.headers.get(self.TRACKING_HEADER):
-                self.tracked_requests[flask.request.headers[self.TRACKING_HEADER]]['response'] = response
+                self._tracked_requests[flask.request.headers[self.TRACKING_HEADER]]['response'] = response
 
             return response
 
@@ -168,17 +168,17 @@ class DynamicHTTPEndpoint(threading.Thread):
         '''
         Return a new key for tracking a request by key
         '''
-        key = str(len(self.tracked_requests))
-        self.tracked_requests[key] = {}
+        key = str(len(self._tracked_requests))
+        self._tracked_requests[key] = {}
         return key
 
     def get_tracking_by_key(self, key):
         '''
         Return tracking data by key
         '''
-        if key not in self.tracked_requests:
+        if key not in self._tracked_requests:
             raise Exception()
-        return self.tracked_requests[key]
+        return self._tracked_requests[key]
 
     def normalize_path(self, path):
         '''
@@ -206,6 +206,14 @@ class DynamicHTTPEndpoint(threading.Thread):
             raise Exception()
         del self.handlers[path]
 
+    def url(self, path=''):
+        '''
+        Get the url for the given path in this endpoint
+        '''
+        if path and not path.startswith('/'):
+            path = '/' + path
+        return 'http://127.0.0.1:{0}{1}'.format(self.address[1], path)
+
     def run(self):
         self.server = make_server('',
                                   self.port,
@@ -240,7 +248,7 @@ class TrackingWSGIServer(threading.Thread):
     def __init__(self, app, port=0):
         threading.Thread.__init__(self)
         # dict to store request data in
-        self.tracked_requests = {}
+        self._tracked_requests = {}
 
         self.daemon = True
         self.port = port
@@ -255,7 +263,7 @@ class TrackingWSGIServer(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': request.copy()}
 
 
         @self.app.after_request
@@ -264,7 +272,7 @@ class TrackingWSGIServer(threading.Thread):
             If the tracking header is set, save the response
             '''
             if flask.request.headers.get(self.TRACKING_HEADER):
-                self.tracked_requests[flask.request.headers[self.TRACKING_HEADER]]['response'] = response
+                self._tracked_requests[flask.request.headers[self.TRACKING_HEADER]]['response'] = response
 
             return response
 
@@ -272,17 +280,17 @@ class TrackingWSGIServer(threading.Thread):
         '''
         Return a new key for tracking a request by key
         '''
-        key = str(len(self.tracked_requests))
-        self.tracked_requests[key] = {}
+        key = str(len(self._tracked_requests))
+        self._tracked_requests[key] = {}
         return key
 
     def get_tracking_by_key(self, key):
         '''
         Return tracking data by key
         '''
-        if key not in self.tracked_requests:
+        if key not in self._tracked_requests:
             raise Exception()
-        return self.tracked_requests[key]
+        return self._tracked_requests[key]
 
     def run(self):
         self.server = make_server('',

http://git-wip-us.apache.org/repos/asf/trafficserver-qa/blob/0e320555/tsqa/test_cases.py
----------------------------------------------------------------------
diff --git a/tsqa/test_cases.py b/tsqa/test_cases.py
index b314c5f..a621016 100644
--- a/tsqa/test_cases.py
+++ b/tsqa/test_cases.py
@@ -144,9 +144,6 @@ class DynamicHTTPEndpointCase(unittest.TestCase):
 
         cls.http_endpoint.ready.wait()
 
-        # create local requester object
-        cls.track_requests = tsqa.endpoint.TrackingRequests(cls.http_endpoint)
-
         # Do this last, so we can get our stuff registered
         # call parent constructor
         super(DynamicHTTPEndpointCase, cls).setUpClass()
@@ -155,10 +152,7 @@ class DynamicHTTPEndpointCase(unittest.TestCase):
         '''
         Get the url for the local dynamic endpoint given a path
         '''
-        if path and not path.startswith('/'):
-            path = '/' + path
-        return 'http://127.0.0.1:{0}{1}'.format(self.http_endpoint.address[1],
-                                                path)
+        return self.http_endpoint.url(path)
 
 
 class HTTPBinCase(unittest.TestCase):


[4/4] trafficserver-qa git commit: If debug level, leave the output to go through stdout and stderr instead of capturing it

Posted by ja...@apache.org.
If debug level, leave the output to go through stdout and stderr instead of capturing it


Project: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/commit/3ed1bcd9
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/tree/3ed1bcd9
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/diff/3ed1bcd9

Branch: refs/heads/master
Commit: 3ed1bcd90455b90450f9e1c40c65cafdce8e09cf
Parents: 0529e05
Author: Thomas Jackson <ja...@apache.org>
Authored: Fri Apr 10 17:02:43 2015 -0700
Committer: Thomas Jackson <ja...@apache.org>
Committed: Fri Apr 10 17:02:43 2015 -0700

----------------------------------------------------------------------
 tsqa/environment.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver-qa/blob/3ed1bcd9/tsqa/environment.py
----------------------------------------------------------------------
diff --git a/tsqa/environment.py b/tsqa/environment.py
index 659cdcf..ef73b08 100644
--- a/tsqa/environment.py
+++ b/tsqa/environment.py
@@ -78,8 +78,10 @@ class EnvironmentFactory(object):
         }
 
         if log.isEnabledFor(logging.DEBUG):
-            kwargs['stdout'] = sys.stdout.fileno()
-            kwargs['stderr'] = sys.stderr.fileno()
+            # if this is debug, lets not capture the output and let it go to
+            # stdout and stderr
+            kwargs['stdout'] = None
+            kwargs['stderr'] = None
 
         # run autoreconf in source tree
         try:


[3/4] trafficserver-qa git commit: Deprecate the old endpoint_url method

Posted by ja...@apache.org.
Deprecate the old endpoint_url method


Project: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/commit/0529e05d
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/tree/0529e05d
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver-qa/diff/0529e05d

Branch: refs/heads/master
Commit: 0529e05d232e35bf99f76b23787b1b1e43046cab
Parents: 6b2d7bb
Author: Thomas Jackson <ja...@apache.org>
Authored: Fri Apr 10 17:02:31 2015 -0700
Committer: Thomas Jackson <ja...@apache.org>
Committed: Fri Apr 10 17:02:31 2015 -0700

----------------------------------------------------------------------
 tsqa/test_cases.py | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver-qa/blob/0529e05d/tsqa/test_cases.py
----------------------------------------------------------------------
diff --git a/tsqa/test_cases.py b/tsqa/test_cases.py
index a621016..bd96b2f 100644
--- a/tsqa/test_cases.py
+++ b/tsqa/test_cases.py
@@ -19,6 +19,7 @@ Some base test cases that do environment handling for you
 
 import logging
 import os
+import warnings
 
 import httpbin
 
@@ -180,6 +181,8 @@ class HTTPBinCase(unittest.TestCase):
         '''
         Get the url for the local dynamic endpoint given a path
         '''
+        warnings.warn(('"endpoint_url" has been deprecated. The same function is '
+                       'available under "http_endpoint.url"'))
         if path and not path.startswith('/'):
             path = '/' + path
         return 'http://127.0.0.1:{0}{1}'.format(self.http_endpoint.address[1],


[2/4] trafficserver-qa git commit: Refactor endpoint and add tests

Posted by ja...@apache.org.
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=''):
         '''