aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar yang-g <yangg@google.com>2015-12-10 09:50:57 -0800
committerGravatar yang-g <yangg@google.com>2015-12-10 09:50:57 -0800
commit59d9f71b448a52d13b3b1128a0cd702d269ec02b (patch)
treee6f41042ce2bc426f6b32a0d280de8321d154c67 /tools
parent59cd467a74df8555abe0f39d19ae5eeb8eee688d (diff)
parentf3bcb1c2cb86545551a3e9e24a8d946d913f7f26 (diff)
merge with head
Diffstat (limited to 'tools')
-rwxr-xr-xtools/run_tests/jobset.py3
-rwxr-xr-xtools/run_tests/run_interop_tests.py78
-rwxr-xr-xtools/run_tests/run_tests.py75
-rw-r--r--tools/run_tests/sources_and_headers.json14
-rw-r--r--tools/run_tests/tests.json18
5 files changed, 165 insertions, 23 deletions
diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py
index 5a26bff709..01739be27c 100755
--- a/tools/run_tests/jobset.py
+++ b/tools/run_tests/jobset.py
@@ -178,6 +178,9 @@ class JobSpec(object):
def __cmp__(self, other):
return self.identity() == other.identity()
+
+ def __repr__(self):
+ return 'JobSpec(shortname=%s, cmdline=%s)' % (self.shortname, self.cmdline)
class JobResult(object):
diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py
index 37b631bd0d..763ff5615c 100755
--- a/tools/run_tests/run_interop_tests.py
+++ b/tools/run_tests/run_interop_tests.py
@@ -52,6 +52,11 @@ _DEFAULT_SERVER_PORT=8080
# supported by C core SslCredentials instead.
_SSL_CERT_ENV = { 'SSL_CERT_FILE':'/usr/local/share/grpc/roots.pem' }
+_SKIP_COMPRESSION = ['large_compressed_unary',
+ 'server_compressed_streaming']
+
+_SKIP_ADVANCED = ['custom_metadata', 'status_code_and_message',
+ 'unimplemented_method']
class CXXLanguage:
@@ -73,7 +78,10 @@ class CXXLanguage:
return {}
def unimplemented_test_cases(self):
- return []
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION
+
+ def unimplemented_test_cases_server(self):
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION
def __str__(self):
return 'c++'
@@ -99,7 +107,11 @@ class CSharpLanguage:
return {}
def unimplemented_test_cases(self):
- return []
+ # TODO: status_code_and_message doesn't work against node_server
+ return _SKIP_COMPRESSION + ['status_code_and_message']
+
+ def unimplemented_test_cases_server(self):
+ return _SKIP_COMPRESSION
def __str__(self):
return 'csharp'
@@ -125,7 +137,10 @@ class JavaLanguage:
return {}
def unimplemented_test_cases(self):
- return []
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION
+
+ def unimplemented_test_cases_server(self):
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION
def __str__(self):
return 'java'
@@ -152,7 +167,10 @@ class GoLanguage:
return {}
def unimplemented_test_cases(self):
- return []
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION
+
+ def unimplemented_test_cases_server(self):
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION
def __str__(self):
return 'go'
@@ -180,6 +198,9 @@ class Http2Client:
def unimplemented_test_cases(self):
return _TEST_CASES
+ def unimplemented_test_cases_server(self):
+ return []
+
def __str__(self):
return 'http2'
@@ -203,7 +224,10 @@ class NodeLanguage:
return {}
def unimplemented_test_cases(self):
- return []
+ return _SKIP_COMPRESSION
+
+ def unimplemented_test_cases_server(self):
+ return _SKIP_COMPRESSION
def __str__(self):
return 'node'
@@ -225,6 +249,9 @@ class PHPLanguage:
return {}
def unimplemented_test_cases(self):
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION
+
+ def unimplemented_test_cases_server(self):
return []
def __str__(self):
@@ -251,7 +278,10 @@ class RubyLanguage:
return {}
def unimplemented_test_cases(self):
- return []
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION
+
+ def unimplemented_test_cases_server(self):
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION
def __str__(self):
return 'ruby'
@@ -289,7 +319,11 @@ class PythonLanguage:
return {'LD_LIBRARY_PATH': '{}/libs/opt'.format(DOCKER_WORKDIR_ROOT)}
def unimplemented_test_cases(self):
- return ['jwt_token_creds', 'per_rpc_creds']
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION + ['jwt_token_creds',
+ 'per_rpc_creds']
+
+ def unimplemented_test_cases_server(self):
+ return _SKIP_ADVANCED + _SKIP_COMPRESSION
def __str__(self):
return 'python'
@@ -312,7 +346,9 @@ _SERVERS = ['c++', 'node', 'csharp', 'java', 'go', 'ruby', 'python']
_TEST_CASES = ['large_unary', 'empty_unary', 'ping_pong',
'empty_stream', 'client_streaming', 'server_streaming',
'cancel_after_begin', 'cancel_after_first_response',
- 'timeout_on_sleeping_server']
+ 'timeout_on_sleeping_server', 'custom_metadata',
+ 'status_code_and_message', 'unimplemented_method',
+ 'large_compressed_unary', 'server_compressed_streaming']
_AUTH_TEST_CASES = ['compute_engine_creds', 'jwt_token_creds',
'oauth2_auth_token', 'per_rpc_creds']
@@ -635,9 +671,10 @@ try:
for language in languages:
for test_case in _TEST_CASES:
if not test_case in language.unimplemented_test_cases():
- test_job = cloud_to_prod_jobspec(language, test_case,
- docker_image=docker_images.get(str(language)))
- jobs.append(test_job)
+ if not test_case in _SKIP_ADVANCED + _SKIP_COMPRESSION:
+ test_job = cloud_to_prod_jobspec(language, test_case,
+ docker_image=docker_images.get(str(language)))
+ jobs.append(test_job)
# TODO(carl-mastrangelo): Currently prod TLS terminators aren't spec compliant. Reenable
# this once a better solution is in place.
@@ -664,16 +701,21 @@ try:
for server_name, server_address in server_addresses.iteritems():
(server_host, server_port) = server_address
+ server_language = _LANGUAGES.get(server_name, None)
+ skip_server = [] # test cases unimplemented by server
+ if server_language:
+ skip_server = server_language.unimplemented_test_cases_server()
for language in languages:
for test_case in _TEST_CASES:
if not test_case in language.unimplemented_test_cases():
- test_job = cloud_to_cloud_jobspec(language,
- test_case,
- server_name,
- server_host,
- server_port,
- docker_image=docker_images.get(str(language)))
- jobs.append(test_job)
+ if not test_case in skip_server:
+ test_job = cloud_to_cloud_jobspec(language,
+ test_case,
+ server_name,
+ server_host,
+ server_port,
+ docker_image=docker_images.get(str(language)))
+ jobs.append(test_job)
if args.http2_interop:
for test_case in _HTTP2_TEST_CASES:
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index 4c85f202f4..e3df912480 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -508,6 +508,43 @@ _WINDOWS_CONFIG = {
}
+def _windows_arch_option(arch):
+ """Returns msbuild cmdline option for selected architecture."""
+ if arch == 'default' or arch == 'windows_x86':
+ return '/p:Platform=Win32'
+ elif arch == 'windows_x64':
+ return '/p:Platform=x64'
+ else:
+ print 'Architecture %s not supported on current platform.' % arch
+ sys.exit(1)
+
+
+def _windows_build_bat(compiler):
+ """Returns name of build.bat for selected compiler."""
+ if compiler == 'default' or compiler == 'vs2013':
+ return 'vsprojects\\build_vs2013.bat'
+ elif compiler == 'vs2015':
+ return 'vsprojects\\build_vs2015.bat'
+ elif compiler == 'vs2010':
+ return 'vsprojects\\build_vs2010.bat'
+ else:
+ print 'Compiler %s not supported.' % compiler
+ sys.exit(1)
+
+
+def _windows_toolset_option(compiler):
+ """Returns msbuild PlatformToolset for selected compiler."""
+ if compiler == 'default' or compiler == 'vs2013':
+ return '/p:PlatformToolset=v120'
+ elif compiler == 'vs2015':
+ return '/p:PlatformToolset=v140'
+ elif compiler == 'vs2010':
+ return '/p:PlatformToolset=v100'
+ else:
+ print 'Compiler %s not supported.' % compiler
+ sys.exit(1)
+
+
def runs_per_test_type(arg_str):
"""Auxilary function to parse the "runs_per_test" flag.
@@ -572,6 +609,19 @@ argp.add_argument('--allow_flakes',
action='store_const',
const=True,
help='Allow flaky tests to show as passing (re-runs failed tests up to five times)')
+argp.add_argument('--arch',
+ choices=['default', 'windows_x86', 'windows_x64'],
+ default='default',
+ help='Selects architecture to target. For some platforms "default" is the only supported choice.')
+argp.add_argument('--compiler',
+ choices=['default', 'vs2010', 'vs2013', 'vs2015'],
+ default='default',
+ help='Selects compiler to use. For some platforms "default" is the only supported choice.')
+argp.add_argument('--build_only',
+ default=False,
+ action='store_const',
+ const=True,
+ help='Perform all the build steps but dont run any tests.')
argp.add_argument('-a', '--antagonists', default=0, type=int)
argp.add_argument('-x', '--xml_report', default=None, type=str,
help='Generates a JUnit-compatible XML report')
@@ -633,6 +683,14 @@ if len(build_configs) > 1:
print language, 'does not support multiple build configurations'
sys.exit(1)
+if platform_string() != 'windows':
+ if args.arch != 'default':
+ print 'Architecture %s not supported on current platform.' % args.arch
+ sys.exit(1)
+ if args.compiler != 'default':
+ print 'Compiler %s not supported on current platform.' % args.compiler
+ sys.exit(1)
+
if platform_string() == 'windows':
def make_jobspec(cfg, targets, makefile='Makefile'):
extra_args = []
@@ -643,9 +701,11 @@ if platform_string() == 'windows':
# disable PDB generation: it's broken, and we don't need it during CI
extra_args.extend(['/p:Jenkins=true'])
return [
- jobset.JobSpec(['vsprojects\\build.bat',
+ jobset.JobSpec([_windows_build_bat(args.compiler),
'vsprojects\\%s.sln' % target,
- '/p:Configuration=%s' % _WINDOWS_CONFIG[cfg]] +
+ '/p:Configuration=%s' % _WINDOWS_CONFIG[cfg],
+ _windows_toolset_option(args.compiler),
+ _windows_arch_option(args.arch)] +
extra_args,
shell=True, timeout_seconds=90*60)
for target in targets]
@@ -840,7 +900,7 @@ def _calculate_num_runs_failures(list_of_results):
def _build_and_run(
- check_cancelled, newline_on_success, cache, xml_report=None):
+ check_cancelled, newline_on_success, cache, xml_report=None, build_only=False):
"""Do one pass of building & running tests."""
# build latest sequentially
num_failures, _ = jobset.run(
@@ -848,6 +908,9 @@ def _build_and_run(
newline_on_success=newline_on_success, travis=args.travis)
if num_failures:
return 1
+
+ if build_only:
+ return 0
# start antagonists
antagonists = [subprocess.Popen(['tools/run_tests/antagonist.py'])
@@ -925,7 +988,8 @@ if forever:
previous_success = success
success = _build_and_run(check_cancelled=have_files_changed,
newline_on_success=False,
- cache=test_cache) == 0
+ cache=test_cache,
+ build_only=args.build_only) == 0
if not previous_success and success:
jobset.message('SUCCESS',
'All tests are now passing properly',
@@ -937,7 +1001,8 @@ else:
result = _build_and_run(check_cancelled=lambda: False,
newline_on_success=args.newline_on_success,
cache=test_cache,
- xml_report=args.xml_report)
+ xml_report=args.xml_report,
+ build_only=args.build_only)
if result == 0:
jobset.message('SUCCESS', 'All tests passed', do_newline=True)
else:
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index 292c69a0be..55b5203cd2 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -1098,6 +1098,20 @@
],
"headers": [],
"language": "c",
+ "name": "transport_connectivity_state_test",
+ "src": [
+ "test/core/transport/connectivity_state_test.c"
+ ]
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
"name": "transport_metadata_test",
"src": [
"test/core/transport/metadata_test.c"
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index 1b66a322a8..f75091d75b 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -1269,6 +1269,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "transport_connectivity_state_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "transport_metadata_test",
"platforms": [
"linux",