You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2015/09/17 02:13:10 UTC
trafficserver git commit: TS-3782: Add H2 exceptional test cases
Repository: trafficserver
Updated Branches:
refs/heads/master ba5c56428 -> 46edbd72c
TS-3782: Add H2 exceptional test cases
This closes #277
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/46edbd72
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/46edbd72
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/46edbd72
Branch: refs/heads/master
Commit: 46edbd72c9b4ec000613e200fcf94ce419b9fb8d
Parents: ba5c564
Author: Bryan Call <bc...@apache.org>
Authored: Wed Sep 16 17:12:37 2015 -0700
Committer: Bryan Call <bc...@apache.org>
Committed: Wed Sep 16 17:12:37 2015 -0700
----------------------------------------------------------------------
ci/tsqa/tests/test_http2_spec.py | 114 ++++++++++++++++++++++++++++++++++
1 file changed, 114 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/46edbd72/ci/tsqa/tests/test_http2_spec.py
----------------------------------------------------------------------
diff --git a/ci/tsqa/tests/test_http2_spec.py b/ci/tsqa/tests/test_http2_spec.py
new file mode 100644
index 0000000..40a829e
--- /dev/null
+++ b/ci/tsqa/tests/test_http2_spec.py
@@ -0,0 +1,114 @@
+# 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.
+
+#
+# Note: This test case uses h2spec. Please install it yourself.
+# https://github.com/summerwind/h2spec
+#
+
+import logging
+import os
+import subprocess
+
+import helpers
+
+import tsqa.endpoint
+import tsqa.test_cases
+import tsqa.utils
+
+log = logging.getLogger(__name__)
+
+# helper function to get h2spec 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 TestH2Spec(helpers.EnvironmentCase, tsqa.test_cases.HTTPBinCase):
+ @classmethod
+ def setUpEnv(cls, env):
+ '''
+ Setting up environment for testing of HTTP2
+ '''
+ # get path to h2spec
+ cls.h2spec = which('h2spec')
+ if cls.h2spec is None:
+ raise helpers.unittest.SkipTest('Cannot find h2spec. skipping test.')
+
+ # get HTTP/2 server ports
+ cls.http2_port = tsqa.utils.bind_unused_port()[1]
+
+ # HTTP2 configs
+ cls.configs['records.config']['CONFIG']['proxy.config.http2.enabled'] = 1
+ cls.configs['records.config']['CONFIG']['proxy.config.http.server_ports'] += ' {0}:ssl'.format(cls.http2_port)
+ cls.configs['records.config']['CONFIG']['proxy.config.ssl.server.cert.path'] = helpers.tests_file_path('rsa_keys')
+ cls.configs['records.config']['CONFIG']['proxy.config.diags.debug.enabled'] = 1
+ cls.configs['records.config']['CONFIG']['proxy.config.diags.debug.tags'] = 'http2.*|ssl.*'
+
+ # 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'))
+ )
+
+ # remap configs
+ cls.configs['remap.config'].add_line(
+ 'map / http://127.0.0.1:{0}/'.format(cls.http_endpoint.address[1])
+ )
+
+ def __callH2Spec(self, section=None):
+ '''
+ Call h2spec
+ '''
+ args = [self.h2spec, '-h', 'localhost', '-p', str(self.http2_port), '-t', '-k']
+ if section is not None:
+ args.extend(['-s', section])
+
+ log.info('full args = {0}'.format(args))
+ p = subprocess.Popen(
+ args,
+ stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE,
+ )
+ self.stdout, self.stderr = p.communicate()
+ log.info('\n' + self.stdout)
+
+ return p.returncode
+
+ def test_http2_spec_section(self):
+ '''
+ Test HTTP/2 w/ h2spec (Exceptional Scenario)
+ '''
+ sections = ['3.5', '4.2', '5.1', '5.3.1', '5.4.1', '5.5', '6.1', '6.2', '6.3', '6.4', '6.5', '6.5.2', '6.7', '6.8',
+ '6.9', '6.9.1', '6.10', '8.1', '8.1.2', '8.1.2.2', '8.1.2.3', '8.1.2.6', '8.2']
+ for section in sections:
+ self.__callH2Spec(section)
+ self.assertIn('All tests passed', self.stdout, 'Failed at section %s of RFC7540' % section)
+
+ # TODO these tests cannot pass currently. move to above after ATS can pass them
+ failing_sections = ['4.3']
+ for section in failing_sections:
+ self.__callH2Spec(section)
+ self.assertNotIn('All tests passed', self.stdout, 'Failed at section %s of RFC7540' % section)