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