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/27 04:14:11 UTC
[3/4] trafficserver git commit: Add tests for
auth_server_session_private
Add tests for auth_server_session_private
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/e709f7c0
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/e709f7c0
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/e709f7c0
Branch: refs/heads/master
Commit: e709f7c08d0516fd03a9a906d11d6fa33245cb23
Parents: f54516c
Author: Thomas Jackson <ja...@gmail.com>
Authored: Fri Apr 24 19:29:33 2015 -0700
Committer: Thomas Jackson <ja...@apache.org>
Committed: Sun Apr 26 19:13:41 2015 -0700
----------------------------------------------------------------------
ci/new_tsqa/tests/test_keepalive.py | 125 +++++++++++++++++++++++++++----
1 file changed, 111 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e709f7c0/ci/new_tsqa/tests/test_keepalive.py
----------------------------------------------------------------------
diff --git a/ci/new_tsqa/tests/test_keepalive.py b/ci/new_tsqa/tests/test_keepalive.py
index c94d4d1..0e501ce 100644
--- a/ci/new_tsqa/tests/test_keepalive.py
+++ b/ci/new_tsqa/tests/test_keepalive.py
@@ -68,13 +68,41 @@ class KeepAliveInMixin(object):
s.connect(('127.0.0.1', int(self.configs['records.config']['CONFIG']['proxy.config.http.server_ports'])))
return s
- def _aux_working_path(self, protocol):
+ def _headers_to_str(self, headers):
+ if headers is None:
+ headers = {}
+ request = ''
+ for k, v in headers.iteritems():
+ request += '{0}: {1}\r\n'.format(k, v)
+ return request
+
+ def _aux_KA_working_path_connid(self, protocol, headers=None):
+ # connect tcp
+ s = self._get_socket()
+
+ request = ('GET / HTTP/1.1\r\n'
+ 'Host: foobar.com\r\n')
+ request += self._headers_to_str(headers)
+ request += '\r\n'
+
+ for x in xrange(1, 10):
+ s.send(request)
+ response = s.recv(4096)
+ # cheat, since we know what the body should have
+ if '\r\n\r\n' not in response:
+ response += s.recv(4096)
+ self.assertIn('HTTP/1.1 200 OK', response)
+ self.assertIn('hello', response)
+
+ def _aux_working_path(self, protocol, headers=None):
# connect tcp
s = self._get_socket()
request = ('GET /exists/ HTTP/1.1\r\n'
- 'Host: foobar.com\r\n'
- '\r\n')
+ 'Host: foobar.com\r\n')
+ request += self._headers_to_str(headers)
+ request += '\r\n'
+
for x in xrange(1, 10):
s.send(request)
response = s.recv(4096)
@@ -84,19 +112,20 @@ class KeepAliveInMixin(object):
self.assertIn('HTTP/1.1 200 OK', response)
self.assertIn('hello', response)
- def _aux_error_path(self, protocol):
+ def _aux_error_path(self, protocol, headers=None):
# connect tcp
s = self._get_socket()
request = ('GET / HTTP/1.1\r\n'
- 'Host: foobar.com\r\n'
- '\r\n')
+ 'Host: foobar.com\r\n')
+ request += self._headers_to_str(headers)
+ request += '\r\n'
for x in xrange(1, 10):
s.send(request)
response = s.recv(4096)
self.assertIn('HTTP/1.1 404 Not Found on Accelerator', response)
- def _aux_error_path_post(self, protocol):
+ def _aux_error_path_post(self, protocol, headers=None):
'''
Ensure that sending a request with a body doesn't break the keepalive session
'''
@@ -105,9 +134,11 @@ class KeepAliveInMixin(object):
request = ('POST / HTTP/1.1\r\n'
'Host: foobar.com\r\n'
- 'Content-Length: 10\r\n'
- '\r\n'
- '1234567890')
+ 'Content-Length: 10\r\n')
+ request += self._headers_to_str(headers)
+ request += '\r\n'
+ request += '1234567890'
+
for x in xrange(1, 10):
try:
s.send(request)
@@ -123,7 +154,7 @@ class KeepAliveInMixin(object):
class BasicTestsOutMixin(object):
- def _aux_KA_origin(self, protocol):
+ def _aux_KA_origin(self, protocol, headers=None):
'''
Test that the origin does in fact support keepalive
'''
@@ -131,13 +162,13 @@ class BasicTestsOutMixin(object):
with requests.Session() as s:
url = '{0}://127.0.0.1:{1}/'.format(protocol, self.socket_server.port)
for x in xrange(1, 10):
- ret = s.get(url, verify=False)
+ ret = s.get(url, verify=False, headers=headers)
if not conn_id:
conn_id = ret.text.strip()
self.assertEqual(ret.status_code, 200)
self.assertEqual(ret.text.strip(), conn_id, "Client reports server closed connection")
- def _aux_KA_proxy(self, protocol):
+ def _aux_KA_proxy(self, protocol, headers=None):
'''
Test that keepalive works through ATS to that origin
'''
@@ -145,7 +176,7 @@ class BasicTestsOutMixin(object):
self.configs['records.config']['CONFIG']['proxy.config.http.server_ports'])
conn_id = None
for x in xrange(1, 10):
- ret = requests.get(url, verify=False)
+ ret = requests.get(url, verify=False, headers=headers)
if not conn_id:
conn_id = ret.text.strip()
self.assertEqual(ret.status_code, 200)
@@ -190,6 +221,7 @@ class OriginMinMaxMixin(object):
ret = requests.get(url, verify=False)
self.assertEqual(ret.text.strip(), conn_id, "Client reports server closed connection")
+
class TestKeepAliveInHTTP(tsqa.test_cases.DynamicHTTPEndpointCase, helpers.EnvironmentCase, KeepAliveInMixin):
@classmethod
def setUpEnv(cls, env):
@@ -377,3 +409,68 @@ class TestKeepAliveOutHTTPS(helpers.EnvironmentCase, BasicTestsOutMixin, Timeout
def test_KA_timeout_proxy(self):
'''Tests that keepalive timeout is honored through ATS to origin via https.'''
self._aux_KA_timeout_proxy("http")
+
+
+
+# TODO: refactor these tests, these are *very* similar, we should paramatarize them
+## Some basic tests for auth_sever_session_private
+class TestKeepAlive_Authorization_private(helpers.EnvironmentCase, BasicTestsOutMixin, KeepAliveInMixin):
+ @classmethod
+ def setUpEnv(cls, env):
+
+ cls.socket_server = tsqa.endpoint.SocketServerDaemon(KeepaliveTCPHandler)
+ cls.socket_server.start()
+ cls.socket_server.ready.wait()
+ cls.configs['remap.config'].add_line('map / http://127.0.0.1:{0}/exists/'.format(cls.socket_server.port))
+
+ # only add server headers when there weren't any
+ cls.configs['records.config']['CONFIG']['proxy.config.http.response_server_enabled'] = 2
+ cls.configs['records.config']['CONFIG']['proxy.config.http.keep_alive_enabled_in'] = 1
+ cls.configs['records.config']['CONFIG']['share_server_session'] = 2
+
+ # set only one ET_NET thread (so we don't have to worry about the per-thread pools causing issues)
+ cls.configs['records.config']['CONFIG']['proxy.config.exec_thread.limit'] = 1
+ cls.configs['records.config']['CONFIG']['proxy.config.exec_thread.autoconfig'] = 0
+
+ # make auth sessions private
+ cls.configs['records.config']['CONFIG']['proxy.config.auth_server_session_private'] = 1
+
+ def test_KA_server(self):
+ '''Tests that keepalive works through ATS to origin via https.'''
+ with self.assertRaises(AssertionError):
+ self._aux_KA_proxy("http", headers={'Authorization': 'Foo'})
+
+ def test_KA_client(self):
+ '''Tests that keepalive works through ATS to origin via https.'''
+ with self.assertRaises(AssertionError):
+ self._aux_KA_working_path_connid("http", headers={'Authorization': 'Foo'})
+
+
+class TestKeepAlive_Authorization_no_private(helpers.EnvironmentCase, BasicTestsOutMixin, KeepAliveInMixin):
+ @classmethod
+ def setUpEnv(cls, env):
+
+ cls.socket_server = tsqa.endpoint.SocketServerDaemon(KeepaliveTCPHandler)
+ cls.socket_server.start()
+ cls.socket_server.ready.wait()
+ cls.configs['remap.config'].add_line('map / http://127.0.0.1:{0}/exists/'.format(cls.socket_server.port))
+
+ # only add server headers when there weren't any
+ cls.configs['records.config']['CONFIG']['proxy.config.http.response_server_enabled'] = 2
+ cls.configs['records.config']['CONFIG']['proxy.config.http.keep_alive_enabled_in'] = 1
+ cls.configs['records.config']['CONFIG']['share_server_session'] = 2
+
+ # set only one ET_NET thread (so we don't have to worry about the per-thread pools causing issues)
+ cls.configs['records.config']['CONFIG']['proxy.config.exec_thread.limit'] = 1
+ cls.configs['records.config']['CONFIG']['proxy.config.exec_thread.autoconfig'] = 0
+
+ # make auth sessions private
+ cls.configs['records.config']['CONFIG']['proxy.config.http.auth_server_session_private'] = 0
+
+ def test_KA_server(self):
+ '''Tests that keepalive works through ATS to origin via https.'''
+ self._aux_KA_proxy("http", headers={'Authorization': 'Foo'})
+
+ def test_KA_client(self):
+ '''Tests that keepalive works through ATS to origin via https.'''
+ self._aux_KA_working_path_connid("http", headers={'Authorization': 'Foo'})