http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/new_tsqa/tests/test_https.py ---------------------------------------------------------------------- diff --git a/ci/new_tsqa/tests/test_https.py b/ci/new_tsqa/tests/test_https.py deleted file mode 100644 index a8914e6..0000000 --- a/ci/new_tsqa/tests/test_https.py +++ /dev/null @@ -1,273 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -from OpenSSL import SSL -import socket - -import helpers -import tsqa.utils - -# some ciphers to test with -CIPHER_MAP = { - 'rsa': 'ECDHE-RSA-AES256-GCM-SHA384', - 'ecdsa': 'ECDHE-ECDSA-AES256-GCM-SHA384', -} - - -class CertSelectionMixin(object): - def _get_cert(self, addr, sni_name=None, ciphers=None): - ''' - Return the certificate for addr. Optionally sending sni_name - ''' - ctx = SSL.Context(SSL.TLSv1_2_METHOD) - # Set up client - sock = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM)) - sock.connect(addr) - if sni_name is not None: - sock.set_tlsext_host_name(sni_name) - if ciphers is not None: - ctx.set_cipher_list(ciphers) - sock.do_handshake() - return sock.get_peer_certificate() - - def _get_cert_chain(self, addr, sni_name=None, ciphers=None): - ''' - Return the certificate chain for addr. Optionally sending sni_name - ''' - ctx = SSL.Context(SSL.TLSv1_2_METHOD) - # Set up client - sock = SSL.Connection(ctx, socket.socket(socket.AF_INET, socket.SOCK_STREAM)) - sock.connect(addr) - if sni_name is not None: - sock.set_tlsext_host_name(sni_name) - if ciphers is not None: - ctx.set_cipher_list(ciphers) - sock.do_handshake() - return sock.get_peer_cert_chain() - - def test_star_ordering(self): - ''' - We should be served the first match, since we aren't sending SNI headers - ''' - addr = ('127.0.0.1', self.ssl_port) - cert = self._get_cert(addr) - self.assertEqual(cert.get_subject().commonName.decode(), 'www.example.com') - - def test_star_sni(self): - ''' - Make sure we get the certificate we asked for if we pass in SNI headers - ''' - addr = ('127.0.0.1', self.ssl_port) - cert = self._get_cert(addr, sni_name='www.test.com') - self.assertEqual(cert.get_subject().commonName.decode(), 'www.test.com') - - cert = self._get_cert(addr, sni_name='www.example.com') - self.assertEqual(cert.get_subject().commonName.decode(), 'www.example.com') - - def test_ip_ordering(self): - ''' - We should be served the first match, since we aren't sending SNI headers - ''' - addr = ('127.0.0.2', self.ssl_port) - cert = self._get_cert(addr) - self.assertEqual(cert.get_subject().commonName.decode(), 'www.example.com') - - def test_ip_sni(self): - ''' - Make sure we get the certificate we asked for if we pass in SNI headers - ''' - addr = ('127.0.0.2', self.ssl_port) - cert = self._get_cert(addr, sni_name='www.test.com') - self.assertEqual(cert.get_subject().commonName.decode(), 'www.test.com') - - cert = self._get_cert(addr, sni_name='www.example.com') - self.assertEqual(cert.get_subject().commonName.decode(), 'www.example.com') - - def _intermediate_ca_t(self, cipher): - ''' - Method for testing intermediate CAs. We assume that www.example.com should - return a certificate chaing of len 2 which includes intermediate. - We also assume that www.test.com returns a single cert in the chain which - is *not* intermediate - ''' - # send a request that *should* get an intermediate CA - addr = ('127.0.0.1', self.ssl_port) - cert_chain = self._get_cert_chain(addr, ciphers=CIPHER_MAP[cipher]) - self.assertEqual(len(cert_chain), 2) - self.assertEqual(cert_chain[0].get_subject().commonName.decode(), 'www.example.com') - self.assertEqual(cert_chain[1].get_subject().commonName.decode(), 'intermediate') - - # send a request that shouldn't get an intermediate CA - addr = ('127.0.0.1', self.ssl_port) - cert_chain = self._get_cert_chain(addr, ciphers=CIPHER_MAP[cipher], sni_name='www.test.com') - self.assertEqual(len(cert_chain), 1) - self.assertEqual(cert_chain[0].get_subject().commonName.decode(), 'www.test.com') - - -class TestRSA(helpers.EnvironmentCase, CertSelectionMixin): - ''' - Tests for https for ATS configured with RSA certificates - ''' - @classmethod - def setUpEnv(cls, env): - # add an SSL port to ATS - cls.ssl_port = tsqa.utils.bind_unused_port()[1] - cls.configs['records.config']['CONFIG']['proxy.config.http.server_ports'] += ' {0}:ssl'.format(cls.ssl_port) - cls.configs['records.config']['CONFIG'].update({ - 'proxy.config.diags.debug.enabled': 1, - 'proxy.config.diags.debug.tags': 'ssl', - 'proxy.config.ssl.server.cipher_suite': CIPHER_MAP['rsa'], - }) - - # configure SSL multicert - cls.configs['ssl_multicert.config'].add_line('dest_ip=127.0.0.2 ssl_cert_name={0} ssl_ca_name={1}'.format( - helpers.tests_file_path('rsa_keys/www.example.com.pem'), - helpers.tests_file_path('rsa_keys/intermediate.crt'), - )) - cls.configs['ssl_multicert.config'].add_line('dest_ip=127.0.0.2 ssl_cert_name={0}'.format( - helpers.tests_file_path('rsa_keys/www.test.com.pem'), - )) - - cls.configs['ssl_multicert.config'].add_line('dest_ip=* ssl_cert_name={0} ssl_ca_name={1}'.format( - helpers.tests_file_path('rsa_keys/www.example.com.pem'), - helpers.tests_file_path('rsa_keys/intermediate.crt'), - )) - cls.configs['ssl_multicert.config'].add_line('dest_ip=* ssl_cert_name={0}'.format( - helpers.tests_file_path('rsa_keys/www.test.com.pem'), - )) - - def test_rsa(self): - addr = ('127.0.0.1', self.ssl_port) - cert = self._get_cert(addr, ciphers=CIPHER_MAP['rsa']) - self.assertEqual(cert.get_subject().commonName.decode(), 'www.example.com') - - def test_ecdsa(self): - addr = ('127.0.0.1', self.ssl_port) - with self.assertRaises(Exception): - cert = self._get_cert(addr, ciphers=CIPHER_MAP['ecdsa']) - self.assertEqual(cert.get_subject().commonName.decode(), 'www.example.com') - - def test_intermediate_ca_rsa(self): - self._intermediate_ca_t('rsa') - - def test_intermediate_ca_ecdsa(self): - with self.assertRaises(Exception): - self._intermediate_ca_t('ecdsa') - -class TestECDSA(helpers.EnvironmentCase, CertSelectionMixin): - ''' - Tests for https for ATS configured with ECDSA certificates - ''' - @classmethod - def setUpEnv(cls, env): - # add an SSL port to ATS - cls.ssl_port = tsqa.utils.bind_unused_port()[1] - cls.configs['records.config']['CONFIG']['proxy.config.http.server_ports'] += ' {0}:ssl'.format(cls.ssl_port) - cls.configs['records.config']['CONFIG'].update({ - 'proxy.config.diags.debug.enabled': 1, - 'proxy.config.diags.debug.tags': 'ssl', - 'proxy.config.ssl.server.cipher_suite': CIPHER_MAP['ecdsa'], - }) - - # configure SSL multicert - cls.configs['ssl_multicert.config'].add_line('dest_ip=127.0.0.2 ssl_cert_name={0} ssl_ca_name={1}'.format( - helpers.tests_file_path('ec_keys/www.example.com.pem'), - helpers.tests_file_path('ec_keys/intermediate.crt'), - )) - cls.configs['ssl_multicert.config'].add_line('dest_ip=127.0.0.2 ssl_cert_name={0}'.format( - helpers.tests_file_path('ec_keys/www.test.com.pem'), - )) - - cls.configs['ssl_multicert.config'].add_line('dest_ip=* ssl_cert_name={0} ssl_ca_name={1}'.format( - helpers.tests_file_path('ec_keys/www.example.com.pem'), - helpers.tests_file_path('ec_keys/intermediate.crt'), - )) - cls.configs['ssl_multicert.config'].add_line('dest_ip=* ssl_cert_name={0}'.format( - helpers.tests_file_path('ec_keys/www.test.com.pem'), - )) - - def test_rsa(self): - addr = ('127.0.0.1', self.ssl_port) - with self.assertRaises(Exception): - cert = self._get_cert(addr, ciphers=CIPHER_MAP['rsa']) - self.assertEqual(cert.get_subject().commonName.decode(), 'www.example.com') - - def test_ecdsa(self): - addr = ('127.0.0.1', self.ssl_port) - cert = self._get_cert(addr, ciphers=CIPHER_MAP['ecdsa']) - self.assertEqual(cert.get_subject().commonName.decode(), 'www.example.com') - - def test_intermediate_ca_rsa(self): - with self.assertRaises(Exception): - self._intermediate_ca_t('rsa') - - def test_intermediate_ca_ecdsa(self): - self._intermediate_ca_t('ecdsa') - -class TestMix(helpers.EnvironmentCase, CertSelectionMixin): - ''' - Tests for https for ATS configured with both ECDSA and RSA certificates - ''' - @classmethod - def setUpEnv(cls, env): - # add an SSL port to ATS - cls.ssl_port = tsqa.utils.bind_unused_port()[1] - cls.configs['records.config']['CONFIG']['proxy.config.http.server_ports'] += ' {0}:ssl'.format(cls.ssl_port) - cls.configs['records.config']['CONFIG'].update({ - 'proxy.config.diags.debug.enabled': 1, - 'proxy.config.diags.debug.tags': 'ssl', - 'proxy.config.ssl.server.cipher_suite': '{0}:{1}'.format(CIPHER_MAP['ecdsa'], CIPHER_MAP['rsa']), - }) - - # configure SSL multicert - cls.configs['ssl_multicert.config'].add_line('dest_ip=127.0.0.2 ssl_cert_name={0},{1} ssl_ca_name={2},{3}'.format( - helpers.tests_file_path('rsa_keys/www.example.com.pem'), - helpers.tests_file_path('ec_keys/www.example.com.pem'), - helpers.tests_file_path('rsa_keys/intermediate.crt'), - helpers.tests_file_path('ec_keys/intermediate.crt'), - )) - cls.configs['ssl_multicert.config'].add_line('dest_ip=127.0.0.2 ssl_cert_name={0},{1}'.format( - helpers.tests_file_path('rsa_keys/www.test.com.pem'), - helpers.tests_file_path('ec_keys/www.test.com.pem'), - )) - - cls.configs['ssl_multicert.config'].add_line('dest_ip=* ssl_cert_name={0},{1} ssl_ca_name={2},{3}'.format( - helpers.tests_file_path('rsa_keys/www.example.com.pem'), - helpers.tests_file_path('ec_keys/www.example.com.pem'), - helpers.tests_file_path('rsa_keys/intermediate.crt'), - helpers.tests_file_path('ec_keys/intermediate.crt'), - )) - cls.configs['ssl_multicert.config'].add_line('dest_ip=* ssl_cert_name={0},{1}'.format( - helpers.tests_file_path('rsa_keys/www.test.com.pem'), - helpers.tests_file_path('ec_keys/www.test.com.pem'), - )) - - def test_rsa(self): - addr = ('127.0.0.1', self.ssl_port) - cert = self._get_cert(addr, ciphers=CIPHER_MAP['rsa']) - self.assertEqual(cert.get_subject().commonName.decode(), 'www.example.com') - - def test_ecdsa(self): - addr = ('127.0.0.1', self.ssl_port) - cert = self._get_cert(addr, ciphers=CIPHER_MAP['ecdsa']) - self.assertEqual(cert.get_subject().commonName.decode(), 'www.example.com') - - def test_intermediate_ca_rsa(self): - self._intermediate_ca_t('rsa') - - def test_intermediate_ca_ecdsa(self): - self._intermediate_ca_t('ecdsa')
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/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 deleted file mode 100644 index 0e501ce..0000000 --- a/ci/new_tsqa/tests/test_keepalive.py +++ /dev/null @@ -1,476 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import uuid -import requests -import time -import logging -import socket - -import helpers - -import tsqa.test_cases -import tsqa.utils -import tsqa.endpoint - -log = logging.getLogger(__name__) - -import SocketServer - - -class KeepaliveTCPHandler(SocketServer.BaseRequestHandler): - """ - A subclass of RequestHandler which will return a connection uuid - """ - - def handle(self): - # Receive the data in small chunks and retransmit it - start = time.time() - conn_id = uuid.uuid4().hex - while True: - now = time.time() - start - data = self.request.recv(4096).strip() - if data: - log.debug('Sending data back to the client: {uid}'.format(uid=conn_id)) - else: - log.debug('Client disconnected: {timeout}seconds'.format(timeout=now)) - break - body = conn_id - resp = ('HTTP/1.1 200 OK\r\n' - 'Content-Length: {content_length}\r\n' - 'Content-Type: text/html; charset=UTF-8\r\n' - 'Connection: keep-alive\r\n' - '\r\n' - '{body}'.format(content_length=len(body), body=body)) - self.request.sendall(resp) - - -class KeepAliveInMixin(object): - """Mixin for keep alive in. - - TODO: Allow protocol to be specified for ssl traffic - """ - def _get_socket(self): - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect(('127.0.0.1', int(self.configs['records.config']['CONFIG']['proxy.config.http.server_ports']))) - return s - - 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') - 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 not response.endswith('hello'): - response += s.recv(4096) - self.assertIn('HTTP/1.1 200 OK', response) - self.assertIn('hello', response) - - 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') - 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, headers=None): - ''' - Ensure that sending a request with a body doesn't break the keepalive session - ''' - # connect tcp - s = self._get_socket() - - request = ('POST / HTTP/1.1\r\n' - 'Host: foobar.com\r\n' - '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) - except IOError: - s = self._get_socket() - s.send(request) - - response = s.recv(4096) - # Check if client disconnected - if response: - self.assertIn('HTTP/1.1 404 Not Found on Accelerator', response) - - -class BasicTestsOutMixin(object): - - def _aux_KA_origin(self, protocol, headers=None): - ''' - Test that the origin does in fact support keepalive - ''' - conn_id = None - 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, 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, headers=None): - ''' - Test that keepalive works through ATS to that origin - ''' - url = '{0}://127.0.0.1:{1}'.format(protocol, - 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, 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") - -class TimeoutOutMixin(object): - - def _aux_KA_timeout_direct(self, protocol): - '''Tests that origin does not timeout using keepalive.''' - with requests.Session() as s: - url = '{0}://127.0.0.1:{1}/'.format(protocol, self.socket_server.port) - conn_id = None - for x in xrange(0, 3): - ret = s.get(url, verify=False) - if not conn_id: - conn_id = ret.text.strip() - self.assertEqual(ret.text.strip(), conn_id, "Client reports server closed connection") - time.sleep(3) - - def _aux_KA_timeout_proxy(self, protocol): - '''Tests that keepalive timeout is honored through ATS to origin.''' - url = '{0}://127.0.0.1:{1}'.format(protocol, - self.configs['records.config']['CONFIG']['proxy.config.http.server_ports']) - conn_id = None - for x in xrange(0, 3): - ret = requests.get(url, verify=False) - if not conn_id: - conn_id = ret.text.strip() - self.assertEqual(ret.text.strip(), conn_id, "Client reports server closed connection") - time.sleep(3) - - -class OriginMinMaxMixin(object): - - def _aux_KA_min_origin(self, protocol): - '''Tests that origin_min_keep_alive_connections is honored.''' - url = '{0}://127.0.0.1:{1}'.format(protocol, - self.configs['records.config']['CONFIG']['proxy.config.http.server_ports']) - ret = requests.get(url, verify=False) - conn_id = ret.text.strip() - time.sleep(3) - 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): - - def hello(request): - return 'hello' - cls.http_endpoint.add_handler('/exists/', hello) - - cls.configs['remap.config'].add_line('map /exists/ http://127.0.0.1:{0}/exists/'.format(cls.http_endpoint.address[1])) - - # 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 - - def test_working_path(self): - self._aux_working_path("http") - - def test_error_path(self): - self._aux_error_path("http") - - def test_error_path_post(self): - ''' - Ensure that sending a request with a body doesn't break the keepalive session - ''' - self._aux_error_path_post("http") - -class TestKeepAliveOriginConnOutHTTP(helpers.EnvironmentCase, OriginMinMaxMixin): - @classmethod - def setUpEnv(cls, env): - ''' - This function is responsible for setting up the environment for this fixture - This includes everything pre-daemon start - ''' - # create a socket server - 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}/'.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_out'] = 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 - - # Timeouts - cls.configs['records.config']['CONFIG']['proxy.config.http.keep_alive_no_activity_timeout_out'] = 1 - cls.configs['records.config']['CONFIG']['proxy.config.http.transaction_no_activity_timeout_out'] = 1 - - cls.configs['records.config']['CONFIG']['proxy.config.http.origin_min_keep_alive_connections'] = 1 - - def test_KA_min_origin(self): - '''Tests that origin_min_keep_alive_connections is honored via http.''' - self._aux_KA_min_origin("http") - - -class TestKeepAliveOriginConnOutHTTPS(helpers.EnvironmentCase, OriginMinMaxMixin): - @classmethod - def setUpEnv(cls, env): - ''' - This function is responsible for setting up the environment for this fixture - This includes everything pre-daemon start - ''' - # create a socket server - cls.socket_server = tsqa.endpoint.SSLSocketServerDaemon(KeepaliveTCPHandler, - helpers.tests_file_path('cert.pem'), - helpers.tests_file_path('key.pem')) - cls.socket_server.start() - cls.socket_server.ready.wait() - cls.configs['remap.config'].add_line('map / https://127.0.0.1:{0}/\n'.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_out'] = 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 - cls.configs['records.config']['CONFIG']['proxy.config.ssl.number.threads'] = -1 - - # Timeouts - cls.configs['records.config']['CONFIG']['proxy.config.http.keep_alive_no_activity_timeout_out'] = 1 - cls.configs['records.config']['CONFIG']['proxy.config.http.transaction_no_activity_timeout_out'] = 1 - - cls.configs['records.config']['CONFIG']['proxy.config.http.origin_min_keep_alive_connections'] = 1 - - def test_KA_min_origin(self): - '''Tests that origin_min_keep_alive_connections is honored via https.''' - self._aux_KA_min_origin("http") - - -class TestKeepAliveOutHTTP(helpers.EnvironmentCase, BasicTestsOutMixin, TimeoutOutMixin): - @classmethod - def setUpEnv(cls, env): - ''' - This function is responsible for setting up the environment for this fixture - This includes everything pre-daemon start - ''' - # create a socket server - 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}/'.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_out'] = 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 - - # Timeouts - cls.configs['records.config']['CONFIG']['proxy.config.http.keep_alive_no_activity_timeout_out'] = 10 - cls.configs['records.config']['CONFIG']['proxy.config.http.transaction_no_activity_timeout_out'] = 2 - - def test_KA_origin(self): - '''Test that the origin does in fact support keepalive via http.''' - self._aux_KA_origin("http") - - def test_KA_proxy(self): - '''Tests that keepalive works through ATS to origin via http.''' - self._aux_KA_proxy("http") - - def test_KA_timeout_direct(self): - '''Tests that origin does not timeout using keepalive via http.''' - self._aux_KA_timeout_direct("http") - - def test_KA_timeout_proxy(self): - '''Tests that keepalive timeout is honored through ATS to origin via http.''' - self._aux_KA_timeout_proxy("http") - - -class TestKeepAliveOutHTTPS(helpers.EnvironmentCase, BasicTestsOutMixin, TimeoutOutMixin): - @classmethod - def setUpEnv(cls, env): - ''' - This function is responsible for setting up the environment for this fixture - This includes everything pre-daemon start - ''' - # create a socket server - cls.socket_server = tsqa.endpoint.SSLSocketServerDaemon(KeepaliveTCPHandler, - helpers.tests_file_path('cert.pem'), - helpers.tests_file_path('key.pem')) - cls.socket_server.start() - cls.socket_server.ready.wait() - cls.configs['remap.config'].add_line('map / https://127.0.0.1:{0}/\n'.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_out'] = 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 - cls.configs['records.config']['CONFIG']['proxy.config.ssl.number.threads'] = -1 - - # Timeouts - cls.configs['records.config']['CONFIG']['proxy.config.http.keep_alive_no_activity_timeout_out'] = 10 - cls.configs['records.config']['CONFIG']['proxy.config.http.transaction_no_activity_timeout_out'] = 2 - - def test_KA_origin(self): - '''Test that the origin does in fact support keepalive via https.''' - self._aux_KA_origin("https") - - def test_KA_proxy(self): - '''Tests that keepalive works through ATS to origin via https.''' - self._aux_KA_proxy("http") - - def test_KA_timeout_direct(self): - '''Tests that origin does not timeout using keepalive via https.''' - self._aux_KA_timeout_direct("https") - - 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'}) http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/new_tsqa/tests/test_redirection.py ---------------------------------------------------------------------- diff --git a/ci/new_tsqa/tests/test_redirection.py b/ci/new_tsqa/tests/test_redirection.py deleted file mode 100644 index 1100dc1..0000000 --- a/ci/new_tsqa/tests/test_redirection.py +++ /dev/null @@ -1,41 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import requests -import helpers -import tsqa.test_cases -import tsqa.utils -import tsqa.endpoint - -class TestRedirection(helpers.EnvironmentCase, tsqa.test_cases.HTTPBinCase): - @classmethod - def setUpEnv(cls, env): - cls.configs['records.config']['CONFIG'].update({ - 'proxy.config.http.redirection_enabled': 1, - 'proxy.config.http.number_of_redirections': 10 - }) - cls.configs['remap.config'].add_line('map / http://127.0.0.1:{0}'.format(cls.http_endpoint.address[1])) - - def test_redirection(self): - server_ports = self.configs['records.config']['CONFIG']['proxy.config.http.server_ports'] - - # By default Requests will perform location redirection - # Disable redirection handling with the allow_redirects parameter - r = requests.get('http://127.0.0.1:{0}/redirect/9'.format(server_ports), allow_redirects=False) - self.assertEqual(r.status_code, 200) - - r = requests.get('http://127.0.0.1:{0}/redirect/10'.format(server_ports), allow_redirects=False) - self.assertEqual(r.status_code, 302) http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/new_tsqa/tests/test_regressions.py ---------------------------------------------------------------------- diff --git a/ci/new_tsqa/tests/test_regressions.py b/ci/new_tsqa/tests/test_regressions.py deleted file mode 100644 index 8fec2eb..0000000 --- a/ci/new_tsqa/tests/test_regressions.py +++ /dev/null @@ -1,82 +0,0 @@ -''' -Run the built-in regression tests with experimental build configurations. -''' - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import os -import sys -import requests -import time -import subprocess -import logging - -import helpers -import tsqa.test_cases -import tsqa.utils - -log = logging.getLogger(__name__) - -class TestRegressions(helpers.EnvironmentCase): - ''' - Run the built-in traffic_server regression test suite. - ''' - - # NOTE: we need to stop the running Traffic Server in the environment so - # that we can start up our own. Make sure to restart it when we are done so - # that the EnvironmentCase doesn't get upset. - - @classmethod - def setUpClass(cls): - super(TestRegressions, cls).setUpClass() - cls.environment.stop() - - @classmethod - def tearDownClass(cls): - cls.environment.start() - super(TestRegressions, cls).tearDownClass() - - def test_regressions(self): - cmd = [os.path.join(self.environment.layout.bindir, 'traffic_server'), '-R', '1'] - tsqa.utils.run_sync_command(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - -class TestRegressionsReclaimableFreelist(TestRegressions): - ''' - Run the built-in traffic_server regression test suite with - --enable-reclaimable-freelist. - ''' - environment_factory = { - 'configure': { 'enable-reclaimable-freelist': None }, - } - -class TestRegressionsInterimCache(TestRegressions): - ''' - Run the built-in traffic_server regression test suite with - --enable-interim-cache. - ''' - environment_factory = { - 'configure': { 'enable-interim-cache': None }, - } - -class TestRegressionsLinuxNativeAIO(TestRegressions): - ''' - Run the built-in traffic_server regression test suite with - --enable-linux-native-aio. - ''' - environment_factory = { - 'configure': { 'enable-linux-native-aio': None }, - } http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/new_tsqa/tests/test_remap.py ---------------------------------------------------------------------- diff --git a/ci/new_tsqa/tests/test_remap.py b/ci/new_tsqa/tests/test_remap.py deleted file mode 100644 index aac6e8e..0000000 --- a/ci/new_tsqa/tests/test_remap.py +++ /dev/null @@ -1,125 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import os -import requests -import time -import logging - -import helpers - -import tsqa.test_cases -import tsqa.utils -import tsqa.endpoint - -log = logging.getLogger(__name__) - -class TestRemapHTTP(tsqa.test_cases.DynamicHTTPEndpointCase, helpers.EnvironmentCase): - @classmethod - def setUpEnv(cls, env): - cls.configs['records.config']['CONFIG'].update({ - 'proxy.config.diags.debug.enabled': 1, - 'proxy.config.diags.debug.tags': 'url.*', - }) - - cls.configs['remap.config'].add_line( - 'map http://www.example.com http://127.0.0.1:{0}'.format(cls.http_endpoint.address[1])); - cls.configs['remap.config'].add_line( - 'map http://www.example.com:8080 http://127.0.0.1:{0}'.format(cls.http_endpoint.address[1])); - - def hello(request): - return 'hello' - cls.http_endpoint.add_handler('/', hello) - - def test_remap_http(self): - s = requests.Session() - http_port = self.configs['records.config']['CONFIG']['proxy.config.http.server_ports'] - url = 'http://127.0.0.1:{0}/'.format(http_port) - - ret = s.get(url) - self.assertEqual(ret.status_code, 404) - - s.headers.update({'Host': 'www.example.com'}) - ret = s.get(url) - self.assertEqual(ret.status_code, 200) - - s.headers.update({'Host': 'www.example.com:80'}) - ret = s.get(url) - self.assertEqual(ret.status_code, 200) - - s.headers.update({'Host': 'www.example.com:8080'}) - ret = s.get(url) - self.assertEqual(ret.status_code, 200) - - s.headers.update({'Host': 'www.test.com'}) - ret = s.get(url) - self.assertEqual(ret.status_code, 404) - - s.headers.update({'Host': 'www.example.com:1234'}) - ret = s.get(url) - self.assertEqual(ret.status_code, 404) - -class TestRemapHTTPS(tsqa.test_cases.DynamicHTTPEndpointCase, helpers.EnvironmentCase): - @classmethod - def setUpEnv(cls, env): - # set an SSL port to ATS - cls.ssl_port = tsqa.utils.bind_unused_port()[1] - cls.configs['records.config']['CONFIG']['proxy.config.http.server_ports'] += ' {0}:ssl'.format(cls.ssl_port) - cls.configs['records.config']['CONFIG'].update({ - 'proxy.config.diags.debug.enabled': 1, - 'proxy.config.diags.debug.tags': 'url.*' - }) - - cls.configs['remap.config'].add_line( - 'map https://www.example.com http://127.0.0.1:{0}'.format(cls.http_endpoint.address[1])); - cls.configs['remap.config'].add_line( - 'map https://www.example.com:4443 http://127.0.0.1:{0}'.format(cls.http_endpoint.address[1])); - # configure SSL multicert - cls.configs['ssl_multicert.config'].add_line( - 'dest_ip=* ssl_cert_name={0}'.format(helpers.tests_file_path('rsa_keys/www.example.com.pem'))) - - def hello(request): - return 'hello' - cls.http_endpoint.add_handler('/', hello) - - def test_remap_https(self): - s = requests.Session() - url = 'https://127.0.0.1:{0}/'.format(self.ssl_port) - - # We lack of SNI support in requests module, so we do not verify SSL certificate here. - # ret = s.get(url, verify=(helpers.tests_file_path('certs/ca.crt'))) - ret = s.get(url, verify=False) - self.assertEqual(ret.status_code, 404) - - s.headers.update({'Host': 'www.example.com'}) - ret = s.get(url, verify=False) - self.assertEqual(ret.status_code, 200) - - s.headers.update({'Host': 'www.example.com:443'}) - ret = s.get(url) - self.assertEqual(ret.status_code, 200) - - s.headers.update({'Host': 'www.example.com:4443'}) - ret = s.get(url) - self.assertEqual(ret.status_code, 200) - - s.headers.update({'Host': 'www.test.com'}) - ret = s.get(url) - self.assertEqual(ret.status_code, 404) - - s.headers.update({'Host': 'www.example.com:1234'}) - ret = s.get(url) - self.assertEqual(ret.status_code, 404) http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/new_tsqa/tests/test_spdy_protocol_select.py ---------------------------------------------------------------------- diff --git a/ci/new_tsqa/tests/test_spdy_protocol_select.py b/ci/new_tsqa/tests/test_spdy_protocol_select.py deleted file mode 100644 index 50fabce..0000000 --- a/ci/new_tsqa/tests/test_spdy_protocol_select.py +++ /dev/null @@ -1,156 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import os -import requests -import time -import logging -import subprocess - -import helpers - -import tsqa.test_cases -import tsqa.utils -import tsqa.endpoint - -log = logging.getLogger(__name__) - -#helper function to get spdycat path -def which(program): - def is_exe(fpath): - return os.path.isfile(fpath) and os.access(fpath, os.X_OK) - fpath, fname = os.path.split(program) - if fpath: - if is_exe(program): - return program - else: - for path in os.environ["PATH"].split(os.pathsep): - path = path.strip('"') - exe_file = os.path.join(path, program) - if is_exe(exe_file): - return exe_file - return None - -class TestSPDY(helpers.EnvironmentCase): - environment_factory = { - 'configure': {'enable-spdy': None}, - 'env': {'PKG_CONFIG_PATH': os.getenv("SPDY_PKG_CONFIG_PATH", "/opt/spdylay/lib/pkgconfig/")}, - } - - @classmethod - def setUpEnv(cls, env): - ''' - This function is responsible for setting up the environment for this fixture - This includes everything pre-daemon start - ''' - # set up spdycat - cls.client = which('spdycat') - if cls.client is None: - build_dir = os.environ.get('top_builddir', '../..') - log.info('top build_dir = {0}'.format(build_dir)) - cls.client = '%s/spdylay/src/spdycat' % build_dir - if os.path.isfile(cls.client) is False: - raise helpers.unittest.SkipTest('Cannot find spdycat. skipping test.') - - log.info('spdycat path = {0}'.format(cls.client)) - - # get spdy server ports - cls.spdy_port = tsqa.utils.bind_unused_port()[1] - log.info('spdy server port = {0}'.format(cls.spdy_port)) - cls.http_port = tsqa.utils.bind_unused_port()[1] - log.info('http server port = {0}'.format(cls.http_port)) - - cls.configs['remap.config'].add_line('map / https://docs.trafficserver.apache.org/\n') - - # 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 - - # SPDY configs - cls.configs['records.config']['CONFIG']['proxy.config.http.server_ports'] += ' {0}:ssl {1}:proto=http:ssl'.format(cls.spdy_port, cls.http_port) - cls.configs['records.config']['CONFIG']['proxy.config.ssl.server.cert.path'] = helpers.tests_file_path('rsa_keys') - - # configure SSL multicert - cls.configs['ssl_multicert.config'].add_line('dest_ip=* ssl_cert_name={0}\n'.format(helpers.tests_file_path('rsa_keys/www.example.com.pem'))) - - @classmethod - def callSpdycat(self, port, path, args): - full_args = [self.client,'https://localhost:%d%s' % (port, path)] + args - self.log.info('full args = {0}'.format(full_args)) - p = subprocess.Popen(full_args, stdout=subprocess.PIPE, - stdin=subprocess.PIPE) - self.stdout, self.stderr = p.communicate() - return p.returncode - -""" -TODO: re-add spdy2 tests. looks like support here might be lacking some way. was not able to get ATS to advertise spdy/2 -even when it was explicitly set with proto=spdy/2 -""" -class TestSPDYv2(TestSPDY): - @classmethod - def setUpClass(cls): - ''' - Skip spdy2 tests for now - ''' - raise helpers.unittest.SkipTest('Skipping spdy/2 tests') - - @classmethod - def setUpEnv(cls, env): - ''' - This function is responsible for setting up the environment for this fixture - This includes everything pre-daemon start - ''' - super(TestSPDYv2, cls).setUpEnv(env) - - cls.spdy2_port = tsqa.utils.bind_unused_port()[1] - log.info('spdy2 server port = {0}'.format(cls.spdy2_port)) - # make sure we add port supports spdy2 - cls.configs['records.config']['CONFIG']['proxy.config.http.server_ports'] += ' {0}:proto=spdy/2:ssl'.format(cls.spdy2_port) - - def test_SPDY_v2(self): - ''' - Test that the origin does in fact support spdy 2 - ''' - self.assertEquals(0, self.callSpdycat(self.spdy2_port, '/', ['-nv', '--spdy2'])) #this isn't passing - self.assertIn('version=2', self.stdout) - -class TestSPDYv3(TestSPDY): - def test_SPDY_v3(self): - ''' - Test that the origin does in fact support spdy 3 - ''' - self.assertEquals(0, self.callSpdycat(self.spdy_port, '/', ['-nv', '--spdy3'])) - self.assertIn('NPN selected the protocol: spdy/3', self.stdout) - - def test_SPDY_v3_failed_request(self): - ''' - Test that non spdy port won't advertise spdy - ''' - self.assertEquals(1, self.callSpdycat(self.http_port, '/', ['-nv', '--spdy3'])) - -class TestSPDYv3_1(TestSPDY): - def test_SPDY_v3_1(self): - ''' - Test that the origin does in fact support spdy 3.1 - ''' - self.assertEquals(0, self.callSpdycat(self.spdy_port, '/', ['-nv', '--spdy3-1'])) - self.assertIn('NPN selected the protocol: spdy/3.1', self.stdout) - - def test_SPDY_v3_1_failed_request(self): - ''' - Test that non spdy port won't advertise spdy - ''' - self.assertEquals(1, self.callSpdycat(self.http_port, '/', ['-nv', '--spdy3-1'])) http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/Makefile ---------------------------------------------------------------------- diff --git a/ci/tsqa/Makefile b/ci/tsqa/Makefile new file mode 100644 index 0000000..a46a684 --- /dev/null +++ b/ci/tsqa/Makefile @@ -0,0 +1,43 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +.PHONY: test clean update + +VIRTUALENV_DIR = virtualenv + +# Run all tests. +test: $(VIRTUALENV_DIR) + @source $(VIRTUALENV_DIR)/bin/activate && $(VIRTUALENV_DIR)/bin/nosetests -sv --logging-level=INFO + +# Scan and list the tests. +list: $(VIRTUALENV_DIR) + @source $(VIRTUALENV_DIR)/bin/activate && $(VIRTUALENV_DIR)/bin/nosetests -v --collect-only + +# Construct the virtualenv. +$(VIRTUALENV_DIR): + @if [ ! -d $(VIRTUALENV_DIR) ]; then\ + virtualenv $(VIRTUALENV_DIR);\ + fi + @# Update the virtualenv with your dep libraries + source $(VIRTUALENV_DIR)/bin/activate && $(VIRTUALENV_DIR)/bin/pip install -r requirements.txt + @echo "Virtualenv ready!" + +# Update the virtualenv with the latest TSQA package and dependencies. +update: $(VIRTUALENV_DIR) + source $(VIRTUALENV_DIR)/bin/activate && $(VIRTUALENV_DIR)/bin/pip install --upgrade -r requirements.txt + +clean: + rm -rf virtualenv http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/TODO ---------------------------------------------------------------------- diff --git a/ci/tsqa/TODO b/ci/tsqa/TODO new file mode 100644 index 0000000..c01205b --- /dev/null +++ b/ci/tsqa/TODO @@ -0,0 +1,7 @@ +# TODO list for tsqa + +- runtests script + - run specific things within the virtualenv + - package up output from specific tests in a relocateable way +- Documentation/Examples of TSQA framework +- pylint for test cases http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/cert.pem ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/cert.pem b/ci/tsqa/files/cert.pem new file mode 100644 index 0000000..fcac091 --- /dev/null +++ b/ci/tsqa/files/cert.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDVzCCAj+gAwIBAgIJAOY9Arrh4/IgMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNV +BAYTAlhYMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxHDAaBgNVBAoME0RlZmF1bHQg +Q29tcGFueSBMdGQwHhcNMTUwMTIyMDE1MjU3WhcNMTUwMjIxMDE1MjU3WjBCMQsw +CQYDVQQGEwJYWDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MRwwGgYDVQQKDBNEZWZh +dWx0IENvbXBhbnkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +08GU61mR18JO9X20utgemoeeYyKx+LXZYQBc0cKwHzZIiYfokwCkCNekMjZ87DT2 ++++8lBf3PatSgtA8/xanr8+TTDbKPehqdItDAy9e/xYgPBz9RXHuBUeOw+CPxt2e +aGrGwy6ybW3jne/+vm73wn+ZzldpwGGXwIQAS9lFqtmisx/DftL8fhzpfp/uIU/K +Y33iMiPpEHi8CHrOsaREl787ipKoqfxs+d1JNTHu1I+wJKgppOrtyjF1AjYDmrRg +RO8rJqIaUKS+8teV2KazwfdPkgNyaoZO7NCPPEjWkbp2c+2AJQqCSyZmJ63idgkR +msaSjRx45vJPOU/KFVHLuQIDAQABo1AwTjAdBgNVHQ4EFgQUtL1CTVRABxDQVbZy +WwOZWMCs08QwHwYDVR0jBBgwFoAUtL1CTVRABxDQVbZyWwOZWMCs08QwDAYDVR0T +BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAComsgXv9V7utk6yY1XV+rtjZmyRV +758Jjzb2sqqVtw8jtEvdiO6rK+Chb49cAcBGJFHZL2/CJ6BWSOf79fLj/IGKC/nX +UBz0dxrlg9x/KR/Jtp0qqQXIw/HT/NvaytYxMIBKqkmjG+kWiPn61dvwFjIERPOb +xM4lHhaO/PKWDDVx6Sf7UzMalmwFjaGQFXCNM5dfqvdqDYYrbZwEWuqmxNy1sZBY +SfY7Tyz6OP9NnlgtWRAITPqBS2kx/MVCGd2TtzJcJDxKK67tr0QFenGtXSZy555Q +bNKjXKVWiHrVCEgttPri22o7Ax1Q6FpLHMXDIiveUl6aXq4ulNzRqXpmaw== +-----END CERTIFICATE----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/ec_keys/README.rst ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/ec_keys/README.rst b/ci/tsqa/files/ec_keys/README.rst new file mode 100644 index 0000000..c3dd1e1 --- /dev/null +++ b/ci/tsqa/files/ec_keys/README.rst @@ -0,0 +1,29 @@ +All of these certificates are self-signed and are *not* secure. They are intended +only for use in testing. + +Try to use existing certs if possible rather than generating your own. + +# generated using (make sure to set "hostname"): +openssl ecparam -name prime256v1 -genkey -out key.pem +openssl req -new -x509 -key key.pem -out cert.pem + + +## Since we want to verify all of the certificate verification, we need to generate +## our own CA and intermediate CA +# Create CA +openssl ecparam -name prime256v1 -genkey -out ca.key +openssl req -new -x509 -nodes -sha1 -days 1825 -key ca.key -out ca.crt + +# Create Intermediate +openssl ecparam -name prime256v1 -genkey -out intermediate.key +openssl req -new -sha1 -key intermediate.key -out intermediate.csr + +# CA signs Intermediate +openssl x509 -req -days 1825 -in intermediate.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out intermediate.crt + +# Create Server +openssl ecparam -name prime256v1 -genkey -out www.example.com.key +openssl req -new -key test.example.com.key -out test.example.com.csr + +# Intermediate signs Server +openssl x509 -req -days 1825 -in test.example.com.csr -CA intermediate.crt -CAkey intermediate.key -set_serial 01 -out test.example.com.crt http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/ec_keys/ca.crt ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/ec_keys/ca.crt b/ci/tsqa/files/ec_keys/ca.crt new file mode 100644 index 0000000..a70f990 --- /dev/null +++ b/ci/tsqa/files/ec_keys/ca.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIByDCCAW6gAwIBAgIJAP0vC/lirtMJMAkGByqGSM49BAEwQTELMAkGA1UEBhMC +WFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEMMAoGA1UECgwDQVRTMQ0wCwYDVQQD +DARyb290MB4XDTE1MDQxMzIwMTEwMloXDTIwMDQxMTIwMTEwMlowQTELMAkGA1UE +BhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEMMAoGA1UECgwDQVRTMQ0wCwYD +VQQDDARyb290MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVRCzxLeGp2zzqqz6 +YTHRJ+sTuEzrFNUUQX/sEb4s1uceiqtTgFJ8kglWGMk/3WIC09PF4aRvkXM+xVvx +U9EcaKNQME4wHQYDVR0OBBYEFF9E7e3RCj6b4rQeNVTnNHGgRhzvMB8GA1UdIwQY +MBaAFF9E7e3RCj6b4rQeNVTnNHGgRhzvMAwGA1UdEwQFMAMBAf8wCQYHKoZIzj0E +AQNJADBGAiEAtKiG3JParqhQz1N+QOGKJtbgFS/qwNpK9FanbC6MOLQCIQD+heQN +eow8AF4hAUZNYvxyhZDd5FKzF2kRdxJUGkZK8w== +-----END CERTIFICATE----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/ec_keys/ca.key ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/ec_keys/ca.key b/ci/tsqa/files/ec_keys/ca.key new file mode 100644 index 0000000..275e3e9 --- /dev/null +++ b/ci/tsqa/files/ec_keys/ca.key @@ -0,0 +1,8 @@ +-----BEGIN EC PARAMETERS----- +BggqhkjOPQMBBw== +-----END EC PARAMETERS----- +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIKR1N01PYCnkwa07tTnZ3Ri6dsGxu/OlTmExDWS1JIt6oAoGCCqGSM49 +AwEHoUQDQgAEVRCzxLeGp2zzqqz6YTHRJ+sTuEzrFNUUQX/sEb4s1uceiqtTgFJ8 +kglWGMk/3WIC09PF4aRvkXM+xVvxU9EcaA== +-----END EC PRIVATE KEY----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/ec_keys/intermediate.crt ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/ec_keys/intermediate.crt b/ci/tsqa/files/ec_keys/intermediate.crt new file mode 100644 index 0000000..2a2fc1d --- /dev/null +++ b/ci/tsqa/files/ec_keys/intermediate.crt @@ -0,0 +1,10 @@ +-----BEGIN CERTIFICATE----- +MIIBcTCCARcCAQEwCQYHKoZIzj0EATBBMQswCQYDVQQGEwJYWDEVMBMGA1UEBwwM +RGVmYXVsdCBDaXR5MQwwCgYDVQQKDANBVFMxDTALBgNVBAMMBHJvb3QwHhcNMTUw +NDEzMjAxMTQ4WhcNMjAwNDExMjAxMTQ4WjBJMQswCQYDVQQGEwJYWDEVMBMGA1UE +BwwMRGVmYXVsdCBDaXR5MQwwCgYDVQQKDANBVFMxFTATBgNVBAMMDGludGVybWVk +aWF0ZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCLloHhXc49EwEI94gb6186J +zp5mHmEBD49I3pFuQwkVLu249uCsyEnjhoAlMohC/Oc/ROtvZTnujcdBZ2OBh4cw +CQYHKoZIzj0EAQNJADBGAiEAzevMu2yohbN5dzRp5/TTxKSOrenLh56jtSJrtFai +/wUCIQDV40abfGSiioLyb5PoyJRPa6M+AhWbK9caa2SQei+KnQ== +-----END CERTIFICATE----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/ec_keys/intermediate.key ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/ec_keys/intermediate.key b/ci/tsqa/files/ec_keys/intermediate.key new file mode 100644 index 0000000..bb1cdc5 --- /dev/null +++ b/ci/tsqa/files/ec_keys/intermediate.key @@ -0,0 +1,8 @@ +-----BEGIN EC PARAMETERS----- +BggqhkjOPQMBBw== +-----END EC PARAMETERS----- +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIMtffsDv9JDl4AFznb1ftzA8IqIVxA344PSpyZU6PfA/oAoGCCqGSM49 +AwEHoUQDQgAEIuWgeFdzj0TAQj3iBvrXzonOnmYeYQEPj0jekW5DCRUu7bj24KzI +SeOGgCUyiEL85z9E629lOe6Nx0FnY4GHhw== +-----END EC PRIVATE KEY----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/ec_keys/www.example.com.pem ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/ec_keys/www.example.com.pem b/ci/tsqa/files/ec_keys/www.example.com.pem new file mode 100644 index 0000000..ee31b56 --- /dev/null +++ b/ci/tsqa/files/ec_keys/www.example.com.pem @@ -0,0 +1,15 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIGCAR+s6Sno+AteQgnMBOsS7sD4EbSxGN7anPQaossvkoAoGCCqGSM49 +AwEHoUQDQgAEwNOf/ym+XidKYjQg2WDM3GPK2eMbRz2VmvdB4dbzBxQ4gMYCIl2l +2L7lLqGtmUcuUhDaOxf91hhXAfprU+qRvA== +-----END EC PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIBfDCCASICAQEwCQYHKoZIzj0EATBJMQswCQYDVQQGEwJYWDEVMBMGA1UEBwwM +RGVmYXVsdCBDaXR5MQwwCgYDVQQKDANBVFMxFTATBgNVBAMMDGludGVybWVkaWF0 +ZTAeFw0xNTA0MTMyMDEzMjlaFw0yMDA0MTEyMDEzMjlaMEwxCzAJBgNVBAYTAlhY +MRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxDDAKBgNVBAoMA0FUUzEYMBYGA1UEAwwP +d3d3LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwNOf/ym+ +XidKYjQg2WDM3GPK2eMbRz2VmvdB4dbzBxQ4gMYCIl2l2L7lLqGtmUcuUhDaOxf9 +1hhXAfprU+qRvDAJBgcqhkjOPQQBA0kAMEYCIQCU7CxO/zdFc4BDUCHO07wVuFe7 +RyiVVJs4llEZTXoBiAIhAIwrXtE2psZBRx/TE7miPunqa+1E4IxrtWn2fkzJyJ57 +-----END CERTIFICATE----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/ec_keys/www.test.com.pem ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/ec_keys/www.test.com.pem b/ci/tsqa/files/ec_keys/www.test.com.pem new file mode 100644 index 0000000..e519276 --- /dev/null +++ b/ci/tsqa/files/ec_keys/www.test.com.pem @@ -0,0 +1,15 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEILVRI/Y9isXZJKXwb4srPN4hjx+ZUWGmSL3cn8AEhTVQoAoGCCqGSM49 +AwEHoUQDQgAEh4NjyzcxA2B/b281cUsRHaF+yAUV4CnIhUkPQigXw10GO9lQx69w +of7PjZkJRdeBlEMBVUcwTKEuENMZ7a3+Tw== +-----END EC PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIBdzCCAR8CAQEwCQYHKoZIzj0EATBJMQswCQYDVQQGEwJYWDEVMBMGA1UEBwwM +RGVmYXVsdCBDaXR5MQwwCgYDVQQKDANBVFMxFTATBgNVBAMMDGludGVybWVkaWF0 +ZTAeFw0xNTA0MTMyMDEzMzZaFw0yMDA0MTEyMDEzMzZaMEkxCzAJBgNVBAYTAlhY +MRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxDDAKBgNVBAoMA0FUUzEVMBMGA1UEAwwM +d3d3LnRlc3QuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEh4NjyzcxA2B/ +b281cUsRHaF+yAUV4CnIhUkPQigXw10GO9lQx69wof7PjZkJRdeBlEMBVUcwTKEu +ENMZ7a3+TzAJBgcqhkjOPQQBA0cAMEQCIH083uGRd7b1crw6TH8paBZNeliJTiFU +eg6lrnGEVIKpAiBtCERpWAlJhYBrR5ApPp6jSoM+Zk6YfswUSg2YR7c4Sg== +-----END CERTIFICATE----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/key.pem ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/key.pem b/ci/tsqa/files/key.pem new file mode 100644 index 0000000..fddcacb --- /dev/null +++ b/ci/tsqa/files/key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDTwZTrWZHXwk71 +fbS62B6ah55jIrH4tdlhAFzRwrAfNkiJh+iTAKQI16QyNnzsNPb777yUF/c9q1KC +0Dz/Fqevz5NMNso96Gp0i0MDL17/FiA8HP1Fce4FR47D4I/G3Z5oasbDLrJtbeOd +7/6+bvfCf5nOV2nAYZfAhABL2UWq2aKzH8N+0vx+HOl+n+4hT8pjfeIyI+kQeLwI +es6xpESXvzuKkqip/Gz53Uk1Me7Uj7AkqCmk6u3KMXUCNgOatGBE7ysmohpQpL7y +15XYprPB90+SA3Jqhk7s0I88SNaRunZz7YAlCoJLJmYnreJ2CRGaxpKNHHjm8k85 +T8oVUcu5AgMBAAECggEBANFqt8kNGtPDIW1c9Vh3FcUDbFtkW5e42BM7VZBItv8X +IyOIWjTPRGpOQN87zc2YD85WaCwZi3TcsswV/szTbeDMK0MLSHVzHZzGgO5scclZ +62Un0j5Uju1/uCv1MJueXuOq/YjX7LOWIq32Q/u3KKWcpdJP1pDgs0A8C0L3zBNK +PjxnCO0FvJdcpqajEhtepYyTQAtWm/igWbuFgUcfZ55HTOBfBiLdACh6anbCdDJ8 +f2COFRrKu9Gn9mVyRirbyCa4B3VSj4R+WlKsc3erR2vNiEdJLd9x5OK7ZvMFHTvG +V4BhWt3ffSBRIaVi0pIpYekWbnXjbqY6zjchiy3ruOUCgYEA6W4yBrbExJmelXCj +dPOp5Ds/uAYaq9TkRLWzX837swPNh1+XJ9xGNgn4d5DbikN1xSdsJO/1dpwk3Uxg +qE/tEvA2gip/DaxIcj3PfoPtFyebgZItvs5k97zGw9n0bgqoRAezzUl4Guz4AQVV +Xz+3gICN1lFhRqxKm7Pt8Kc3D5cCgYEA6DrpLJCzOEd8qlhm6w7UGruBRA+QLACu +zlqzkf4rw1vaXx4cP8ctoCiVWUIsPI0mD2sQvtXAPT8KzZqh3UCu1zyyochyCuVg +C3fBQiSDtUb2Uk6u7fNFrn36oN7W/Q+sarJvIIECR1PjEGuT3eJppQgJB/VGUZqa +OQJyTJPXaS8CgYEAskz8o0o51F3u1wEZqbxw+acUDbGD79qGncEYiUZiSqPN+uhW +IhlL+/zzsAiS2PKcY4KwRSqRGQ89zVeIwSeD06JuUFC7iaseDz0NX/rPP49+ZaNN +k+A9GUo1nOW/oco8KvKjMVw8BH0bFlSHmGCn/tyy+pBguEXkGzh9uANRuHMCgYAM +TZKs2b2k7aSdIbHSIib6g5SFlo18x0x7gjKhOWX4I5WeFGpKtrKkGYJQCEFvs8qg +ZnusoIZeuEhKPDb3EcYxgPW1vHjOOvirotyKNIUFxYynL6P01z6J0ALHIwcgwQPR +Y0Kf5jXIsZkF9a0PxD70j0hrM4NWL2qcOpTzmaF/4QKBgFYQVrrI6YBxexKQ4J/m +tG/OKlxef6mzrctu7RJGxzt9ag1IgOi10BMCIKCW7tfvhzzLuBiJ0imEGe+MYrau +yIWCOVpmwcSnww8bV/25oqRxduVwZzmtZdUJbNSdiZ7jq4tsV9a8TZXts45veSFQ +X+HWsoFkRoYLOx96mqN94/ZS +-----END PRIVATE KEY----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/rsa_keys/README.rst ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/rsa_keys/README.rst b/ci/tsqa/files/rsa_keys/README.rst new file mode 100644 index 0000000..9fb6a8d --- /dev/null +++ b/ci/tsqa/files/rsa_keys/README.rst @@ -0,0 +1,28 @@ +All of these certificates are self-signed and are *not* secure. They are intended +only for use in testing. + +Try to use existing certs if possible rather than generating your own. + +# generated using (make sure to set "hostname"): +openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -nodes && cat key.pem cert.pem > keypair.pem && rm key.pem cert.pem + + +## Since we want to verify all of the certificate verification, we need to generate +## our own CA and intermediate CA +# Create CA +openssl genrsa -out ca.key 4096 +openssl req -new -x509 -nodes -sha1 -days 1825 -key ca.key -out ca.crt + +# Create Intermediate +openssl genrsa -out intermediate.key 4096 +openssl req -new -sha1 -key intermediate.key -out intermediate.csr + +# CA signs Intermediate +openssl x509 -req -days 1825 -in intermediate.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out intermediate.crt + +# Create Server +openssl genrsa -out test.example.com.key 4096 +openssl req -new -key test.example.com.key -out test.example.com.csr + +# Intermediate signs Server +openssl x509 -req -days 1825 -in test.example.com.csr -CA intermediate.crt -CAkey intermediate.key -set_serial 01 -out test.example.com.crt http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/rsa_keys/ca.crt ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/rsa_keys/ca.crt b/ci/tsqa/files/rsa_keys/ca.crt new file mode 100644 index 0000000..b0ce838 --- /dev/null +++ b/ci/tsqa/files/rsa_keys/ca.crt @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFNzCCAx+gAwIBAgIJAL8yIx0Q66ZXMA0GCSqGSIb3DQEBBQUAMDIxCzAJBgNV +BAYTAlhYMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxDDAKBgNVBAoMA0FUUzAeFw0x +NTA0MTMxODQ5NTNaFw0yMDA0MTExODQ5NTNaMDIxCzAJBgNVBAYTAlhYMRUwEwYD +VQQHDAxEZWZhdWx0IENpdHkxDDAKBgNVBAoMA0FUUzCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANYzN4s+B8KAbPxdpMzoVh+xsgPeauothjQq8tQmViT5 +3bnEf7zb+4Wy/7Y9CLj2CSnf6tv271OVwVQZWlDrmqr6greUePz28j3/sJ/lQ9bR +aZOWQI3d4rgCy6UdJ6rhD2BYrZVFnIZQ5zVZu3rbUBuPwBuRQdTLOWjzcSguyg2R +jiJ/W2/IToRjgX27cPPArhJQ2ibwsbtvqecj1lQfT5yg8WEDeeOyYwzfT4VEGm7f +8Q4qrBKxhdRTF6LhNkVKkOM6Jvvq7ULNpSAh1+zFAfzMpPUt1T+sjObQ0HHMeh0J +ghwOh8OAqFyMAsNdzFwjz4lSrliTMYoq6JdK0In5FUqlCt5RsKrfxsykhvUb66/R ++a9uGboEMlce/sZcxSpnDJYOmxrecQYmEaoKhbIcJBrRqYMgyQL9X+JJfsdyKR2V +CbSV0FjHeybpOwl76QGoZPhRy2e551uqKN0qdQMmfI3ZjZqmN1EuuOcRNKU8r0He +AOTRZ2BssDfvs/YWgZsKoHqoLIQCGgWw1ZhsK8bhFKKBtBqbyAu995XxhJezbSAg +57+1Icp8qmCWvCO0zxm5ckCRNICxGolT/0Mi5Cl8hmfbx9Gv4Na/KEcxpKLPy43t +UUqfCtvGOUE/S6TWleL5YII4mI86fIOHFkAozdeokcF54lhENpcLL3R5ggRiBJ83 +AgMBAAGjUDBOMB0GA1UdDgQWBBTMx2X9hPjXNTOKTSQELEBv4pEHADAfBgNVHSME +GDAWgBTMx2X9hPjXNTOKTSQELEBv4pEHADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3 +DQEBBQUAA4ICAQCZ+B8wevb1DsA0XsGkBIHrAK2zc4u54nIhVEw/6PnJBBpV5Eha +rKtamhyeBjKt1267SaoQIWy/os9QlEYmn2AKn7J0rxqokowr0r8jdh4nDDeCGGkb +g7ieinIpuUr5Unpp+J+9/FXtrX1m5sXuHlMao9eTK86NoXPJgt4z4HQd1ZaEJp5s +H60PVd93TwcIDQjbsGdpFS7LhtYSx5Np/LmrQj0tnt18AUh1SgVwvtAqiSsyhxFa +yPBZKIsdbNQkPoaIKQovCg0cRjlRr1XAk+cfRbf8OUmS1JMs1+/b0zX0kk9xynhj +4CUPxsVy4SnOeg95yPB8BEyvU1uxnflq3QTJsSxcePYte5ni1wx8Vbn7cJusJRYK +LNaEFq/nkFxAlP4PTkv9mGq7ZYLqwpE9s6rPmJZc37ti0OUmLiVpqk6DtN5x/TD2 +vKeZMupGCWF71kueR4QAClEnDHe6/lKqe7CH3OuY8bA+7N0RNrEqUBJ7qnD6Frcu +UfmrkZcIj6DWSnpfwL884WoSCkYuyYP/v+PhR5fSao3l7ZB9UQXdXYhx/Kyd3lPZ +DKSZjOthCm1dblzKLK4VHy0dmAQdIczIXY6ztIKUY8z0poMNiyJEGeYYPf5jjxU4 +Q2u9W/ReEaza6HshFnoka4IZqlfLinWRoAt92rA+nFIShaBBimvc32kHrQ== +-----END CERTIFICATE----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/rsa_keys/ca.key ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/rsa_keys/ca.key b/ci/tsqa/files/rsa_keys/ca.key new file mode 100644 index 0000000..d892296 --- /dev/null +++ b/ci/tsqa/files/rsa_keys/ca.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/rsa_keys/intermediate.crt ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/rsa_keys/intermediate.crt b/ci/tsqa/files/rsa_keys/intermediate.crt new file mode 100644 index 0000000..eacc2b9 --- /dev/null +++ b/ci/tsqa/files/rsa_keys/intermediate.crt @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIE7zCCAtcCAQEwDQYJKoZIhvcNAQEFBQAwMjELMAkGA1UEBhMCWFgxFTATBgNV +BAcMDERlZmF1bHQgQ2l0eTEMMAoGA1UECgwDQVRTMB4XDTE1MDQxMzIwMDI0M1oX +DTIwMDQxMTIwMDI0M1owSTELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQg +Q2l0eTEMMAoGA1UECgwDQVRTMRUwEwYDVQQDDAxpbnRlcm1lZGlhdGUwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDe2tfo88v44Tl9TATixb5qmBobnAy/ +oYpaX2St28qNuAC47ftkFaE+4zZIN8IeOAKkMC29ZVxOhXoNWovu4aa9PXdnmatQ +M/vezta451JE7lVQK0q6dViGyeevBkumgQ2TD+Kj6R2uH5zHDSSVEWEJIb8rTb5i +1pA4pF4ZLMBLAoZwrQfH9xjNZWSi7UJ0g1eYwRh5ahjl2SBRxSrH6GEUBCuI7S1o +AvUvj0aDVXmPJEuyrkvw1u566g7DyQ242SnqdZnHVP17g1YmqCbq6qxipb6YKOke +LBOL1zMKjdVQ3QAbw7Y7RBFcVUdUvoh4uL+IoWr+A8s99OxUhz2kEXU+gjwJtOOR +keZGzMo9rA9cProwHC414Q++Ct0YhUAO2vTjEhnEvlJFv8cGRYT/Oifwrxny6KTA +kC+4gwgrJgWR9DHeL814aTnotRUGLLsZAeo+O0al3/0QlN09XDFstkmn/mgaCmbF +LN9dqwvg1gwS5Hbd+vdlguhcx5mlaI+jZp29CBwBdkkKVAns/3Tne+KpwJIsdRMp +es+ajkFEZoOc6GVBrW/BjxQ6JBgQA6R4//eWunbMYfhkNY5l9SS1qZak1j9+qWAX +JcSQVbUxgRSe01MzIqScc2btB8WJbi/IJp+hcdFLDzKYIolT7mRm8Xu6j3M6YF7E +UaOuyRqoRiIr/wIDAQABMA0GCSqGSIb3DQEBBQUAA4ICAQCk4HQOq4A9cwmrPVk6 +vqR8CmRYiStM76RmLqX3XeVx1GybfvZzK/WYLcwInmXD4iitQflB9S0Ut0ChuLKo +klj10wdAv6iNrRMUtmY9w8zV8GSLRHZrOo6Rd0affUNjBy79FaNypmdrydc8+M7L +pGWKVN4qN5cOs/XLFT2TFk8davnyFOucP7kxWeNiZ38Kh8cAYYkovMpfcEJSrMGS +musUqvAlPVZXDgBjblVHjZ2dvgRCdYFwrMxo14SALOmM1Hi7oWbX5A8uNdeoq8lB +mwdUBpdWDm6IgJ2aiufOqBV3Mv6AUysLE+qHdP/lTHIHNc0LinuJK10F/jqbf9uY +gzETU6HT1gQ3X3noDRB2vMMPJQOx8uQX04dfUx8WOmgwCx1X5Vc8gLhH+JbZz1PZ +GlWgX5VGiGgLkq+rgQBLOLIe/NAnUCXPG78DttQpWMs8JjxEcgnVjLNZNAaWymAl +U3JzmbX5UZePwEMjKSjKNDraU3Tuq+QTdPr+W2ilJEsLLPbsenc1QTNsPUv5aI8h +LaayTP7aWMVg0QFfV1O7+vVz5ej7CO7Be7w57VWGDwBBVm81vDbeFna4RJPk2qAw +K5wOYak0Z27v+0wBXHaceH0j45fn/lixt7FANv9NhB3krcjrUwUsooMAIsnCKAlK +nQD8ySYdm+OGchPeRVW+MH8FPw== +-----END CERTIFICATE----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/rsa_keys/intermediate.key ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/rsa_keys/intermediate.key b/ci/tsqa/files/rsa_keys/intermediate.key new file mode 100644 index 0000000..561765f --- /dev/null +++ b/ci/tsqa/files/rsa_keys/intermediate.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/rsa_keys/www.example.com.pem ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/rsa_keys/www.example.com.pem b/ci/tsqa/files/rsa_keys/www.example.com.pem new file mode 100644 index 0000000..4bc273d --- /dev/null +++ b/ci/tsqa/files/rsa_keys/www.example.com.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCrS3J3uL2MNr1Q +9zL7ODukw8UOHN4AwuWsNSDJzaswrgxtFO3VfJbCfo7CUtojoJY39783m3HnLhPA +cFxfsSgQ0Z8TdUZYtq2I1p/eEp/A6kdQffHS4To0ueYQ8r1I6pMJTniaDi8ICD0d +837WwbUUaxx8IhzaFNPrvSdhJb1LGPxj8YvfKvHF9rkwqpJSEAXFCKTa/H0i8wb8 +h3u4cXZmYN6aooai3SY1KGlWZtAfbgTlMMtvB3ZE3JsNNwbL4gfzxYsfXTW9QUZ2 +kT3irmB80koQjzDiW6MpxmLpvDD/NpQWSiR9TDZYCJtACwWyoxqo8gHZVqsF/rkK +yqkg2cbJAgMBAAECggEAf/ZGtsUdZGdoGdnxDda+R6GvzZEnDy6JYJH3womP/zem +NL7TxQ3jmbvtbaFzL/ZBAeJjyGipOGglfTby6tFu+tF9oo2TVaZyEK00lDMZgIYD +bFAJnN2AG+9bvQF5AcWqveMPGRbLb5aoAX3rHQdr/KrfhqP9JbU1cv/FMT9+H2B7 +Spty/WJYOL6AhzN4H4YHJzfhn2e0iMfA3usu1hha84FWWAR3+Z4sphSCtY+edumT +ygES/j5TAX7nu5Eyqe2L4natuDLXiLEbKEpqyfAg1SmTDqAiHrMtWkWv/e+tdTs8 ++DE+wPVhRCjVyjejjvsgDV/d9B805bbpq7M4eyIh+QKBgQDhHPcd+b5KZdXU/PiC +GQ/5C9elW35t7D8gaCzLAzoxW7B/PnTmVyK+QPBsxaUNg87BxB0TTssNUulSY2nk +TVemOe57xdJKiX7nOG+9vIZFGxlzqywMz0o6kZe3No8PAcp91K7Xr3RkXdHHwyZY ++NDiUIeMptEnoeEbFZcv+YQ+8wKBgQDCzB/5tD6D8uGKfsiakMs5HGEsYyJNP2b5 +UQ6e1spFg1noMfc5Vj+Av5lF0AE6tELEvJe0J8z2rA9zfHC6JkY/zOGMXrILF0S7 +KSTcxfBUqeE0OUJMkDNy61lRGs5ISul0qcGU473EsBEaxi999GcqzLrB5V4CHZlJ +EUam9SSqUwKBgQCVkcE/UWh11iO1WD9lcXGDb7LgU2I1dvqadZ0NZh+MG/exE7Zo +NQ0Ii+0y2D9KM4F0jPEkmv2e5K/R5eu9nQXXlDY4Vr/adnCzAHR+BHzR/adziw/B +kxkmwQWk3cM/nVkFMgLZm+IhrZRsveUEyI1BUXA+q7fcNVpzvGyvm4GasQKBgEW9 +XMlCLYuB3ht+ToV/xzIYJfYFO9eaFly2F1zomxwN7ZdCpDcD2NJYRiCHWplQxgK3 +Xjyiby/048c9ywHqCAZ5bFqb4HQ2DWZQUaE0wFkfRMA0q7bLfY/sEFsIFMgvAavB +xstuSZdsTYNfZstaP8FD8KzQWDq7rBBLvhax90F/AoGBANNhkbNxWiUJX/+6VtRj +u7msBgrUpYQtLkyY+13Ry8cdf+8w1die0LZ4unYjIcAS1ro+XGOc0GASc6pb5dYG +X+RxTyZzoNazbC6JEsFx9IJLn/L0/8jsg368m1f0Dkptd2LzrLsw2zuY6wm8DrLH +Re4GALck6zlT+rZNLuN13p5Z +-----END PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIECTCCAfECAQEwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCWFgxFTATBgNV +BAcMDERlZmF1bHQgQ2l0eTEMMAoGA1UECgwDQVRTMRUwEwYDVQQDDAxpbnRlcm1l +ZGlhdGUwHhcNMTUwNDEzMjAwNDA3WhcNMjAwNDExMjAwNDA3WjBMMQswCQYDVQQG +EwJYWDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MQwwCgYDVQQKDANBVFMxGDAWBgNV +BAMMD3d3dy5leGFtcGxlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAKtLcne4vYw2vVD3Mvs4O6TDxQ4c3gDC5aw1IMnNqzCuDG0U7dV8lsJ+jsJS +2iOgljf3vzebcecuE8BwXF+xKBDRnxN1Rli2rYjWn94Sn8DqR1B98dLhOjS55hDy +vUjqkwlOeJoOLwgIPR3zftbBtRRrHHwiHNoU0+u9J2ElvUsY/GPxi98q8cX2uTCq +klIQBcUIpNr8fSLzBvyHe7hxdmZg3pqihqLdJjUoaVZm0B9uBOUwy28HdkTcmw03 +BsviB/PFix9dNb1BRnaRPeKuYHzSShCPMOJboynGYum8MP82lBZKJH1MNlgIm0AL +BbKjGqjyAdlWqwX+uQrKqSDZxskCAwEAATANBgkqhkiG9w0BAQUFAAOCAgEAGrOo +IRDUjxt65cBR9OZSXRdnL6szAMuNHWlK0MfVtTATWXDKU9S3KjK6seo+ebyaqt1J +nlyUZ79n6+vU5uSIDANpYQ5Z1DuV5NM2V9o2QiRqExwfgpGUcAXAi0lQ79eA2kzi +cDgDIpbEAJTFP5/uinaRA9H4KqqfMg5m34tu44A01brb2h/czPOWxD89mKKbtS9H +ODPkDkq3wTUG/F0RQvfFC6Na8IWkW0jijDBxuFeSbRV00GH3/wpMBcxDuIcKBJcy +tFrXjCFKzop7djU7OuxEnqQdlgiHgQsszjnLP0k5Lz9CrNG7W+zqmYsvO6s6a94Z +8lHuwl9GAS/IFQS+c+PsPT7uxgSfbdFHWlmOv1+p/PsPaAQ4Hu/ugga8AjMYoyHg +V6LBCTbUK7aA3lnu6+EW3qpGve6Z2H1D+B5V8ZXLuA6ooIS80CN9xw6jFcAXcUv8 +pNw/sJDnErzRbxsOPKeLl2EjJ/1/MsQf5DNp3xPFyhv5l3oOxodICEr4eeudGmAW +OGp21xqo7i3K8YQ6GDMPF6RVX4mOCxY5L9qf+VDLYx8AV9gFZ+VWG8we7jyruqxE +DwetsfCtwXo5gho9p+K8VHA7nWukydBNiekPFD6S6gBu0vMZxIfW/AKolWgxmyPz +zZhR8034yoSR6qxuh+as+JpXmw+3MypZ5G/1S54= +-----END CERTIFICATE----- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/51ea4aa9/ci/tsqa/files/rsa_keys/www.test.com.pem ---------------------------------------------------------------------- diff --git a/ci/tsqa/files/rsa_keys/www.test.com.pem b/ci/tsqa/files/rsa_keys/www.test.com.pem new file mode 100644 index 0000000..5a0cfa7 --- /dev/null +++ b/ci/tsqa/files/rsa_keys/www.test.com.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDUiFw0p0JOfm/G +0YHivkd5v5Xu5tkBWETu9NgKLr7MkEBeqb1fjkm8Gd1IsndoYh0R/tkRzdE6O+lN +WjMgEuCtz+5zblBQ9xDMwAKI+1YhudqrwIxqXBzpyvAAZwU5EHftog/WiEDvJPM0 +XEQsx6142kgVR5NfNX6HWHOL8H86j7Yfbdd0Knu0Qv9tulC8aeBbZ+pKU0/cBCVi +ljr8OFdrCZu1EkKIat3oBjdbEF4boh4gNSsxbX+89uW4SZYR/G4xEX4VZJLMsloG +YOkcOLTV90+VDbbdrZsnmgQgpKBlp2NBdSx7MZQRU5De3PMBzo2uoIvmwXS9ZxtT +Lr+/dpxZAgMBAAECggEANh1uVN3NrUzWSypnRwOqEV7t30GaOZRvIOTo6VbTsCR+ +r1vK4zzIm4N+a5c9fi+VNVLNlJHyV0CP++keoWkNGlSaY3vQKX1vIqM1Qgm0+atn ++Vlyp1ZC6miIyaFxnAEMeE5OeBKDbiDbaBaiKUDCc8Yomnp6FMD7MZ0c9qHK027z +DL0kYjxjVgYiDnE1fJ1ZV466IcyDnGDky2ebjjvvTI7c55tbrEc+VRZdC5Cn5Yb/ +desjXGAb5snEbdAiNqCgIG9bLw3hHWsn0wCkUPRcEMoSZ73taak54vC7cPda7/D5 +aetzsNQWCMZC5NZ74JD5kyC3xBr7TAarQ5OXsJ0DMQKBgQD8GTQdc2MHvA+4nCpp +0Xy3J7gOCI63FWETZgw22sboqk1toF/LFQHYY40EdvEkFsqc6zTm09QK8y8G48sC +j8pvskhO2M9EgLegzPQv6NY0pTqltI0Ye7w9I3FTKNZIJW+XokDEFFqu+lXqf80i +BRmoUrltoS8L5XB/z5GoNMdk7QKBgQDX0mZSYdjPgTDWDSTCdEOcGB4bjAZzXDTu +ukYhri0vuStZ51giAWUlbBnN/hlvln5bULqZFnB5svFRujTIwwevxzhSl45aiNl1 +vE8zsRS0bNeNyjjF6HX0HOEuAQtre/k+WHvEH3mnFR1Zngwbrt4CJyuadlCmj7yw +jv/DVIyznQKBgAbmobiUqgdSLJP/ImIXK/TPj4hCz7VPToL7biYqQvunfcsccsLa +ZlyIDRosL1mvjghRn/cZoVpTYdwsbCg7y2zXUodmA/Z6F4y9T4noM8TpKPvUP3CG +IpcB215NZeA/thhOhrtXW0wi6isrKHBf913WNeE8Yk9PDo9RHUmfeD3ZAoGBAJGn +t9LFopN4t0LfH/30hWSlijxBJmFYy4iKQqacbHaW28ETNxHMKz00Vb4GTZhX0vNB +6o1C7anUsLTdnJ4ZsehZ5ZMoIbTMQycIbdOPIVAbXOaeoe4/UsvrabWoktJ5mt8O +zIiyTWIMCADhf353Z/HACdd3HjsrKsdl2wsy1rqpAoGBAOaNsxoyw/BIn/wvkQRs +YyYXLb8zECO17ad4M+aFsnf7yLY8i3k80JRfjqxis/yrePNuVKHiZYgEvLNBMdJi +j3YSMgXHYSgYti73+zBcy1uVVlUR5Q2HnihFX5Ho1IAQbC+TXzUCnLOEoR/IIHIz ++qWsoHgJD98ie3cjys0WujpH +-----END PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIEBjCCAe4CAQEwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCWFgxFTATBgNV +BAcMDERlZmF1bHQgQ2l0eTEMMAoGA1UECgwDQVRTMRUwEwYDVQQDDAxpbnRlcm1l +ZGlhdGUwHhcNMTUwNDEzMjAwNDE0WhcNMjAwNDExMjAwNDE0WjBJMQswCQYDVQQG +EwJYWDEVMBMGA1UEBwwMRGVmYXVsdCBDaXR5MQwwCgYDVQQKDANBVFMxFTATBgNV +BAMMDHd3dy50ZXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANSIXDSnQk5+b8bRgeK+R3m/le7m2QFYRO702AouvsyQQF6pvV+OSbwZ3Uiyd2hi +HRH+2RHN0To76U1aMyAS4K3P7nNuUFD3EMzAAoj7ViG52qvAjGpcHOnK8ABnBTkQ +d+2iD9aIQO8k8zRcRCzHrXjaSBVHk181fodYc4vwfzqPth9t13Qqe7RC/226ULxp +4Ftn6kpTT9wEJWKWOvw4V2sJm7USQohq3egGN1sQXhuiHiA1KzFtf7z25bhJlhH8 +bjERfhVkksyyWgZg6Rw4tNX3T5UNtt2tmyeaBCCkoGWnY0F1LHsxlBFTkN7c8wHO +ja6gi+bBdL1nG1Muv792nFkCAwEAATANBgkqhkiG9w0BAQUFAAOCAgEARQSyOqxM +ecr1SvIu65yZbOPq29343KewRs39ZbjsEbmm5SMdFs7asWHtbD6iiU3mPzqAG0Y3 +i+S98J7xwSvAnWERVNzWhymCu7MQ/mKM9WZWDRGUshFgaYpWDqjw2a/qVC54f/Ye +OaeDqzWc96Ib0khZdE+IyqpLdclxagVHv0cJOQwqhKOkIDQGEeBTc8AA/luOnC8d +tE9s8IwTmGpZPYY+kwGVbaLKPanONGDiZM5IyZbBgb9Dq3wL/5DXvQApid37BzHJ +ceT/gKDQljXOSWacxCPUSNb6aut5ivfbd9w7kXdTZL9UcS+FGPNXQ2z1yu3VaqJV +MTSfSW5KUHKVLwDsp9hvBpid8S3TpQLeGt68wXoHxvh5PMnsgdA4JxsOTTwKP/gE +rYhockBGuftKOaRqlRn4+n/nSfLogYoD+32S6ZMBJpPuMBXODiezsP+eAb+wqrV7 +4tiKJC70YNVL7XMdmsDtxj8lcY+aouREnd2+Iutr+YrCM5ZIOKAq57Ib4qTNV3Is +F0KDEHRBpiS9hcGYzhg39Dovc6RHc6QRqKVrfZfE3jKXfCtefcqceIsh3jH51ONI +sudX6SOv76PMjnAj0uqF8Kw6YVzLO/MGbAyGilIXYc18GdRWL4gqj9Z9BiLuNcZU +8AhkHaBWKOHEtVZ8ueEkRBS3I0JZZ8ZKlTM= +-----END CERTIFICATE-----