Skip to content

Commit 1064c6f

Browse files
authored
Merge pull request grpc#17788 from jtattermusch/interop_matrix_csharp_python_fix
Fix C# and Python interop_matrix for v1.18.0 release and other cleanup
2 parents 62644c7 + fa575fe commit 1064c6f

10 files changed

+250
-181
lines changed

tools/interop_matrix/client_matrix.py

+52-79
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class ReleaseInfo:
7474
def __init__(self, patch=[], runtime_subset=[], testcases_file=None):
7575
self.patch = patch
7676
self.runtime_subset = runtime_subset
77-
self.testcases_file = None
77+
self.testcases_file = testcases_file
7878

7979

8080
# Dictionary of known releases for given language.
@@ -145,33 +145,33 @@ def __init__(self, patch=[], runtime_subset=[], testcases_file=None):
145145
]),
146146
'python':
147147
OrderedDict([
148-
('v1.0.x', ReleaseInfo()),
149-
('v1.1.4', ReleaseInfo()),
150-
('v1.2.5', ReleaseInfo()),
151-
('v1.3.9', ReleaseInfo()),
152-
('v1.4.2', ReleaseInfo()),
153-
('v1.6.6', ReleaseInfo()),
154-
('v1.7.2', ReleaseInfo()),
155-
('v1.8.1', ReleaseInfo()),
156-
('v1.9.1', ReleaseInfo()),
157-
('v1.10.1', ReleaseInfo()),
158-
('v1.11.1', ReleaseInfo()),
159-
('v1.12.0', ReleaseInfo()),
160-
('v1.13.0', ReleaseInfo()),
161-
('v1.14.1', ReleaseInfo()),
162-
('v1.15.0', ReleaseInfo()),
163-
('v1.16.0', ReleaseInfo()),
164-
('v1.17.1', ReleaseInfo()),
148+
('v1.0.x', ReleaseInfo(testcases_file='python__v1.0.x')),
149+
('v1.1.4', ReleaseInfo(testcases_file='python__v1.0.x')),
150+
('v1.2.5', ReleaseInfo(testcases_file='python__v1.0.x')),
151+
('v1.3.9', ReleaseInfo(testcases_file='python__v1.0.x')),
152+
('v1.4.2', ReleaseInfo(testcases_file='python__v1.0.x')),
153+
('v1.6.6', ReleaseInfo(testcases_file='python__v1.0.x')),
154+
('v1.7.2', ReleaseInfo(testcases_file='python__v1.0.x')),
155+
('v1.8.1', ReleaseInfo(testcases_file='python__v1.0.x')),
156+
('v1.9.1', ReleaseInfo(testcases_file='python__v1.0.x')),
157+
('v1.10.1', ReleaseInfo(testcases_file='python__v1.0.x')),
158+
('v1.11.1', ReleaseInfo(testcases_file='python__v1.11.1')),
159+
('v1.12.0', ReleaseInfo(testcases_file='python__v1.11.1')),
160+
('v1.13.0', ReleaseInfo(testcases_file='python__v1.11.1')),
161+
('v1.14.1', ReleaseInfo(testcases_file='python__v1.11.1')),
162+
('v1.15.0', ReleaseInfo(testcases_file='python__v1.11.1')),
163+
('v1.16.0', ReleaseInfo(testcases_file='python__v1.11.1')),
164+
('v1.17.1', ReleaseInfo(testcases_file='python__v1.11.1')),
165165
('v1.18.0', ReleaseInfo()),
166166
]),
167167
'node':
168168
OrderedDict([
169-
('v1.0.1', ReleaseInfo()),
170-
('v1.1.4', ReleaseInfo()),
171-
('v1.2.5', ReleaseInfo()),
172-
('v1.3.9', ReleaseInfo()),
173-
('v1.4.2', ReleaseInfo()),
174-
('v1.6.6', ReleaseInfo()),
169+
('v1.0.1', ReleaseInfo(testcases_file='node__v1.0.1')),
170+
('v1.1.4', ReleaseInfo(testcases_file='node__v1.1.4')),
171+
('v1.2.5', ReleaseInfo(testcases_file='node__v1.1.4')),
172+
('v1.3.9', ReleaseInfo(testcases_file='node__v1.1.4')),
173+
('v1.4.2', ReleaseInfo(testcases_file='node__v1.1.4')),
174+
('v1.6.6', ReleaseInfo(testcases_file='node__v1.1.4')),
175175
# TODO: https://github.com/grpc/grpc-node/issues/235.
176176
# ('v1.7.2', ReleaseInfo()),
177177
('v1.8.4', ReleaseInfo()),
@@ -183,10 +183,12 @@ def __init__(self, patch=[], runtime_subset=[], testcases_file=None):
183183
'ruby':
184184
OrderedDict([
185185
('v1.0.1',
186-
ReleaseInfo(patch=[
187-
'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile',
188-
'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
189-
])),
186+
ReleaseInfo(
187+
patch=[
188+
'tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile',
189+
'tools/dockerfile/interoptest/grpc_interop_ruby/build_interop.sh',
190+
],
191+
testcases_file='ruby__v1.0.1')),
190192
('v1.1.4', ReleaseInfo()),
191193
('v1.2.5', ReleaseInfo()),
192194
('v1.3.9', ReleaseInfo()),
@@ -232,57 +234,28 @@ def __init__(self, patch=[], runtime_subset=[], testcases_file=None):
232234
'csharp':
233235
OrderedDict([
234236
('v1.0.1',
235-
ReleaseInfo(patch=[
236-
'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile',
237-
'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile',
238-
])),
239-
('v1.1.4', ReleaseInfo()),
240-
('v1.2.5', ReleaseInfo()),
241-
('v1.3.9', ReleaseInfo()),
242-
('v1.4.2', ReleaseInfo()),
243-
('v1.6.6', ReleaseInfo()),
244-
('v1.7.2', ReleaseInfo()),
245-
('v1.8.0', ReleaseInfo()),
246-
('v1.9.1', ReleaseInfo()),
247-
('v1.10.1', ReleaseInfo()),
248-
('v1.11.1', ReleaseInfo()),
249-
('v1.12.0', ReleaseInfo()),
250-
('v1.13.0', ReleaseInfo()),
251-
('v1.14.1', ReleaseInfo()),
252-
('v1.15.0', ReleaseInfo()),
253-
('v1.16.0', ReleaseInfo()),
254-
('v1.17.1', ReleaseInfo()),
237+
ReleaseInfo(
238+
patch=[
239+
'tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile',
240+
'tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile',
241+
],
242+
testcases_file='csharp__v1.1.4')),
243+
('v1.1.4', ReleaseInfo(testcases_file='csharp__v1.1.4')),
244+
('v1.2.5', ReleaseInfo(testcases_file='csharp__v1.1.4')),
245+
('v1.3.9', ReleaseInfo(testcases_file='csharp__v1.3.9')),
246+
('v1.4.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
247+
('v1.6.6', ReleaseInfo(testcases_file='csharp__v1.3.9')),
248+
('v1.7.2', ReleaseInfo(testcases_file='csharp__v1.3.9')),
249+
('v1.8.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
250+
('v1.9.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
251+
('v1.10.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
252+
('v1.11.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
253+
('v1.12.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
254+
('v1.13.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
255+
('v1.14.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
256+
('v1.15.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
257+
('v1.16.0', ReleaseInfo(testcases_file='csharp__v1.3.9')),
258+
('v1.17.1', ReleaseInfo(testcases_file='csharp__v1.3.9')),
255259
('v1.18.0', ReleaseInfo()),
256260
]),
257261
}
258-
259-
# This matrix lists the version of testcases to use for a release. As new
260-
# releases come out, some older docker commands for running tests need to be
261-
# changed, hence the need for specifying which commands to use for a
262-
# particular version in some cases. If not specified, xxx__master file will be
263-
# used. For example, all java versions will run the commands in java__master.
264-
# The testcases files exist under the testcases directory.
265-
# TODO(jtattermusch): make this data part of LANG_RELEASE_MATRIX,
266-
# there is no reason for this to be a separate data structure.
267-
TESTCASES_VERSION_MATRIX = {
268-
'node_v1.0.1': 'node__v1.0.1',
269-
'node_v1.1.4': 'node__v1.1.4',
270-
'node_v1.2.5': 'node__v1.1.4',
271-
'node_v1.3.9': 'node__v1.1.4',
272-
'node_v1.4.2': 'node__v1.1.4',
273-
'node_v1.6.6': 'node__v1.1.4',
274-
'ruby_v1.0.1': 'ruby__v1.0.1',
275-
'csharp_v1.0.1': 'csharp__v1.1.4',
276-
'csharp_v1.1.4': 'csharp__v1.1.4',
277-
'csharp_v1.2.5': 'csharp__v1.1.4',
278-
'python_v1.0.x': 'python__v1.0.x',
279-
'python_v1.1.4': 'python__v1.0.x',
280-
'python_v1.2.5': 'python__v1.0.x',
281-
'python_v1.3.9': 'python__v1.0.x',
282-
'python_v1.4.2': 'python__v1.0.x',
283-
'python_v1.6.6': 'python__v1.0.x',
284-
'python_v1.7.2': 'python__v1.0.x',
285-
'python_v1.8.1': 'python__v1.0.x',
286-
'python_v1.9.1': 'python__v1.0.x',
287-
'python_v1.10.1': 'python__v1.0.x',
288-
}

tools/interop_matrix/run_interop_matrix_tests.py

+37-27
Original file line numberDiff line numberDiff line change
@@ -128,23 +128,23 @@ def _get_test_images_for_lang(lang, release_arg, image_path_prefix):
128128

129129
def _read_test_cases_file(lang, runtime, release):
130130
"""Read test cases from a bash-like file and return a list of commands"""
131-
testcase_dir = os.path.join(os.path.dirname(__file__), 'testcases')
132-
filename_prefix = lang
133-
if lang == 'csharp':
134-
# TODO(jtattermusch): remove this odd specialcase
135-
filename_prefix = runtime
136131
# Check to see if we need to use a particular version of test cases.
137-
lang_version = '%s_%s' % (filename_prefix, release)
138-
if lang_version in client_matrix.TESTCASES_VERSION_MATRIX:
139-
testcase_file = os.path.join(
140-
testcase_dir, client_matrix.TESTCASES_VERSION_MATRIX[lang_version])
141-
else:
132+
release_info = client_matrix.LANG_RELEASE_MATRIX[lang].get(release)
133+
if release_info:
134+
testcases_file = release_info.testcases_file
135+
if not testcases_file:
142136
# TODO(jtattermusch): remove the double-underscore, it is pointless
143-
testcase_file = os.path.join(testcase_dir,
144-
'%s__master' % filename_prefix)
137+
testcases_file = '%s__master' % lang
138+
139+
# For csharp, the testcases file used depends on the runtime
140+
# TODO(jtattermusch): remove this odd specialcase
141+
if lang == 'csharp' and runtime == 'csharpcoreclr':
142+
testcases_file = testcases_file.replace('csharp_', 'csharpcoreclr_')
145143

144+
testcases_filepath = os.path.join(
145+
os.path.dirname(__file__), 'testcases', testcases_file)
146146
lines = []
147-
with open(testcase_file) as f:
147+
with open(testcases_filepath) as f:
148148
for line in f.readlines():
149149
line = re.sub('\\#.*$', '', line) # remove hash comments
150150
line = line.strip()
@@ -171,25 +171,35 @@ def _generate_test_case_jobspecs(lang, runtime, release, suite_name):
171171
for line in testcase_lines:
172172
# TODO(jtattermusch): revisit the logic for updating test case commands
173173
# what it currently being done seems fragile.
174-
m = re.search('--test_case=(.*)"', line)
175-
shortname = m.group(1) if m else 'unknown_test'
176-
m = re.search('--server_host_override=(.*).sandbox.googleapis.com',
177-
line)
174+
175+
# Extract test case name from the command line
176+
m = re.search(r'--test_case=(\w+)', line)
177+
testcase_name = m.group(1) if m else 'unknown_test'
178+
179+
# Extract the server name from the command line
180+
if '--server_host_override=' in line:
181+
m = re.search(
182+
r'--server_host_override=((.*).sandbox.googleapis.com)', line)
183+
else:
184+
m = re.search(r'--server_host=((.*).sandbox.googleapis.com)', line)
178185
server = m.group(1) if m else 'unknown_server'
186+
server_short = m.group(2) if m else 'unknown_server'
187+
188+
# replace original server_host argument
189+
assert '--server_host=' in line
190+
line = re.sub(r'--server_host=[^ ]*',
191+
r'--server_host=%s' % args.server_host, line)
179192

180-
# If server_host arg is not None, replace the original
181-
# server_host with the one provided or append to the end of
182-
# the command if server_host does not appear originally.
183-
if args.server_host:
184-
if line.find('--server_host=') > -1:
185-
line = re.sub('--server_host=[^ ]*',
186-
'--server_host=%s' % args.server_host, line)
187-
else:
188-
line = '%s --server_host=%s"' % (line[:-1], args.server_host)
193+
# some interop tests don't set server_host_override (see #17407),
194+
# but we need to use it if different host is set via cmdline args.
195+
if args.server_host != server and not '--server_host_override=' in line:
196+
line = re.sub(r'(--server_host=[^ ]*)',
197+
r'\1 --server_host_override=%s' % server, line)
189198

190199
spec = jobset.JobSpec(
191200
cmdline=line,
192-
shortname='%s:%s:%s:%s' % (suite_name, lang, server, shortname),
201+
shortname='%s:%s:%s:%s' % (suite_name, lang, server_short,
202+
testcase_name),
193203
timeout_seconds=_TEST_TIMEOUT_SECONDS,
194204
shell=True,
195205
flake_retries=5 if args.allow_flakes else 0)

0 commit comments

Comments
 (0)