|
|
|
@ -422,12 +422,13 @@ def _job_kill_handler(job): |
|
|
|
|
time.sleep(2) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def cloud_to_prod_jobspec(language, test_case, docker_image=None, auth=False): |
|
|
|
|
def cloud_to_prod_jobspec(language, test_case, server_host_name, |
|
|
|
|
server_host_detail, docker_image=None, auth=False): |
|
|
|
|
"""Creates jobspec for cloud-to-prod interop test""" |
|
|
|
|
container_name = None |
|
|
|
|
cmdargs = [ |
|
|
|
|
'--server_host_override=grpc-test.sandbox.googleapis.com', |
|
|
|
|
'--server_host=grpc-test.sandbox.googleapis.com', |
|
|
|
|
'--server_host=%s' % server_host_detail[0], |
|
|
|
|
'--server_host_override=%s' % server_host_detail[1], |
|
|
|
|
'--server_port=443', |
|
|
|
|
'--use_tls=true', |
|
|
|
|
'--test_case=%s' % test_case] |
|
|
|
@ -440,7 +441,8 @@ def cloud_to_prod_jobspec(language, test_case, docker_image=None, auth=False): |
|
|
|
|
cwd = language.client_cwd |
|
|
|
|
|
|
|
|
|
if docker_image: |
|
|
|
|
container_name = dockerjob.random_name('interop_client_%s' % language.safename) |
|
|
|
|
container_name = dockerjob.random_name('interop_client_%s' % |
|
|
|
|
language.safename) |
|
|
|
|
cmdline = docker_run_cmdline(cmdline, |
|
|
|
|
image=docker_image, |
|
|
|
|
cwd=cwd, |
|
|
|
@ -455,7 +457,8 @@ def cloud_to_prod_jobspec(language, test_case, docker_image=None, auth=False): |
|
|
|
|
cmdline=cmdline, |
|
|
|
|
cwd=cwd, |
|
|
|
|
environ=environ, |
|
|
|
|
shortname='%s:%s:%s' % (suite_name, language, test_case), |
|
|
|
|
shortname='%s:%s:%s:%s' % (suite_name, server_host_name, language, |
|
|
|
|
test_case), |
|
|
|
|
timeout_seconds=90, |
|
|
|
|
flake_retries=5 if args.allow_flakes else 0, |
|
|
|
|
timeout_retries=2 if args.allow_flakes else 0, |
|
|
|
@ -572,6 +575,21 @@ def aggregate_http2_results(stdout): |
|
|
|
|
'percent': 1.0 * passed / (passed + failed) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
# A dictionary of prod servers to test. |
|
|
|
|
# Format: server_name: (server_host, server_host_override, errors_allowed) |
|
|
|
|
# TODO(adelez): implement logic for errors_allowed where if the indicated tests |
|
|
|
|
# fail, they don't impact the overall test result. |
|
|
|
|
prod_servers = { |
|
|
|
|
'default': ('grpc-test.sandbox.googleapis.com', |
|
|
|
|
'grpc-test.sandbox.googleapis.com', False), |
|
|
|
|
'gateway_v2': ('grpc-test2.sandbox.googleapis.com', |
|
|
|
|
'grpc-test2.sandbox.googleapis.com', True), |
|
|
|
|
'cloud_gateway': ('216.239.32.255', 'grpc-test.sandbox.googleapis.com', |
|
|
|
|
False), |
|
|
|
|
'cloud_gateway_v2': ('216.239.32.255', 'grpc-test2.sandbox.googleapis.com', |
|
|
|
|
True) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
argp = argparse.ArgumentParser(description='Run interop tests.') |
|
|
|
|
argp.add_argument('-l', '--language', |
|
|
|
|
choices=['all'] + sorted(_LANGUAGES), |
|
|
|
@ -589,6 +607,12 @@ argp.add_argument('--cloud_to_prod_auth', |
|
|
|
|
action='store_const', |
|
|
|
|
const=True, |
|
|
|
|
help='Run cloud_to_prod_auth tests.') |
|
|
|
|
argp.add_argument('--prod_servers', |
|
|
|
|
choices=prod_servers.keys(), |
|
|
|
|
default=['default'], |
|
|
|
|
nargs='+', |
|
|
|
|
help=('The servers to run cloud_to_prod and ' |
|
|
|
|
'cloud_to_prod_auth tests against.')) |
|
|
|
|
argp.add_argument('-s', '--server', |
|
|
|
|
choices=['all'] + sorted(_SERVERS), |
|
|
|
|
action='append', |
|
|
|
@ -688,31 +712,36 @@ try: |
|
|
|
|
server_jobs[lang] = job |
|
|
|
|
server_addresses[lang] = ('localhost', job.mapped_port(_DEFAULT_SERVER_PORT)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jobs = [] |
|
|
|
|
if args.cloud_to_prod: |
|
|
|
|
for server_host_name in args.prod_servers: |
|
|
|
|
for language in languages: |
|
|
|
|
for test_case in _TEST_CASES: |
|
|
|
|
if not test_case in language.unimplemented_test_cases(): |
|
|
|
|
if not test_case in _SKIP_ADVANCED + _SKIP_COMPRESSION: |
|
|
|
|
test_job = cloud_to_prod_jobspec(language, test_case, |
|
|
|
|
test_job = cloud_to_prod_jobspec( |
|
|
|
|
language, test_case, server_host_name, |
|
|
|
|
prod_servers[server_host_name], |
|
|
|
|
docker_image=docker_images.get(str(language))) |
|
|
|
|
jobs.append(test_job) |
|
|
|
|
|
|
|
|
|
if args.http2_interop: |
|
|
|
|
for test_case in _HTTP2_TEST_CASES: |
|
|
|
|
test_job = cloud_to_prod_jobspec(http2Interop, test_case, |
|
|
|
|
test_job = cloud_to_prod_jobspec( |
|
|
|
|
http2Interop, test_case, server_host_name, |
|
|
|
|
prod_servers[server_host_name], |
|
|
|
|
docker_image=docker_images.get(str(http2Interop))) |
|
|
|
|
jobs.append(test_job) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if args.cloud_to_prod_auth: |
|
|
|
|
for server_host_name in args.prod_servers: |
|
|
|
|
for language in languages: |
|
|
|
|
for test_case in _AUTH_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)), |
|
|
|
|
auth=True) |
|
|
|
|
test_job = cloud_to_prod_jobspec( |
|
|
|
|
language, test_case, server_host_name, |
|
|
|
|
prod_servers[server_host_name], |
|
|
|
|
docker_image=docker_images.get(str(language)), auth=True) |
|
|
|
|
jobs.append(test_job) |
|
|
|
|
|
|
|
|
|
for server in args.override_server: |
|
|
|
@ -773,7 +802,8 @@ try: |
|
|
|
|
report_utils.render_interop_html_report( |
|
|
|
|
set([str(l) for l in languages]), servers, _TEST_CASES, _AUTH_TEST_CASES, |
|
|
|
|
_HTTP2_TEST_CASES, resultset, num_failures, |
|
|
|
|
args.cloud_to_prod_auth or args.cloud_to_prod, args.http2_interop) |
|
|
|
|
args.cloud_to_prod_auth or args.cloud_to_prod, args.prod_servers, |
|
|
|
|
args.http2_interop) |
|
|
|
|
|
|
|
|
|
finally: |
|
|
|
|
# Check if servers are still running. |
|
|
|
|