aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/interop_matrix
diff options
context:
space:
mode:
Diffstat (limited to 'tools/interop_matrix')
-rw-r--r--tools/interop_matrix/client_matrix.py86
-rwxr-xr-xtools/interop_matrix/create_matrix_images.py2
-rwxr-xr-xtools/interop_matrix/run_interop_matrix_tests.py36
3 files changed, 95 insertions, 29 deletions
diff --git a/tools/interop_matrix/client_matrix.py b/tools/interop_matrix/client_matrix.py
index c0b08a59b2..4964fd6167 100644
--- a/tools/interop_matrix/client_matrix.py
+++ b/tools/interop_matrix/client_matrix.py
@@ -35,6 +35,21 @@ def get_release_tag_name(release_info):
return release_info.keys()[0]
+def get_runtimes_for_lang_release(lang, release):
+ """Get list of valid runtimes for given release of lang."""
+ runtimes_to_skip = []
+ # see if any the lang release has "skip_runtime" annotation.
+ for release_info in LANG_RELEASE_MATRIX[lang]:
+ if get_release_tag_name(release_info) == release:
+ if release_info[release] is not None:
+ runtimes_to_skip = release_info[release].get('skip_runtime', [])
+ break
+ return [
+ runtime for runtime in LANG_RUNTIME_MATRIX[lang]
+ if runtime not in runtimes_to_skip
+ ]
+
+
def should_build_docker_interop_image_from_release_tag(lang):
if lang in ['go', 'java', 'node']:
return False
@@ -44,7 +59,7 @@ def should_build_docker_interop_image_from_release_tag(lang):
# Dictionary of runtimes per language
LANG_RUNTIME_MATRIX = {
'cxx': ['cxx'], # This is actually debian8.
- 'go': ['go1.7', 'go1.8'],
+ 'go': ['go1.7', 'go1.8', 'go1.11'],
'java': ['java_oracle8'],
'python': ['python'],
'node': ['node'],
@@ -110,52 +125,89 @@ LANG_RELEASE_MATRIX = {
],
'go': [
{
- 'v1.0.5': None
+ 'v1.0.5': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.2.1': None
+ 'v1.2.1': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.3.0': None
+ 'v1.3.0': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.4.2': None
+ 'v1.4.2': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.5.2': None
+ 'v1.5.2': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.6.0': None
+ 'v1.6.0': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.7.4': None
+ 'v1.7.4': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.8.2': None
+ 'v1.8.2': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.9.2': None
+ 'v1.9.2': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.10.1': None
+ 'v1.10.1': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.11.3': None
+ 'v1.11.3': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.12.2': None
+ 'v1.12.2': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.13.0': None
+ 'v1.13.0': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.14.0': None
+ 'v1.14.0': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.15.0': None
+ 'v1.15.0': {
+ 'skip_runtime': ['go1.11']
+ }
},
{
- 'v1.16.0': None
+ 'v1.16.0': {
+ 'skip_runtime': ['go1.11']
+ }
+ },
+ {
+ 'v1.17.0': {
+ 'skip_runtime': ['go1.7', 'go1.8']
+ }
},
],
'java': [
diff --git a/tools/interop_matrix/create_matrix_images.py b/tools/interop_matrix/create_matrix_images.py
index c2568efba0..cf61d46248 100755
--- a/tools/interop_matrix/create_matrix_images.py
+++ b/tools/interop_matrix/create_matrix_images.py
@@ -217,7 +217,7 @@ def build_all_images_for_release(lang, release):
}.get(lang, 'GRPC_ROOT')
env[var] = stack_base
- for runtime in client_matrix.LANG_RUNTIME_MATRIX[lang]:
+ for runtime in client_matrix.get_runtimes_for_lang_release(lang, release):
job = build_image_jobspec(runtime, env, release, stack_base)
docker_images.append(job.tag)
build_jobs.append(job)
diff --git a/tools/interop_matrix/run_interop_matrix_tests.py b/tools/interop_matrix/run_interop_matrix_tests.py
index 6cf2a9b036..dabb486523 100755
--- a/tools/interop_matrix/run_interop_matrix_tests.py
+++ b/tools/interop_matrix/run_interop_matrix_tests.py
@@ -113,13 +113,17 @@ def _get_test_images_for_lang(lang, release_arg, image_path_prefix):
return {}
releases = [release_arg]
- # Images tuples keyed by runtime.
+ # Image tuples keyed by runtime.
images = {}
- for runtime in client_matrix.LANG_RUNTIME_MATRIX[lang]:
- image_path = '%s/grpc_interop_%s' % (image_path_prefix, runtime)
- images[runtime] = [
- (tag, '%s:%s' % (image_path, tag)) for tag in releases
- ]
+ for tag in releases:
+ for runtime in client_matrix.get_runtimes_for_lang_release(lang, tag):
+ image_name = '%s/grpc_interop_%s:%s' % (image_path_prefix, runtime,
+ tag)
+ image_tuple = (tag, image_name)
+
+ if not images.has_key(runtime):
+ images[runtime] = []
+ images[runtime].append(image_tuple)
return images
@@ -232,10 +236,13 @@ def _run_tests_for_lang(lang, runtime, images, xml_report_tree):
images is a list of (<release-tag>, <image-full-path>) tuple.
"""
+ skip_tests = False
if not _pull_images_for_lang(lang, images):
jobset.message(
- 'FAILED', 'Image download failed. Exiting.', do_newline=True)
- return 1
+ 'FAILED',
+ 'Image download failed. Skipping tests for language "%s"' % lang,
+ do_newline=True)
+ skip_tests = True
total_num_failures = 0
for release, image in images:
@@ -246,17 +253,22 @@ def _run_tests_for_lang(lang, runtime, images, xml_report_tree):
if not job_spec_list:
jobset.message(
'FAILED', 'No test cases were found.', do_newline=True)
- return 1
+ total_num_failures += 1
+ continue
num_failures, resultset = jobset.run(
job_spec_list,
newline_on_success=True,
add_env={'docker_image': image},
- maxjobs=args.jobs)
+ maxjobs=args.jobs,
+ skip_jobs=skip_tests)
if args.bq_result_table and resultset:
upload_test_results.upload_interop_results_to_bq(
resultset, args.bq_result_table)
- if num_failures:
+ if skip_tests:
+ jobset.message('FAILED', 'Tests were skipped', do_newline=True)
+ total_num_failures += 1
+ elif num_failures:
jobset.message('FAILED', 'Some tests failed', do_newline=True)
total_num_failures += num_failures
else:
@@ -266,6 +278,8 @@ def _run_tests_for_lang(lang, runtime, images, xml_report_tree):
'grpc_interop_matrix', suite_name,
str(uuid.uuid4()))
+ # cleanup all downloaded docker images
+ for _, image in images:
if not args.keep:
_cleanup_docker_image(image)